arclight 0.4.0 → 1.0.0.beta1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.eslintrc +11 -4
- data/.github/workflows/ruby.yml +24 -8
- data/.rspec +0 -1
- data/.rubocop.yml +289 -3
- data/.rubocop_todo.yml +64 -76
- data/CONTRIBUTING.md +5 -5
- data/Gemfile +15 -10
- data/README.md +18 -12
- data/app/assets/javascripts/arclight/arclight.js +3 -7
- data/app/assets/javascripts/arclight/oembed_viewer.js +64 -39
- data/app/assets/javascripts/arclight/truncate_controller.js +27 -0
- data/app/assets/stylesheets/arclight/application.scss +1 -5
- data/app/assets/stylesheets/arclight/modules/hierarchy_and_online_contents.scss +104 -130
- data/app/assets/stylesheets/arclight/modules/icons.scss +14 -3
- data/app/assets/stylesheets/arclight/modules/layout.scss +121 -100
- data/app/assets/stylesheets/arclight/modules/mastheads.scss +15 -57
- data/app/assets/stylesheets/arclight/modules/repositories.scss +2 -2
- data/app/assets/stylesheets/arclight/modules/repository_card.scss +4 -48
- data/app/assets/stylesheets/arclight/modules/search_results.scss +86 -35
- data/app/assets/stylesheets/arclight/modules/show_collection.scss +5 -32
- data/app/assets/stylesheets/arclight/modules/truncator.scss +56 -0
- data/app/assets/stylesheets/arclight/variables.scss +7 -4
- data/app/components/arclight/access_component.html.erb +14 -0
- data/app/components/arclight/access_component.rb +25 -0
- data/app/components/arclight/bookmark_component.html.erb +25 -0
- data/app/components/arclight/bookmark_component.rb +9 -0
- data/app/components/arclight/breadcrumb_component.rb +40 -0
- data/app/components/arclight/breadcrumbs_hierarchy_component.html.erb +34 -0
- data/app/components/arclight/breadcrumbs_hierarchy_component.rb +25 -0
- data/app/components/arclight/collection_context_component.html.erb +12 -0
- data/app/components/arclight/collection_context_component.rb +27 -0
- data/app/components/arclight/collection_info_component.html.erb +28 -0
- data/app/components/arclight/collection_info_component.rb +26 -0
- data/app/components/arclight/collection_sidebar_component.html.erb +15 -0
- data/app/components/arclight/collection_sidebar_component.rb +41 -0
- data/app/{views/catalog/_search_results_repository.html.erb → components/arclight/constraints_component.html.erb} +2 -1
- data/app/components/arclight/constraints_component.rb +17 -0
- data/app/components/arclight/document_collection_context_component.html.erb +29 -0
- data/app/components/arclight/document_collection_context_component.rb +28 -0
- data/app/components/arclight/document_collection_hierarchy_component.html.erb +46 -0
- data/app/components/arclight/document_collection_hierarchy_component.rb +62 -0
- data/app/components/arclight/document_component.html.erb +39 -0
- data/app/components/arclight/document_component.rb +49 -0
- data/app/components/arclight/document_components_hierarchy_component.html.erb +32 -0
- data/app/components/arclight/document_components_hierarchy_component.rb +28 -0
- data/app/components/arclight/document_download_component.html.erb +24 -0
- data/app/components/arclight/document_download_component.rb +71 -0
- data/app/components/arclight/embed_component.html.erb +10 -0
- data/app/components/arclight/embed_component.rb +43 -0
- data/app/components/arclight/group_component.html.erb +30 -0
- data/app/components/arclight/group_component.rb +23 -0
- data/app/components/arclight/header_component.html.erb +5 -0
- data/app/components/arclight/header_component.rb +10 -0
- data/app/components/arclight/index_metadata_field_component.html.erb +17 -0
- data/app/components/arclight/index_metadata_field_component.rb +20 -0
- data/app/components/arclight/masthead_component.html.erb +15 -0
- data/app/components/arclight/masthead_component.rb +10 -0
- data/app/components/arclight/metadata_section_component.html.erb +13 -0
- data/app/components/arclight/metadata_section_component.rb +22 -0
- data/app/components/arclight/oembed_viewer_component.html.erb +5 -0
- data/app/components/arclight/oembed_viewer_component.rb +16 -0
- data/app/components/arclight/online_content_filter_component.html.erb +15 -0
- data/app/components/arclight/online_content_filter_component.rb +19 -0
- data/app/components/arclight/online_status_indicator_component.rb +19 -0
- data/app/components/arclight/repository_breadcrumb_component.html.erb +10 -0
- data/app/components/arclight/repository_breadcrumb_component.rb +17 -0
- data/app/components/arclight/repository_location_component.html.erb +20 -0
- data/app/components/arclight/repository_location_component.rb +10 -0
- data/app/components/arclight/search_bar_component.html.erb +25 -0
- data/app/components/arclight/search_bar_component.rb +32 -0
- data/app/components/arclight/search_result_breadcrumbs_component.html.erb +3 -0
- data/app/components/arclight/search_result_breadcrumbs_component.rb +37 -0
- data/app/components/arclight/search_result_component.html.erb +20 -0
- data/app/components/arclight/search_result_component.rb +24 -0
- data/app/components/arclight/search_result_title_component.html.erb +13 -0
- data/app/components/arclight/search_result_title_component.rb +15 -0
- data/app/components/arclight/sidebar_component.html.erb +9 -0
- data/app/components/arclight/sidebar_component.rb +19 -0
- data/app/components/arclight/upper_metadata_layout_component.rb +10 -0
- data/app/components/blacklight/icons/bookmark_component.rb +12 -0
- data/app/components/blacklight/icons/collection_component.rb +14 -0
- data/app/components/blacklight/icons/compact_component.rb +12 -0
- data/app/components/blacklight/icons/container_component.rb +14 -0
- data/app/components/blacklight/icons/ead_component.rb +12 -0
- data/app/components/blacklight/icons/file_component.rb +14 -0
- data/app/components/blacklight/icons/folder_component.rb +12 -0
- data/app/components/blacklight/icons/online_component.rb +15 -0
- data/app/components/blacklight/icons/pdf_component.rb +12 -0
- data/app/components/blacklight/icons/repository_component.rb +12 -0
- data/app/controllers/arclight/repositories_controller.rb +4 -4
- data/app/{controllers/concerns → helpers}/arclight/ead_format_helpers.rb +4 -7
- data/app/helpers/arclight/field_config_helpers.rb +26 -0
- data/app/helpers/arclight_helper.rb +16 -254
- data/app/models/arclight/document_downloads.rb +12 -15
- data/app/models/arclight/parent.rb +5 -0
- data/app/models/arclight/parents.rb +2 -1
- data/app/models/arclight/requests/aeon_external_request.rb +1 -1
- data/app/models/arclight/requests/aeon_web_ead.rb +8 -3
- data/app/models/arclight/requests/google_form.rb +8 -3
- data/app/models/concerns/arclight/catalog.rb +25 -15
- data/app/models/concerns/arclight/search_behavior.rb +12 -26
- data/app/models/concerns/arclight/solr_document.rb +70 -73
- data/app/presenters/arclight/show_presenter.rb +34 -7
- data/app/views/arclight/_requests.html.erb +2 -2
- data/app/views/arclight/repositories/_repository.html.erb +21 -40
- data/app/views/arclight/repositories/index.html.erb +3 -1
- data/app/views/arclight/repositories/show.html.erb +4 -6
- data/app/views/arclight/requests/_aeon_external_request_endpoint.html.erb +4 -5
- data/app/views/arclight/requests/_aeon_web_ead.html.erb +3 -4
- data/app/views/arclight/requests/_google_form.html.erb +4 -6
- data/app/views/catalog/_group.html.erb +1 -18
- data/app/views/catalog/_group_toggle.html.erb +1 -1
- data/app/views/catalog/_search_results_header.html.erb +3 -0
- data/app/views/catalog/hierarchy.html.erb +19 -0
- data/app/views/catalog/index.html.erb +16 -7
- data/app/views/shared/_breadcrumbs.html.erb +2 -14
- data/app/views/shared/_main_menu_links.html.erb +1 -1
- data/arclight.gemspec +13 -11
- data/config/breadcrumbs.rb +24 -0
- data/config/i18n-tasks.yml +9 -8
- data/config/importmap.rb +3 -0
- data/config/locales/arclight.en.yml +31 -30
- data/config/routes.rb +1 -1
- data/docker-compose.yml +16 -0
- data/lib/arclight/digital_object.rb +2 -1
- data/lib/arclight/engine.rb +18 -37
- data/lib/arclight/exceptions.rb +1 -0
- data/lib/arclight/hash_absolute_xpath.rb +2 -1
- data/lib/arclight/normalized_id.rb +2 -0
- data/lib/arclight/normalized_title.rb +2 -0
- data/lib/arclight/repository.rb +45 -56
- data/lib/arclight/routes/hierarchy.rb +19 -0
- data/lib/arclight/routes.rb +8 -0
- data/lib/arclight/traject/ead2_component_config.rb +292 -0
- data/lib/arclight/traject/ead2_config.rb +66 -287
- data/lib/arclight/version.rb +1 -1
- data/lib/arclight/year_range.rb +4 -3
- data/lib/arclight.rb +6 -1
- data/lib/generators/arclight/install_generator.rb +59 -21
- data/lib/generators/arclight/templates/arclight.scss +4 -3
- data/lib/generators/arclight/templates/catalog_controller.rb +150 -165
- data/lib/generators/arclight/templates/config/locales/arclight.en.yml +53 -0
- data/lib/generators/arclight/templates/config/repositories.yml +20 -27
- data/lib/tasks/index.rake +14 -17
- data/package.json +11 -13
- data/solr/conf/schema.xml +42 -38
- data/solr/conf/solrconfig.xml +34 -31
- data/tasks/arclight.rake +8 -7
- data/template.rb +1 -2
- metadata +147 -120
- data/.babelrc +0 -3
- data/app/assets/javascripts/arclight/collection_navigation.js +0 -100
- data/app/assets/javascripts/arclight/collection_scrollspy.js +0 -6
- data/app/assets/javascripts/arclight/context_navigation.js +0 -351
- data/app/assets/javascripts/arclight/truncator.js.erb +0 -29
- data/app/assets/stylesheets/arclight/bootstrap_overrides.scss +0 -26
- data/app/assets/stylesheets/arclight/modules/context_navigation.scss +0 -75
- data/app/controllers/concerns/arclight/field_config_helpers.rb +0 -102
- data/app/factories/blacklight_field_configuration_factory.rb +0 -30
- data/app/views/arclight/repositories/_in_person_repository.html.erb +0 -19
- data/app/views/arclight/repositories/_repository_contact.html.erb +0 -9
- data/app/views/arclight/viewers/_oembed.html.erb +0 -8
- data/app/views/catalog/_access_contents.html.erb +0 -15
- data/app/views/catalog/_arclight_abstract_or_scope.html.erb +0 -5
- data/app/views/catalog/_arclight_bookmark_control.html.erb +0 -38
- data/app/views/catalog/_arclight_document_header_icon.html.erb +0 -1
- data/app/views/catalog/_arclight_document_index_header.html.erb +0 -13
- data/app/views/catalog/_arclight_document_index_header_hierarchy_default.html.erb +0 -0
- data/app/views/catalog/_arclight_document_index_header_online_contents_default.html.erb +0 -0
- data/app/views/catalog/_arclight_index_compact_default.html.erb +0 -22
- data/app/views/catalog/_arclight_index_default.html.erb +0 -45
- data/app/views/catalog/_arclight_index_group_document_compact_default.html.erb +0 -19
- data/app/views/catalog/_arclight_index_group_document_default.html.erb +0 -18
- data/app/views/catalog/_arclight_online_content_indicator.html.erb +0 -3
- data/app/views/catalog/_arclight_rangelimit.html.erb +0 -24
- data/app/views/catalog/_arclight_viewer_default.html.erb +0 -1
- data/app/views/catalog/_collection_contents.html.erb +0 -4
- data/app/views/catalog/_collection_context.html.erb +0 -15
- data/app/views/catalog/_collection_context_nav.html.erb +0 -12
- data/app/views/catalog/_collection_online_contents.html.erb +0 -17
- data/app/views/catalog/_component_context.html.erb +0 -5
- data/app/views/catalog/_containers.html.erb +0 -3
- data/app/views/catalog/_context_card.html.erb +0 -27
- data/app/views/catalog/_context_sidebar.html.erb +0 -8
- data/app/views/catalog/_custom_metadata.html.erb +0 -16
- data/app/views/catalog/_document_downloads.html.erb +0 -14
- data/app/views/catalog/_group_header_compact_default.html.erb +0 -15
- data/app/views/catalog/_group_header_default.html.erb +0 -20
- data/app/views/catalog/_home.html.erb +0 -1
- data/app/views/catalog/_index_breadcrumb_default.html.erb +0 -6
- data/app/views/catalog/_index_collection_context_default.html.erb +0 -53
- data/app/views/catalog/_index_default.html.erb +0 -17
- data/app/views/catalog/_index_header.html.erb +0 -7
- data/app/views/catalog/_index_header_online_contents_default.html.erb +0 -1
- data/app/views/catalog/_index_online_contents_default.html.erb +0 -6
- data/app/views/catalog/_online_content_label.html.erb +0 -5
- data/app/views/catalog/_search_form.html.erb +0 -34
- data/app/views/catalog/_search_results.html.erb +0 -28
- data/app/views/catalog/_show_actions_box_default.html.erb +0 -27
- data/app/views/catalog/_show_breadcrumbs_default.html.erb +0 -6
- data/app/views/catalog/_show_collection.html.erb +0 -66
- data/app/views/catalog/_show_default.html.erb +0 -70
- data/app/views/catalog/_show_upper_metadata_collection.html.erb +0 -1
- data/app/views/catalog/_show_upper_metadata_default.html.erb +0 -14
- data/app/views/catalog/_sort_and_per_page.html.erb +0 -8
- data/app/views/catalog/_within_collection_dropdown.html.erb +0 -26
- data/app/views/layouts/catalog_result.html.erb +0 -7
- data/app/views/shared/_context_sidebar.html.erb +0 -8
- data/app/views/shared/_header_navbar.html.erb +0 -61
- data/app/views/shared/_show_breadcrumbs.html.erb +0 -27
- data/lib/arclight/viewer.rb +0 -45
- data/lib/arclight/viewers/oembed.rb +0 -57
- data/solr/conf/scripts.conf +0 -24
- data/vendor/assets/javascripts/responsiveTruncator.js +0 -69
- data/vendor/assets/javascripts/stickyfill.js +0 -480
data/README.md
CHANGED
@@ -6,17 +6,16 @@
|
|
6
6
|
|
7
7
|
A Rails engine supporting discovery of archival materials, based on [Blacklight](https://projectblacklight.org/)
|
8
8
|
|
9
|
-
> ℹ️ From August-October 2019, Stanford University, University of Michigan, Indiana University, Princeton University, and Duke University are collaborating on a second phase of ArcLight! See the [project board](https://github.com/projectblacklight/arclight/projects/2) or our [demo videos](https://www.youtube.com/playlist?list=PLMdUaIJ0G8QiIXZ_SFHASJErD14CJW-p5) to follow our work.
|
10
9
|
|
11
10
|
## Requirements
|
12
11
|
|
13
|
-
* [Ruby](https://www.ruby-lang.org/en/) 2.
|
14
|
-
* [Rails](http://rubyonrails.org)
|
12
|
+
* [Ruby](https://www.ruby-lang.org/en/) 2.7 or later
|
13
|
+
* [Rails](http://rubyonrails.org) 6.1 or later
|
15
14
|
* Solr 8.1 or later
|
16
15
|
|
17
16
|
## Installation
|
18
17
|
|
19
|
-
[Installing ArcLight](https://github.com/
|
18
|
+
[Installing ArcLight](https://github.com/projectblacklight/arclight/wiki/Creating,-installing,-and-running-your-ArcLight-application) is straightforward in a Rails environment.
|
20
19
|
|
21
20
|
Basically, add this line to your application's `Gemfile`:
|
22
21
|
|
@@ -36,7 +35,7 @@ Or install it yourself as:
|
|
36
35
|
$ gem install arclight
|
37
36
|
```
|
38
37
|
|
39
|
-
For further details, see our [Installing ArcLight](https://github.com/
|
38
|
+
For further details, see our [Installing ArcLight](https://github.com/projectblacklight/arclight/wiki/Creating,-installing,-and-running-your-ArcLight-application) documentation.
|
40
39
|
|
41
40
|
## Usage
|
42
41
|
|
@@ -48,9 +47,9 @@ Browsing allows you to view the Overview or Contents (when it exists) of a colle
|
|
48
47
|
|
49
48
|
Some pages include an inline view tab to the right of an item which will expand the Contents further.
|
50
49
|
|
51
|
-
See the [ArcLight demo](https://arclight-demo.projectblacklight.org/) and [ArcLight MVP Wiki](https://github.com/
|
50
|
+
See the [ArcLight demo](https://arclight-demo.projectblacklight.org/) and [ArcLight MVP Wiki](https://github.com/projectblacklight/arclight/wiki) for usage.
|
52
51
|
|
53
|
-
See [Arclight Major Features](https://github.com/
|
52
|
+
See [Arclight Major Features](https://github.com/projectblacklight/arclight/wiki/Arclight-Major-Features) for a list of features.
|
54
53
|
|
55
54
|
### Traject indexing of EAD content
|
56
55
|
[Traject](https://github.com/traject/traject) is a high performance way of transforming documents for indexing into Solr and how ArcLight does indexing. An EAD2 can be indexed by doing the following:
|
@@ -70,7 +69,7 @@ bundle exec rake arclight:seed
|
|
70
69
|
* General
|
71
70
|
* [ArcLight demo site](https://arclight-demo.projectblacklight.org/)
|
72
71
|
* [ArcLight project wiki](https://bit.ly/arclightproject): includes design process documentation
|
73
|
-
* [ArcLight Github Wiki](https://github.com/
|
72
|
+
* [ArcLight Github Wiki](https://github.com/projectblacklight/arclight/wiki): developer/implementor documentation
|
74
73
|
* [Blacklight wiki](https://github.com/projectblacklight/blacklight/wiki)
|
75
74
|
* Use the [ArcLight Google Group](http://groups.google.com/d/forum/arclight-community) to contact us with questions
|
76
75
|
* ArcLight Phase II:
|
@@ -85,7 +84,7 @@ See the [CONTRIBUTORS](CONTRIBUTORS.md) file.
|
|
85
84
|
|
86
85
|
## Development
|
87
86
|
|
88
|
-
ArcLight development
|
87
|
+
ArcLight requires Solr to be running. For development you can start this using `solr_wrapper` or you may choose to use Docker. Start Solr using Docker by doing `docker compose up`.
|
89
88
|
|
90
89
|
### Run the test suite
|
91
90
|
|
@@ -108,16 +107,23 @@ Then visit http://localhost:3000. It will also start a Solr instance on port 898
|
|
108
107
|
|
109
108
|
You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
110
109
|
|
111
|
-
###
|
110
|
+
### Releasing
|
112
111
|
|
113
|
-
To release a new
|
112
|
+
#### To release a new gem:
|
114
113
|
|
115
114
|
1. Update the version number in `lib/arclight/version.rb`
|
116
115
|
2. Run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, build the gem file (e.g., `gem build arclight.gemspec`) and push the `.gem` file to [rubygems.org](https://rubygems.org) (e.g., `gem push arclight-x.y.z.gem`).
|
117
116
|
|
117
|
+
#### To release the frontend sources:
|
118
|
+
|
119
|
+
When any of the javascript components or SASS sources in the gem are changed, this package should be published to NPM with the following steps:
|
120
|
+
1. [Install npm](https://www.npmjs.com/get-npm)
|
121
|
+
2. Bump the version number in `package.json`
|
122
|
+
3. run `npm publish` to push the javascript package to https://npmjs.org/package/arclight
|
123
|
+
|
118
124
|
## Contributing
|
119
125
|
|
120
|
-
[Bug reports](https://github.com/
|
126
|
+
[Bug reports](https://github.com/projectblacklight/arclight/issues) and [pull requests](https://github.com/projectblacklight/arclight/pulls) are welcome on ArcLight -- see [CONTRIBUTING.md](https://github.com/projectblacklight/arclight/blob/main/CONTRIBUTING.md) for details.
|
121
127
|
## License
|
122
128
|
|
123
129
|
The gem is available as open source under the terms of the [Apache 2 License](https://opensource.org/licenses/Apache-2.0).
|
@@ -1,8 +1,4 @@
|
|
1
|
-
|
2
|
-
//= require arclight/collection_navigation
|
3
|
-
//= require arclight/context_navigation
|
4
|
-
//= require arclight/oembed_viewer
|
5
|
-
//= require arclight/truncator
|
1
|
+
import 'arclight/oembed_viewer'
|
6
2
|
|
7
|
-
|
8
|
-
|
3
|
+
import Truncate from 'arclight/truncate_controller'
|
4
|
+
Stimulus.register('arclight-truncate', Truncate)
|
@@ -1,46 +1,71 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
class OembedLoader {
|
2
|
+
constructor(el) {
|
3
|
+
this.el = el
|
4
|
+
}
|
3
5
|
|
4
|
-
|
5
|
-
|
6
|
+
load() {
|
7
|
+
const loadedAttr = this.el.getAttribute('loaded')
|
8
|
+
const { arclightOembed, arclightOembedUrl, ...extraOembedParams } = this.el.dataset
|
9
|
+
const extraParams = OembedLoader.normalizeParams(extraOembedParams)
|
6
10
|
|
7
|
-
|
8
|
-
|
9
|
-
if ($viewerElements.length === 0) {
|
10
|
-
return;
|
11
|
+
if (loadedAttr && loadedAttr === 'loaded') {
|
12
|
+
return
|
11
13
|
}
|
12
14
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
var resourceUrl = data.arclightOembedUrl;
|
18
|
-
if (loadedAttr && loadedAttr === 'loaded') {
|
19
|
-
return;
|
20
|
-
}
|
21
|
-
|
22
|
-
$.ajax({
|
23
|
-
url: resourceUrl,
|
24
|
-
dataType: 'html'
|
25
|
-
}).done(function (response) {
|
26
|
-
var links = $('<div>' + response.match(/<link .*>/g).join('') + '</div>'); // Parse out link elements so image assets are not loaded
|
27
|
-
var oEmbedEndPoint = links.find('link[rel="alternate"][type="application/json+oembed"]').prop('href');
|
28
|
-
|
15
|
+
fetch(arclightOembedUrl)
|
16
|
+
.then((response) => response.text())
|
17
|
+
.then((body) => {
|
18
|
+
const oEmbedEndPoint = OembedLoader.findOEmbedEndPoint(body, extraParams)
|
29
19
|
if (!oEmbedEndPoint || oEmbedEndPoint.length === 0) {
|
30
|
-
|
20
|
+
console.warn(`No oEmbed endpoint found in <head> at ${arclightOembedUrl}`)
|
21
|
+
return
|
31
22
|
}
|
23
|
+
this.loadEndPoint(oEmbedEndPoint)
|
24
|
+
})
|
25
|
+
}
|
26
|
+
|
27
|
+
// Convert data-arclight-oembed-* attributes to URL parameters for the viewer
|
28
|
+
static normalizeParams(attributes) {
|
29
|
+
return Object.keys(attributes).reduce((acc, attribute) => {
|
30
|
+
// Reverse data attribute name conversion. See:
|
31
|
+
// https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/dataset#name_conversion
|
32
|
+
const parameterName = attribute.replace('arclightOembed', '')
|
33
|
+
.replace(/([a-z])([A-Z])/g, '$1-$2')
|
34
|
+
.toLowerCase()
|
35
|
+
|
36
|
+
acc[parameterName] = attributes[attribute]
|
37
|
+
return acc
|
38
|
+
}, {})
|
39
|
+
}
|
40
|
+
|
41
|
+
static findOEmbedEndPoint(body, extraParams = {}) {
|
42
|
+
// Parse out link elements so image assets are not loaded
|
43
|
+
const template = document.createElement('template')
|
44
|
+
template.innerHTML = body.match(/<link .*>/g).join('')
|
32
45
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
46
|
+
// Look for a link element containing the oEmbed endpoint; bail out if none
|
47
|
+
const endpoint = template.content.querySelector('link[rel="alternate"][type="application/json+oembed"]')
|
48
|
+
?.getAttribute('href')
|
49
|
+
if (!endpoint) return ''
|
50
|
+
|
51
|
+
// Serialize any extra params and append them to the endpoint
|
52
|
+
const qs = new URLSearchParams(extraParams).toString()
|
53
|
+
return `${endpoint}&${qs}`
|
54
|
+
}
|
55
|
+
|
56
|
+
loadEndPoint(oEmbedEndPoint) {
|
57
|
+
fetch(oEmbedEndPoint)
|
58
|
+
.then((response) => response.json())
|
59
|
+
.then((json) => {
|
60
|
+
this.el.innerHTML = json.html
|
61
|
+
this.el.setAttribute('loaded', 'loaded')
|
62
|
+
})
|
63
|
+
}
|
64
|
+
}
|
65
|
+
|
66
|
+
Blacklight.onLoad(function () {
|
67
|
+
document.querySelectorAll('[data-arclight-oembed="true"]').forEach((element) => {
|
68
|
+
const loader = new OembedLoader(element)
|
69
|
+
loader.load()
|
70
|
+
})
|
71
|
+
})
|
@@ -0,0 +1,27 @@
|
|
1
|
+
import { Controller } from '@hotwired/stimulus'
|
2
|
+
|
3
|
+
export default class extends Controller {
|
4
|
+
static targets = ['content']
|
5
|
+
|
6
|
+
connect() {
|
7
|
+
// target elements
|
8
|
+
const contentInner = Array.from(this.contentTarget.children)
|
9
|
+
|
10
|
+
// calculate total scrollable inner height vs. observed outer height
|
11
|
+
const outerHeight = this.contentTarget.clientHeight
|
12
|
+
const innerHeight = contentInner.map(e => e.scrollHeight).reduce((a, b) => a + b, 0)
|
13
|
+
|
14
|
+
// truncation occurred if total inner height exceeds outer (observed) height.
|
15
|
+
// if no longer truncated, reset the expanded state (e.g. on window resize).
|
16
|
+
if (innerHeight > outerHeight) {
|
17
|
+
this.element.classList.add('truncated')
|
18
|
+
} else {
|
19
|
+
this.element.classList.remove('truncated')
|
20
|
+
this.contentTarget.classList.remove('expanded')
|
21
|
+
}
|
22
|
+
}
|
23
|
+
|
24
|
+
trigger() {
|
25
|
+
this.element.classList.toggle('expanded')
|
26
|
+
}
|
27
|
+
}
|
@@ -1,7 +1,3 @@
|
|
1
|
-
@import 'bootstrap/functions';
|
2
|
-
@import 'bootstrap/variables';
|
3
|
-
@import 'bootstrap/mixins/breakpoints';
|
4
|
-
@import 'bootstrap_overrides';
|
5
1
|
@import 'variables';
|
6
2
|
@import 'responsive';
|
7
3
|
@import 'modules/collection_search';
|
@@ -14,4 +10,4 @@
|
|
14
10
|
@import 'modules/repository_card.scss';
|
15
11
|
@import 'modules/search_results';
|
16
12
|
@import 'modules/show_collection';
|
17
|
-
@import 'modules/
|
13
|
+
@import 'modules/truncator';
|
@@ -1,112 +1,86 @@
|
|
1
|
-
.
|
2
|
-
|
3
|
-
|
1
|
+
//< !-- ! Font Awesome Pro 6.2.0 by @fontawesome - https: //fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2022 Fonticons, Inc. -->
|
2
|
+
$hierarchy-view-expand-icon: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 512'><path fill='#{$navbar-light-color}' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zM200 344V280H136c-13.3 0-24-10.7-24-24s10.7-24 24-24h64V168c0-13.3 10.7-24 24-24s24 10.7 24 24v64h64c13.3 0 24 10.7 24 24s-10.7 24-24 24H248v64c0 13.3-10.7 24-24 24s-24-10.7-24-24z'/></svg>") !default;
|
3
|
+
$hierarchy-view-collapse-icon: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 512'><path fill='#{$navbar-light-color}' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zm88 200H296c13.3 0 24 10.7 24 24s-10.7 24-24 24H152c-13.3 0-24-10.7-24-24s10.7-24 24-24z'/></svg>") !default;
|
4
|
+
|
5
|
+
// Collapse +/- indicators
|
6
|
+
.al-toggle-view-children {
|
7
|
+
background-image: escape-svg($hierarchy-view-expand-icon);
|
8
|
+
background-repeat: no-repeat;
|
9
|
+
background-position: center;
|
10
|
+
background-size: 100%;
|
11
|
+
display: inline-block;
|
12
|
+
flex-shrink: 0;
|
13
|
+
height: 1.25rem;
|
14
|
+
margin-left: -1.25rem;
|
15
|
+
margin-right: 0.25 * $spacer;
|
16
|
+
margin-top: 0.1 * $spacer;
|
17
|
+
vertical-align: middle;
|
18
|
+
width: 1rem;
|
19
|
+
|
20
|
+
&:not(.collapsed) {
|
21
|
+
background-image: escape-svg($hierarchy-view-collapse-icon);
|
4
22
|
}
|
23
|
+
}
|
5
24
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
}
|
10
|
-
}
|
25
|
+
.al-hierarchy-highlight > .documentHeader {
|
26
|
+
background: $mark-bg;
|
27
|
+
}
|
11
28
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
text-align: left;
|
16
|
-
}
|
29
|
+
#collection-context {
|
30
|
+
ul {
|
31
|
+
list-style: none;
|
17
32
|
|
18
|
-
|
19
|
-
.al-request-form {
|
20
|
-
font-size: $font-size-sm;
|
21
|
-
}
|
33
|
+
padding-left: 1.5rem;
|
22
34
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
line-height: 1.5;
|
27
|
-
max-width: 45em;
|
35
|
+
ul {
|
36
|
+
padding-left: 1rem;
|
37
|
+
}
|
28
38
|
}
|
29
39
|
|
30
|
-
.
|
31
|
-
|
32
|
-
|
33
|
-
font-weight: normal;
|
34
|
-
text-transform: uppercase;
|
40
|
+
.documentHeader {
|
41
|
+
display: flex;
|
42
|
+
margin-bottom: 0.5 * $spacer;
|
35
43
|
}
|
36
44
|
|
37
|
-
|
38
|
-
|
39
|
-
.blacklight-subseries .document-title-heading,
|
40
|
-
.blacklight-file .document-title-heading,
|
41
|
-
.blacklight-binder .document-title-heading,
|
42
|
-
.blacklight-other .document-title-heading {
|
43
|
-
font-size: $h5-font-size;
|
44
|
-
font-weight: 400;
|
45
|
-
margin-bottom: ($spacer / 2);
|
45
|
+
.al-document-container {
|
46
|
+
display: none;
|
46
47
|
}
|
47
48
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
font-size: $h6-font-size;
|
56
|
-
|
57
|
-
.documentHeader {
|
58
|
-
margin-top: $spacer;
|
59
|
-
}
|
49
|
+
turbo-frame[loading]:not([complete]) {
|
50
|
+
&::after {
|
51
|
+
@extend .placeholder !optional;
|
52
|
+
animation: placeholder-glow 2s ease-in-out infinite;
|
53
|
+
content: 'Loading...';
|
54
|
+
display: inline-block;
|
55
|
+
margin-left: 1.5rem;
|
60
56
|
}
|
57
|
+
}
|
58
|
+
}
|
61
59
|
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
.al-hierarchy-level-1 .blacklight-other .document-title-heading {
|
67
|
-
padding-left: 10px;
|
68
|
-
|
69
|
-
&:before {
|
70
|
-
color: $gray-600;
|
71
|
-
content: "\027E9";
|
72
|
-
padding-right: 3px;
|
73
|
-
}
|
74
|
-
}
|
60
|
+
#contents {
|
61
|
+
.documents {
|
62
|
+
list-style: none;
|
63
|
+
padding-left: 0;
|
75
64
|
|
76
|
-
|
77
|
-
|
78
|
-
&:before {
|
79
|
-
content: "\027E9 \027E9";
|
80
|
-
}
|
65
|
+
li {
|
66
|
+
padding: 0.25 * $spacer 0.5 * $spacer;
|
81
67
|
}
|
82
68
|
|
83
|
-
|
84
|
-
|
85
|
-
&:before {
|
86
|
-
content: "\027E9 \027E9 \027E9";
|
87
|
-
}
|
69
|
+
li:nth-of-type(odd) {
|
70
|
+
background-color: $table-striped-bg;
|
88
71
|
}
|
89
72
|
}
|
90
|
-
}
|
91
73
|
|
92
|
-
.
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
.al-hierarchy-placeholder {
|
98
|
-
margin-top: $spacer;
|
99
|
-
|
100
|
-
h3 {
|
101
|
-
background-color: $gray-200;
|
102
|
-
border-radius: 5px;
|
103
|
-
height: $h3-font-size;
|
74
|
+
.documentHeader {
|
75
|
+
display: flex;
|
76
|
+
gap: 2rem;
|
77
|
+
justify-content: space-between;
|
78
|
+
margin-bottom: 0.5 * $spacer;
|
104
79
|
}
|
105
80
|
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
height: $font-size-base;
|
81
|
+
.al-document-container {
|
82
|
+
flex-basis: 25%;
|
83
|
+
text-align: right;
|
110
84
|
}
|
111
85
|
}
|
112
86
|
|
@@ -118,60 +92,60 @@
|
|
118
92
|
margin-bottom: $spacer;
|
119
93
|
}
|
120
94
|
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
95
|
+
.alert {
|
96
|
+
.blacklight-icons svg {
|
97
|
+
height: 1.5rem;
|
98
|
+
width: 1.5rem;
|
125
99
|
}
|
100
|
+
}
|
126
101
|
|
127
|
-
|
128
|
-
|
129
|
-
|
102
|
+
.title-container {
|
103
|
+
border-bottom: $border-width solid $border-color;
|
104
|
+
padding-bottom: $spacer * .5;
|
105
|
+
margin-bottom: $spacer * .75;
|
106
|
+
display: grid;
|
107
|
+
gap: 0.5rem;
|
108
|
+
grid-template-areas:
|
109
|
+
"title bookmark-toggle"
|
110
|
+
"request request"
|
111
|
+
"sidebar-toggle sidebar-toggle"
|
112
|
+
"online-contents online-contents";
|
113
|
+
justify-content: space-between; // This will push the bookmark control to the right when the title is short
|
114
|
+
align-items: start;
|
115
|
+
|
116
|
+
@include media-breakpoint-up(lg) {
|
117
|
+
grid-template-areas:
|
118
|
+
"title request bookmark-toggle"
|
119
|
+
"sidebar-toggle sidebar-toggle sidebar-toggle"
|
120
|
+
"online-contents online-contents online-contents";
|
130
121
|
}
|
131
122
|
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
}
|
123
|
+
h1 {
|
124
|
+
grid-area: title;
|
125
|
+
margin-bottom: 0;
|
136
126
|
}
|
137
127
|
|
138
|
-
|
139
|
-
|
140
|
-
font-size: $h5-font-size;
|
141
|
-
margin-bottom: ($spacer / 2);
|
128
|
+
.al-request {
|
129
|
+
grid-area: request;
|
142
130
|
}
|
143
131
|
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
font-size: $h6-font-size;
|
148
|
-
}
|
132
|
+
.bookmark-toggle {
|
133
|
+
grid-area: bookmark-toggle;
|
134
|
+
margin-left: 0 !important;
|
149
135
|
}
|
150
136
|
|
151
|
-
.
|
152
|
-
|
153
|
-
|
154
|
-
transition: visibility 0s, height 0.5s, opacity 0.5s linear;
|
155
|
-
|
156
|
-
&.collapsed {
|
157
|
-
visibility: hidden;
|
158
|
-
height: 0;
|
159
|
-
opacity: 0;
|
160
|
-
}
|
137
|
+
.sidebar-toggle {
|
138
|
+
grid-area: sidebar-toggle;
|
139
|
+
max-width: fit-content;
|
161
140
|
}
|
162
|
-
}
|
163
141
|
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
margin-left: ($i * 20) + px;
|
172
|
-
}
|
142
|
+
.online-contents {
|
143
|
+
grid-area: online-contents;
|
144
|
+
margin-bottom: 1rem;
|
145
|
+
|
146
|
+
h2 {
|
147
|
+
font-size: 1rem;
|
148
|
+
text-transform: uppercase;
|
173
149
|
}
|
174
150
|
}
|
175
151
|
}
|
176
|
-
|
177
|
-
@include hierarchy-levels;
|
@@ -1,4 +1,15 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
|
2
|
+
.toggle-bookmark, .breadcrumb-item, .document, .al-online-content-icon {
|
3
|
+
.blacklight-icons svg {
|
4
|
+
height: 1rem;
|
5
|
+
width: 1rem;
|
6
|
+
}
|
7
|
+
}
|
8
|
+
|
9
|
+
.al-online-content-icon .blacklight-icons svg {
|
10
|
+
fill: $online-icon-color;
|
11
|
+
}
|
12
|
+
|
13
|
+
.btn > .bi:first-child {
|
14
|
+
@extend .me-1
|
4
15
|
}
|