reconnect
This commit is contained in:
22
.github/404.html
vendored
Normal file
22
.github/404.html
vendored
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
---
|
||||||
|
title: Page Not Found
|
||||||
|
layout: page
|
||||||
|
permalink: /404.html
|
||||||
|
# this creates a 404 page automatically handled by GitHub Pages
|
||||||
|
# the cow is from the linux program "cowsay"
|
||||||
|
---
|
||||||
|
|
||||||
|
<h1>404?</h1>
|
||||||
|
<p>Sorry, but the page you were trying to view does not exist.</p>
|
||||||
|
|
||||||
|
<pre><code>
|
||||||
|
____________
|
||||||
|
< Sorry, 404 >
|
||||||
|
------------
|
||||||
|
\ ^__^
|
||||||
|
\ (oo)\_______
|
||||||
|
(__)\ )\/\
|
||||||
|
||----w |
|
||||||
|
|| ||
|
||||||
|
|
||||||
|
</code></pre>
|
||||||
25
.github/CITATION.cff
vendored
Normal file
25
.github/CITATION.cff
vendored
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
cff-version: 1.2.0
|
||||||
|
message: "If you use this software, please cite it as below."
|
||||||
|
title: "CollectionBuilder-CSV"
|
||||||
|
type: software
|
||||||
|
authors:
|
||||||
|
- family-names: Williamson
|
||||||
|
given-names: Evan Peter
|
||||||
|
orcid: https://orcid.org/0000-0002-7990-9924
|
||||||
|
- family-names: Becker
|
||||||
|
given-names: Devin
|
||||||
|
orcid: https://orcid.org/0000-0002-0974-9064
|
||||||
|
- family-names: Wikle
|
||||||
|
given-names: Olivia
|
||||||
|
orcid: https://orcid.org/0000-0001-8122-4169
|
||||||
|
repository-code: 'https://github.com/CollectionBuilder/collectionbuilder-csv'
|
||||||
|
url: 'https://collectionbuilder.github.io/'
|
||||||
|
license: MIT
|
||||||
|
version: 1+
|
||||||
|
date-released: '2021-04-25'
|
||||||
|
abstract: >-
|
||||||
|
CollectionBuilder is an open source tool for
|
||||||
|
creating digital collection and exhibit websites
|
||||||
|
that are driven by metadata and powered by modern
|
||||||
|
static web technology.
|
||||||
|
license: MIT
|
||||||
76
.github/CODE_OF_CONDUCT.md
vendored
Normal file
76
.github/CODE_OF_CONDUCT.md
vendored
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
# Code of Conduct
|
||||||
|
|
||||||
|
## Our Pledge
|
||||||
|
|
||||||
|
A primary goal of the CollectionBuilder community is to be inclusive to the largest number of contributors, with the most varied and diverse backgrounds possible. As community participants, we pledge to make participation in our project and community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation.
|
||||||
|
|
||||||
|
We invite all those who participate in the CollectionBuilder project and community to help us create safe and positive experiences for everyone.
|
||||||
|
|
||||||
|
## Scope
|
||||||
|
|
||||||
|
This code of conduct outlines our expectations for everyone who participates in our community, as well as the consequences for unacceptable behavior.
|
||||||
|
|
||||||
|
We expect all community participants (community organizers; project maintainers; contributors, paid or otherwise; sponsors; and others) to abide by this Code of Conduct, which applies in all community venues, online and in-person; in one-on-one or group communications pertaining to community business; and within project spaces and in public spaces when an individual is representing the project or its community.
|
||||||
|
Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event.
|
||||||
|
Representation of a project may be further defined and clarified by community organizers.
|
||||||
|
|
||||||
|
Participants are also expected to uphold the [GitHub Community Guidelines](https://help.github.com/en/articles/github-community-guidelines) for all behavior and content on the platform.
|
||||||
|
|
||||||
|
## Expected Behavior
|
||||||
|
|
||||||
|
The following behaviors are expected of all community participants:
|
||||||
|
|
||||||
|
- Using inclusive, respectful, and welcoming language
|
||||||
|
- Being respectful of differing viewpoints and experiences
|
||||||
|
- Gracefully accepting constructive criticism
|
||||||
|
- Focusing on what is best for the community
|
||||||
|
- Showing empathy towards other community members
|
||||||
|
|
||||||
|
## Unacceptable Behavior
|
||||||
|
|
||||||
|
The following behaviors are unacceptable within our community:
|
||||||
|
|
||||||
|
- Violence, threats of violence, or violent language directed against another person
|
||||||
|
- Sexist, racist, homophobic, transphobic, ableist, or otherwise discriminatory jokes and language
|
||||||
|
- Trolling, insulting/derogatory comments, and personal or political attacks
|
||||||
|
- The use of sexualized language or imagery and unwelcome sexual attention or advances
|
||||||
|
- Posting or displaying sexually explicit or violent material
|
||||||
|
- Publishing or threatening to publish others' private information, such as a physical or electronic address, without explicit permission ("doxing")
|
||||||
|
- Public or private harassment
|
||||||
|
- Other conduct which could reasonably be considered inappropriate in a professional setting
|
||||||
|
|
||||||
|
## Our Responsibilities
|
||||||
|
|
||||||
|
Community organizers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
|
||||||
|
|
||||||
|
## Consequences for Unacceptable Behavior
|
||||||
|
|
||||||
|
Unacceptable behavior from any community member, including sponsors and those with decision-making authority, will not be tolerated.
|
||||||
|
|
||||||
|
Anyone asked to stop unacceptable behavior is expected to comply immediately.
|
||||||
|
|
||||||
|
Community organizers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban (temporarily or permanently) any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful without warning (and without refund in the case of a paid event).
|
||||||
|
|
||||||
|
## Reporting Guidelines
|
||||||
|
|
||||||
|
If you are subject to or witness unacceptable behavior, or have any other concerns, please notify community organizers as soon as possible at collectionbuilder.team@gmail.com which is maintained by evanwill, dcnb, owikle, and juliastone0729.
|
||||||
|
If these are not appropriate contacts, please consider [reporting directly to GitHub](https://github.com/contact/report-abuse) or an administrative contact in the project's home at [University of Idaho Library](https://www.lib.uidaho.edu/about/directory.html).
|
||||||
|
|
||||||
|
All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances.
|
||||||
|
Community organizers are obligated to uphold confidentiality with regard to the reporter of an incident.
|
||||||
|
|
||||||
|
Additionally, any abuse, harassment, and other harmful behavior taking place on GitHub can be reported directly:
|
||||||
|
https://github.com/contact/report-abuse
|
||||||
|
|
||||||
|
## Contact info
|
||||||
|
|
||||||
|
- email: collectionbuilder.team@gmail.com
|
||||||
|
- [CollectionBuilder GitHub organization](https://github.com/CollectionBuilder)
|
||||||
|
- [CollectionBuilder home page](https://collectionbuilder.github.io/)
|
||||||
|
|
||||||
|
## Attribution
|
||||||
|
|
||||||
|
This Code of Conduct is adapted from two sources:
|
||||||
|
|
||||||
|
1. The [Contributor Covenant](https://www.contributor-covenant.org/), version 1.4, available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html. For answers to common questions about this code of conduct, see https://www.contributor-covenant.org/faq.
|
||||||
|
2. The Citizen Code of Conduct, Revision 2.3 2017, which is distributed by [Stumptown Syndicate](http://stumptownsyndicate.org/) under a [Creative Commons Attribution-ShareAlike license](http://creativecommons.org/licenses/by-sa/3.0/). Portions of text from the Citizen Code of Conduct are derived from the [Django Code of Conduct](https://www.djangoproject.com/conduct/) and the [Geek Feminism Anti-Harassment Policy](http://geekfeminism.wikia.com/wiki/Conference_anti-harassment/Policy).
|
||||||
52
.github/CONTRIBUTING.md
vendored
Normal file
52
.github/CONTRIBUTING.md
vendored
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
# How to Contribute to CollectionBuilder
|
||||||
|
|
||||||
|
Thank you for contributing to CollectionBuilder!
|
||||||
|
|
||||||
|
CollectionBuilder prioritizes pragmatic, sustainable, and simplified approaches to infrastructure to ensure the tool is "do-able" and approachable for digital knowledge workers in libraries and museums, empowering them to take control of their web systems.
|
||||||
|
The core team is *not* full time developers--we are librarians.
|
||||||
|
Thus, we are focused on creating a supportive, inclusive community with low barriers to contributing (please see our [Code of Conduct](https://github.com/CollectionBuilder/collectionbuilder-csv/blob/main/CODE_OF_CONDUCT.md)).
|
||||||
|
|
||||||
|
Honestly, we do a lot of stuff the slow/old/inefficient/wrong way... but we make it work and invite you to learn/teach with us!
|
||||||
|
|
||||||
|
## Project resources
|
||||||
|
|
||||||
|
- Email contact: <collectionbuilder.team@gmail.com>
|
||||||
|
- [Main project site](https://collectionbuilder.github.io/)
|
||||||
|
- [User Documentation - CB-Docs](https://collectionbuilder.github.io/cb-docs/)
|
||||||
|
- Technical Documentation is found in individual project repositories in the "/docs" folder.
|
||||||
|
- General project tracking takes place in Issues in individual template repositories, or the [CollectionBuilder home repository](https://github.com/CollectionBuilder/collectionbuilder.github.io/issues)
|
||||||
|
- [CollectionBuilder Discussions](https://github.com/orgs/CollectionBuilder/discussions)
|
||||||
|
|
||||||
|
## Issues
|
||||||
|
|
||||||
|
Since this is a relatively small project, we are informal in using GitHub Issues and welcome you to open one to get in touch.
|
||||||
|
Issues should be opened in the repository of the specific template you are using for bug reports, feature ideas, and requests for missing documentation.
|
||||||
|
The team also uses Issues for project management related to the CollectionBuilder project.
|
||||||
|
|
||||||
|
For questions related to your own project using a CB template, it is best to ask for help in the main [CollectionBuilder Discussions form](https://github.com/orgs/CollectionBuilder/discussions) rather than opening an Issue.
|
||||||
|
|
||||||
|
Here are some tips:
|
||||||
|
|
||||||
|
- [How to use GitHub Issues](https://guides.github.com/features/issues/)
|
||||||
|
- Please focus on clear communication, providing plenty of detail and links so that we can understand the bug or proposal.
|
||||||
|
- Search the Issues to see if a related report has already been opened (if so add a comment or reaction!).
|
||||||
|
- Check our [documentation](https://collectionbuilder.github.io/cb-docs/) resources for solutions and other ways to get in touch.
|
||||||
|
- You can more informally ask questions and share ideas in the main [CollectionBuilder Discussions forum](https://github.com/orgs/CollectionBuilder/discussions). Discussions is often the best place to post questions about debugging metadata or pages in your own projects (rather than issues with the template code).
|
||||||
|
|
||||||
|
## Pull Requests
|
||||||
|
|
||||||
|
CollectionBuilder welcomes [Pull Requests](https://help.github.com/en/articles/about-pull-requests) from outside contributors.
|
||||||
|
Please provide plenty of detail in the PR so that the project team fully understands your contribution.
|
||||||
|
|
||||||
|
- [How to create a PR](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/creating-a-pull-request)
|
||||||
|
|
||||||
|
## Conventions
|
||||||
|
|
||||||
|
- Include lots of inline comments documenting code! The entire CollectionBuilder project has a educational outlook.
|
||||||
|
- Keep code structure *relatively* simple. The templates are intended to be comprehensible for digital librarians and DH practitioners to use and modify, not necessarily fully optimized solutions.
|
||||||
|
- Include spaces for readability. For example, in Liquid `{% if site.example %}{{ site.example }}{% endif %}`, not `{%if site.example%}{{site.example}}{%endif%}`.
|
||||||
|
- To improve readability, avoid excess white space and random indentations.
|
||||||
|
- Indent using spaces. HTML, JS, CSS and related files should be indented using 4 spaces. YAML with 2 spaces.
|
||||||
|
- Use `;` in metadata to denote multi-valued fields.
|
||||||
|
- New features should be progressive--adding features, while maintaining backwards compatibility with existing data setups. If possible, sane defaults should be set in Liquid and JS, so that projects lacking updated config variables will still function.
|
||||||
|
- Main branch should be code that is ready to go. Use feature branches for development and provide meaningful commit messages.
|
||||||
21
.github/Gemfile
vendored
Normal file
21
.github/Gemfile
vendored
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
source 'https://rubygems.org'
|
||||||
|
|
||||||
|
# needed for Jekyll
|
||||||
|
gem 'jekyll'
|
||||||
|
gem 'webrick'
|
||||||
|
gem 'logger'
|
||||||
|
gem 'base64'
|
||||||
|
gem 'ostruct'
|
||||||
|
gem "html-proofer", "~> 5.0"
|
||||||
|
|
||||||
|
# needed for Rake tasks
|
||||||
|
gem 'rake'
|
||||||
|
gem 'csv'
|
||||||
|
gem 'fileutils'
|
||||||
|
gem 'mini_magick'
|
||||||
|
unless Gem.win_platform?
|
||||||
|
gem 'image_optim'
|
||||||
|
gem 'image_optim_pack'
|
||||||
|
end
|
||||||
21
.github/LICENSE
vendored
Normal file
21
.github/LICENSE
vendored
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2021 CollectionBuilder contributors, evanwill, dcnb, owikle, jylisadoney, University of Idaho Library Digital Initiatives, https://www.lib.uidaho.edu/digital/
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
42
.github/README.md
vendored
Normal file
42
.github/README.md
vendored
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
# CollectionBuilder-CSV
|
||||||
|
|
||||||
|
CollectionBuilder-CSV is a robust and flexible "stand alone" template for creating digital collection and exhibit websites using Jekyll and a metadata CSV.
|
||||||
|
Driven by your collection metadata, the template generates engaging visualizations to browse and explore your objects.
|
||||||
|
The resulting static site can be hosted on any basic web server (or built automatically using GitHub Actions).
|
||||||
|
|
||||||
|
Visit the [CollectionBuilder Docs](https://collectionbuilder.github.io/cb-docs/) for step-by-step details for getting started and building collections!
|
||||||
|
|
||||||
|
## Brief Overview of Building a Collection
|
||||||
|
|
||||||
|
The [CollectionBuilder Docs](https://collectionbuilder.github.io/cb-docs/) contain detailed information about building a collection from start to finish--including installing software, using Git/GitHub, preparing digital objects, and formatting metadata.
|
||||||
|
However, here is a super quick overview of the process:
|
||||||
|
|
||||||
|
- Make your own copy of this template repository by clicking the green "Use this Template" button on GitHub (see [repository set up docs](https://collectionbuilder.github.io/cb-docs/docs/repository/)). This copy of the template is the starting point for your "project repository", i.e. the source code for your digital collection site!
|
||||||
|
- Prepare your collection metadata following the CB-CSV template (see our demo [metadata template on Google Sheets](https://docs.google.com/spreadsheets/d/1nN_k4JQB4LJraIzns7WcM3OXK-xxGMQhW1shMssflNM/edit?usp=sharing) and [metadata docs](https://collectionbuilder.github.io/cb-docs/docs/metadata/csv_metadata/)). Your metadata will include links to your digital files (images, pdfs, videos, etc) and thumbnails wherever they are hosted.
|
||||||
|
- Add your metadata as a CSV to your project repository's "_data" folder (see [upload metadata docs](https://collectionbuilder.github.io/cb-docs/docs/metadata/uploading/)).
|
||||||
|
- Edit your project's "_config.yml" with your collection information (see [site configuration docs](https://collectionbuilder.github.io/cb-docs/docs/config/)). Additional customization is done via a theme file, configuration files, CSS tweaks, and more--however, once your "_config.yml" is edited your site is ready to be previewed.
|
||||||
|
- Generate your site using Jekyll! (see docs for how to [use Jekyll locally](https://collectionbuilder.github.io/cb-docs/docs/repository/generate/) and [deploy on the web](https://collectionbuilder.github.io/cb-docs/docs/deploy/))
|
||||||
|
|
||||||
|
Please feel free to ask questions in the main [CollectionBuilder discussion forum](https://github.com/CollectionBuilder/collectionbuilder.github.io/discussions).
|
||||||
|
|
||||||
|
----------
|
||||||
|
|
||||||
|
## CollectionBuilder
|
||||||
|
|
||||||
|
<https://collectionbuilder.github.io/>
|
||||||
|
|
||||||
|
CollectionBuilder is a project of University of Idaho Library's [Digital Initiatives](https://www.lib.uidaho.edu/digital/) and the [Center for Digital Inquiry and Learning](https://cdil.lib.uidaho.edu) (CDIL) following the [Lib-Static](https://lib-static.github.io/) methodology.
|
||||||
|
Powered by the open source static site generator [Jekyll](https://jekyllrb.com/) and a modern static web stack, it puts collection metadata to work building beautiful sites.
|
||||||
|
|
||||||
|
The basic theme is created using [Bootstrap](https://getbootstrap.com/).
|
||||||
|
Metadata visualizations are built using open source libraries such as [DataTables](https://datatables.net/), [Leafletjs](http://leafletjs.com/), [Spotlight gallery](https://github.com/nextapps-de/spotlight), [lazysizes](https://github.com/aFarkas/lazysizes), and [Lunr.js](https://lunrjs.com/).
|
||||||
|
Object metadata is exposed using [Schema.org](http://schema.org) and [Open Graph protocol](http://ogp.me/) standards.
|
||||||
|
|
||||||
|
Questions can be directed to **collectionbuilder.team@gmail.com**
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
CollectionBuilder documentation and general web content is licensed [Creative Commons Attribution-ShareAlike 4.0 International](http://creativecommons.org/licenses/by-sa/4.0/).
|
||||||
|
This license does *NOT* include any objects or images used in digital collections, which may have individually applied licenses described by a "rights" field.
|
||||||
|
CollectionBuilder code is licensed [MIT](https://github.com/CollectionBuilder/collectionbuilder-csv/blob/master/LICENSE).
|
||||||
|
This license does not include external dependencies included in the `assets/lib` directory, which are covered by their individual licenses.
|
||||||
33
.github/Rakefile
vendored
Normal file
33
.github/Rakefile
vendored
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
#
|
||||||
|
# CollectionBuilder Rake Utilities
|
||||||
|
#
|
||||||
|
# See "docs/rake_tasks/" for documentation.
|
||||||
|
# See "rakelib" for individual rake tasks!
|
||||||
|
#
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
require 'csv'
|
||||||
|
require 'fileutils'
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# Helper Functions
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
def prompt_user_for_confirmation(message)
|
||||||
|
response = nil
|
||||||
|
loop do
|
||||||
|
print "#{message} (Y/n): "
|
||||||
|
$stdout.flush
|
||||||
|
response = case $stdin.gets.chomp.downcase
|
||||||
|
when '', 'y' then true
|
||||||
|
when 'n' then false
|
||||||
|
end
|
||||||
|
break unless response.nil?
|
||||||
|
|
||||||
|
puts 'Please enter "y" or "n"'
|
||||||
|
end
|
||||||
|
response
|
||||||
|
end
|
||||||
11
.github/SECURITY.md
vendored
Normal file
11
.github/SECURITY.md
vendored
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
# Security Policy
|
||||||
|
|
||||||
|
## Supported Versions
|
||||||
|
|
||||||
|
CollectionBuilder-CSV is a template repository used to start other projects.
|
||||||
|
External projects are not automatically updated from the central template--security issues relating to existing projects *created with CollectionBuilder* should be reported to the individual repository/project owners.
|
||||||
|
Security issues found in the main branch of the current CollectionBuilder-CSV template and its assets should be reported to CollectionBuilder team directly.
|
||||||
|
|
||||||
|
## Reporting a Vulnerability
|
||||||
|
|
||||||
|
To report a security issue, please email <collectionbuilder.team@gmail.com> with a description of the issue, the steps you took to create the issue, affected versions, and, if known, mitigations for the issue. This project follows a 90 day disclosure timeline.
|
||||||
80
.github/_config.yml
vendored
Normal file
80
.github/_config.yml
vendored
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
##########
|
||||||
|
# collectionbuilder-csv
|
||||||
|
# Jekyll Digital Collection Generator
|
||||||
|
# https://github.com/CollectionBuilder/collectionbuilder-csv
|
||||||
|
##########
|
||||||
|
|
||||||
|
##########
|
||||||
|
# URL VARIABLES
|
||||||
|
#
|
||||||
|
# site domain, full URL to the production location of your collection
|
||||||
|
url: https://bqkc.1800nasi.net
|
||||||
|
# path to location on the domain if necessary e.g. /digital/hjccc
|
||||||
|
baseurl:
|
||||||
|
# location of code, the full url to your github repository
|
||||||
|
source-code: https://github.com/1800nasi/bqkc
|
||||||
|
|
||||||
|
|
||||||
|
##########
|
||||||
|
# SITE SETTINGS
|
||||||
|
#
|
||||||
|
# title of site appears in banner
|
||||||
|
title: "{B/qKC}"
|
||||||
|
# tagline, a short phrase that will appear throughout the site in the top banner
|
||||||
|
tagline: a decentralized archive of Black queer Kansas City history
|
||||||
|
# description appears in meta tags and other locations
|
||||||
|
# this description might appear in search result lists, keep around 160 characters max
|
||||||
|
description: "This is the official database and site for {B/qKC}: an archival project challenging institutional archival practices within the frame and study of midwestern Black queer history."
|
||||||
|
# keywords, a short list of subjects describing the collection, separated by semicolon, to appear in rich markup
|
||||||
|
keywords: kansas city; history; queer; black
|
||||||
|
# creator of the digital collection, to appear in meta tags; we typically use our GitHub usernames but feel free to just use your name
|
||||||
|
author: Nasir Anthony Montalvo
|
||||||
|
|
||||||
|
##########
|
||||||
|
# COLLECTION SETTINGS
|
||||||
|
#
|
||||||
|
# Set the metadata for your collection (the name of the CSV file in your _data directory that describes the objects in your collection)
|
||||||
|
# Use the filename of your CSV **without** the ".csv" extension! E.g. _data/demo-metadata.csv --> "demo-metadata"
|
||||||
|
metadata: bqkc-repository
|
||||||
|
# page generation settings [optional!]
|
||||||
|
# [optional: only used if you need to tweak CB defaults or generate from more than one data file]
|
||||||
|
# page_gen:
|
||||||
|
# - data: 'demo-metadata'
|
||||||
|
# template: 'item'
|
||||||
|
# name: 'objectid'
|
||||||
|
# dir: 'items'
|
||||||
|
# extension: 'html'
|
||||||
|
# filter: 'objectid'
|
||||||
|
|
||||||
|
##########
|
||||||
|
# ORGANIZATION SETTINGS
|
||||||
|
#
|
||||||
|
# Enter name and link for your organization (replacing the name and links below)
|
||||||
|
# These values will be used in attribution and data
|
||||||
|
organization-name: "{B/qKC}: a Black queer archive"
|
||||||
|
organization-link: https://1800nasi.net/bqkc/
|
||||||
|
# Add logo image links if you would like them to appear in banner and footer. Delete or leave blank to remove logos.
|
||||||
|
organization-logo-banner: false
|
||||||
|
organization-logo-nav: false
|
||||||
|
|
||||||
|
##########
|
||||||
|
# ROBOTS EXCLUDE
|
||||||
|
#
|
||||||
|
# set noindex to true if you do NOT want Google to index your site
|
||||||
|
# noindex: false
|
||||||
|
|
||||||
|
##########
|
||||||
|
# BUILD SETTINGS
|
||||||
|
#
|
||||||
|
# Note: use environment variable on build command to include analytics
|
||||||
|
# JEKYLL_ENV=production jekyll build
|
||||||
|
# (this is done automatically by gh-pages build)
|
||||||
|
#
|
||||||
|
# Library directory location. This allows you to customize where the standard assets are found.
|
||||||
|
# provide a relative path in this repository or full url
|
||||||
|
lib-assets: /assets/lib
|
||||||
|
# ignore stuff
|
||||||
|
exclude: [docs/, Rakefile, rakelib/, README.md, LICENSE, CITATION.cff, CODE_OF_CONDUCT.md, CONTRIBUTING.md, SECURITY.md]
|
||||||
|
# compress CSS output
|
||||||
|
sass:
|
||||||
|
style: compressed
|
||||||
107
.github/_data/bqkc-repository.csv
vendored
Normal file
107
.github/_data/bqkc-repository.csv
vendored
Normal file
@@ -0,0 +1,107 @@
|
|||||||
|
parentid,objectid,title,collection,date_created,description,subject,location,latitude,longitude,source,identifier,type,format,language,rights,rightsstatement,display_template,object_location,image_small,image_thumb,image_alt_text,object_transcript
|
||||||
|
,garycoll001,"Treshawn Seymour, performing",gary_carrington_collection,ca. 1993-2004,"Treshawn Seymour performing at Soakie’s, holding a wad of cash and donned in a blue/green jumpsuit.",Treshawn Seymour; Soakie's,"Soakie's (Kansas City, MO)",39.09985985,-94.58322563,"gary_carrington_collection, {B/qKC}",TreshawnSeymour003,Image;StillImage,image/jpg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Gary Carrington, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/TreshawnSeymour003_Soakies_GaryCarringtonCollection_BqKC.jpeg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/treshawnseymour003_soakies_garycarringtoncollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/treshawnseymour003_soakies_garycarringtoncollection_bqkc_th.jpg,Treshawn Seymour performs at Soakie's.,
|
||||||
|
,garycoll002,"Treshawn Seymour, Miss Soakie's 2002",gary_carrington_collection,ca.2002,Patrons watch Treshawn Seymour's acceptance of Miss Soakie's 2002.,Treshawn Seymour; Miss Soakie's,"Soakie's (Kansas City, MO)",39.09985985,-94.58322563,"gary_carrington_collection, {B/qKC}",TreshawnSeymour002,Image;StillImage,image/jpg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Gary Carrington, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/TreshawnSeymour002_Soakies_GaryCarringtonCollection_BqKC.jpeg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/treshawnseymour002_soakies_garycarringtoncollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/treshawnseymour002_soakies_garycarringtoncollection_bqkc_th.jpg,"Treshawn Seymour is crowned ""Miss Soakie's 2002"".",
|
||||||
|
,garycoll003,"Treshawn Seymour, Miss Soakie's 2002 – 2",gary_carrington_collection,ca.2002,"Treshawn Seymour is crowned Miss Soakie’s 2002, dressed in matching pink shoes, a dress, and a flower in their hair. ",Treshawn Seymour; Miss Soakie's,"Soakie's (Kansas City, MO)",39.09985985,-94.58322563,"gary_carrington_collection, {B/qKC}",TreshawnSeymour001,Image;StillImage,image/jpg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Gary Carrington, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/TreshawnSeymour001_Soakies_GaryCarringtonCollection_BqKC.jpeg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/treshawnseymour001_soakies_garycarringtoncollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/treshawnseymour001_soakies_garycarringtoncollection_bqkc_th.jpg,"Treshawn Seymour smiles to the audience at ""Miss Soakie's 2002"".",
|
||||||
|
,garycoll004,Drew Carrington bartends at Soakie's,gary_carrington_collection,ca.1993-2004,"The late Danny Cashmere—also known by house name, Drew Carrington—bartending at Soakie’s. The signs behind Danny read “Long Island Ice Tea’s..6.00 for one or 9.00 for two…SOLD HERE…” and “Cups of Ice 25¢”.",Danny Cashmere; Drew Carrington; Soakie's,"Soakie's (Kansas City, MO)",39.09985985,-94.58322563,"gary_carrington_collection, {B/qKC}",DannyCashmere001,Image;StillImage,image/jpg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Gary Carrington, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/DannyCashmere001_Soakies_GaryCarringtonCollection_BqKC.jpeg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/dannycashmere001_soakies_garycarringtoncollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/dannycashmere001_soakies_garycarringtoncollection_bqkc_th.jpg,"Danny Cashmere bartends at Soakie's, with a wall of liquor and trophies behind him.",
|
||||||
|
,garycoll005,Danny Cashmere poses in front of the fridge at Soakie's,gary_carrington_collection,ca.1993-2004,"Danny Cashmere poses in front of the fridge at Soakie’s, wearing a McDonald's uniform consisting of a white hat and red shirt.",Danny Cashmere; Soakie’s,"Soakie's (Kansas City, MO)",39.09985985,-94.58322563,"gary_carrington_collection, {B/qKC}",DannyCashmere002,Image;StillImage,image/jpg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Gary Carrington, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/DannyCashmere002_Soakies_GaryCarringtonCollection_BqKC.jpeg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/dannycashmere002_soakies_garycarringtoncollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/dannycashmere002_soakies_garycarringtoncollection_bqkc_th.jpg,Danny Cashmere poses in front of a fridge at Soakie's.,
|
||||||
|
,garycoll006,"Drew Carrington, friends and the fridge at Soakie's",gary_carrington_collection,ca.1993-2004,"Danny Cashmere (right) kneels in front of the fridge at Soakie's with his peer, Kermit (left). Danny wears a satin, pink-patterned shirt and ripped blue jeans and holds a beverage in his left hand.",Danny Cashmere; Soakie’s,"Soakie's (Kansas City, MO)",39.09985985,-94.58322563,"gary_carrington_collection, {B/qKC}",DannyCashmere003,Image;StillImage,image/jpg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Gary Carrington, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/DannyCashmere003_Soakies_GaryCarringtonCollection_BqKC.jpeg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/dannycashmere003_soakies_garycarringtoncollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/dannycashmere003_soakies_garycarringtoncollection_bqkc_th.jpg,"Danny Cashmere kneels to the right of his friend, Kermit, in front of a fridge at Soakie's.",
|
||||||
|
,garycoll007,Drew Carrington and Treshawn Seymour,gary_carrington_collection,ca.1993-2004,"Treshawn Seymour (left) grins next to Danny Cashmere. Treshawn is wearing a leopard fur dress and a matching purse, while Danny is dressed in a red, plaid shirt and jeans.",Treshawn Seymour; Danny Cashmere,"Soakie's (Kansas City, MO)",39.09985985,-94.58322563,"gary_carrington_collection, {B/qKC}",DannyCashmere004,Image;StillImage,image/jpg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Gary Carrington, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/DannyCashmere004_Soakies_GaryCarringtonCollection_BqKC.jpeg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/dannycashmere004_soakies_garycarringtoncollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/dannycashmere004_soakies_garycarringtoncollection_bqkc_th.jpg,Treshawn Seymour and Danny Cashmere radiantly smile to the camera in front of Soakie's bar.,
|
||||||
|
,garycoll008,"Drew Carrington, friends and the fridge at Soakie's – 2",gary_carrington_collection,ca.1993-2004,"Three guests pose with drinks in front of the fridge at Soakie's. Danny Cashmere (right) wears a satin, pink-patterned shirt and ripped blue jeans.",Danny Cashmere; Soakie’s,"Soakie's (Kansas City, MO)",39.09985985,-94.58322563,"gary_carrington_collection, {B/qKC}",DannyCashmere005,Image;StillImage,image/jpg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Gary Carrington, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/DannyCashmere005_Soakies_GaryCarringtonCollection_BqKC.jpeg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/dannycashmere005_soakies_garycarringtoncollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/dannycashmere005_soakies_garycarringtoncollection_bqkc_th.jpg,Danny Cashmere playfully poses with colleagues at Soakie's.,
|
||||||
|
,garycoll009,Brandon Holmes and Danny Cashmere at the bar,gary_carrington_collection,ca.1993-2004,"Patrons of Soakie’s, Brandon Holmes (left) and Danny Cashmere, sit at the bar. Brandon wears a navy colored sweatshirt, and Danny wears a blue, silk, baggy shirt.",Brandon Holmes; Danny Cashmere; Soakie’s,"Soakie's (Kansas City, MO)",39.09985985,-94.58322563,"gary_carrington_collection, {B/qKC}",DannyCashmere006,Image;StillImage,image/jpg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Gary Carrington, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/DannyCashmere006_Soakies_GaryCarringtonCollection_BqKC.jpeg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/dannycashmere006_soakies_garycarringtoncollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/dannycashmere006_soakies_garycarringtoncollection_bqkc_th.jpg,"Four patrons sitting at the bar in Soakie's. A masculine patron in the foreground looks straight into the camera, the others are in conversation.",
|
||||||
|
,garycoll010,New Year's at Soakie's,gary_carrington_collection,12–31–1999,"Gary Carrington (left) crouches by Danny Cashmere and friends below a sign stating ""HAPPY NEW YEAR"".",Gary Carrington; Danny Cashmere,"Soakie's (Kansas City, MO)",39.09985985,-94.58322563,"gary_carrington_collection, {B/qKC}",DannyCashmere007,Image;StillImage,image/jpg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Gary Carrington, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/DannyCashmere007_Soakies_GaryCarringtonCollection_BqKC.jpeg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/dannycashmere007_soakies_garycarringtoncollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/dannycashmere007_soakies_garycarringtoncollection_bqkc_th.jpg,"Five of Soakie's patrons pose in front of a banner displaying ""Happy New Year"".",
|
||||||
|
,garycoll011,China Collins performs,gary_carrington_collection,ca.1993-2004,China Collins performs in the upper level of Soakie's. China dons a matching sparkly gold long-sleeve and cap.,China Collins; Soakie’s,"Soakie's (Kansas City, MO)",39.09985985,-94.58322563,"gary_carrington_collection, {B/qKC}",ChinaCollins001,Image;StillImage,image/jpg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Gary Carrington, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/ChinaCollins001_Soakies_GaryCarringtonCollection_BqKC.jpeg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/chinacollins001_soakies_garycarringtoncollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/chinacollins001_soakies_garycarringtoncollection_bqkc_th.jpg,A feminine performer entertains at Soakie's.,
|
||||||
|
,garycoll012,China Collins in pink latex,gary_carrington_collection,ca.1993-2004,"China Collins poses in a baby pink latex dress and hat, complemented with a crystal necklace and earrings.",China Collins,"Soakie's (Kansas City, MO)",39.09985985,-94.58322563,"gary_carrington_collection, {B/qKC}",ChinaCollins002,Image;StillImage,image/jpg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Gary Carrington, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/ChinaCollins002_Soakies_GaryCarringtonCollection_BqKC.jpeg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/chinacollins002_soakies_garycarringtoncollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/chinacollins002_soakies_garycarringtoncollection_bqkc_th.jpg,A feminine performer poses in matching pink attire backstage at Soakie's.,
|
||||||
|
,garycoll013,"Treshawn Seymour, Eric Robinson and Derome Hubber",gary_carrington_collection,ca.1993-2004,"Treshawn Seymour (left), Eric Robinson, and Derome Hubber pose for a photo at Soakie's bar.",Treshawn Seymour; Eric Robinson; Derome Hubber; Soakie’s,"Soakie's (Kansas City, MO)",39.09985985,-94.58322563,"gary_carrington_collection, {B/qKC}",EricRobinson001,Image;StillImage,image/jpg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Gary Carrington, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/EricRobinson001_Soakies_GaryCarringtonCollection_BqKC.jpeg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/ericrobinson001_soakies_garycarringtoncollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/ericrobinson001_soakies_garycarringtoncollection_bqkc_th.jpg,A feminine performer and two masculine patrons in front of the bar at Soakie's. One patron hugs the performer–both of them smile; the other looks straight on to the camera.,
|
||||||
|
,garycoll014,Gary and Nikita Carrington at Bannister Mall,gary_carrington_collection,ca.1993-2004,"Gary Carrington (left) poses alongside Nikita Carrington/Orlando Hamilton inside a photo booth at the Bannister Mall. (5301 E Bannister Rd Ste 5600, Kansas City, MO 64137)",Gary Carrington; Nikita Carrington; Bannister Mall; Orlando Hamilton,"Soakie's (Kansas City, MO)",38.953125,-94.528699,"gary_carrington_collection, {B/qKC}",OrlandoHamilton001,Image;StillImage,image/jpg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Gary Carrington, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/OrlandoHamilton001_BannisterMall_GaryCarringtonCollection_BqKC.jpeg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/orlandohamilton001_bannistermall_garycarringtoncollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/orlandohamilton001_bannistermall_garycarringtoncollection_bqkc_th.jpg,Three patrons stand in front of the bar at Soakie's. Two on the left happily embrace each other.,
|
||||||
|
,garycoll015,Steve and Orlando Hamilton; Soakie's dartboard,gary_carrington_collection,ca.1993-2004,Steve and Orlando Hamilton/Nikita Carrington stand in front of the dartboard at Soakie’s.,Steve Hamilton; Orlando Hamilton; Soakie’s; Nikita Carrington,"Soakie's (Kansas City, MO)",39.09985985,-94.58322563,"gary_carrington_collection, {B/qKC}",OrlandoHamilton002,Image;StillImage,image/jpg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Gary Carrington, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/OrlandoHamilton002_Soakies_GaryCarringtonCollection_BqKC.jpeg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/orlandohamilton002_soakies_garycarringtoncollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/orlandohamilton002_soakies_garycarringtoncollection_bqkc_th.jpg,Two men pose in front of dart board at Soakie's.,
|
||||||
|
,garycoll016,Gary Carrington performs ,gary_carrington_collection,ca.1993-2004,"Gary Carrington performing in the upper room (“dance floor”) of Soakie’s, wearing a black and white grid-patterned coat.",Gary Carrington; Soakie’s; Performance,"Soakie's (Kansas City, MO)",39.09985985,-94.58322563,"gary_carrington_collection, {B/qKC}",GaryCarrington001,Image;StillImage,image/jpg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Gary Carrington, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/GaryCarrington001_Soakies_GaryCarringtonCollection_BqKC.jpeg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/garycarrington001_soakies_garycarringtoncollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/garycarrington001_soakies_garycarringtoncollection_bqkc_th.jpg,Garry Carrington performs in the middle of a crowd at Soakie's.,
|
||||||
|
,garycoll017,Gary Carrington emcees,gary_carrington_collection,ca.1993-2004,Gary Carrington emcees for a show at Soakie’s. His nametag reads “Promoter” on his rainbow button-up shirt. ,Gary Carrington; Soakie’s ,"Soakie's (Kansas City, MO)",39.09985985,-94.58322563,"gary_carrington_collection, {B/qKC}",GaryCarrington002,Image;StillImage,image/jpg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Gary Carrington, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/GaryCarrington002_Soakies_GaryCarringtonCollection_BqKC.jpeg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/garycarrington002_soakies_garycarringtoncollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/garycarrington002_soakies_garycarringtoncollection_bqkc_th.jpg,Gary Carrington speaks into a mic.,
|
||||||
|
,garycoll018,Gary Carrington at the Snooty Fox,gary_carrington_collection,ca.1993-2004,"Gary Carrington poses for a photo at the Snooty Fox, a former “after-hours” spot in Kansas City at 3150 Gillham Plaza, Kansas City, MO 64109.",Gary Carrington; Snooty Fox,"Snooty Fox (Kansas City, MO)",39.0666508,-94.5796922,"gary_carrington_collection, {B/qKC}",GaryCarrington003,Image;StillImage,image/jpeg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Gary Carrington, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/GaryCarrington003_SnootyFox_GaryCarringtonCollection_BqKC.jpeg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/garycarrington003_snootyfox_garycarringtoncollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/garycarrington003_snootyfox_garycarringtoncollection_bqkc_th.jpg,Gary Carrington poses at the Snooty Fox.,
|
||||||
|
,garycoll019,Group photo inside Soakie's,gary_carrington_collection,ca.1993-2004,"Guests and performers of Soakie's pose for a photo inside the bar. Kermit, Treshawn Seymour and Lester can be seen. Other individuals remain unidentified.",Soakie's,"Soakie's (Kansas City, MO)",39.09985985,-94.58322563,"gary_carrington_collection, {B/qKC}",GroupPhoto001,Image;StillImage,image/jpeg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Gary Carrington, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/GroupPhoto001_Soakies_GaryCarringtonCollection_BqKC.jpeg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/groupphoto001_soakies_garycarringtoncollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/groupphoto001_soakies_garycarringtoncollection_bqkc_th.jpg,A group of eight Soakie's patrons pose for a photo.,
|
||||||
|
,garycoll020,Group photo outside Soakie's,gary_carrington_collection,ca.1993-2004,"A group of Soakie’s attendees and performers pose outside in front of the sign. Pictured (from L-R, by approximate row): Nykizha Iman, Tracy Carrington, Tremaine Scott, Nikita Carrington, Mocha Collins, Dovee Love, Destiny Luv, China Collins, Treshawn Seymour, Lord Biskitt Carrington, Precious Seymour, Lady Keisha, Lester",Soakie's; Nykizha Iman; Tracy Carrington; Tremaine Scott; Mocha Collins; Dovee Love; Lord Biskitt Carrington; China Collins; Treshawn Seymour; Lady Keisha; Lester; Nikita Carringtonl Precious Seymour,"Soakie's (Kansas City, MO)",39.09985985,-94.58322563,"gary_carrington_collection, {B/qKC}",GroupPhoto002,Image;StillImage,image/jpeg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Gary Carrington, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/GroupPhoto002_Soakies_GaryCarringtonCollection_BqKC.jpeg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/groupphoto002_soakies_garycarringtoncollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/groupphoto002_soakies_garycarringtoncollection_bqkc_th.jpg,"A group of thirteen people stand outside Soakie's, in front of the building's name painted on the wall.",
|
||||||
|
,garycoll021,KC Exposures photo collage from Tisha Taylor's Birthday Bash at Soakie's,gary_carrington_collection,4-29-2004,"Pictures published in K.C. Exposures on April 29, 2004, from Tisha Taylor's Birthday Bash, including regular performers and guests, at Soakie's. The succeeding owners of Soakie’s (who are dually Salvatore A. “Soakie” Rinaldo's nephew and niece-in-law) Jimmy and Sue can be seen smiling next to Tisha.",Tisha Taylor’s Birthday Bash; Soakie’s; KC Exposures; Jim; Sue; Salvatore,"Soakie's (Kansas City, MO)",,,"gary_carrington_collection, {B/qKC}",TishaTaylorBirthdayBash001,Image;StillImage,image/jpeg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Gary Carrington, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/TishaTaylorBirthdayBash_KC_Exposures_GaryCarringtonCollection_BqKC.jpeg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/tishataylorbirthdaybash_kc_exposures_garycarringtoncollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/tishataylorbirthdaybash_kc_exposures_garycarringtoncollection_bqkc_th.jpg,"A clipping from the magazine, KC Exposures, displays images from Tisha Taylor's 2004 Birthday Bash at Soakie's.",
|
||||||
|
,garycoll022,"KC Exposures photo collage from ""Duke & Duches 2003"" pageant",gary_carrington_collection,1-30-2003,"A collage of photos from a lesbian pageant competition, ""Duke & Dutches 2003,"" at Soakie's, printed in K.C. Exposures on January 30, 2003.",“Duke & Dutches 2003” Pageant; Soakie’s; KC Exposures,"Soakie's (Kansas City, MO)",,,"gary_carrington_collection, {B/qKC}",DukeDutchessPageant2003001,Image;StillImage,image/jpeg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Gary Carrington, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/DukeDutchessPageant2003001_KC_Exposures_GaryCarringtonCollection_BqKC.jpeg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/dukedutchesspageant2003001_kc_exposures_garycarringtoncollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/dukedutchesspageant2003001_kc_exposures_garycarringtoncollection_bqkc_th.jpg,"A clipping from the magazine, KC Exposures, displays images from a pageant at Soakie's.",
|
||||||
|
,garycoll023,"KC Exposures invitation to Tisha Taylor's ""Stairway of Life Cele-bration""",gary_carrington_collection,04-22-2004,"A K.C. Exposures publication from April 22, 2004, inviting the community to Tisha Taylor's ""Stairway of Life Cele-bration"". ",Tisha Taylor; KC Exposures; Invitation,"Kansas City, MO",,,"gary_carrington_collection, {B/qKC}",TishaTaylorStairway001,Image;StillImage,image/jpeg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Gary Carrington, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/TishaTaylorStairway001_KC_Exposures_GaryCarringtonCollection_BqKC.jpeg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/tishataylorstairway001_kc_exposures_garycarringtoncollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/tishataylorstairway001_kc_exposures_garycarringtoncollection_bqkc_th.jpg,"The cover of a magazine, KC Exposures, provides invitation details for a show at Soakie's. ",
|
||||||
|
,garycoll024,KC Exposures map of gay bars in Kansas City,gary_carrington_collection,07-14-2002,"A map of gay bars in Kansas City, created by weekly gay circular K.C. Exposures, published on July 14, 2002. 13 total bars are on the map.",Map; Gay Bars; KC Exposures,"Kansas City, MO",,,"gary_carrington_collection, {B/qKC}",NightlifeCityMap001,Image;StillImage,image/jpeg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Gary Carrington, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/NightlifeCityMap_KC_Exposures_GaryCarringtonCollection_BqKC.jpeg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/nightlifecitymap_kc_exposures_garycarringtoncollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/nightlifecitymap_kc_exposures_garycarringtoncollection_bqkc_th.jpg,A map of gay bars in Kansas City.,
|
||||||
|
,garycoll025,"Gary Carrington and the competitors of the ""Mr. Soakie's 2003"" pageant",gary_carrington_collection,ca. 2003,"Gary Carrington crouches in front of ""Mr. Soakie's 2003"" pageant competitors.",Gary Carrington; Mr. Soakie’s; Pageant; Tremaine Scott; Silk Williams,"Soakie's (Kansas City, MO)",,,"gary_carrington_collection, {B/qKC}",MrSoakies2003001,Image;StillImage,image/jpeg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Gary Carrington, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/MrSoakies2003001_Soakies_GaryCarringtonCollection_BqKC.jpeg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/mrsoakies2003001_soakies_garycarringtoncollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/mrsoakies2003001_soakies_garycarringtoncollection_bqkc_th.jpg,A group of Soakie's performers pose for the camera together. A few adorn crowns. ,
|
||||||
|
,garycoll026,"KC Exposures photo of the ""Mr. Soakie's 2003"" pageant winner, Silk Williams",gary_carrington_collection,05-20-2003,"A March 20, 2003 excerpt of K.C. Exposures documenting the ""Mr. Soakie's 2003"" pageant. Winner, Silk Williams (bottom right), stands solo.",Silk Williams; Mr. Soakie’s; KC Exposures,"Soakie's (Kansas City, MO)",,,"gary_carrington_collection, {B/qKC}",MrSoakies2003002,Image;StillImage,image/jpeg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Gary Carrington, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/MrSoakies2003002_KC_Exposures_GaryCarringtonCollection_BqKC.jpeg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/mrsoakies2003002_kc_exposures_garycarringtoncollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/mrsoakies2003002_kc_exposures_garycarringtoncollection_bqkc_th.jpg,"A magazine page with B&W images from the ""Mr. Soakie's 2003"" pageant.",
|
||||||
|
,garycoll027,"KC Exposures photo of the ""Mr. Soakie's 2003"" pageant winner, Silk Williams, and first runner up, Tremaine Scott",gary_carrington_collection,05-20-2003,"The crowned winner of Mr. Soakies 2003, Silk Williams (left), pictured alongside ""Tremaine Scott, First Runner Up"" in K.C. Exposures.",Silk Williams; Mr. Soakie’s; KC Exposures,"Soakie's (Kansas City, MO)",,,"gary_carrington_collection, {B/qKC}",MrSoakies2003003,Image;StillImage,image/jpeg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Gary Carrington, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/MrSoakies2003003_KC_Exposures_GaryCarringtonCollection_BqKC.jpeg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/mrsoakies2003003_kc_exposures_garycarringtoncollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/mrsoakies2003003_kc_exposures_garycarringtoncollection_bqkc_th.jpg,"Four black and white photo panels printed in a newspaper. The top three panels are all entrants in Mr. and Miss Soakie's; the bottom panel shows winner of the 2003 competition, Silk Williams, alongside friends and runner-up, Tremaine Scott.",
|
||||||
|
,garycoll028,"KC Exposures photos from the ""Mr. & Miss Black Gay Pride"" pageant",gary_carrington_collection,07-18-2002,"Photos from ""Mr. & Miss Black Gay Pride"", a pageant coinciding with Kansas City’s annual Black Pride in August, published by K.C. Exposures on July 18, 2002.",Black Gay Pride; KC Exposures,"Soakie's (Kansas City, MO)",,,"gary_carrington_collection, {B/qKC}",MissBlackGayPride001,Image;StillImage,image/jpeg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Gary Carrington, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/MissBlackGayPride001_KC_Exposures_GaryCarringtonCollection_BqKC.jpeg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/missblackgaypride001_kc_exposures_garycarringtoncollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/missblackgaypride001_kc_exposures_garycarringtoncollection_bqkc_th.jpg,"A magazine page with B&W images of performers at the ""Miss Black Gay Pride"" pageant of Soakie's.",
|
||||||
|
,garycoll029,"""The Father,"" interview with Gary Carrington",gary_carrington_collection,04-18-2025,"Video history interview with Gary Carrington as he talks about his life and upbringing in Kansas City, and the rise and fall of Soakie's",Gary Carrington; video; interview,"Charlotte Street (Kansas City, MO)",39.06681552,-94.60381974,"gary_carrington_collection, {B/qKC}",VideoHistory003,Image;MovingImage,video/mp4,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Gary Carrington, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,video,https://youtu.be/eN1WFfZSBzc,https://img.youtube.com/vi/eN1WFfZSBzc/hqdefault.jpg,https://img.youtube.com/vi/eN1WFfZSBzc/mqdefault.jpg,,/objects/videohistory003_transcript.txt
|
||||||
|
,starlacoll001,Starla Carr at home,starla_carr_collection,ca.1993-2004,Starla Carr poses for a photo inside of her home. She wears a blue V-neck sweater and black pants.,"Starla Carr
|
||||||
|
","Kansas City, MO",,,"starla_carr_collection, {B/qKC}",StarlaCarr001,Image;StillImage,image/jpeg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Starla Carr, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/StarlaCarr001_Home_StarlaCarrCollection_BqKC.jpeg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/starlacarr001_home_starlacarrcollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/starlacarr001_home_starlacarrcollection_bqkc_th.jpg,Starla Carr sits in a chair at her home.,
|
||||||
|
,starlacoll002,Starla Carr with her car,starla_carr_collection,ca.1993-2004,Starla Carr poses for a photo in front of her white sedan.,"Starla Carr
|
||||||
|
","Kansas City, MO",,,"starla_carr_collection, {B/qKC}",StarlaCarr002,Image;StillImage,image/jpeg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Starla Carr, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/StarlaCarr002_Car_StarlaCarrCollection_BqKC.jpg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/starlacarr002_car_starlacarrcollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/starlacarr002_car_starlacarrcollection_bqkc_th.jpg,Starla Carr stands in front of a white sedan.,
|
||||||
|
,starlacoll003,Starla Carr as MT,starla_carr_collection,ca.1993-2004,"Starla Carr in her drag persona, ""MT"".",Starla Carr; Drag,"Kansas City, MO",39.09985985,-94.58322563,"starla_carr_collection, {B/qKC}",StarlaCarr003,Image;StillImage,image/jpeg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Starla Carr, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/StarlaCarr003_Soakies_StarlaCarrCollection_BqKC.jpg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/starlacarr003_soakies_starlacarrcollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/starlacarr003_soakies_starlacarrcollection_bqkc_th.jpg,"Starla Carr dressed in her masculine drag persona, ""MT""",
|
||||||
|
,starlacoll004,MT; Soakie's Jukebox,starla_carr_collection,ca.1993-2004,Starla Carr poses in front of the jukebox at Soakie’s in a matching denim jacket and pants.,Starla Carr; Soakie’s,"Soakie's (Kansas City, MO)",39.09985985,-94.58322563,"starla_carr_collection, {B/qKC}",StarlaCarr004,Image;StillImage,image/jpeg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Starla Carr, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/StarlaCarr004_Soakies_StarlaCarrCollection_BqKC.jpg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/starlacarr004_soakies_starlacarrcollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/starlacarr004_soakies_starlacarrcollection_bqkc_th.jpg,Starla Carr stands in front of Soakie's jukebox while dressed in her masculine drag persona.,
|
||||||
|
,starlacoll005,Starla Carr and friends at Soakie's,starla_carr_collection,ca.1993-2004,Starla Carr (right) stands with friends at Soakie's.,Starla Carr; Soakie’s,"Soakie's (Kansas City, MO)",39.09985985,-94.58322563,"starla_carr_collection, {B/qKC}",StarlaCarr005,Image;StillImage,image/jpeg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Starla Carr, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/StarlaCarr005_Soakies_StarlaCarrCollection_BqKC.jpeg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/starlacarr005_soakies_starlacarrcollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/starlacarr005_soakies_starlacarrcollection_bqkc_th.jpg,Three patrons of Soakie's smile to the camera.,
|
||||||
|
,starlacoll006,"Starla Carr as ""RIRI;"" Wetherbee's",starla_carr_collection,ca.1993-2004,"Starla Carr performing in her alter ego, ""RIRI"", at Wetherbee's.",Starla Carr; Wetherbee’s; Performance,"Wetherbee's (Kansas City, MO)",39.1860159,-94.549337,"starla_carr_collection, {B/qKC}",StarlaCarr006,Image;StillImage,image/jpeg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Starla Carr, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/StarlaCarr006_Wetherbees_StarlaCarrCollection_BqKC.jpeg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/starlacarr006_wetherbees_starlacarrcollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/starlacarr006_wetherbees_starlacarrcollection_bqkc_th.jpg,"Starla Carr performs in her alter ego, ""RIRI"", at Wetherbee's.",
|
||||||
|
,starlacoll007,"Sparkle Iman competes for ""Mr. & Miss Black Gay Pride 2003"" at Soakie's",starla_carr_collection,ca. 2003,"The local entertainer, Sparkle Iman, competes for ""Mr. and Miss Black Gay Pride 2003"" at Soakie's. She dons an American flag-themed gown and crystal jewelry.",Sparkle Iman; Black Gay Pride; Soakie’s,"Soakie's (Kansas City, MO)",39.09985985,-94.58322563,"starla_carr_collection, {B/qKC}",SparkleIman001,Image;StillImage,image/jpeg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Starla Carr, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/SparkleIman001_MissBlackGayPride2003_Soakies_StarlaCarrCollection_BqKC.jpg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/sparkleiman001_missblackgaypride2003_soakies_starlacarrcollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/sparkleiman001_missblackgaypride2003_soakies_starlacarrcollection_bqkc_th.jpg,A feminine performer at Soakie's looks to the crowd in an American flag-themed dress. ,
|
||||||
|
,starlacoll008,"Sparkle Iman poses for the audience of ""Mr. & Miss Black Gay Pride 2003"" at Soakie's",starla_carr_collection,ca. 2003,"Sparkle Iman strikes a pose for the audience at Soakie's ""Mr. and Miss Black Gay Pride 2003"".",Sparkle Iman; Black Gay Pride; Soakie’s,"Soakie's (Kansas City, MO)",39.09985985,-94.58322563,"starla_carr_collection, {B/qKC}",SparkleIman002,Image;StillImage,image/jpeg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Starla Carr, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/SparkleIman002_MissBlackGayPride2003_Soakies_StarlaCarrCollection_BqKC.jpg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/sparkleiman002_missblackgaypride2003_soakies_starlacarrcollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/sparkleiman002_missblackgaypride2003_soakies_starlacarrcollection_bqkc_th.jpg,A feminine performer at Soakie's poses in an American flag-themed dress. ,
|
||||||
|
,starlacoll009,"Sparkle Iman next to the judge's table for ""Mr. & Miss Black Gay Pride 2003"" at Soakie's",starla_carr_collection,ca. 2003,"Sparkle Iman stands next to the judge's table for the ""Mr. and Miss Black Gay Pride 2003"" at Soakie's.",Sparkle Iman; Black Gay Pride; Soakie’s,"Soakie's (Kansas City, MO)",39.09985985,-94.58322563,"starla_carr_collection, {B/qKC}",SparkleIman003,Image;StillImage,image/jpeg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Starla Carr, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/SparkleIman003_MissBlackGayPride2003_Soakies_StarlaCarrCollection_BqKC.jpg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/sparkleiman003_missblackgaypride2003_soakies_starlacarrcollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/sparkleiman003_missblackgaypride2003_soakies_starlacarrcollection_bqkc_th.jpg,A feminine performer at Soakie's looks to the judge's table.,
|
||||||
|
,starlacoll010,Sparkle Iman performs at Soakie's,starla_carr_collection,ca.1993-2004,"Sparkle Iman performs at Soakie's wearing a flowy, white maxi dress.",Sparkle Iman; Soakie’s; Performance,"Soakie's (Kansas City, MO)",39.09985985,-94.58322563,"starla_carr_collection, {B/qKC}",SparkleIman004,Image;StillImage,image/jpeg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Starla Carr, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/SparkleIman004_Soakies_StarlaCarrCollection_BqKC.jpeg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/sparkleiman004_soakies_starlacarrcollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/sparkleiman004_soakies_starlacarrcollection_bqkc_th.jpg,A feminine performer at Soakie's entertains the crowd.,
|
||||||
|
,starlacoll011,Sparkle Iman smiles for the audience at Soakie's,starla_carr_collection,ca.1993-2004,Sparkle Iman smiles for the crowd at Soakie's.,Sparkle Iman; Soakie’s,"Soakie's (Kansas City, MO)",39.09985985,-94.58322563,"starla_carr_collection, {B/qKC}",SparkleIman005,Image;StillImage,image/jpeg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Starla Carr, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/SparkleIman005_Soakies_StarlaCarrCollection_BqKC.jpeg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/sparkleiman005_soakies_starlacarrcollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/sparkleiman005_soakies_starlacarrcollection_bqkc_th.jpg,A feminine performer at Soakie's smiles to the audience,
|
||||||
|
,starlacoll012,Tracy Carrington poses,starla_carr_collection,ca.1993-2004,"Tracy Carrington poses in a black, asymmetrical dress.",Tracy Carrington,"Kansas City, MO",39.09985985,-94.58322563,"starla_carr_collection, {B/qKC}",Tracy001,Image;StillImage,image/jpg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Starla Carr, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/Tracy001_Soakies_StarlaCarrCollection_BqKC.jpg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/tracy001_soakies_starlacarrcollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/tracy001_soakies_starlacarrcollection_bqkc_th.jpg,A patron of Soakie's smiles to the camera.,
|
||||||
|
,starlacoll013,"Tracy Carrington wins the ""Lady"" category at ""Glamour's Lifestyles of Lord and Ladies 2003"" pageant at Soakie's",starla_carr_collection,ca.2003,"Tracy Carrington wins the ""Lady"" category at “Glamour’s Lifestyles of Lord and Ladies 2003” Pageant hosted at Soakie's.",Tracy Carrington; Glamour’s Lifestyles of Lords and Ladies; Soakie’s,"Soakie's (Kansas City, MO)",39.09985985,-94.58322563,"starla_carr_collection, {B/qKC}",Tracy002,Image;StillImage,image/jpeg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Starla Carr, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/Tracy002_LordsLadiesPageant_Soakies_StarlaCarrCollection_BqKC.jpg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/tracy002_lordsladiespageant_soakies_starlacarrcollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/tracy002_lordsladiespageant_soakies_starlacarrcollection_bqkc_th.jpg,A performer at Soakie's receives a pageant award.,
|
||||||
|
,starlacoll014,"Tracy Carrington smiles for a photo at ""Glamour's Lifestyles of Lord and Ladies 2003"" pageant in an outfit sewn by Starla Carr",starla_carr_collection,ca.2003,Tracy Carrington smiles for a photo at “Glamour’s Lifestyles of Lord and Ladies 2003” Pageant. Her purple outfit was sewn by Starla Carr.,Tracy Carrington; Glamour’s Lifestyles of Lords and Ladies; Soakie’s,"Soakie's (Kansas City, MO)",39.09985985,-94.58322563,"starla_carr_collection, {B/qKC}",Tracy003,Image;StillImage,image/jpeg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Starla Carr, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/Tracy003_Soakies_StarlaCarrCollection_BqKC.jpg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/tracy003_soakies_starlacarrcollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/tracy003_soakies_starlacarrcollection_bqkc_th.jpg,A performer at Soakie's looks over their right shoulder to the camera.,
|
||||||
|
,starlacoll015,"Nykizha Iman wins ""Miss Black Gay Pride 2003"" at Soakie's",starla_carr_collection,ca.2003,"Winner of ""Miss Black Gay Pride 2003"", Nykizha Iman, at Soakie's.",Nykizha Iman; Black Gay Pride; Soakie’s,"Soakie's (Kansas City, MO)",39.09985985,-94.58322563,"starla_carr_collection, {B/qKC}",NykizhaIman001,Image;StillImage,image/jpeg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Starla Carr, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/NykizhaIman001_MissBlackGayPride2003_Soakies_StarlaCarrCollection_BqKC.jpeg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/nykizhaiman001_missblackgaypride2003_soakies_starlacarrcollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/nykizhaiman001_missblackgaypride2003_soakies_starlacarrcollection_bqkc_th.jpg,"A feminine performer wears a sash that says ""Miss Black Pride EOY 2003.""",
|
||||||
|
,starlacoll016,"Mohammed Iman and Nykizha Iman win ""Mr. & Miss Black Gay Pride 2003"" at Soakie's",starla_carr_collection,ca.2003,"Mohammed Iman and Nykizha Iman, winners of ""Mr. and Miss Black Gay Pride 2003"", stand beside each other. Both wear crowns and a blue ensemble of clothing.",Mohammed Iman; Nykizha Iman; Black Gay Pride,"Soakie's (Kansas City, MO)",39.09985985,-94.58322563,"starla_carr_collection, {B/qKC}",NykizhaIman002,Image;StillImage,image/jpeg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Starla Carr, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/NykizhaIman002_MissBlackGayPride2003_Soakies_StarlaCarrCollection_BqKC.jpeg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/nykizhaiman002_missblackgaypride2003_soakies_starlacarrcollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/nykizhaiman002_missblackgaypride2003_soakies_starlacarrcollection_bqkc_th.jpg,"The two winners of ""Mr. and Miss Black Gay Pride 2003"" look to each other.",
|
||||||
|
,starlacoll017,Nykizha Iman performs at Soakie's,starla_carr_collection,ca.2003,Nykizha Iman performs in a peach gown next to the judge's table at Soakie's.,Nykizha Iman; Soakie’s; Performance,"Soakie's (Kansas City, MO)",39.09985985,-94.58322563,"starla_carr_collection, {B/qKC}",NykizhaIman003,Image;StillImage,image/jpeg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Starla Carr, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/NykizhaIman003_Soakies_StarlaCarrCollection_BqKC.jpeg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/nykizhaiman003_soakies_starlacarrcollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/nykizhaiman003_soakies_starlacarrcollection_bqkc_th.jpg,An entertainer at Soakie's points toward the crowd during their performance.,
|
||||||
|
,starlacoll018,"Lady Keisha emcees the ""Glamour's lifestyles of Lord and Ladies 2003"" pageant at Soakie's",starla_carr_collection,ca.2003,"Lady Keisha, emcee of “Glamour’s Lifestyles of Lord and Ladies 2003"" Pageant, speaks into the mic at Soakie's.",Lady Keisha; Glamour’s Lifestyles of Lords and Ladies; Soakie’s; Pageant,"Soakie's (Kansas City, MO)",39.09985985,-94.58322563,"starla_carr_collection, {B/qKC}",LadyKeisha001,Image;StillImage,image/jpeg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Starla Carr, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/LadyKiesha001_LordsLadiesPageant2003_Soakies_StarlaCarrCollection_BqKC.jpeg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/ladykiesha001_lordsladiespageant2003_soakies_starlacarrcollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/ladykiesha001_lordsladiespageant2003_soakies_starlacarrcollection_bqkc_th.jpg,An feminine emcee stands in the middle of a crowd at Soakie's.,
|
||||||
|
,starlacoll019,"Bad Ass Yellow Boy wins the ""Lord"" category at ""Glamour's Lifestyles of Lord and Ladies 2003"" pageant at Soakie's",starla_carr_collection,ca.2003,"Bad Ass Yellow Boy wins the ""Lord"" category at “Glamour’s Lifestyles of Lord and Ladies 2003” Pageant in Soakie's.",Bad Ass Yellow Boy; Glamour’s Lifestyles of Lords and Ladies; Soakie’s; Pageant,"Soakie's (Kansas City, MO)",39.09985985,-94.58322563,"starla_carr_collection, {B/qKC}",Kev001,Image;StillImage,image/jpeg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Starla Carr, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/Kev001_LordsLadiesPageant2003_Soakies_StarlaCarrCollection_BqKC.jpeg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/kev001_lordsladiespageant2003_soakies_starlacarrcollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/kev001_lordsladiespageant2003_soakies_starlacarrcollection_bqkc_th.jpg,A masculine performer with a crown and bedazzled glasses looks into the lens at Soakie's.,
|
||||||
|
,starlacoll020,Bad Ass Yellow Boy poses with a burgundy chalice,starla_carr_collection,ca.2003,"Starla Carr’s friend, Bad Ass Yellow Boy, poses in chalk-stripe pants, a white dress shirt with a matching bowler hat, a pastel tie, and studded sunglasses while holding a burgundy chalice engraved ""HERS"".",Bad Ass Yellow Boy,"Kansas City, MO",39.09985985,-94.58322563,"starla_carr_collection, {B/qKC}",Kev002,Image;StillImage,image/jpeg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Starla Carr, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/Kev002_LordsLadiesPageant2003_Soakies_StarlaCarrCollection_BqKC.jpeg.jpeg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/kev002_lordsladiespageant2003_soakies_starlacarrcollection_bqkc.jpeg_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/kev002_lordsladiespageant2003_soakies_starlacarrcollection_bqkc.jpeg_th.jpg,"A masculine performer at Soakie's smiles while holding a chalice with gems spelling ""HERS"". ",
|
||||||
|
,starlacoll021,Gary Carrington performs – 2,starla_carr_collection,ca.1993-2004,Gary Carrington performs for the guests of Soakie's.,Gary Carrington; Soakie’s; Performance,"Soakie's (Kansas City, MO)",39.09985985,-94.58322563,"starla_carr_collection, {B/qKC}",GaryCarrington001,Image;StillImage,image/jpeg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Starla Carr, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/GaryCarrington001_Soakies_StarlaCarrCollection_BqKC.jpg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/garycarrington001_soakies_starlacarrcollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/garycarrington001_soakies_starlacarrcollection_bqkc_th.jpg,Gary Carrington speaks into a mic at Soakie's. ,
|
||||||
|
,starlacoll022,"Lord Biskitt Carrington performs in the ""Lord"" category at ""Glamour's Lifestyles of Lord and Ladies 2003"" pageant",starla_carr_collection,ca.2003,"Lord Biskitt Carrington performs in the ""Lord"" category at ""Glamour’s Lifestyles of Lord and Ladies 2003"" Pageant.",Lord Biskitt Carrington; Glamour’s Lifestyles of Lords and Ladies; Soakie’s; Pageant,"Soakie's (Kansas City, MO)",39.09985985,-94.58322563,"starla_carr_collection, {B/qKC}",LordBiskittCarrington001,Image;StillImage,image/jpeg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Starla Carr, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/LordBiskittCarrington001_LordsLadiesPageant2003_Soakies_StarlaCarrCollection_BqKC.jpg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/lordbiskittcarrington001_lordsladiespageant2003_soakies_starlacarrcollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/lordbiskittcarrington001_lordsladiespageant2003_soakies_starlacarrcollection_bqkc_th.jpg,A masculine performer on stage at Soakie's.,
|
||||||
|
,starlacoll023,John Koop and unknown volunteer at Kansas City's Pride Parade,starla_carr_collection,ca.1993-2004,A volunteer and John Koop at an unknown year of Kansas City's Pride Parade.,John Koop; Kansas City’s Pride Parade; Flo,"Kansas City, MO",39.09985985,-94.58322563,"starla_carr_collection, {B/qKC}",JohnKoop,Image;StillImage,image/jpeg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Starla Carr, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/JohnKoop_Flo_KC_PRIDE_StarlaCarrCollection_BqKC.jpeg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/johnkoop_flo_kc_pride_starlacarrcollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/johnkoop_flo_kc_pride_starlacarrcollection_bqkc_th.jpg,"A white masculine volunteer and white drag queen, Flo, at Kansas City's PRIDE from an unknown year. Both look into the audience fixated on someone.",
|
||||||
|
,starlacoll024,Starla's friend Kim poses,starla_carr_collection,ca.2003,"Kim, a performer at ""Glamour’s Lifestyles of Lord and Ladies 2003"" Pageant, grins in a white blouse and denim jeans.",Kim; Glamour’s Lifestyles of Lords and Ladies; Soakie’s; Pageant,"Soakie's (Kansas City, MO)",39.09985985,-94.58322563,"starla_carr_collection, {B/qKC}",Kim001,Image;StillImage,image/jpeg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Starla Carr, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/Kim001_Soakies_StarlaCarrCollection_BqKC.jpg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/kim001_soakies_starlacarrcollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/kim001_soakies_starlacarrcollection_bqkc_th.jpg,A woman smiles brightly for the camera at Soakie's.,
|
||||||
|
,starlacoll025,"Kim competes at Glamour Lifestyle's ""Lord and Ladies Pageant""",starla_carr_collection,ca. 2003,"Competitor for the ""Lady"" category, Kim, performs in hot pink feathers at ""Glamour’s Lifestyles of Lord and Ladies 2003"" Pageant.",Kim; Glamour’s Lifestyles of Lords and Ladies; Soakie’s; Pageant,"Soakie's (Kansas City, MO)",39.09985985,-94.58322563,"starla_carr_collection, {B/qKC}",Kim002,Image;StillImage,image/jpeg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Starla Carr, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/Kim002_LordsLadiesPageant2003_Soakies_StarlaCarrCollection_BqKC.jpg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/kim002_lordsladiespageant2003_soakies_starlacarrcollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/kim002_lordsladiespageant2003_soakies_starlacarrcollection_bqkc_th.jpg,A feminine performer of Soakie's.,
|
||||||
|
,starlacoll026,Mocha Collins performs at Soakie's,starla_carr_collection,ca.1993-2004,"Mocha Collins, a local entertainer, performs at Soakie's in a stark, black bodysuit. ",Mocha Collins; Soakie’s; Performance,"Soakie's (Kansas City, MO)",39.09985985,-94.58322563,"starla_carr_collection, {B/qKC}",MochaCollins001,Image;StillImage,image/jpeg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Starla Carr, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/MochaCollins001_Soakies_StarlaCarrCollection_BqKC.jpeg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/mochacollins001_soakies_starlacarrcollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/mochacollins001_soakies_starlacarrcollection_bqkc_th.jpg,Feminine entertainer poses in parking garage at Soakie's.,
|
||||||
|
,starlacoll027,Mocha Collins entertains the patrons of Soakie's,starla_carr_collection,ca.1993-2004,Mocha Collins entertains the patrons of Soakie's,Mocha Collins; Soakie’s,"Soakie's (Kansas City, MO)",39.09985985,-94.58322563,"starla_carr_collection, {B/qKC}",MochaCollins002,Image;StillImage,image/jpeg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Starla Carr, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/MochaCollins002_Soakies_StarlaCarrCollection_BqKC.jpg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/mochacollins002_soakies_starlacarrcollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/mochacollins002_soakies_starlacarrcollection_bqkc_th.jpg,Feminine entertainer performs in Soakie's parking garage. ,
|
||||||
|
,starlacoll028,Mocha Collins poses for the judges at Soakie's,starla_carr_collection,ca.2003,Mocha Collins poses in a patterned gown for the judges at Soakie's.,Mocha Collins; Soakie’s,"Soakie's (Kansas City, MO)",39.09985985,-94.58322563,"starla_carr_collection, {B/qKC}",MochaCollins003,Image;StillImage,image/jpeg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Starla Carr, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/MochaCollins003_Soakies_StarlaCarrCollection_BqKC.jpeg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/mochacollins003_soakies_starlacarrcollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/mochacollins003_soakies_starlacarrcollection_bqkc_th.jpg,Feminine performer poses for the judges' table at Soakie's.,
|
||||||
|
,starlacoll029,Bad Ass Yellow Boy and Lady Keisha embrace at a Valentine's Day weekend event in St. Louis,starla_carr_collection,ca.1993-2004,"Bad Ass Yellow Boy (left) and Lady Keisha embrace during a Valentine’s Day weekend event in St. Louis, Missouri.","Bad Ass Yellow Boy; Lady Keisha; St. Louis, MO","St. Louis, MO",,,"starla_carr_collection, {B/qKC}",LadyKeisha,Image;StillImage,image/jpeg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Starla Carr, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/LadyKiesha_Kev001_StLouis_StarlaCarrCollection_BqKC.jpg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/ladykiesha_kev001_stlouis_starlacarrcollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/ladykiesha_kev001_stlouis_starlacarrcollection_bqkc_th.jpg,Two performers of Soakie's pose for a photo together at a St. Louis event.,
|
||||||
|
,starlacoll030,DJ SoulMutt and DJ Hike pose behind the DJ booth at Soakie's,starla_carr_collection,ca.1993-2004,DJ SoulMutt (left) and DJ Hike pose behind the DJ booth at Soakie's.,Dr SoulMutt; Dj Hike; Soakie’s,"Soakie's (Kansas City, MO)",,,"starla_carr_collection, {B/qKC}",DJHike001,Image;StillImage,image/jpeg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Starla Carr, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/DJHike001_Soakies_StarlaCarrCollection_BqKC.jpg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/djhike001_soakies_starlacarrcollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/djhike001_soakies_starlacarrcollection_bqkc_th.jpg,Two DJs at Soakie's entertain the audience.,
|
||||||
|
,starlacoll031,"Tremaine Scott smiles for a photo at ""Mr. and Miss Black Gay Pride 2003""",starla_carr_collection,ca.2003,"Tremaine Scott, a competitor at ""Mr. and Miss Black Gay Pride 2003"", smiles for a photo.",Tremaine Scott; Black Gay Pride,"Soakie's (Kansas City, MO)",,,"starla_carr_collection, {B/qKC}",TremaineScott001,Image;StillImage,image/jpeg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Starla Carr, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/TremaineScott001_Soakies_MrBlackPride_StarlaCarrCollection_BqKC.jpeg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/tremainescott001_soakies_mrblackpride_starlacarrcollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/tremainescott001_soakies_mrblackpride_starlacarrcollection_bqkc_th.jpg,"A contestant at Soakie's ""Mr. and Miss Black Gay Pride 2003"" grins while holding a plaque. ",
|
||||||
|
,starlacoll032,Envy Iman and Starla Carr at a local bar,starla_carr_collection,ca.1993-2004,Envy Iman (left) smiles in a purple lace top and maroon scarf while Starla Carr sits next to her with a cigarette at a local bar.,Envy Iman; Starla Carr,"Kansas City, MO",,,"starla_carr_collection, {B/qKC}",EnvyIman001,Image;StillImage,image/jpeg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Starla Carr, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/EnvyIman001_LocalBar_StarlaCarrCollection_BqKC.jpeg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/envyiman001_localbar_starlacarrcollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/envyiman001_localbar_starlacarrcollection_bqkc_th.jpg,Starla Carr (right) and two acquaintances sit at a bar in Kansas City. ,
|
||||||
|
,starlacoll033,Lady Keisha surrounded by guests at Soakie's,starla_carr_collection,ca.1993-2004,"Lady Keisha gazes at the camera in a red shirt with the number ""3"", surrounded by guests at Soakie's.",Lady Keisha; Soakie’s,"Soakie's (Kansas City, MO)",,,"starla_carr_collection, {B/qKC}",LadyKinshasa001,Image;StillImage,image/jpeg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Starla Carr, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/LadyKinshasa001_Soakies_StarlaCarrCollection_BqKC.jpeg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/ladykinshasa001_soakies_starlacarrcollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/ladykinshasa001_soakies_starlacarrcollection_bqkc_th.jpg,A crowd at Soakie's sit and stand around a couch.,
|
||||||
|
,starlacoll034,"""Frequency,"" interview with Starla Carr",starla_carr_collection,04-20-2025,Video history interview with Starla Carr as she talks about her coming out story and the importance of Soakie's.,Starla Carr; video; interview,"Charlotte Street (Kansas City, MO)",39.06681552,-94.60381974,"starla_carr_collection, {B/qKC}",VideoHistory004,Image;MovingImage,video/mp4,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Starla Carr, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,video,https://youtu.be/kT9v6hrfVm4,https://img.youtube.com/vi/kT9v6hrfVm4/hqdefault.jpg,https://img.youtube.com/vi/kT9v6hrfVm4/mqdefault.jpg,,/objects/videohistory004_transcript.txt
|
||||||
|
,tishacoll001,Big Beauty poses in KC Exposures,tisha_taylor_collection,ca.1993-2004,Big Beauty poses in front of publications of KC Exposures.,Big Beauty; KC Exposures,"Kansas City, MO",,,"tisha_taylor_collection, {B/qKC}",BigBeauty001,Image;StillImage,image/jpeg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Tisha Taylor, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/BigBeauty001_Soakies_TishaTaylorCollection_BqKC.jpeg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/bigbeauty001_soakies_tishataylorcollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/bigbeauty001_soakies_tishataylorcollection_bqkc_th.jpg,Big Beauty poses in front of KC Exposures publications. The photo is in black and white. ,
|
||||||
|
,tishacoll002,"Booklet advertising ""Black Gay Pride 99'""",tisha_taylor_collection,ca.09-1999,"A booklet advertising ""Black Gay Pride 99'"", occurring September third through the fifth. The bottom of the paper reads ""PROUD! UNITED! BLACK! STRONG"".",Black Gay Pride; Booklet Adversitement,"Kansas City, MO",,,"tisha_taylor_collection, {B/qKC}",Booklet001,Image;StillImage,image/jpeg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Tisha Taylor, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/Booklet001_BlackPride_TishaTaylorCollection_BqKC.jpeg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/booklet001_blackpride_tishataylorcollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/booklet001_blackpride_tishataylorcollection_bqkc_th.jpg,"Booklet advertising ""Black Gay Pride '99"". The advertisment contains illustrations of a gay couple and a lesbian couple. ",
|
||||||
|
,tishacoll003,Dovia Love sits in front of a brick wall at Soakie's,tisha_taylor_collection,ca.1993-2004,Dovia Love sits cross-legged in front of a brick wall at Soakie's. Gary Carrington photographed the image.,Dovee Love; Soakie’s,"Soakie's (Kansas City, MO)",,,"tisha_taylor_collection, {B/qKC}",DoviaLove001,Image;StillImage,image/jpeg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Tisha Taylor, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/DoviaLove001_Soakies_TishaTaylorCollection_BqKC.jpeg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/dovialove001_soakies_tishataylorcollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/dovialove001_soakies_tishataylorcollection_bqkc_th.jpg,Dovia Love sits cross-legged in front of a brick wall at Soakie's. ,
|
||||||
|
,tishacoll004,Gary Carrington poses at Soakie's,tisha_taylor_collection,ca.1993-2004,"Gary Carrington poses in a pinstripe suit at Soakie's. The image dubs him ""Mr. Carrington"". ",Gary Carrington; Soakie’s,"Soakie's (Kansas City, MO)",,,"tisha_taylor_collection, {B/qKC}",GaryCarrington001,Image;StillImage,image/jpeg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Tisha Taylor, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/GaryCarrington001_Soakies_TishaTaylorCollection_BqKC.jpeg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/garycarrington001_soakies_tishataylorcollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/garycarrington001_soakies_tishataylorcollection_bqkc_th.jpg,"Gary Carrington poses in a pinstripe suit in front of a brick wall at Soakie's. There is text dubbing him ""Mr. Carrington"". ",
|
||||||
|
,tishacoll005,Jerry Colston and Tisha Taylor at Soakie's,tisha_taylor_collection,ca.1993-2004,Jerry Colston (left) poses next to Tisha Taylor at Soakie's.,Jerry Colston; Tisha Taylor; Soakie’s,"Soakie's (Kansas City, MO)",,,"tisha_taylor_collection, {B/qKC}",JerryColston001,Image;StillImage,image/jpeg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Tisha Taylor, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/JerryColston001_Soakies_TishaTaylorCollection_BqKC.jpg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/jerrycolston001_soakies_tishataylorcollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/jerrycolston001_soakies_tishataylorcollection_bqkc_th.jpg,"Two patrons pose at the bar in Soakie's----the photo is Black and white and printed on a piece of loose leaf, white paper.",
|
||||||
|
,tishacoll006,KC Exposures excerpt displaying drag performances across Kansas City,tisha_taylor_collection,ca.1993-2004,An excerpt from KC Exposures displaying various drag performances across Kansas City. Alex Chandra and Jerry Colston (bottom right) represent an image for Soakie's.,Alex Chandra; Jerry Colston; KC Exposures; Drag Performance,"Kansas City, MO",,,"tisha_taylor_collection, {B/qKC}",JerryColston002,Image;StillImage,image/jpeg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Tisha Taylor, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/JerryColston002_KC_Exposures_TishaTaylorCollection_BqKC.jpeg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/jerrycolston002_kc_exposures_tishataylorcollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/jerrycolston002_kc_exposures_tishataylorcollection_bqkc_th.jpg,"Two patrons, wearing hats, pose for a photo at Soakie's. The photo is in color and printed on newspaper.",
|
||||||
|
,tishacoll007,Prescious Seymore stuns at Soakie's,tisha_taylor_collection,ca.1993-2004,Precious Seymore stuns in a dress with a floral-decorated neckline at Soakie's.,Precious Seymour; Soakie’s ,"Soakie's (Kansas City, MO)",,,"tisha_taylor_collection, {B/qKC}",PreciousSeymore001,Image;StillImage,image/jpeg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Tisha Taylor, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/PreciousSeymore001_Soakies_TishaTaylorCollection_BqKC.jpeg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/preciousseymore001_soakies_tishataylorcollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/preciousseymore001_soakies_tishataylorcollection_bqkc_th.jpg,"Precious Seymore in a dress with a floral neckline is posing in front of a brick wall at Soakie's. There is text dubbing her ""Precious Seymore"". ",
|
||||||
|
,tishacoll008,Simply Iman smiles at Soakie's,tisha_taylor_collection,ca.1993-2004,Simply Iman smiles for a snapshot at Soakie's.,Simply Iman; Soakie’s,"Soakie's (Kansas City, MO)",,,"tisha_taylor_collection, {B/qKC}",SimplyIman001,Image;StillImage,image/jpeg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Tisha Taylor, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/SimplyIman001_Soakies_TishaTaylorCollection_BqKC.jpeg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/simplyiman001_soakies_tishataylorcollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/simplyiman001_soakies_tishataylorcollection_bqkc_th.jpg,"Simply Iman poses in front of a brick wall at Soakie's. There is text dubbing her ""Simply Iman"". ",
|
||||||
|
,tishacoll009,"KC Exposures invitation to Tisha Taylor's ""Birthday Bash""",tisha_taylor_collection,04-24-2003,"A KC Exposure's publication from April 24, 2003, extending an invite to Tisha Taylor's ""Birthday Bash"". The piece mentions appearances from Melinda Ryder, Victoria Wells, and L'Oreal and promises ""Food, Fun, Excitement"".",Tisha Taylor’s Birthday Bash; KC Exposures; Invitation,"Kansas City, MO",,,"tisha_taylor_collection, {B/qKC}",SoakiesAd001,Image;StillImage,image/jpeg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Tisha Taylor, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/SoakiesAd001_KC_Exposures_TishaTaylorCollection_BqKC.jpg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/soakiesad001_kc_exposures_tishataylorcollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/soakiesad001_kc_exposures_tishataylorcollection_bqkc_th.jpg,"KC Exposures publication advertising Tisha Taylor's ""Birthday Bash 2003"" at Soakie's. The bottom right corner contains a headshot of Tisha Taylor. ",
|
||||||
|
tishacoll028,tishacoll010,"Tisha Taylor smiles for ""Miss Gay Kansas City America 2005"" – original",tisha_taylor_collection,ca.2005,"Tisha Taylor smiles in a headshot for her accomplishment of ""Miss Gay Kansas City America 2005"". This is an original scan of the photo, prior to any edits restoring the photo to its former quality.",Tisha Taylor; Miss Gay Kansas City America 2005,"Kansas City, MO",,,"tisha_taylor_collection, {B/qKC}",TishaTaylor001,Image;StillImage,image/jpeg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Tisha Taylor, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/TishaTaylor001_MissGayKC2005_TishaTaylorCollection_BqKC.jpeg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/tishataylor001_missgaykc2005_tishataylorcollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/tishataylor001_missgaykc2005_tishataylorcollection_bqkc_th.jpg,Tisha Taylor smiles in a headshot. The image is in black and white. ,
|
||||||
|
tishacoll029,tishacoll011,Tisha Taylor pouts for a headshot - original,tisha_taylor_collection,ca.1993-2004,"Tisha Taylor pouts her lips for a headshot, surrounded by green tulle fabric. This is an original scan of the photo, prior to any edits restoring the photo to its former quality.","Tisha Taylor
|
||||||
|
","Kansas City, MO",,,"tisha_taylor_collection, {B/qKC}",TishaTaylor002,Image;StillImage,image/jpeg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Tisha Taylor, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/TishaTaylor002_Portrait_TishaTaylorCollection_BqKC.jpeg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/tishataylor002_portrait_tishataylorcollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/tishataylor002_portrait_tishataylorcollection_bqkc_th.jpg,Tisha Taylor pouts in a headshot. The image is in color with a blue background and green tulle fabric surrounding Tisha. ,
|
||||||
|
tishacoll030,tishacoll012,Tisha Taylor poses - original,tisha_taylor_collection,ca.1993-2004,"Tisha Taylor poses closely to the camera in a sparkly, plunging top.",Tisha Taylor,"Kansas City, MO",,,"tisha_taylor_collection, {B/qKC}",TishaTaylor003,Image;StillImage,image/jpeg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Tisha Taylor, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/TishaTaylor003_Headshot_TishaTaylorCollection_BqKC.jpeg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/tishataylor003_headshot_tishataylorcollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/tishataylor003_headshot_tishataylorcollection_bqkc_th.jpg,Tisha Taylor smiles in a close-up photo. She is wearing a sparkly top with a plunging neckline. ,
|
||||||
|
tishacoll031,tishacoll013,Tisha Taylor sits for a close-up shot - original,tisha_taylor_collection,ca.1993-2004,"Tisha Taylor sits for a close-up shot. This is an original scan of the photo, prior to any edits restoring the photo to its former quality.",Tisha Taylor,"Kansas City, MO",,,"tisha_taylor_collection, {B/qKC}",TishaTaylor004,Image;StillImage,image/jpeg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Tisha Taylor, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/TishaTaylor004_Headshot_TishaTaylorCollection_BqKC.jpeg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/tishataylor004_headshot_tishataylorcollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/tishataylor004_headshot_tishataylorcollection_bqkc_th.jpg,Tisha Taylor poses for a close-up photo. She is wearing a sparkly top. ,
|
||||||
|
,tishacoll014,Calendar for April featuring a headshot of Tisha Taylor,tisha_taylor_collection,04-30-2000,"A calendar for April with a headshot of Tisha Taylor. The blue text below her face reads ""TISHA B-DAY BASH 4-30-00"". ",Tisha Taylor; Birthday Bash; Calendar Image,"Kansas City, MO",,,"tisha_taylor_collection, {B/qKC}",TishaTaylor005,Image;StillImage,application/pdf,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Tisha Taylor, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,pdf,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/TishaTaylor005_Calendar_TishaTaylorCollection_BqKC.pdf,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/tishataylor005_calendar_tishataylorcollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/tishataylor005_calendar_tishataylorcollection_bqkc_th.jpg,A calendar for April 2000 with a headshot of Tisha Taylor. The image is in color with verticle stripes in the background. ,
|
||||||
|
,tishacoll015,Letter from Tisha Taylor to a publication editor,tisha_taylor_collection,05-06-2004,"A letter penned by Tish Taylor to a publication editor about the Black, queer experience. Tisha mentions how The Darts Over Missouri League barred Soakies from playing in their event, connecting it to the racist views people held about the bar. She ends her letter with a call to action to cease ties with bigoted companies, proclaiming, ""We are proud, Black, and strong"".",Tisha Taylor; Letter,"Kansas City, MO",,,"tisha_taylor_collection, {B/qKC}",TishaTaylor006,Image;StillImage,application/pdf,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Tisha Taylor, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,pdf,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/TishaTaylor006_LetterToTheEditor_TishaTaylorCollection_BqKC.pdf,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/tishataylor006_lettertotheeditor_tishataylorcollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/tishataylor006_lettertotheeditor_tishataylorcollection_bqkc_th.jpg,A letter from Tisha Taylor to a publication editor.,
|
||||||
|
,tishacoll016,Star magazine clipping of Tisha Taylor at Soakie's,tisha_taylor_collection,10-26-2003,"A clipping from Star magazine featuring a picture of Tisha Taylor in Soakie's at ""3:08 A.M. SUNDAY"". The text states, ""Tisha Taylor cleans up after the bar closes"".",Tisha Taylor; Soakie’s; Star Magazine,"Soakie's (Kansas City, MO)",,,"tisha_taylor_collection, {B/qKC}",TishaTaylor007,Image;StillImage,application/pdf,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Tisha Taylor, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,pdf,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/TishaTaylor007_StarMagazine_TishaTaylorCollection_BqKC.pdf,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/tishataylor007_starmagazine_tishataylorcollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/tishataylor007_starmagazine_tishataylorcollection_bqkc_th.jpg,"A clipping from Star Magazing featuring Tisha Taylor in Soakie's. The text on the left-hand side identifies ""Tisha Taylor, cleans up after the bar closes"". ",
|
||||||
|
tishacoll028,tishacoll017,"Tisha Taylor smiles for ""Miss Gay Kansas City America 2005""- edited",tisha_taylor_collection,ca.2005,"Tisha Taylor smiles in a headshot for her accomplishment of ""Miss Gay Kansas City America 2005"".",Tisha Taylor; Miss Gay Kansas City America 2005,"Kansas City, MO",,,"tisha_taylor_collection, {B/qKC}",TishaTaylorEdited001,Image;StillImage,image/jpeg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Tisha Taylor, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/TishaTaylorEdited001_MissGayKC2005_TishaTaylorCollection_BqKC.jpeg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/tishatayloredited001_missgaykc2005_tishataylorcollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/tishatayloredited001_missgaykc2005_tishataylorcollection_bqkc_th.jpg,Tisha Taylor smiles in a headshot. The image is in black and white. ,
|
||||||
|
tishacoll029,tishacoll018,Tisha Taylor pouts for a headshot – edited,tisha_taylor_collection,ca.1993-2004,"Tisha Taylor pouts her lips for a headshot, surrounded by green tulle fabric.",Tisha Taylor,"Kansas City, MO",,,"tisha_taylor_collection, {B/qKC}",TishaTaylorEdited002,Image;StillImage,image/jpeg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Tisha Taylor, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/TishaTaylorEdited002_Portrait_TishaTaylorCollection_BqKC.jpeg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/tishatayloredited002_portrait_tishataylorcollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/tishatayloredited002_portrait_tishataylorcollection_bqkc_th.jpg,Tisha Taylor pouts in a headshot. The image is in color with a blue background and green tulle fabric surrounding Tisha. ,
|
||||||
|
tishacoll030,tishacoll019,Tisha Taylor poses – edited,tisha_taylor_collection,ca.1993-2004,"Tisha Taylor poses closely to the camera in a sparkly, plunging top.",Tisha Taylor,"Kansas City, MO",,,"tisha_taylor_collection, {B/qKC}",TishaTaylorEdited003,Image;StillImage,image/jpeg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Tisha Taylor, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/TishaTaylorEdited003_Headshot_TishaTaylorCollection_BqKC.jpg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/tishatayloredited003_headshot_tishataylorcollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/tishatayloredited003_headshot_tishataylorcollection_bqkc_th.jpg,Tisha Taylor smiles in a close-up photo. She is wearing a sparkly top with a plunging neckline. ,
|
||||||
|
tishacoll031,tishacoll020,Tisha Taylor sits for a close-up shot – edited,tisha_taylor_collection,ca.1993-2004,Tisha Taylor sits for a close-up shot. ,Tisha Taylor,"Kansas City, MO",,,"tisha_taylor_collection, {B/qKC}",TishaTaylorEdited004,Image;StillImage,image/jpeg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Tisha Taylor, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/TishaTaylorEdited004_Headshot_TishaTaylorCollection_BqKC.jpeg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/tishatayloredited004_headshot_tishataylorcollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/tishatayloredited004_headshot_tishataylorcollection_bqkc_th.jpg,Tisha Taylor poses for a close-up photo. She is wearing a sparkly top. ,
|
||||||
|
tishacoll032,tishacoll021,Judge's scoring card for Black America Pageantry – 1,tisha_taylor_collection,10-26-2004,"A judge's scoring card for the interview section of Black America Pageantry. The sheet uses the categories ""Dressed/Appearance"", ""Interview Skills"", and ""Content of Response"".",Black America Pageantry; Judge Score Card; Categories,"Kansas City, MO",,,"tisha_taylor_collection, {B/qKC}",BlackAmericaPageantry001,Image;StillImage,application/pdf,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Tisha Taylor, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,pdf,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/BlackAmericaPageantry001_InterviewScoringCard_TishaTaylorCollection_BqKC.pdf,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/blackamericapageantry001_interviewscoringcard_tishataylorcollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/blackamericapageantry001_interviewscoringcard_tishataylorcollection_bqkc_th.jpg,"A judge's scoring card for the ""Interview"" category of Black American Pageantry. The text includes the sections ""Dressed/Appearance,"" ""Interview Skills,"" and ""Content of Response"". ",
|
||||||
|
tishacoll032,tishacoll022,Judge's scoring card for Black America Pageantry – 2,tisha_taylor_collection,10-26-2004,"A filled-out scoring card from the ""Sportswear"" section of Black America Pageantry. The first contestant scores a 6 in ""Suit"", a 6 in ""Technical Merit"", and a 5 in ""Presentation"", totaling 17 of 20 possible points. ",Black America Pageantry; Judge Score Card; Categories,"Kansas City, MO",,,"tisha_taylor_collection, {B/qKC}",BlackAmericaPageantry002,Image;StillImage,application/pdf,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Tisha Taylor, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,pdf,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/BlackAmericaPageantry002_SportswearScoringCard_Contestant%231_TishaTaylorCollection_BqKC.png,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/blackamericapageantry002_sportswearscoringcard_contestant%231_tishataylorcollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/blackamericapageantry002_sportswearscoringcard_contestant%231_tishataylorcollection_bqkc_th.jpg,"A judge's filled-out scoring card for the ""Sportswear"" category of Black American Pageantry. The text includes the sections ""Suit,"" ""Technical Merit,"" and ""Presentation"". ",
|
||||||
|
tishacoll033,tishacoll023,Document outline rules for judge's grading of Black America Pageantry – 1,tisha_taylor_collection,10-26-2004,"The first page of a document outlining the rules and expectations for the judge's grading. The text explains the categories of ""Presentation (All That Glitters)"", ""Sportswear (Non-Seasonal)"", and ""Formal Wear (All Fabric)"". ",Black America Pageantry; Judge Score Card; Document,"Kansas City, MO",,,"tisha_taylor_collection, {B/qKC}",BlackAmericaPageantry003,Image;StillImage,application/pdf,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Tisha Taylor, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,pdf,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/BlackAmericaPageantry003_JudgesCategoryInformation_TishaTaylorCollection_BqKC.pdf,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/blackamericapageantry003_judgescategoryinformation_tishataylorcollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/blackamericapageantry003_judgescategoryinformation_tishataylorcollection_bqkc_th.jpg,"First page of a document outlining the category information of Black American Pageantry. The text includes the categories of ""Presentation (All That Glitters),"" ""Sportswear (Non-Seasonal),"" and ""Formal Wear (All Fabric)"". ",
|
||||||
|
tishacoll033,tishacoll024,Document outline rules for judge's grading of Black America Pageantry – 2,tisha_taylor_collection,10-26-2004,"The second page of the judge's guidelines during pageants. The categories described include ""Evening Gown (All Fabric)"", ""Talent"", ""Question and Answer"", and ""Interview"". ",Black America Pageantry; Judge Score Card; Document,"Kansas City, MO",,,"tisha_taylor_collection, {B/qKC}",BlackAmericaPageantry004,Image;StillImage,application/pdf,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Tisha Taylor, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,pdf,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/BlackAmericaPageantry004_JudgesCategoryInformation_TishaTaylorCollection_BqKC.pdf,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/blackamericapageantry004_judgescategoryinformation_tishataylorcollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/blackamericapageantry004_judgescategoryinformation_tishataylorcollection_bqkc_th.jpg,"Second page of a document outlining the category information of Black American Pageantry. The text includes the categories of ""Evening Gown (All Fabric),"" ""Talent,"" ""Question and Answer,"" and ""Interview"". ",
|
||||||
|
,tishacoll025,"Sheet outlining judge etiquette for ""Mr. & Miss Black Mid-America""",tisha_taylor_collection,11-20-2003,"A sheet from ""Mr. & Miss Black Mid-America"" defining expected etiquette from the judges. The bottom reiterates that ""Taylortown Productions has the authority to question any judge who violates these rules and to relieve a judge of his/her judging seat, after careful scrutiny of the rule infraction.""
|
||||||
|
",Mr. and Miss Black Mid-America; Judge Etiquette;,"Soakie's (Kansas City, MO)",,,"tisha_taylor_collection, {B/qKC}",Mr&MissBlackMid-America001,Image;StillImage,application/pdf,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Tisha Taylor, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,pdf,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/Mr&MissBlackMid-America001_JudgesEtiquette_TishaTaylorCollection_BqKC.pdf,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/mr&missblackmid-america001_judgesetiquette_tishataylorcollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/mr&missblackmid-america001_judgesetiquette_tishataylorcollection_bqkc_th.jpg,"A document outlining ""Judges Etiquette"" for ""Mr. and Miss Black Mid-America"". ",
|
||||||
|
tishacoll034,tishacoll026,"FULL BOOKLET – ""Mr. & Miss Black Mid-America"" at Soakie's",tisha_taylor_collection,11-20-2003,"A program for ""Mr. & Miss Black Mid-America"", a pageant held at Soakie's on November 20, 2003. The document features details on the event schedule, emcees, judges, and Soakie's specials throughout the week.",Mr. and Miss Black Mid-America; Soakie’s; Pageant; Program,"Soakie's (Kansas City, MO)",,,"tisha_taylor_collection, {B/qKC}",Mr&MissBlackMid-America002,Image;StillImage,application/pdf,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Tisha Taylor, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,pdf,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/Mr&MissBlackMid-America002_FullBooklet_TishaTaylorCollection_BqKC.pdf,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/mr&missblackmid-america002_fullbooklet_tishataylorcollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/mr&missblackmid-america002_fullbooklet_tishataylorcollection_bqkc_th.jpg,"A program for ""Mr. & Miss Black Mid-America"", a pageant held at Soakie's on November 20, 2003. The document features details on the event schedule, emcees, judges, and Soakie's specials throughout the week.",
|
||||||
|
,tishacoll027,"""eye of the beholder"" interview with Tisha Taylor",tisha_taylor_collection,01-03-2024,"Video history interview with Craig Lovingood as they speak of their ascent into their persona, Tisha Taylor. ",Craig Lovingood; video; interview,"Charlotte Street (Kansas City, MO)",39.06681552,-94.60381974,"tisha_taylor_collection, {B/qKC}",VideoHistory002,Image;MovingImage,video/mp4,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Tisha Taylor, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,video,https://youtu.be/tHWom8fu8pU,https://img.youtube.com/vi/tHWom8fu8pU/hqdefault.jpg,https://img.youtube.com/vi/tHWom8fu8pU/mqdefault.jpg,Video history interview with Craig Lovingood as they speak of their ascent into their persona,
|
||||||
|
,tishacoll028,"Tisha Taylor smiles for ""Miss Gay Kansas City America 2005"" – original and edited",tisha_taylor_collection,ca.2005,"Tisha Taylor smiles in a headshot for her accomplishment of ""Miss Gay Kansas City America 2005"". This compound object features an original scan of the image given to us by Craig Lovingood, and edited version of the headshot meant to restore the image to its former glory.",Tisha Taylor; Miss Gay Kansas City America 2005,"Kansas City, MO",,,"tisha_taylor_collection, {B/qKC}",TishaTaylorParent001,Image;StillImage,image/jpeg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Tisha Taylor, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,compound_object,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/TishaTaylorEdited001_MissGayKC2005_TishaTaylorCollection_BqKC.jpeg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/tishatayloredited001_missgaykc2005_tishataylorcollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/tishatayloredited001_missgaykc2005_tishataylorcollection_bqkc_th.jpg,Tisha Taylor smiles in a headshot. The image is in black and white. ,
|
||||||
|
,tishacoll029,Tisha Taylor pouts for a headshot – original and edited photos,tisha_taylor_collection,ca.1993-2004,"Tisha Taylor pouts her lips for a headshot, surrounded by green tulle fabric. This compound object features an original scan of the image given to us by Craig Lovingood, and edited version of the headshot meant to restore the image to its former glory.","Tisha Taylor
|
||||||
|
","Kansas City, MO",,,"tisha_taylor_collection, {B/qKC}",TishaTaylorParent002,Image;StillImage,image/jpeg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Tisha Taylor, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,compound_object,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/TishaTaylorEdited002_Portrait_TishaTaylorCollection_BqKC.jpeg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/tishatayloredited002_portrait_tishataylorcollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/tishatayloredited002_portrait_tishataylorcollection_bqkc_th.jpg,Tisha Taylor pouts in a headshot. The image is in color with a blue background and green tulle fabric surrounding Tisha. ,
|
||||||
|
,tishacoll030,Tisha Taylor poses – original and edited photos,tisha_taylor_collection,ca.1993-2004,"Tisha Taylor poses closely to the camera in a sparkly, plunging top. This compound object features an original scan of the image given to us by Craig Lovingood, and edited version of the headshot meant to restore the image to its former glory.",Tisha Taylor,"Kansas City, MO",,,"tisha_taylor_collection, {B/qKC}",TishaTaylorParent003,Image;StillImage,image/jpeg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Tisha Taylor, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,compound_object,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/TishaTaylorEdited003_Headshot_TishaTaylorCollection_BqKC.jpeg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/tishatayloredited003_headshot_tishataylorcollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/tishatayloredited003_headshot_tishataylorcollection_bqkc_th.jpg,Tisha Taylor smiles in a close-up photo. She is wearing a sparkly top with a plunging neckline. ,
|
||||||
|
,tishacoll031,Tisha Taylor sits for a close-up shot – original and edited photos,tisha_taylor_collection,ca.1993-2004,Tisha Taylor sits for a close-up shot. ,Tisha Taylor,"Kansas City, MO",,,"tisha_taylor_collection, {B/qKC}",TishaTaylorParent004,Image;StillImage,image/jpeg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Tisha Taylor, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,compound_object,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/TishaTaylorEdited004_Headshot_TishaTaylorCollection_BqKC.jpeg,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/tishatayloredited004_headshot_tishataylorcollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/tishatayloredited004_headshot_tishataylorcollection_bqkc_th.jpg,Tisha Taylor poses for a close-up photo. She is wearing a sparkly top. ,
|
||||||
|
,tishacoll032,Judge's scoring cards for Black America Pageantry,tisha_taylor_collection,10-26-2004,"A judge's scoring card for the interview section of Black America Pageantry. The sheet uses the categories ""Dressed/Appearance"", ""Interview Skills"", and ""Content of Response"".",Black America Pageantry; Judge Score Card; Categories,"Kansas City, MO",,,"tisha_taylor_collection, {B/qKC}",BlackAmericaPageantry001,Image;StillImage,application/pdf,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Tisha Taylor, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,compound_object,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/BlackAmericaPageantry001_InterviewScoringCard_TishaTaylorCollection_BqKC.pdf,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/blackamericapageantry001_interviewscoringcard_tishataylorcollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/blackamericapageantry001_interviewscoringcard_tishataylorcollection_bqkc_th.jpg,"A judge's scoring card for the ""Interview"" category of Black American Pageantry. The text includes the sections ""Dressed/Appearance,"" ""Interview Skills,"" and ""Content of Response"". ",
|
||||||
|
,tishacoll033,Documents outline rules for judge's grading of Black America Pageantry,tisha_taylor_collection,10-26-2004,"The first page of a document outlining the rules and expectations for the judge's grading. The text explains the categories of ""Presentation (All That Glitters)"", ""Sportswear (Non-Seasonal)"", and ""Formal Wear (All Fabric)"". ",Black America Pageantry; Judge Score Card; Document,"Kansas City, MO",,,"tisha_taylor_collection, {B/qKC}",BlackAmericaPageantry003,Image;StillImage,application/pdf,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Tisha Taylor, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,compound_object,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/BlackAmericaPageantry003_JudgesCategoryInformation_TishaTaylorCollection_BqKC.pdf,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/blackamericapageantry003_judgescategoryinformation_tishataylorcollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/blackamericapageantry003_judgescategoryinformation_tishataylorcollection_bqkc_th.jpg,"First page of a document outlining the category information of Black American Pageantry. The text includes the categories of ""Presentation (All That Glitters),"" ""Sportswear (Non-Seasonal),"" and ""Formal Wear (All Fabric)"". ",
|
||||||
|
,tishacoll034,"""Mr. & Miss Black Mid-America"" at Soakie's – full program and pages",tisha_taylor_collection,11-20-2003,"A program for ""Mr. & Miss Black Mid-America"", a pageant held at Soakie's on November 20, 2003. This compound object compiles a PDF version compiling all pages, as well as scanned images of each separate page. Folks with accessibility needs can download the PDF version of the program for an OCR-ready version of the file.",Mr. and Miss Black Mid-America; Soakie’s; Pageant; Program,"Soakie's (Kansas City, MO)",,,"tisha_taylor_collection, {B/qKC}",Mr&MissBlackMid-AmericaParent001,Image;StillImage,application/pdf,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Tisha Taylor, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,compound_object,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/Mr&MissBlackMid-America002_FullBooklet_TishaTaylorCollection_BqKC.pdf,https://bafybeie2ig3qx5bgu3sue2hqeymti4isgvzfb657a7x2qv2q33rlg4xb34.ipfs.dweb.link/mr&missblackmid-america002_fullbooklet_tishataylorcollection_bqkc_sm.jpg,https://bafybeig2qdhiublgswnfv57lhmamucnx7neyihltbxebc7nbpqobmhqxvi.ipfs.dweb.link/mr&missblackmid-america002_fullbooklet_tishataylorcollection_bqkc_th.jpg,"A program for ""Mr. & Miss Black Mid-America"", a pageant held at Soakie's on November 20, 2003. This compound object compiles a PDF version compiling all pages, as well as scanned images of each separate page.",
|
||||||
|
tishacoll034,tishacoll035,"INNER COVER, INNER BACK – ""Mr. & Miss Black Mid-America"" at Soakie's",tisha_taylor_collection,11-20-2003,"The reverse side of the cover for ""Mr. & Miss Black Mid-America"" program. ",Mr. and Miss Black Mid-America; Soakie’s; Pageant; Program,"Soakie's (Kansas City, MO)",,,"tisha_taylor_collection, {B/qKC}",Mr&MissBlackMid-America002,Image;StillImage,image/jpeg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Tisha Taylor, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/BqKC_01.03_BlackMidAmerica_%201.jpeg,https://bafybeiewipfukfuo44puc7n4qsgab7bpqswaxjlilav3bys3t7bnl4wgvi.ipfs.dweb.link/bqkc_01.03_blackmidamerica_%201_sm.jpg,https://bafybeiewipfukfuo44puc7n4qsgab7bpqswaxjlilav3bys3t7bnl4wgvi.ipfs.dweb.link/bqkc_01.03_blackmidamerica_%201_th.jpg,"The reverse side of the cover for ""Mr. & Miss Black Mid-America"" program.",
|
||||||
|
tishacoll034,tishacoll036,"PAGES 2, 3 – ""Mr. & Miss Black Mid-America"" at Soakie's",tisha_taylor_collection,11-20-2003,"Pages 2 and 3 for ""Mr. & Miss Black Mid-America"" program. A schedule of events is listed with the title ""PROGRAM""",Mr. and Miss Black Mid-America; Soakie’s; Pageant; Program,"Soakie's (Kansas City, MO)",,,"tisha_taylor_collection, {B/qKC}",Mr&MissBlackMid-America002,Image;StillImage,image/jpeg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Tisha Taylor, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/BqKC_01.03_BlackMidAmerica_%202.jpeg,https://bafybeiewipfukfuo44puc7n4qsgab7bpqswaxjlilav3bys3t7bnl4wgvi.ipfs.dweb.link/bqkc_01.03_blackmidamerica_%202_sm.jpg,https://bafybeiewipfukfuo44puc7n4qsgab7bpqswaxjlilav3bys3t7bnl4wgvi.ipfs.dweb.link/bqkc_01.03_blackmidamerica_%202_th.jpg,"Pages 2 and 3 for ""Mr. & Miss Black Mid-America"" program. A schedule of events is listed with the title ""PROGRAM"". ",
|
||||||
|
tishacoll034,tishacoll037,"PAGES 4, 5 – ""Mr. & Miss Black Mid-America"" at Soakie's",tisha_taylor_collection,11-20-2003,"Page 4 and 5 for ""Mr. & Miss Black Mid-America"" program. A picture of Craig Lovingood as Tisha Taylor alongside her bio.",Mr. and Miss Black Mid-America; Soakie’s; Pageant; Program,"Soakie's (Kansas City, MO)",,,"tisha_taylor_collection, {B/qKC}",Mr&MissBlackMid-America002,Image;StillImage,image/jpeg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Tisha Taylor, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/BqKC_01.03_BlackMidAmerica_%203.jpeg,https://bafybeiewipfukfuo44puc7n4qsgab7bpqswaxjlilav3bys3t7bnl4wgvi.ipfs.dweb.link/bqkc_01.03_blackmidamerica_%203_sm.jpg,https://bafybeiewipfukfuo44puc7n4qsgab7bpqswaxjlilav3bys3t7bnl4wgvi.ipfs.dweb.link/bqkc_01.03_blackmidamerica_%203_th.jpg,"Page 4 and 5 for ""Mr. & Miss Black Mid-America"" program. A picture of Craig Lovingood as Tisha Taylor alongside her bio.",
|
||||||
|
tishacoll034,tishacoll038,"PAGES 6, 7 – ""Mr. & Miss Black Mid-America"" at Soakie's",tisha_taylor_collection,11-20-2003,"Page 6 and 7 for ""Mr. & Miss Black Mid-America"" program. Pictures and bio for emcees of the pageant, Gary Carrington and Desiree Luv Everett.",Mr. and Miss Black Mid-America; Soakie’s; Pageant; Program,"Soakie's (Kansas City, MO)",,,"tisha_taylor_collection, {B/qKC}",Mr&MissBlackMid-America002,Image;StillImage,image/jpeg,eng,"In Copyright - Educational Use Permitted. Educational use includes non-commercial use of text and images in materials for teaching and research purposes. IPR remains with Tisha Taylor, a license has been granted to allow reuse in perpetuity for educational and research purposes. For more information, please contact Nasir Anthony Montalvo at 1800nasi@tutamail.com.",https://creativecommons.org/licenses/by-nc-nd/4.0/,image,https://bafybeidjhth6baxump5j5osng62eagkmoy2lnzlm5kg5spb6tspgcc63mm.ipfs.dweb.link/BqKC_01.03_BlackMidAmerica_%204.jpeg,https://bafybeiewipfukfuo44puc7n4qsgab7bpqswaxjlilav3bys3t7bnl4wgvi.ipfs.dweb.link/bqkc_01.03_blackmidamerica_%204_sm.jpg,https://bafybeiewipfukfuo44puc7n4qsgab7bpqswaxjlilav3bys3t7bnl4wgvi.ipfs.dweb.link/bqkc_01.03_blackmidamerica_%204_th.jpg,"Page 6 and 7 for ""Mr. & Miss Black Mid-America"" program. Pictures and bio for emcees of the pageant, Gary Carrington and Desiree Luv Everett.",
|
||||||
|
7
.github/_data/config-browse.csv
vendored
Normal file
7
.github/_data/config-browse.csv
vendored
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
field,display_name,btn,hidden,sort_name,facet_name
|
||||||
|
date_created,Date,,,Date Created
|
||||||
|
description,,,true,
|
||||||
|
subject,,true
|
||||||
|
location,,true,,,Location
|
||||||
|
objectid,Object ID #,,,ID #
|
||||||
|
collection, Collection,true,,,,
|
||||||
|
5
.github/_data/config-map.csv
vendored
Normal file
5
.github/_data/config-map.csv
vendored
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
field,display_name,search
|
||||||
|
date,Date,true
|
||||||
|
creator,Creator,true
|
||||||
|
subject,Subjects,true
|
||||||
|
location,Location,true
|
||||||
|
15
.github/_data/config-metadata.csv
vendored
Normal file
15
.github/_data/config-metadata.csv
vendored
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
field,display_name,browse_link,external_link,dc_map,schema_map
|
||||||
|
title,Title,,,DCTERMS.title,headline
|
||||||
|
creator,Creator,,,DCTERMS.creator,creator
|
||||||
|
date_created,Date,,,DCTERMS.date,dateCreated
|
||||||
|
description,Description,,,DCTERMS.description,description
|
||||||
|
subject,Subjects,true,,DCTERMS.subject,keywords
|
||||||
|
location,Location,,,,contentLocation
|
||||||
|
latitude,Latitude,,,,
|
||||||
|
longitude,Longitude,,,,
|
||||||
|
source,Source,,,,
|
||||||
|
objectid,Object ID #,,,,
|
||||||
|
type,Type,,,DCTERMS.type,
|
||||||
|
format,Format,,,,encodingFormat
|
||||||
|
language,Language,,,DCTERMS.language,
|
||||||
|
rightsstatement,,,,DCTERMS.rights,license
|
||||||
|
25
.github/_data/config-nav.csv
vendored
Normal file
25
.github/_data/config-nav.csv
vendored
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
display_name,stub,dropdown_parent
|
||||||
|
HOME,/,
|
||||||
|
THE ARCHIVE,/browse/,
|
||||||
|
COLLECTIONS,,
|
||||||
|
EXPLORE,,
|
||||||
|
READ,,
|
||||||
|
SUBJECTS,/subjects/,EXPLORE
|
||||||
|
MAP,/map/,EXPLORE
|
||||||
|
OUR DATA,/data/,EXPLORE
|
||||||
|
ABOUT,,
|
||||||
|
ABOUT THE ARCHIVE,/about/,ABOUT
|
||||||
|
COPYRIGHT & TERMS,/copyright/,ABOUT
|
||||||
|
CONTACT US,/contact/,ABOUT
|
||||||
|
SUBSCRIBE TO NEWSLETTER,https://1800nasi.substack.com,ABOUT
|
||||||
|
gary_carrington,/collections/gary-carrington/,COLLECTIONS
|
||||||
|
starla_carr,/collections/starla-carr/,COLLECTIONS
|
||||||
|
tisha_taylor,/collections/tisha-taylor/,COLLECTIONS
|
||||||
|
VOL_2,,READ,heading
|
||||||
|
REMEMBERING SOAKIE'S: KC'S FORMER BLACK GAY BAR,/read/soakies/,READ
|
||||||
|
ERASURE OF BLACK QUEER PEOPLE IN KANSAS CITY,/read/erasure/,READ
|
||||||
|
VOL_1,,READ,heading
|
||||||
|
'OUT THERE': A GAY & LESBIAN VARIETY SHOW,/read/out-there/,READ
|
||||||
|
MEN OF ALL COLORS TOGETHER-KC,/read/mact-kc/,READ
|
||||||
|
DRAG QUEENS EDYE GREGORY & RAY RONDELL,/read/edye-and-ray/,READ
|
||||||
|
DONATE,/donate/,
|
||||||
|
7
.github/_data/config-search.csv
vendored
Normal file
7
.github/_data/config-search.csv
vendored
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
field,index,display
|
||||||
|
title,true,true
|
||||||
|
date_created,true,true
|
||||||
|
description,true,true
|
||||||
|
subject,true,true
|
||||||
|
location,true,false
|
||||||
|
collection,true,true
|
||||||
|
5
.github/_data/config-table.csv
vendored
Normal file
5
.github/_data/config-table.csv
vendored
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
field,display_name
|
||||||
|
title,Title
|
||||||
|
date,Date
|
||||||
|
description,Description
|
||||||
|
subject,Subjects
|
||||||
|
9
.github/_data/config-theme-colors.csv
vendored
Normal file
9
.github/_data/config-theme-colors.csv
vendored
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
color_class,color
|
||||||
|
primary,#4da3ff
|
||||||
|
secondary,black
|
||||||
|
success,black
|
||||||
|
info,#578bb5
|
||||||
|
warning,#578bb5
|
||||||
|
danger,#a83259
|
||||||
|
light,white
|
||||||
|
dark,#080812
|
||||||
|
101
.github/_data/donors.csv
vendored
Normal file
101
.github/_data/donors.csv
vendored
Normal file
@@ -0,0 +1,101 @@
|
|||||||
|
message_to_artist,donor_first,donor_last,donation_date
|
||||||
|
Your work is so inspiring!,Sydney,O'Dear,01/09/2026
|
||||||
|
,Moiz,Muhammad,01/09/2026
|
||||||
|
"best of luck, can’t wait to see how the archive evolves!!",whitney,dyer,01/07/2026
|
||||||
|
,Mireya,Gutierrez,01/07/2026
|
||||||
|
,Anthony,Baber,01/05/2026
|
||||||
|
,Charles,De Leon,01/03/2026
|
||||||
|
,Tracy,Holmes,01/03/2026
|
||||||
|
,Jessi,Wilcox,01/03/2026
|
||||||
|
I appreciate the great work you do. Kansas City needs this. ,Marion,Johnson,01/02/2026
|
||||||
|
2026 is ur year‼️☺️🤎,anevay,martz,01/02/2026
|
||||||
|
,Gabrielle,Stanley,01/02/2026
|
||||||
|
,Daniel,Ferman Leon,01/02/2026
|
||||||
|
You got this! ✨,Stephonne,Singleton,01/01/2026
|
||||||
|
,Vera,K,01/01/2026
|
||||||
|
,Mick,Cottin,12/29/2025
|
||||||
|
So proud of you! ,Laura,Booth,12/29/2025
|
||||||
|
,Keaton,Vaughn,12/29/2025
|
||||||
|
<3,Ruben,Castillo,12/28/2025
|
||||||
|
Joyous KuchuQwanzaa! ,Eva,Tesfaye,12/28/2025
|
||||||
|
hiiii love,Lucas,Rodríguez,12/26/2025
|
||||||
|
,David,Baarck,12/23/2025
|
||||||
|
,Hùng ,Lê ,12/23/2025
|
||||||
|
,Raymond,Forstater,12/22/2025
|
||||||
|
<3,Brydie,OConnor,12/22/2025
|
||||||
|
,nichole,kelly,12/22/2025
|
||||||
|
period. ,Anne,Corless,12/22/2025
|
||||||
|
,Adam,Del Rey,12/20/2025
|
||||||
|
,Julia,Soondar,12/20/2025
|
||||||
|
<3,Nic,Taylor,12/19/2025
|
||||||
|
,Hugo,Juarez-Avalos,12/19/2025
|
||||||
|
Thank you for all of your work! Hoping the best for 2026. The queer community organizers and documenters are the light of hope in middle America.,Parker,Wayne,12/19/2025
|
||||||
|
Continue on your very important work!!,Marina,Shatalova ,12/19/2025
|
||||||
|
,Cedar,,12/19/2025
|
||||||
|
,Amelia,Rehrig,12/18/2025
|
||||||
|
,Kimberly,Carlson,12/18/2025
|
||||||
|
,Skyler,Quehl,12/18/2025
|
||||||
|
🫶🏼,Nestor,G,12/18/2025
|
||||||
|
thank you for your work!!,Annie,Alford,12/18/2025
|
||||||
|
❣️❣️❣️,Christian ,Joseph,12/18/2025
|
||||||
|
,Jessica,Sapien,12/18/2025
|
||||||
|
You are incredible!,Thomas,Yambo-Rios,12/18/2025
|
||||||
|
,Christian,Banez,12/18/2025
|
||||||
|
,Ian,Mantel,12/18/2025
|
||||||
|
Thank you for this important work 💖,Sarah,Waggoner,12/17/2025
|
||||||
|
Historical marker? Yes please.,Johnda,Boyce,12/17/2025
|
||||||
|
I’m happy to support this incredible work Nasir is spearheading! Love the opportunity to keep up and support this great work in KC from NJ <3,Julieann,Murphy,12/17/2025
|
||||||
|
im so happy to see how far you've taken this mission !! your dedication continues to be inspiring,Ellie,Kim,12/17/2025
|
||||||
|
,L,Sobchak,12/17/2025
|
||||||
|
,Simi,Olabode,12/16/2025
|
||||||
|
Love you!,Jose,Gomez,12/16/2025
|
||||||
|
"So so happy to be apart of supporting such a beautiful and important project, so excited to attend more exhibitions in the future!",Jasmine,Rodriguez,12/16/2025
|
||||||
|
#ProudAuntie,Brittany,Foley,12/03/2025
|
||||||
|
Love u Nas ❤️,Mün,Hawkins,12/02/2025
|
||||||
|
♥️🌐,Andrés,Nelso,12/02/2025
|
||||||
|
So proud of you and the time you dedicate to the Black Queer digital archive. You deserve all the flowers!,Whitney,Brown,12/02/2025
|
||||||
|
,Ad Astra Training,(Yee-Lum Mak),08/23/2025
|
||||||
|
Keep doing your thing homie,Bryan,Dorsey,07/15/2025
|
||||||
|
,Johan,Svenson,07/15/2025
|
||||||
|
,Elvis,Achelpohl ,07/14/2025
|
||||||
|
,Techsoup,,05/15/2025
|
||||||
|
,Sandy,Woodson,04/21/2025
|
||||||
|
🤍🤍🤍 the archive ,Candace ,Sanders,12/30/2024
|
||||||
|
I've enjoyed your exhibits. Congrats on getting free and best of luck to you and others who are working on great things for 2025.,Johnda,Boyce,12/30/2024
|
||||||
|
So proud to know you!! Keep up the amazing work 💌,Julieann,Murphy,12/30/2024
|
||||||
|
Continue the great work!,Matthew,Mellor,12/25/2024
|
||||||
|
"I’ve never gotten a chance to see your exhibits, manifesting it for 2025🥰 You and your work is so needed in KC and I’m so glad you get to do it independently in the new year!",Annie,Alford,12/23/2024
|
||||||
|
,Laela,Zaidi,12/15/2024
|
||||||
|
Proud of you ❤️,Sharada,Jambulapati,12/12/2024
|
||||||
|
I am SO excited for what it to come. Grateful to be a witness and support where I can. ,Nybria,Acklin,12/10/2024
|
||||||
|
<3,Lauren,Sobchak,12/09/2024
|
||||||
|
<3,Whitney,Brown,12/09/2024
|
||||||
|
,Danielle,Anderson,12/09/2024
|
||||||
|
Wishing you the best!,Charles,De Leon,12/08/2024
|
||||||
|
,Lava,Dreams,12/07/2024
|
||||||
|
,Ruben,Castillo,12/06/2024
|
||||||
|
,Monica,Andrade,12/06/2024
|
||||||
|
"Congratulations on all your amazing accomplishments! Very proud of you!
|
||||||
|
I Love you! ",Laura,Booth,12/06/2024
|
||||||
|
,Jessi,Wilcox,12/06/2024
|
||||||
|
🤎 keep doing great [memory] work,Lynnie,Holl,12/06/2024
|
||||||
|
,Jessica,Sapien,12/06/2024
|
||||||
|
Super excited about this work!! ,chevy,.,12/06/2024
|
||||||
|
Always in awe of your work Nas!!,Julieann,Murphy,12/06/2024
|
||||||
|
:0) yay,Jazmine,B,12/05/2024
|
||||||
|
Congrats on bringing the archive back to the community!!,Abby,Meola,12/04/2024
|
||||||
|
,Ellie,Kim,12/04/2024
|
||||||
|
Let's gooo!,Neesha,Powell-Ingabire ,12/04/2024
|
||||||
|
,Deja,Beamon,12/04/2024
|
||||||
|
,Chad,Kamen,12/03/2024
|
||||||
|
,sam,s,12/03/2024
|
||||||
|
💕🫀🫶🏻,Margaret,Lawson,12/03/2024
|
||||||
|
,Teddy ,Aguilera,12/03/2024
|
||||||
|
,Daj,Moreland,12/03/2024
|
||||||
|
So proud of you!!,Julia,Soondar,12/03/2024
|
||||||
|
,Yee-Lum ,Mak,12/02/2024
|
||||||
|
✊🏾 Gotta support the archive!,Joshua,Hector,12/02/2024
|
||||||
|
,Irene,Ryan,12/02/2024
|
||||||
|
,Cassie,Haynes,12/02/2024
|
||||||
|
Congrats!! Best of luck going forward. ❤️,Laina,Emmons,12/02/2024
|
||||||
|
❤️,Choya,Webb,11/12/2024
|
||||||
|
130
.github/_data/theme.yml
vendored
Normal file
130
.github/_data/theme.yml
vendored
Normal file
@@ -0,0 +1,130 @@
|
|||||||
|
##########
|
||||||
|
# CollectionBuilder Theme Customization
|
||||||
|
# values set here help configure details of individual pages in the website
|
||||||
|
##########
|
||||||
|
|
||||||
|
##########
|
||||||
|
# HOME PAGE
|
||||||
|
#
|
||||||
|
# featured image is used in home page banner and in meta markup to represent the collection
|
||||||
|
# use either an objectid (from an item in this collect), a relative location of an image in this repo, or a full url to an image elsewhere
|
||||||
|
featured-image: starlacoll033
|
||||||
|
featured-image-alt-text: # add alt text if using url for featured-image (objectid will be automatic from metadata)
|
||||||
|
# optional: add extra padding around collection title for a larger image feature.
|
||||||
|
home-title-y-padding: 10em # the margin from the top your title portion will appear.
|
||||||
|
# optional: change position of background image, center, top, bottom
|
||||||
|
home-banner-image-position: # Default is top
|
||||||
|
|
||||||
|
|
||||||
|
##########
|
||||||
|
# Browse PAGE
|
||||||
|
#
|
||||||
|
# see _data/browse-config.csv to define the metadata fields that will display.
|
||||||
|
advanced-search: false # true / false, adds advanced search options to search, which are generated by clicking the advanced search button above the search box (this opens a modal in which the search can be constructed)
|
||||||
|
faceted-search: true # true / false, adds a field option to the left of the search results that allows users to filter results by metadata field
|
||||||
|
default-sort-field: # if a value is entered here, it must match one of the field values (first column) in the browse-config.csv file. If left blank or the value doesn't match a value in config-browse.csv's first column, the default sort will be a random sort
|
||||||
|
|
||||||
|
|
||||||
|
##########
|
||||||
|
# ITEM PAGE
|
||||||
|
#
|
||||||
|
# see _data/metadata-config.csv to define the metadata fields that will display.
|
||||||
|
browse-buttons: true # true / false, adds previous/next arrows to items, but increases build time
|
||||||
|
|
||||||
|
##########
|
||||||
|
# SUBJECTS PAGE
|
||||||
|
#
|
||||||
|
subjects-fields: subject;creator # set of fields separated by ; to be featured in the cloud (leave blank or comment out to not generate)
|
||||||
|
subjects-min: 1 # min size for subject cloud, too many terms = slow load time!
|
||||||
|
subjects-stopwords: # set of subjects separated by ; that will be removed from display, e.g. boxers;boxing
|
||||||
|
|
||||||
|
##########
|
||||||
|
# LOCATIONS PAGE
|
||||||
|
#
|
||||||
|
locations-fields: location # set of fields separated by ; to be featured in the cloud (leave blank or comment out to not generate)
|
||||||
|
locations-min: 1 # min size for subject cloud, too many terms = slow load time!
|
||||||
|
locations-stopwords: # set of subjects separated by ; that will be removed from display, e.g. boxers;boxing
|
||||||
|
|
||||||
|
##########
|
||||||
|
# MAP PAGE
|
||||||
|
#
|
||||||
|
# see _data/map-config.csv for field display options
|
||||||
|
auto-center-map: true # have the map auto fit all features into its view
|
||||||
|
latitude: 46.727485 # to manually center map if not using auto-center-map option
|
||||||
|
longitude: -117.014185 # to manually center map if not using auto-center-map option
|
||||||
|
zoom-level: 5 # zoom level for map if not using auto-center-map option
|
||||||
|
map-base: Esri_WorldStreetMap # set default base map, choose from: Esri_WorldStreetMap, Esri_NatGeoWorldMap, Esri_WorldImagery, OpenStreetMap_Mapnik
|
||||||
|
map-search: true # not suggested with large collections
|
||||||
|
map-search-fuzziness: 0.35 # fuzzy search range from 1 = anything to 0 = exact match only
|
||||||
|
map-cluster: true # suggested for large collection or with many items in same location
|
||||||
|
map-cluster-radius: 25 # size of clusters, from ~ 10 to 80
|
||||||
|
|
||||||
|
##########
|
||||||
|
# TIMELINE PAGE
|
||||||
|
#
|
||||||
|
# set either year-navigation or year-nav-increment to generate a year nav dropdown
|
||||||
|
year-navigation: #"1900;1905;1910;1915;1920" # manually set years to appear in dropdown nav
|
||||||
|
year-nav-increment: 5 # set increments to auto gen nav years
|
||||||
|
|
||||||
|
##########
|
||||||
|
# DATA
|
||||||
|
#
|
||||||
|
# add metadata fields for export in data downloads (tip: paste in first row of csv)
|
||||||
|
# comma delimited list, reference url is automatic
|
||||||
|
metadata-export-fields: "title,creator,date,description,subject,location,latitude,longitude,source,identifier,type,format,language,rights,rightsstatement"
|
||||||
|
# generate a facets list for given fields, comma delimited
|
||||||
|
metadata-facets-fields: "subject,creator,format"
|
||||||
|
|
||||||
|
##########
|
||||||
|
# Compound Objects
|
||||||
|
#
|
||||||
|
# Ignore this section if you are not including any compound objects
|
||||||
|
# Note, like other items, child objects will only appear in visualizations if they have the correct metadata (lat long for map; date for timeline)
|
||||||
|
# select true below if you'd like your compound object's child objects to appear in any of the pages or features listed
|
||||||
|
map-child-objects: true # true / false - if true, and if child item has latitude and longitude, child objects will be displayed on map
|
||||||
|
timeline-child-objects: true # true / false - if true, and if child object has date, child objects will appear as thumbnails on timeline page
|
||||||
|
data-child-objects: false # true / false - if true, child objects will appear linked in table on data page
|
||||||
|
browse-child-objects: false # true / false - if true, child objects will appear on browse page and child objects' metadata will populate cloud pages like Subjects page and Locations page, as well as featured terms boxes on the home page
|
||||||
|
search-child-objects: true # true / false - if true, child objects will appear on on search page along with parent objects
|
||||||
|
|
||||||
|
|
||||||
|
##########
|
||||||
|
# ADVANCED OPTIONS
|
||||||
|
#
|
||||||
|
|
||||||
|
# NAVBAR COLORS [optional!]
|
||||||
|
# navbar text color
|
||||||
|
# Choose from "navbar-light" for use with light background colors, or "navbar-dark" for dark background colors
|
||||||
|
navbar-color: navbar-dark
|
||||||
|
# navbar background color
|
||||||
|
# Choose from bg-primary, bg-secondary, bg-success, bg-danger, bg-warning, bg-info, bg-light, bg-dark, bg-white
|
||||||
|
navbar-background: bg-secondary
|
||||||
|
|
||||||
|
# BOOTSWATCH THEMES [optional!]
|
||||||
|
# You can replace the standard Bootstrap theme with a Bootswatch (https://github.com/thomaspark/bootswatch) option
|
||||||
|
# Choose from: cerulean; cosmo; cyborg; darkly; flatly; journal; litera; lumen; lux; materia; minty; pulse; sandstone; simplex; sketchy; slate; solar; spacelab; superhero; united; yeti
|
||||||
|
bootswatch: # leave blank or comment out for plain bootstrap
|
||||||
|
|
||||||
|
# THEME FONTS [optional!]
|
||||||
|
base-font-size: 1.2em
|
||||||
|
text-color: "#eeeeee"
|
||||||
|
link-color: "#4da3ff"
|
||||||
|
base-font-family: "'Space Mono', monospace"
|
||||||
|
font-cdn: <link rel="preconnect" href="https://fonts.bunny.net"><link href="https://fonts.bunny.net/css?family=space-mono:400" rel="stylesheet" />
|
||||||
|
|
||||||
|
# THEME ICONS [optional!]
|
||||||
|
# default icons can be overridden or new icons can be added using "icons" object
|
||||||
|
# the template uses Bootstrap Icons, https://icons.getbootstrap.com/
|
||||||
|
# find the names on the BI icons page, e.g. file-image
|
||||||
|
#
|
||||||
|
# icons:
|
||||||
|
# icon-image: image
|
||||||
|
# icon-audio: soundwave
|
||||||
|
# icon-video: film
|
||||||
|
# icon-pdf: file-pdf
|
||||||
|
# icon-record: file-text
|
||||||
|
# icon-panorama: image-alt
|
||||||
|
# icon-compound-object: collection
|
||||||
|
# icon-multiple: postcard
|
||||||
|
# icon-default: file-earmark # fall back icon
|
||||||
|
# icon-back-to-top: arrow-up-square
|
||||||
62
.github/_includes/advanced-search-modal.html
vendored
Normal file
62
.github/_includes/advanced-search-modal.html
vendored
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
<button type="button" class="btn btn-outline-secondary" data-bs-toggle="modal" data-bs-target="#advancedSearchModal">
|
||||||
|
Advanced<span class="d-none d-md-inline"> Filter</span>
|
||||||
|
</button>
|
||||||
|
<div class="modal fade" id="advancedSearchModal" tabindex="-1">
|
||||||
|
<div class="modal-dialog modal-lg">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<h1 class="modal-title h4" id="advancedSearchModalLabel">Advanced Filter</h1>
|
||||||
|
<p class="small text-muted">Use these filters to refine your search results. You can combine multiple fields to get more specific results.</p>
|
||||||
|
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
<form id="advancedSearchForm">
|
||||||
|
<div id="searchRows">
|
||||||
|
<!-- Initial search rows will be inserted here -->
|
||||||
|
</div>
|
||||||
|
<div class="mt-3">
|
||||||
|
<button type="button" class="btn btn-outline-secondary btn-sm" onclick="addSearchRow()">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-plus-circle" viewBox="0 0 16 16">
|
||||||
|
<path d="M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16"/>
|
||||||
|
<path d="M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4"/>
|
||||||
|
</svg>
|
||||||
|
Add Another Field
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
|
||||||
|
<button type="button" class="btn btn-primary" onclick="submitAdvancedSearch()">Search</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Template for search row -->
|
||||||
|
<template id="searchRowTemplate">
|
||||||
|
<div class="search-row mb-4">
|
||||||
|
<div class="row align-items-center">
|
||||||
|
<div class="col-4 col-md-2">
|
||||||
|
<select class="form-select form-select-sm boolean-operator">
|
||||||
|
<option value="AND">AND</option>
|
||||||
|
<option value="OR">OR</option>
|
||||||
|
<option value="NOT">NOT</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="col-5 col-md-3">
|
||||||
|
<select class="form-select form-select-sm field-select">
|
||||||
|
<option value="all">All Fields</option>
|
||||||
|
<option value="title">Title</option>
|
||||||
|
{% for f in site.data.config-browse %}{% assign cap-field = f.field | capitalize %}
|
||||||
|
<option value="{{ f.field }}">{{ f.facet_name | default: f.display_name | default: cap-field }}</option>
|
||||||
|
{% endfor %}
|
||||||
|
<div class="col-10 col-md-6">
|
||||||
|
<input type="text" class="form-control form-control-sm search-input" placeholder="Enter search term">
|
||||||
|
</div>
|
||||||
|
<div class="col-2 col-md-1">
|
||||||
|
<button type="button" class="btn btn-outline-danger btn-sm remove-row" aria-label="Remove condition">×</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
83
.github/_includes/cb/about_the_about.md
vendored
Normal file
83
.github/_includes/cb/about_the_about.md
vendored
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
{% comment %}
|
||||||
|
Find some sample images or use defaults for About demos
|
||||||
|
{% endcomment %}
|
||||||
|
{% assign imagesample = site.data[site.metadata] | where_exp: 'item','item.format contains "image"' | first %}
|
||||||
|
{% capture imagesampleid %}{{ imagesample.objectid | default: "https://www.lib.uidaho.edu/collectionbuilder/demo-objects/mg101_b6_photographs_01.jpg" }}{% endcapture %}
|
||||||
|
{% assign pdfsample = site.data[site.metadata] | where_exp: 'item','item.format contains "pdf"' | first %}
|
||||||
|
{% capture pdfsampleid %}{{ pdfsample.objectid | default: "https://www.lib.uidaho.edu/collectionbuilder/demo-objects/uiext21768.pdf" }}{% endcapture %}
|
||||||
|
{% assign videosample = site.data[site.metadata] | where_exp: 'item','item.format contains "video"' | first %}
|
||||||
|
{% capture videosampleid %}{{ videosample.objectid | default: "https://cdil.lib.uidaho.edu/storying-extinction/objects/trailcams/videos/ballcreek-cedarrub-birdonpath.mp4" }}{% endcapture %}
|
||||||
|
{% assign audiosample = site.data[site.metadata] | where_exp: 'item','item.format contains "audio"' | first %}
|
||||||
|
{% capture audiosampleid %}{{ audiosample.objectid | default: "https://www.lib.uidaho.edu/digital/mp3s/Clouds.mp3" }}{% endcapture %}
|
||||||
|
|
||||||
|
## About the About Page
|
||||||
|
|
||||||
|
We want to make engaging interpretive pages easier to create, so CollectionBuilder gives you tools to write *with* your collection content!
|
||||||
|
|
||||||
|
The template comes with a customizable "About" page layout designed for long form content with rich media embeds.
|
||||||
|
Content is written in [Markdown](https://guides.github.com/features/mastering-markdown/) and enhanced using "includes" that pull in collection content, external media, and [Bootstrap](https://getbootstrap.com/) features like cards and modals.
|
||||||
|
We hope this makes it easier for site builders to develop the collection AND add interesting and engaging contextual information.
|
||||||
|
|
||||||
|
Each "include" file has several options, which are documented in the files themselves--copy the examples to see how it works with your content!
|
||||||
|
In the demo below, we've given display widths of 25% and 50% to save space, but you can feature the entire image or document.
|
||||||
|
|
||||||
|
You can also see a page featuring [a bonanza of feature includes options](https://collectionbuilder.github.io/collectionbuilder-gh/feature_options.html) on our CollectionBuilder-GH demo site.
|
||||||
|
|
||||||
|
{% include feature/button.html text="Feature *Includes* Bonanza page" link="https://collectionbuilder.github.io/collectionbuilder-gh/feature_options.html" color="primary" size="lg" centered=true %}
|
||||||
|
|
||||||
|
### Include Collection Items
|
||||||
|
|
||||||
|
The template provides includes to pull your collection objects and metadata into your interpretive page, allowing you to write with your materials directly embedded in the content.
|
||||||
|
|
||||||
|
#### Include an Image
|
||||||
|
|
||||||
|
- Image --> `{% raw %}{% include feature/image.html objectid="demo_001" width="75" %}{% endraw %}`
|
||||||
|
|
||||||
|
{% include feature/image.html objectid=imagesampleid width="75" %}
|
||||||
|
|
||||||
|
#### Include a PDF
|
||||||
|
|
||||||
|
- PDF -- > `{% raw %}{% include feature/pdf.html objectid="demo_002" width="50" %}{% endraw %}`
|
||||||
|
|
||||||
|
{% include feature/pdf.html objectid=pdfsampleid width="50" %}
|
||||||
|
|
||||||
|
#### Include a Video
|
||||||
|
|
||||||
|
- Video: `{% raw %}{% include feature/video.html objectid="demo_004" %}{% endraw %}`
|
||||||
|
|
||||||
|
{% include feature/video.html objectid=videosampleid width="75" %}
|
||||||
|
|
||||||
|
#### Include an Audio File
|
||||||
|
|
||||||
|
- Audio: `{% raw %}{% include feature/audio.html objectid="demo_003" %}{% endraw %}`
|
||||||
|
|
||||||
|
{% include feature/audio.html objectid=audiosampleid %}
|
||||||
|
|
||||||
|
### Include Bootstrap Features
|
||||||
|
|
||||||
|
The template also provides includes to make it easier to add [Bootstrap](https://getbootstrap.com/) components to your Markdown writing.
|
||||||
|
These features allow you to better organize and highlight your content.
|
||||||
|
|
||||||
|
#### Include a Card
|
||||||
|
|
||||||
|
- Card -- > `{% raw %}{% include feature/card.html header="This is a Card" text="The card features an image from the collection as a cap" objectid="demo004" width="25" centered=true %}{% endraw %}`
|
||||||
|
|
||||||
|
{% include feature/card.html header="This is a Card" text="The card features an image from the collection as a cap" objectid=imagesampleid width="50" centered=true %}
|
||||||
|
|
||||||
|
#### Include a Button
|
||||||
|
|
||||||
|
- Buttons -- > `{% raw %}{% include feature/button.html text="Button Link to Somewhere" link="https://collectionbuilder.github.io/" color="success" %}{% endraw %}`
|
||||||
|
|
||||||
|
{% include feature/button.html text="Button Link to Somewhere" link="https://collectionbuilder.github.io/" color="success" centered=true %}
|
||||||
|
|
||||||
|
#### Include an Alert
|
||||||
|
|
||||||
|
- Alerts -- > `{% raw %}{% include feature/alert.html text="this is an *alert* that 'warns' a user" color="warning" align="center" %}{% endraw %}`
|
||||||
|
|
||||||
|
{% include feature/alert.html text="This is an *alert* that 'warns' a user with centrally aligned text." color="warning" align="center" %}
|
||||||
|
|
||||||
|
#### Include a Modal
|
||||||
|
|
||||||
|
- Modals -- > `{% raw %}{% include feature/modal.html button="This is a modal using a 'primary' colored button to invite clicking" title="when clicked:" text="A Modal will pop out a box with some more information" color="primary" %}{% endraw %}`
|
||||||
|
|
||||||
|
{% include feature/modal.html button="This is a modal using a 'primary' colored button to invite clicking" title="When clicked:" text="A Modal will pop out a box with some more information" color="primary" %}
|
||||||
17
.github/_includes/cb/credits.html
vendored
Normal file
17
.github/_includes/cb/credits.html
vendored
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
<div class="container-fluid mt-4 mb-n3 bg-light p-4 " id="technical">
|
||||||
|
<div class="container mt-4 border rounded p-4 bg-white">
|
||||||
|
<h3>CollectionBuilder</h3>
|
||||||
|
<div class="row my-2 justify-content-center">
|
||||||
|
<div class="col-md-8 p-4">
|
||||||
|
<p>This digital collection is built with <a href="https://collectionbuilder.github.io/">CollectionBuilder</a>, an open source framework for creating digital collection and exhibit websites that is developed by faculty librarians at the University of Idaho Library following the <a href="https://lib-static.github.io">Lib-Static</a> methodology.</p>
|
||||||
|
|
||||||
|
<p>Using the <a href="https://github.com/CollectionBuilder/collectionbuilder-csv">CollectionBuilder-CSV</a> template and the static website generator <a href="https://jekyllrb.com/">Jekyll</a>, this project creates an engaging interface to explore driven by metadata.</p>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-4 text-center">
|
||||||
|
<a href="https://collectionbuilder.github.io/" title="CollectionBuilder">
|
||||||
|
<img src="{{ '/assets/img/collectionbuilder-logo.png' | relative_url }}" class="img-fluid" alt="CollectionBuilder" >
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
230
.github/_includes/cb/feature_options.md
vendored
Normal file
230
.github/_includes/cb/feature_options.md
vendored
Normal file
@@ -0,0 +1,230 @@
|
|||||||
|
## Feature *Includes* Bonanza page
|
||||||
|
|
||||||
|
Check all the includes. Steal Code!
|
||||||
|
|
||||||
|
----------
|
||||||
|
|
||||||
|
### Image Options
|
||||||
|
|
||||||
|
#### Image from Collection (auto caption)
|
||||||
|
|
||||||
|
{% include feature/image.html objectid="demo_001" width="75" %}
|
||||||
|
|
||||||
|
Example Code --> `{% raw %}{% include feature/image.html objectid="demo_001" width="75" %}{% endraw %}`
|
||||||
|
|
||||||
|
|
||||||
|
#### Image from Collection (with a caption)
|
||||||
|
|
||||||
|
{% include feature/image.html objectid="demo_001" width="75" caption="an image" %}
|
||||||
|
|
||||||
|
Example Code --> `{% raw %}{% include feature/image.html objectid="demo_001" width="75" caption="an image" %}{% endraw %}`
|
||||||
|
|
||||||
|
|
||||||
|
#### Multiple Images from the Collection (auto caption)
|
||||||
|
|
||||||
|
{% include feature/image.html objectid="demo_001;demo_004;demo_002" %}
|
||||||
|
|
||||||
|
Example Code --> `{% raw %}{% include feature/image.html objectid="demo_001;demo_004;demo_002" %}{% endraw %}`
|
||||||
|
|
||||||
|
|
||||||
|
#### Multiple Images from the Collection (with captions)
|
||||||
|
|
||||||
|
{% include feature/image.html objectid="demo_001;demo_004;demo_002" width="75" caption="demo1;nother" %}
|
||||||
|
|
||||||
|
Example Code --> `{% raw %}{% include feature/image.html objectid="demo_001;demo_004;demo_002" width="75" caption="demo1;nother" %}{% endraw %}`
|
||||||
|
|
||||||
|
|
||||||
|
#### External Image (without a caption)
|
||||||
|
|
||||||
|
{% include feature/image.html objectid="https://www.lib.uidaho.edu/collectionbuilder/demo-objects/mg101_b6_photographs_01.jpg" width="75" alt="Frank B. Robinson at the Organ" %}
|
||||||
|
|
||||||
|
Example Code --> `{% raw %}{% include feature/image.html objectid="https://www.lib.uidaho.edu/collectionbuilder/demo-objects/mg101_b6_photographs_01.jpg" width="75" alt="Frank B. Robinson at the Organ" %}{% endraw %}`
|
||||||
|
|
||||||
|
|
||||||
|
#### External Image (with a caption)
|
||||||
|
|
||||||
|
{% include feature/image.html objectid="https://www.lib.uidaho.edu/collectionbuilder/demo-objects/mg101_b6_photographs_01.jpg" width="75" alt="Frank B. Robinson at the Organ" caption="This guy is good!"%}
|
||||||
|
|
||||||
|
Example Code --> `{% raw %}{% include feature/image.html objectid="https://www.lib.uidaho.edu/collectionbuilder/demo-objects/mg101_b6_photographs_01.jpg" width="75" alt="Frank B. Robinson at the Organ" caption="This guy is good!"%}{% endraw %}`
|
||||||
|
|
||||||
|
|
||||||
|
#### Multiple External Images (with captions and a link)
|
||||||
|
|
||||||
|
{% include feature/image.html objectid="https://www.lib.uidaho.edu/collectionbuilder/demo-objects/mg101_b6_photographs_01.jpg;https://www.lib.uidaho.edu/collectionbuilder/demo-objects/mg101_b6_psychiana_photographs_010.jpg" caption="this guy!;(was nothing without these women!)" link="https://www.lib.uidaho.edu/digital/psychiana/items/psychiana519.html;https://www.lib.uidaho.edu/digital/psychiana/items/psychiana547.html" alt="Frank B. Robinson at the Organ;Women staff members of Psychiana lined up outside the Psychiana headquarters" %}
|
||||||
|
|
||||||
|
Example Code --> `{% raw %}{% include feature/image.html objectid="https://www.lib.uidaho.edu/collectionbuilder/demo-objects/mg101_b6_photographs_01.jpg;https://www.lib.uidaho.edu/collectionbuilder/demo-objects/mg101_b6_psychiana_photographs_010.jpg" caption="this guy!;(was nothing without these women!)" link="https://www.lib.uidaho.edu/digital/psychiana/items/psychiana519.html;https://www.lib.uidaho.edu/digital/psychiana/items/psychiana547.html" alt="Frank B. Robinson at the Organ;Women staff members of Psychiana lined up outside the Psychiana headquarters" %}{% endraw %}`
|
||||||
|
|
||||||
|
----------
|
||||||
|
|
||||||
|
### PDF Options
|
||||||
|
|
||||||
|
#### PDF from Collection (auto caption)
|
||||||
|
|
||||||
|
{% include feature/pdf.html objectid="demo_002" width="50" %}
|
||||||
|
|
||||||
|
Example Code --> `{% raw %}{% include feature/pdf.html objectid="demo_002" width="50" %}{% endraw %}`
|
||||||
|
|
||||||
|
|
||||||
|
#### PDF from the Collection (with a caption)
|
||||||
|
|
||||||
|
{% include feature/pdf.html objectid="demo_002" width="50" caption="a pdf from the collection" %}
|
||||||
|
|
||||||
|
Example Code --> `{% raw %}{% include feature/pdf.html objectid="demo_002" width="50" caption="a pdf from the collection" %}{% endraw %}`
|
||||||
|
|
||||||
|
|
||||||
|
#### External PDF (without a caption)
|
||||||
|
|
||||||
|
{% include feature/pdf.html objectid="https://www.lib.uidaho.edu/collectionbuilder/demo-objects/uiext21768.pdf" width="50" %}
|
||||||
|
|
||||||
|
Example Code --> `{% raw %}{% include feature/pdf.html objectid="https://www.lib.uidaho.edu/collectionbuilder/demo-objects/uiext21768.pdf" width="50" %}{% endraw %}`
|
||||||
|
|
||||||
|
|
||||||
|
#### External PDF (with a caption)
|
||||||
|
|
||||||
|
{% include feature/pdf.html objectid="https://www.lib.uidaho.edu/collectionbuilder/demo-objects/uiext21768.pdf" width="50" caption="Safe Chainsawing is Important!" %}
|
||||||
|
|
||||||
|
Example Code --> `{% raw %}{% include feature/pdf.html objectid="https://www.lib.uidaho.edu/collectionbuilder/demo-objects/uiext21768.pdf" width="50" caption="Safe Chainsawing is Important!" %}{% endraw %}`
|
||||||
|
|
||||||
|
----------
|
||||||
|
|
||||||
|
### Video Options
|
||||||
|
|
||||||
|
#### Video from Collection (auto caption)
|
||||||
|
|
||||||
|
{% include feature/video.html objectid="demo_004" width="75" %}
|
||||||
|
|
||||||
|
Example Code --> `{% raw %}{% include feature/video.html objectid="demo_004" width="75" %}{% endraw %}`
|
||||||
|
|
||||||
|
|
||||||
|
#### Video from the Collection (with a caption)
|
||||||
|
|
||||||
|
{% include feature/video.html objectid="demo_005" width="50" caption="a video from the collection" %}
|
||||||
|
|
||||||
|
Example Code --> `{% raw %}{% include feature/video.html objectid="demo_004" width="50" caption="a video from the collection" %}{% endraw %}`
|
||||||
|
|
||||||
|
|
||||||
|
#### External Video File (without a caption)
|
||||||
|
|
||||||
|
{% include feature/video.html objectid="https://cdil.lib.uidaho.edu/storying-extinction/objects/trailcams/videos/ballcreek-cedarrub-birdonpath.mp4" width="50"%}
|
||||||
|
|
||||||
|
Example Code --> `{% raw %}{% include feature/video.html objectid="https://cdil.lib.uidaho.edu/storying-extinction/objects/trailcams/videos/ballcreek-cedarrub-birdonpath.mp4" width="50"%}{% endraw %}`
|
||||||
|
|
||||||
|
|
||||||
|
#### External Video File (with a caption)
|
||||||
|
|
||||||
|
{% include feature/video.html objectid="https://cdil.lib.uidaho.edu/storying-extinction/objects/trailcams/videos/ballcreek-cedarrub-birdonpath.mp4" caption="Bears are Important!" width="50" %}
|
||||||
|
|
||||||
|
Example Code --> `{% raw %}{% include feature/video.html objectid="https://cdil.lib.uidaho.edu/storying-extinction/objects/trailcams/videos/ballcreek-cedarrub-birdonpath.mp4" caption="Bears are Important!" width="50" %}{% endraw %}`
|
||||||
|
|
||||||
|
|
||||||
|
#### External Vimeo Video
|
||||||
|
|
||||||
|
{% include feature/video.html objectid="https://vimeo.com/464555587" width="50" caption="vimeo caption" %}
|
||||||
|
|
||||||
|
Example Code --> `{% raw %}{% include feature/video.html objectid="https://vimeo.com/464555587" width="50" caption="vimeo caption" %}{% endraw %}`
|
||||||
|
|
||||||
|
|
||||||
|
#### External Youtube Video
|
||||||
|
|
||||||
|
{% include feature/video.html objectid="https://www.youtube.com/watch?v=dbKNr3wuiuQ" width="50" caption="youtube caption" %}
|
||||||
|
|
||||||
|
Example Code --> `{% raw %}{% include feature/video.html objectid="https://www.youtube.com/watch?v=dbKNr3wuiuQ" width="50" caption="youtube caption" %}{% endraw %}`
|
||||||
|
|
||||||
|
#### Video Modal from Collection
|
||||||
|
|
||||||
|
{% include feature/video-modal.html objectid="demo_004" %}
|
||||||
|
|
||||||
|
Example Code --> `{% raw %}{% include feature/video-modal.html objectid="demo_004" %}{% endraw %}`
|
||||||
|
|
||||||
|
#### Video Modal External Item
|
||||||
|
|
||||||
|
{% include feature/video-modal.html objectid="https://cdil.lib.uidaho.edu/storying-extinction/objects/trailcams/videos/ballcreek-cedarrub-birdonpath.mp4" caption="Bears are Important!" transcript="Example transcript text, this should be better!" %}
|
||||||
|
|
||||||
|
Example Code --> `{% raw %}{% include feature/video-modal.html objectid="https://cdil.lib.uidaho.edu/storying-extinction/objects/trailcams/videos/ballcreek-cedarrub-birdonpath.mp4" caption="Bears are Important!" transcript="Example transcript text, this should be better!" %}{% endraw %}`
|
||||||
|
|
||||||
|
----------
|
||||||
|
|
||||||
|
### Audio Options
|
||||||
|
|
||||||
|
#### Audio from Collection (auto caption)
|
||||||
|
|
||||||
|
{% include feature/audio.html objectid="demo_003" width="50" %}
|
||||||
|
|
||||||
|
Example Code --> `{% raw %}{% include feature/audio.html objectid="demo_003" width="50" %}{% endraw %}`
|
||||||
|
|
||||||
|
|
||||||
|
#### Audio from the Collection (with a caption)
|
||||||
|
|
||||||
|
{% include feature/audio.html objectid="demo_003" width="50" caption="a mp3 from the collection" %}
|
||||||
|
|
||||||
|
Example Code --> `{% raw %}{% include feature/audio.html objectid="demo_003" width="50" caption="a mp3 from the collection" %}{% endraw %}`
|
||||||
|
|
||||||
|
|
||||||
|
#### External Audio (without a caption)
|
||||||
|
|
||||||
|
{% include feature/audio.html objectid="https://www.lib.uidaho.edu/digital/mp3s/Clouds.mp3" %}
|
||||||
|
|
||||||
|
Example Code --> `{% raw %}{% include feature/audio.html objectid="https://www.lib.uidaho.edu/digital/mp3s/Clouds.mp3" %}{% endraw %}`
|
||||||
|
|
||||||
|
|
||||||
|
#### External Audio (with a caption)
|
||||||
|
|
||||||
|
{% include feature/audio.html objectid="https://www.lib.uidaho.edu/digital/mp3s/Clouds.mp3" width="50" caption="Clouds are Important!" %}
|
||||||
|
|
||||||
|
Example Code --> `{% raw %}{% include feature/audio.html objectid="https://www.lib.uidaho.edu/digital/mp3s/Clouds.mp3" width="50" caption="Clouds are Important!" %}{% endraw %}`
|
||||||
|
|
||||||
|
#### Audio Modal from Collection
|
||||||
|
|
||||||
|
{% include feature/audio-modal.html objectid="demo_003" %}
|
||||||
|
|
||||||
|
Example Code --> `{% raw %}{% include feature/audio-modal.html objectid="demo_003" %}{% endraw %}`
|
||||||
|
|
||||||
|
#### Audio Modal External Item
|
||||||
|
|
||||||
|
{% include feature/audio-modal.html objectid="https://www.lib.uidaho.edu/digital/mp3s/Clouds.mp3" title="Clouds" caption="A reading." transcript="Example transcript text, this should be better!" %}
|
||||||
|
|
||||||
|
Example Code --> `{% raw %}{% include feature/audio-modal.html objectid="https://www.lib.uidaho.edu/digital/mp3s/Clouds.mp3" title="Clouds" caption="A reading." transcript="Example transcript text, this should be better!" %}{% endraw %}`
|
||||||
|
|
||||||
|
----------
|
||||||
|
|
||||||
|
### Other Features
|
||||||
|
|
||||||
|
#### Cloud Include
|
||||||
|
|
||||||
|
{% include feature/cloud.html fields="subject" min="1" background="dark" button="outline-warning" %}
|
||||||
|
|
||||||
|
Example Code --> `{% raw %}{% include feature/cloud.html fields="subject" min="1" background="dark" button="outline-warning" %}{% endraw %}`
|
||||||
|
|
||||||
|
#### TimelineJS
|
||||||
|
|
||||||
|
{% include feature/timelinejs.html %}
|
||||||
|
|
||||||
|
Example Code --> `{% raw %}{% include feature/timelinejs.html %}{% endraw %}`
|
||||||
|
|
||||||
|
----------
|
||||||
|
|
||||||
|
### [Bootstrap](https://getbootstrap.com/) Features
|
||||||
|
|
||||||
|
#### Include a Card
|
||||||
|
|
||||||
|
- Card -- > `{% raw %}{% include feature/card.html header="This is a Card" text="The card features an image from the collection as a cap" objectid="demo004" width="25" centered=true %}{% endraw %}`
|
||||||
|
|
||||||
|
{% include feature/card.html header="This is a Card" text="The card features an image from the collection as a cap" objectid="demo_001" width="25" centered=true %}
|
||||||
|
|
||||||
|
#### Include a Button
|
||||||
|
|
||||||
|
- Buttons -- > `{% raw %}{% include feature/button.html text="Button Link to Somewhere" link="https://collectionbuilder.github.io/" color="success" %}{% endraw %}`
|
||||||
|
|
||||||
|
{% include feature/button.html text="Button Link to Somewhere" link="https://collectionbuilder.github.io/" color="success" centered=true %}
|
||||||
|
|
||||||
|
#### Include an Alert
|
||||||
|
|
||||||
|
- Alerts -- > `{% raw %}{% include feature/alert.html text="this is an *alert* that 'warns' a user" color="warning" align="center" %}{% endraw %}`
|
||||||
|
|
||||||
|
{% include feature/alert.html text="This is an *alert* that 'warns' a user with centrally aligned text." color="warning" align="center" %}
|
||||||
|
|
||||||
|
#### Include a Modal
|
||||||
|
|
||||||
|
- Modals -- > `{% raw %}{% include feature/modal.html button="This is a modal using a 'primary' colored button to invite clicking" title="when clicked:" text="A Modal will pop out a box with some more information" color="primary" %}{% endraw %}`
|
||||||
|
|
||||||
|
{% include feature/modal.html button="This is a modal using a 'primary' colored button to invite clicking" title="When clicked:" text="A Modal will pop out a box with some more information" color="primary" %}
|
||||||
186
.github/_includes/cb/jekyll-toc.html
vendored
Normal file
186
.github/_includes/cb/jekyll-toc.html
vendored
Normal file
@@ -0,0 +1,186 @@
|
|||||||
|
{% capture tocWorkspace %}
|
||||||
|
{% comment %}
|
||||||
|
Copyright (c) 2017 Vladimir "allejo" Jimenez
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person
|
||||||
|
obtaining a copy of this software and associated documentation
|
||||||
|
files (the "Software"), to deal in the Software without
|
||||||
|
restriction, including without limitation the rights to use,
|
||||||
|
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the
|
||||||
|
Software is furnished to do so, subject to the following
|
||||||
|
conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be
|
||||||
|
included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||||
|
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||||
|
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||||
|
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||||
|
OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
{% endcomment %}
|
||||||
|
{% comment %}
|
||||||
|
Version 1.2.0
|
||||||
|
https://github.com/allejo/jekyll-toc
|
||||||
|
|
||||||
|
"...like all things liquid - where there's a will, and ~36 hours to spare, there's usually a/some way" ~jaybe
|
||||||
|
|
||||||
|
Usage:
|
||||||
|
{% include toc.html html=content sanitize=true class="inline_toc" id="my_toc" h_min=2 h_max=3 %}
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
* html (string) - the HTML of compiled markdown generated by kramdown in Jekyll
|
||||||
|
|
||||||
|
Optional Parameters:
|
||||||
|
* sanitize (bool) : false - when set to true, the headers will be stripped of any HTML in the TOC
|
||||||
|
* class (string) : '' - a CSS class assigned to the TOC
|
||||||
|
* id (string) : '' - an ID to assigned to the TOC
|
||||||
|
* h_min (int) : 1 - the minimum TOC header level to use; any header lower than this value will be ignored
|
||||||
|
* h_max (int) : 6 - the maximum TOC header level to use; any header greater than this value will be ignored
|
||||||
|
* ordered (bool) : false - when set to true, an ordered list will be outputted instead of an unordered list
|
||||||
|
* item_class (string) : '' - add custom class(es) for each list item; has support for '%level%' placeholder, which is the current heading level
|
||||||
|
* submenu_class (string) : '' - add custom class(es) for each child group of headings; has support for '%level%' placeholder which is the current "submenu" heading level
|
||||||
|
* base_url (string) : '' - add a base url to the TOC links for when your TOC is on another page than the actual content
|
||||||
|
* anchor_class (string) : '' - add custom class(es) for each anchor element
|
||||||
|
* skip_no_ids (bool) : false - skip headers that do not have an `id` attribute
|
||||||
|
|
||||||
|
Output:
|
||||||
|
An ordered or unordered list representing the table of contents of a markdown block. This snippet will only
|
||||||
|
generate the table of contents and will NOT output the markdown given to it
|
||||||
|
|
||||||
|
Modified:
|
||||||
|
Functionality was modified for CollectionBuilder's context to allow site's creator to trigger a link to the technical credits in the side nav. Additions include lines 165-167 in this file, and the addition of an optional "credits" parameter in the include. credits=true will add "Technical" to the side nav with a link to the #technical anchor. credits=false or not including credits will remove "Technical" from the side nav.
|
||||||
|
{% endcomment %}
|
||||||
|
|
||||||
|
{% capture newline %}
|
||||||
|
{% endcapture %}
|
||||||
|
{% assign newline = newline | rstrip %} <!-- Remove the extra spacing but preserve the newline -->
|
||||||
|
|
||||||
|
{% capture deprecation_warnings %}{% endcapture %}
|
||||||
|
|
||||||
|
{% if include.baseurl %}
|
||||||
|
{% capture deprecation_warnings %}{{ deprecation_warnings }}<!-- jekyll-toc :: "baseurl" has been deprecated, use "base_url" instead -->{{ newline }}{% endcapture %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if include.skipNoIDs %}
|
||||||
|
{% capture deprecation_warnings %}{{ deprecation_warnings }}<!-- jekyll-toc :: "skipNoIDs" has been deprecated, use "skip_no_ids" instead -->{{ newline }}{% endcapture %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% capture jekyll_toc %}{% endcapture %}
|
||||||
|
{% assign orderedList = include.ordered | default: false %}
|
||||||
|
{% assign baseURL = include.base_url | default: include.baseurl | default: '' %}
|
||||||
|
{% assign skipNoIDs = include.skip_no_ids | default: include.skipNoIDs | default: false %}
|
||||||
|
{% assign minHeader = include.h_min | default: 1 %}
|
||||||
|
{% assign maxHeader = include.h_max | default: 6 %}
|
||||||
|
{% assign nodes = include.html | strip | split: '<h' %}
|
||||||
|
|
||||||
|
{% assign firstHeader = true %}
|
||||||
|
{% assign currLevel = 0 %}
|
||||||
|
{% assign lastLevel = 0 %}
|
||||||
|
|
||||||
|
{% capture listModifier %}{% if orderedList %}ol{% else %}ul{% endif %}{% endcapture %}
|
||||||
|
|
||||||
|
{% for node in nodes %}
|
||||||
|
{% if node == "" %}
|
||||||
|
{% continue %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% assign currLevel = node | replace: '"', '' | slice: 0, 1 | times: 1 %}
|
||||||
|
|
||||||
|
{% if currLevel < minHeader or currLevel > maxHeader %}
|
||||||
|
{% continue %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% assign _workspace = node | split: '</h' %}
|
||||||
|
|
||||||
|
{% assign _idWorkspace = _workspace[0] | split: 'id="' %}
|
||||||
|
{% assign _idWorkspace = _idWorkspace[1] | split: '"' %}
|
||||||
|
{% assign htmlID = _idWorkspace[0] %}
|
||||||
|
|
||||||
|
{% assign _classWorkspace = _workspace[0] | split: 'class="' %}
|
||||||
|
{% assign _classWorkspace = _classWorkspace[1] | split: '"' %}
|
||||||
|
{% assign htmlClass = _classWorkspace[0] %}
|
||||||
|
|
||||||
|
{% if htmlClass contains "no_toc" %}
|
||||||
|
{% continue %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if firstHeader %}
|
||||||
|
{% assign minHeader = currLevel %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% capture _hAttrToStrip %}{{ _workspace[0] | split: '>' | first }}>{% endcapture %}
|
||||||
|
{% assign header = _workspace[0] | replace: _hAttrToStrip, '' %}
|
||||||
|
|
||||||
|
{% if include.item_class and include.item_class != blank %}
|
||||||
|
{% capture listItemClass %} class="{{ include.item_class | replace: '%level%', currLevel | split: '.' | join: ' ' }}"{% endcapture %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if include.submenu_class and include.submenu_class != blank %}
|
||||||
|
{% assign subMenuLevel = currLevel | minus: 1 %}
|
||||||
|
{% capture subMenuClass %} class="{{ include.submenu_class | replace: '%level%', subMenuLevel | split: '.' | join: ' ' }}"{% endcapture %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% capture anchorBody %}{% if include.sanitize %}{{ header | strip_html }}{% else %}{{ header }}{% endif %}{% endcapture %}
|
||||||
|
|
||||||
|
{% if htmlID %}
|
||||||
|
{% capture anchorAttributes %} href="{% if baseURL %}{{ baseURL }}{% endif %}#{{ htmlID }}"{% endcapture %}
|
||||||
|
{% if include.anchor_class %}
|
||||||
|
{% capture anchorAttributes %}{{ anchorAttributes }} class="{{ include.anchor_class | split: '.' | join: ' ' }}"{% endcapture %}
|
||||||
|
{% endif %}
|
||||||
|
{% capture listItem %}<a{{ anchorAttributes }}>{{ anchorBody }}</a>{% endcapture %}
|
||||||
|
{% elsif skipNoIDs == true %}
|
||||||
|
{% continue %}
|
||||||
|
{% else %}
|
||||||
|
{% capture listItem %}{{ anchorBody }}{% endcapture %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if currLevel > lastLevel %}
|
||||||
|
{% capture jekyll_toc %}{{ jekyll_toc }}<{{ listModifier }}{{ subMenuClass }}>{% endcapture %}
|
||||||
|
{% elsif currLevel < lastLevel %}
|
||||||
|
{% assign repeatCount = lastLevel | minus: currLevel %}
|
||||||
|
{% for i in (1..repeatCount) %}
|
||||||
|
{% capture jekyll_toc %}{{ jekyll_toc }}</li></{{ listModifier }}>{% endcapture %}
|
||||||
|
{% endfor %}
|
||||||
|
{% capture jekyll_toc %}{{ jekyll_toc }}</li>{% endcapture %}
|
||||||
|
{% else %}
|
||||||
|
{% capture jekyll_toc %}{{ jekyll_toc }}</li>{% endcapture %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% capture jekyll_toc %}{{ jekyll_toc }}<li{{ listItemClass }}>{{ listItem }}{% endcapture %}
|
||||||
|
|
||||||
|
{% assign lastLevel = currLevel %}
|
||||||
|
{% assign firstHeader = false %}
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
|
||||||
|
{% assign repeatCount = minHeader | minus: 1 %}
|
||||||
|
{% assign repeatCount = lastLevel | minus: repeatCount %}
|
||||||
|
|
||||||
|
{% for i in (1..repeatCount) %}
|
||||||
|
{% if i == repeatCount and include.credits == true %}
|
||||||
|
{% capture jekyll_toc %}{{ jekyll_toc }}<li><a href="#technical">Technical</a>{% endcapture %}
|
||||||
|
{% endif %}
|
||||||
|
{% capture jekyll_toc %}{{ jekyll_toc }}</li></{{ listModifier }}>{% endcapture %}
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
{% if jekyll_toc != '' %}
|
||||||
|
{% assign rootAttributes = '' %}
|
||||||
|
{% if include.class and include.class != blank %}
|
||||||
|
{% capture rootAttributes %} class="{{ include.class | split: '.' | join: ' ' }}"{% endcapture %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if include.id and include.id != blank %}
|
||||||
|
{% capture rootAttributes %}{{ rootAttributes }} id="{{ include.id }}"{% endcapture %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if rootAttributes %}
|
||||||
|
{% assign nodes = jekyll_toc | split: '>' %}
|
||||||
|
{% capture jekyll_toc %}<{{ listModifier }}{{ rootAttributes }}>{{ nodes | shift | join: '>' }}>{% endcapture %}
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
{% endcapture %}{% assign tocWorkspace = '' %}{{ deprecation_warnings }}{{ jekyll_toc -}}
|
||||||
70
.github/_includes/collection-banner.html
vendored
Normal file
70
.github/_includes/collection-banner.html
vendored
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
{% if page.layout == "home-infographic" and site.data.theme.featured-image %}
|
||||||
|
<style>
|
||||||
|
#home-banner {
|
||||||
|
background-image: url('{{ site.data.featured_item.src | relative_url }}');
|
||||||
|
background-size: cover;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: {{ site.data.theme.home-banner-image-position | default: 'center' }};
|
||||||
|
}
|
||||||
|
#home-title-box {
|
||||||
|
padding-top: {{ site.data.theme.home-title-y-padding | default: '5em' }};
|
||||||
|
padding-bottom: {{ site.data.theme.home-title-y-padding | default: '5em' }};
|
||||||
|
}
|
||||||
|
@media screen and (max-width: 576px) {
|
||||||
|
#home-title-box {
|
||||||
|
padding-top: min({{ site.data.theme.home-title-y-padding | default: '5em' }}, 32vh);
|
||||||
|
padding-bottom: min({{ site.data.theme.home-title-y-padding | default: '5em' }}, 32vh);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<div id="home-banner" class="container-fluid mb-0 p-0">
|
||||||
|
<a class="portfolio-site-link"
|
||||||
|
href="https://1800nasi.net/category/bqkc/"
|
||||||
|
title="Main domain to view exhibitions, programs and media features of {B/qKC}">
|
||||||
|
VIEW THE ARCHIVE IN PRACTICE →
|
||||||
|
</a>
|
||||||
|
<div id="home-title-box" class="position-relative">
|
||||||
|
<div class="p-2 text-white bg-dark bg-opacity-75 d-inline-block">
|
||||||
|
{% if site.organization-logo-nav %}
|
||||||
|
<a class="d-none d-md-block" href="{{ site.organization-link }}">
|
||||||
|
<img id="home-banner-logo" src="{{ site.organization-logo-nav | relative_url }}" alt="{{ site.organization-name | escape }} home">
|
||||||
|
</a>
|
||||||
|
{% endif %}
|
||||||
|
<h1 class="display-4 m-0">{{ site.title }}</h1>
|
||||||
|
{% if site.tagline %}<p class="mb-0">{{ site.tagline }}</p>{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% unless site.data.theme.featured-image contains '/' %}
|
||||||
|
<div class="featured-image-label">
|
||||||
|
<a href="{{ site.data.featured_item.link | relative_url }}"
|
||||||
|
title="{{ site.data.featured_item.alt | escape }}">
|
||||||
|
Featured Image
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
{% endunless %}
|
||||||
|
</div>
|
||||||
|
{%- else -%}
|
||||||
|
<div class="container">
|
||||||
|
<div class="container position-relative">
|
||||||
|
<a class="portfolio-site-link"
|
||||||
|
href="https://1800nasi.net/category/bqkc/"
|
||||||
|
title="Main domain to view exhibitions, programs and media features of {B/qKC}">
|
||||||
|
ARCHIVE IN PRACTICE →
|
||||||
|
</a>
|
||||||
|
<div class="row align-items-center">
|
||||||
|
<div id="title" class="{% if site.organization-logo-banner %}col-md-9{% else %}col-12{% endif %}">
|
||||||
|
<h1 class="mt-2"><a class="text-dark" href="{{ '/' | relative_url }}">{{ site.title }}</a></h1>
|
||||||
|
{% if site.tagline %}<p>{{ site.tagline }}</p>{% endif %}
|
||||||
|
</div>
|
||||||
|
{% if site.organization-logo-banner %}
|
||||||
|
<div class="col-md-3 d-none d-lg-block text-end">
|
||||||
|
<a class="btn btn-outline-light" href="{{ site.organization-link }}">
|
||||||
|
<img class="img-fluid" src="{{ site.organization-logo-banner | relative_url }}" title="{{ site.organization-name }}" alt="{{ site.organization-name | escape }} home">
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{%- endif -%}
|
||||||
52
.github/_includes/collection-nav.html
vendored
Normal file
52
.github/_includes/collection-nav.html
vendored
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
<nav class="navbar navbar-expand-lg {{ site.data.theme.navbar-color | default: 'navbar-dark' }} {{ site.data.theme.navbar-background | default: 'bg-dark' }}">
|
||||||
|
<div class="container">
|
||||||
|
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#page-nav" aria-controls="page-nav" aria-expanded="false" aria-label="Toggle navigation">
|
||||||
|
<span class="navbar-toggler-icon"></span>
|
||||||
|
</button>
|
||||||
|
|
||||||
|
{% if site.organization-logo-nav %}<span class="d-lg-none text-end">
|
||||||
|
<a href="{{ site.organization-link }}">
|
||||||
|
<img class="img-fluid" id="mobile-nav-image" src="{{ site.organization-logo-nav | relative_url }}" title="{{ site.organization-name }}" alt="{{ site.organization-name | escape }} home" >
|
||||||
|
</a>
|
||||||
|
</span>{% endif %}
|
||||||
|
|
||||||
|
<div class="collapse navbar-collapse" id="page-nav">
|
||||||
|
<ul class="navbar-nav me-auto">
|
||||||
|
{%- assign navItems = site.data.config-nav | where_exp: 'item', 'item.display_name and item.dropdown_parent == nil' -%}
|
||||||
|
{% for nav in navItems %}
|
||||||
|
{% if nav.stub %}
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link{% if page.url == nav.stub %} active{% endif %}{% if nav.display_name == 'DONATE' %} donate-link{% endif %}"
|
||||||
|
href="{{ nav.stub | relative_url }}">
|
||||||
|
{{ nav.display_name }}
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
{%- else -%}
|
||||||
|
<li class="nav-item dropdown">
|
||||||
|
{% assign navChildren = site.data.config-nav | where_exp: 'item', 'item.dropdown_parent == nav.display_name' %}
|
||||||
|
{%- assign childStubs = navChildren | map: 'stub' -%}
|
||||||
|
<a class="nav-link dropdown-toggle{% if childStubs contains page.url %} active{% endif %}" data-bs-toggle="dropdown" href="#" role="button" aria-haspopup="true" aria-expanded="false">{{ nav.display_name }}</a>
|
||||||
|
<div class="dropdown-menu">
|
||||||
|
{% for c in navChildren %}
|
||||||
|
{% if c.stub %}
|
||||||
|
<a class="dropdown-item {% if page.url == c.stub %}active{% endif %}"
|
||||||
|
href="{{ c.stub | relative_url }}">
|
||||||
|
{{ c.display_name }}
|
||||||
|
</a>
|
||||||
|
{% else %}
|
||||||
|
<div class="dropdown-header nav-section-label">
|
||||||
|
{{ c.display_name }}
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
{% endif %}
|
||||||
|
{%- endfor -%}
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
{% include nav-search-lunr.html %}
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
213
.github/_includes/data-download-modal.html
vendored
Normal file
213
.github/_includes/data-download-modal.html
vendored
Normal file
@@ -0,0 +1,213 @@
|
|||||||
|
{% comment %}
|
||||||
|
This include creates a modal pop up with data export options.
|
||||||
|
The logic of which formats appear is based on config-nav stubs:
|
||||||
|
if subject.html, map/, location.html, or timeline.html are present,
|
||||||
|
corresponding data formats will be available for download.
|
||||||
|
{%- endcomment -%}
|
||||||
|
|
||||||
|
{%- assign stubs = site.data.config-nav | map: 'stub' | join: ';' -%}
|
||||||
|
<button type="button" class="btn btn-primary btn-lg float-md-end" data-bs-toggle="modal" data-bs-target="#dataModal">Download Data</button>
|
||||||
|
<!-- Modal -->
|
||||||
|
<div class="modal fade" id="dataModal" tabindex="-1" role="dialog" aria-labelledby="dataModalLabel" aria-hidden="true">
|
||||||
|
<div class="modal-dialog modal-lg" role="document">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
|
||||||
|
<p class="no toc">Download this collection's data in a variety of reusable formats. Beware of this archive's copyright information!</p>
|
||||||
|
|
||||||
|
{% if site.data.theme.metadata-export-fields %}
|
||||||
|
<div class="card my-3">
|
||||||
|
<div class="card-body">
|
||||||
|
<h2 class="card-title h4 no toc">Complete Metadata</h2>
|
||||||
|
<p class="card-text">All metadata fields for all collection items, available as a CSV spreadsheet (usable in Excel, Google Sheets, and similar programs) or JSON file (often used with web applications).</p>
|
||||||
|
<a href="{{ '/assets/data/metadata.csv' | relative_url }}" class="btn btn-outline-dark" download>Metadata CSV</a>
|
||||||
|
<a href="{{ '/assets/data/metadata.json' | relative_url }}" class="btn btn-outline-dark" target="_blank">Metadata JSON</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{%- endif -%}
|
||||||
|
{% if site.data.theme.metadata-facets-fields %}
|
||||||
|
<div class="card my-3">
|
||||||
|
<div class="card-body">
|
||||||
|
<h2 class="card-title h4 no toc">Metadata Facets</h2>
|
||||||
|
<p class="card-text no toc">List of unique values and their count for specific metadata fields, useful for understanding content of the fields.</p>
|
||||||
|
<a href="{{ '/assets/data/facets.json' | relative_url }}" class="btn btn-outline-dark" target="_blank">Facets JSON</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{%- endif -%}
|
||||||
|
{% if stubs contains "subject" %}
|
||||||
|
<div class="card my-3">
|
||||||
|
<div class="card-body">
|
||||||
|
<h2 class="card-title h4 no toc">Subject Metadata</h2>
|
||||||
|
<p class="card-text no toc">Unique values and counts of subject metadata, useful for further analyzing the content of this collection.</p>
|
||||||
|
<a href="{{ '/assets/data/subjects.csv' | relative_url }}" class="btn btn-outline-dark" download>Subjects CSV</a>
|
||||||
|
<a href="{{ '/assets/data/subjects.json' | relative_url }}" class="btn btn-outline-dark" target="_blank">Subjects JSON</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
{% if stubs contains "location" %}
|
||||||
|
<div class="card my-3">
|
||||||
|
<div class="card-body">
|
||||||
|
<h2 class="card-title h4 no toc">Locations</h2>
|
||||||
|
<p class="card-text no toc">Unique values and counts of location metadata, useful for further visualization and analysis of this collection's place names.</p>
|
||||||
|
<a href="{{ '/assets/data/locations.csv' | relative_url }}" class="btn btn-outline-dark" download>Locations CSV</a>
|
||||||
|
<a href="{{ '/assets/data/locations.json' | relative_url }}" class="btn btn-outline-dark" target="_blank">Locations JSON</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{%- endif -%}
|
||||||
|
{% if stubs contains "map" %}
|
||||||
|
<div class="card my-3">
|
||||||
|
<div class="card-body">
|
||||||
|
<h2 class="card-title h4 no toc">GeoJSON</h2>
|
||||||
|
<p class="card-text no toc">Metadata for all collection items that have geographic coordinates in <a href="https://en.wikipedia.org/wiki/GeoJSON">GeoJSON</a> format, useful for further exploration and analysis of this collection through a geographical lense.</p>
|
||||||
|
<a href="{{ '/assets/data/geodata.json' | relative_url }}" class="btn btn-outline-dark" target="_blank">Geodata JSON</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{%- endif -%}
|
||||||
|
{% if stubs contains "timeline" %}
|
||||||
|
<div class="card my-3">
|
||||||
|
<div class="card-body">
|
||||||
|
<h2 class="card-title h4 no toc">Timeline</h2>
|
||||||
|
<p class="card-text no toc">A time-focused JSON data export designed for use with <a href="https://timeline.knightlab.com/">TimelineJS</a>.</p>
|
||||||
|
<a href="{{ '/assets/data/timelinejs.json' | relative_url }}" class="btn btn-outline-dark" target="_blank">TimelineJS JSON</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{%- endif -%}
|
||||||
|
<div class="card my-3">
|
||||||
|
<div class="card-body">
|
||||||
|
<h2 class="card-title h4 no toc">Website Source Code</h2>
|
||||||
|
<p class="card-text no toc">GitHub repository containing source code for this project built with <a href="https://github.com/CollectionBuilder/collectionbuilder-csv">CollectionBuilder-CSV</a>.</p>
|
||||||
|
<a href="{{ site.source-code | default: 'https://github.com/CollectionBuilder/collectionbuilder-csv' }}" class="btn btn-outline-dark">Source Code</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script type="application/ld+json">
|
||||||
|
{
|
||||||
|
"@context":"https://schema.org/",
|
||||||
|
"@type":"Dataset",
|
||||||
|
"name":"{{ site.title | escape }} Data",
|
||||||
|
"description":"Metadata and data derived from {{ site.title | escape }}. {{ site.description | escape }}",
|
||||||
|
{% if site.keywords %}"keywords": {% assign keywords = site.keywords | split: ';' %} {{ keywords | jsonify }},{% endif %}
|
||||||
|
"url":"{{ page.url | absolute_url }}",
|
||||||
|
"license" : "https://creativecommons.org/publicdomain/zero/1.0/",
|
||||||
|
"creator": [
|
||||||
|
{
|
||||||
|
"@type": "Organization",
|
||||||
|
"sameAs": "{{ site.organization-link }}",
|
||||||
|
"name": "{{ site.organization-name | escape }}"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"hasPart" : [
|
||||||
|
{% if site.data.theme.metadata-facets-fields %}
|
||||||
|
{
|
||||||
|
"@type": "Dataset",
|
||||||
|
"name": "{{ site.title | escape }} Metadata Facets",
|
||||||
|
"description": "Unique values and counts of metadata facet fields.",
|
||||||
|
"license" : "https://creativecommons.org/publicdomain/zero/1.0/",
|
||||||
|
"distribution":[
|
||||||
|
{
|
||||||
|
"@type":"DataDownload",
|
||||||
|
"encodingFormat":"JSON",
|
||||||
|
"contentUrl":"{{ '/assets/data/facets.json' | absolute_url }}"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{%- endif -%}
|
||||||
|
{% if stubs contains "subject" %}
|
||||||
|
{
|
||||||
|
"@type": "Dataset",
|
||||||
|
"name": "{{ site.title | escape }} metadata subject counts",
|
||||||
|
"description": "Unique values and counts of metadata subject fields.",
|
||||||
|
"license" : "https://creativecommons.org/publicdomain/zero/1.0/",
|
||||||
|
"distribution":[
|
||||||
|
{
|
||||||
|
"@type":"DataDownload",
|
||||||
|
"encodingFormat":"CSV",
|
||||||
|
"contentUrl":"{{ '/assets/data/subjects.csv' | absolute_url }}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"@type":"DataDownload",
|
||||||
|
"encodingFormat":"JSON",
|
||||||
|
"contentUrl":"{{ '/assets/data/subjects.json' | absolute_url }}"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{%- endif -%}
|
||||||
|
{% if stubs contains "location" %}
|
||||||
|
{
|
||||||
|
"@type": "Dataset",
|
||||||
|
"name": "{{ site.title | escape }} metadata location counts",
|
||||||
|
"description": "Unique values and counts of metadata location fields.",
|
||||||
|
"license" : "https://creativecommons.org/publicdomain/zero/1.0/",
|
||||||
|
"distribution":[
|
||||||
|
{
|
||||||
|
"@type":"DataDownload",
|
||||||
|
"encodingFormat":"CSV",
|
||||||
|
"contentUrl":"{{ '/assets/data/locations.csv' | absolute_url }}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"@type":"DataDownload",
|
||||||
|
"encodingFormat":"JSON",
|
||||||
|
"contentUrl":"{{ '/assets/data/locations.json' | absolute_url }}"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{%- endif -%}
|
||||||
|
{% if stubs contains "map" %}
|
||||||
|
{
|
||||||
|
"@type": "Dataset",
|
||||||
|
"name": "{{ site.title | escape }} geographic metadata",
|
||||||
|
"description": "Geojson data containing all objects with lat-longs and associated descriptive metadata.",
|
||||||
|
"license" : "https://creativecommons.org/publicdomain/zero/1.0/",
|
||||||
|
"distribution":[
|
||||||
|
{
|
||||||
|
"@type":"DataDownload",
|
||||||
|
"encodingFormat":"JSON",
|
||||||
|
"contentUrl":"{{ '/assets/data/geodata.json' | absolute_url }}"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{%- endif -%}
|
||||||
|
{% if stubs contains "timeline" %}
|
||||||
|
{
|
||||||
|
"@type": "Dataset",
|
||||||
|
"name": "{{ site.title | escape }} timeline metadata",
|
||||||
|
"description": "Time-based metadata formatted for TimelineJS or other applications.",
|
||||||
|
"license" : "https://creativecommons.org/publicdomain/zero/1.0/",
|
||||||
|
"distribution":[
|
||||||
|
{
|
||||||
|
"@type":"DataDownload",
|
||||||
|
"encodingFormat":"JSON",
|
||||||
|
"contentUrl":"{{ '/assets/data/timelinejs.json' | absolute_url }}"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{%- endif -%}
|
||||||
|
{
|
||||||
|
"@type": "Dataset",
|
||||||
|
"name": "{{ site.title | escape }} full metadata",
|
||||||
|
"description": "Complete metadata export for {{ site.title | escape }} objects.",
|
||||||
|
"license" : "https://creativecommons.org/publicdomain/zero/1.0/",
|
||||||
|
"distribution":[
|
||||||
|
{
|
||||||
|
"@type":"DataDownload",
|
||||||
|
"encodingFormat":"CSV",
|
||||||
|
"contentUrl":"{{ '/assets/data/metadata.csv' | absolute_url }}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"@type":"DataDownload",
|
||||||
|
"encodingFormat":"JSON",
|
||||||
|
"contentUrl":"{{ '/assets/data/metadata.json' | absolute_url }}"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
</script>
|
||||||
14
.github/_includes/data-table.html
vendored
Normal file
14
.github/_includes/data-table.html
vendored
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
{% assign fields = site.data.config-table | map: 'display_name' %}
|
||||||
|
|
||||||
|
<div class="table-responsive-md">
|
||||||
|
<table id="item-table" class="table table-striped">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
{% for f in fields %}
|
||||||
|
<th scope="col">{{ f }}</th>
|
||||||
|
{% endfor %}
|
||||||
|
<th>Link</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
55
.github/_includes/feature/accordion.html
vendored
Normal file
55
.github/_includes/feature/accordion.html
vendored
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
{% comment %}
|
||||||
|
|
||||||
|
Bootstrap accordion feature, https://getbootstrap.com/docs/5.1/components/accordion/
|
||||||
|
|
||||||
|
e.g. --> {% include feature/accordion.html title1="Example section" text1=example1 title2="Section two" text2=example2 title3="Section three" text3=example3 %}
|
||||||
|
|
||||||
|
Options:
|
||||||
|
- "title1", "title2", "title3" = title for each section of accordion (max three)
|
||||||
|
- "text1", "text2", "text3" = text for each section of accordion (max three). You will probably want to capture the text using a Liquid capture, then use the variable to provide text to this include.
|
||||||
|
- "open" = optional, by default is "false". Add "true" to have the first section of the accordion open.
|
||||||
|
- "heading_level" = customize the level of the heading if necessary for accessibility, choose "h1", "h2", "h3", etc (optional, default "h3")
|
||||||
|
|
||||||
|
{%- endcomment -%}
|
||||||
|
<div class="accordion mb-3 narrow-content" id="accordionInclude">
|
||||||
|
<div class="accordion-item">
|
||||||
|
<{{ include.heading_level | default: 'h3' | strip }} class="accordion-header" id="headingOne">
|
||||||
|
<button class="accordion-button{% unless include.open %} collapsed{% endunless %}" type="button" data-bs-toggle="collapse" data-bs-target="#collapseOne" aria-expanded="{% if include.open == true %}true{% else %}false{% endif %}" aria-controls="collapseOne">
|
||||||
|
{{ include.title1 }}
|
||||||
|
</button>
|
||||||
|
</{{ include.heading_level | default: 'h3' | strip }}>
|
||||||
|
<div id="collapseOne" class="accordion-collapse collapse{% if include.open == true %} show{% endif %}" aria-labelledby="headingOne" data-bs-parent="#accordionInclude">
|
||||||
|
<div class="accordion-body">
|
||||||
|
{{ include.text1 | markdownify }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% if include.title2 %}
|
||||||
|
<div class="accordion-item">
|
||||||
|
<{{ include.heading_level | default: 'h3' | strip }} class="accordion-header" id="headingTwo">
|
||||||
|
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseTwo" aria-expanded="false" aria-controls="collapseTwo">
|
||||||
|
{{ include.title2 }}
|
||||||
|
</button>
|
||||||
|
</{{ include.heading_level | default: 'h3' | strip }}>
|
||||||
|
<div id="collapseTwo" class="accordion-collapse collapse" aria-labelledby="headingTwo" data-bs-parent="#accordionInclude">
|
||||||
|
<div class="accordion-body">
|
||||||
|
{{ include.text2 | markdownify }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
{% if include.title3 %}
|
||||||
|
<div class="accordion-item">
|
||||||
|
<{{ include.heading_level | default: 'h3' | strip }} class="accordion-header" id="headingThree">
|
||||||
|
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseThree" aria-expanded="false" aria-controls="collapseThree">
|
||||||
|
{{ include.title3 }}
|
||||||
|
</button>
|
||||||
|
</{{ include.heading_level | default: 'h3' | strip }}>
|
||||||
|
<div id="collapseThree" class="accordion-collapse collapse" aria-labelledby="headingThree" data-bs-parent="#accordionInclude">
|
||||||
|
<div class="accordion-body">
|
||||||
|
{{ include.text3 | markdownify }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
17
.github/_includes/feature/alert.html
vendored
Normal file
17
.github/_includes/feature/alert.html
vendored
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
{% comment %}
|
||||||
|
|
||||||
|
Bootstrap Alert, https://getbootstrap.com/docs/5.1/components/alerts/
|
||||||
|
|
||||||
|
E.G. --> {% include feature/alert.html text="example text" color="warning" align="center" %}
|
||||||
|
|
||||||
|
Options:
|
||||||
|
- "text" = text for alert, can use Markdown.
|
||||||
|
- "color" = a Bootstrap color (primary, secondary, success, danger, warning, info, light, dark)
|
||||||
|
- "align" = text alignment (center, right, left)
|
||||||
|
|
||||||
|
{%- endcomment -%}
|
||||||
|
<div class="narrow-content">
|
||||||
|
<div class="alert alert-{{ include.color | default: 'primary' }} feature-alert {% if include.align %}text-{{ include.align | default: 'center' }}{% endif %}" role="alert">
|
||||||
|
{{ include.text | markdownify }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
97
.github/_includes/feature/audio-modal.html
vendored
Normal file
97
.github/_includes/feature/audio-modal.html
vendored
Normal file
@@ -0,0 +1,97 @@
|
|||||||
|
{% comment %}
|
||||||
|
|
||||||
|
Audio modal feature from an item's objectid or external link.
|
||||||
|
This include adds a card featuring the thumb image, title, and description of an audio item--when clicked it opens a modal containing the audio embed. The modal displays audio information, transcript, link to item. This is especially useful feature if you would like multiple videos on one page.
|
||||||
|
|
||||||
|
E.G. --> {% include feature/audio-modal.html objectid="demo_003" %}
|
||||||
|
|
||||||
|
It requires an "objectid" with the include, which is used to find the audio details. Alternatively, a URL to an external audio file can be used in "objectid".
|
||||||
|
|
||||||
|
Options:
|
||||||
|
- "objectid" = several options below (required)
|
||||||
|
- an objectid of an audio item in this collection, e.g. "demo_003"
|
||||||
|
- an external link to an MP3 file hosted elsewhere, e.g. "https://www.lib.uidaho.edu/digital/mp3s/Clouds.mp3"
|
||||||
|
- a relative link to an MP3 file somewhere else in this repository, e.g. "/assets/{{ includeid }}.mp3"
|
||||||
|
- "title" = by default automatically adds the title from item metadata, which will be used for the modal btn and modal title. Manually set by using the title option. (optional)
|
||||||
|
- "heading_level" = customize the level of the heading if necessary for accessibility, choose "h1", "h2", "h3", etc (optional, default "h2")
|
||||||
|
- "caption" = by default the figure include automatically uses the description of the item from your metadata. The caption option allows you to manually add a different caption, or give the value false for none. (optional)
|
||||||
|
- "image" = by default if using an objectid, if the item has a image_small value, the image will be used on the card. The image option allows you to manually add a image for non-collection videos. Give "false" to not display an image (optional)
|
||||||
|
- "transcript" = by default if using an objectid, if the item has a object_transcript value, the view transcript button will automatically be added. The transcript option allows you to manually add a different transcript or provide one for non-collection videos. (optional)
|
||||||
|
|
||||||
|
Note: if you have issues make sure the item is a audio item.
|
||||||
|
Audio file may not play correctly from dev server on Chrome browser! It will work in production.
|
||||||
|
|
||||||
|
{% endcomment %}
|
||||||
|
{% if include.objectid contains "/" %}
|
||||||
|
{%- capture src -%}{{ include.objectid | relative_url }}{%- endcapture -%}
|
||||||
|
{%- capture audio_link -%}{{ src }}{%- endcapture -%}
|
||||||
|
{%- capture audio_caption -%}{{ include.caption }}{%- endcapture -%}
|
||||||
|
{%- capture audio_title -%}{{ include.title }}{%- endcapture -%}
|
||||||
|
{% capture audio_transcript %}{{ include.transcript }}{% endcapture %}
|
||||||
|
{% capture audio_poster %}{% if include.image == false %}{% else %}{{ include.image | relative_url | default: '' }}{% endif %}{% endcapture %}
|
||||||
|
{% else %}
|
||||||
|
{%- assign item = site.data[site.metadata] | where: "objectid", include.objectid | first -%}
|
||||||
|
{%- capture audio_link -%}{{ '/items/' | relative_url }}{% if item.parentid %}{{ item.parentid }}.html#{{ item.objectid }}{% else %}{{ item.objectid }}.html{% endif %}{%- endcapture -%}
|
||||||
|
{%- capture src -%}{{ item.object_location | relative_url }}{% endcapture %}
|
||||||
|
{%- capture audio_caption -%}{% if include.caption %}{{ include.caption }}{% else %}{{ item.description }}{% endif %}{%- endcapture -%}
|
||||||
|
{%- capture audio_title -%}{% if include.title %}{{ include.title }}{% else %}{{ item.title }}{% endif %}{%- endcapture -%}
|
||||||
|
{% capture audio_transcript %}{{ include.transcript | default: item.object_transcript }}{% endcapture %}
|
||||||
|
{% capture audio_poster %}{% if include.image == false %}{% else %}{{ include.image | default: item.image_small | relative_url | default: '' }}{% endif %}{% endcapture %}
|
||||||
|
{% endif %}
|
||||||
|
{% capture includeid %}{% if include.objectid.size > 10 %}{{ include.objectid | slice: -10, 10 | slugify }}{% else %}{{ include.objectid | slugify }}{% endif %}{% endcapture %}
|
||||||
|
<div class="card my-3 narrow-content">
|
||||||
|
{% if audio_poster != "" %}<img src="{{ audio_poster | relative_url }}" class="card-img-top" alt="{{ audio_title | escape }}">{% endif %}
|
||||||
|
<div class="card-body text-center">
|
||||||
|
<{{ include.heading_level | default: 'h2' | strip }} class="card-title h2">{{ audio_title }}</{{ include.heading_level | default: 'h2' | strip }}>
|
||||||
|
<p class="card-text">{{ audio_caption }}</p>
|
||||||
|
<button class="btn btn-sm btn-primary stretched-link" type="button" data-bs-toggle="modal" data-bs-target="#{{ includeid }}Modal">
|
||||||
|
Listen to Audio
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi icon-sprite" viewBox="0 0 16 16">
|
||||||
|
<path d="M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16"/>
|
||||||
|
<path d="M6.271 5.055a.5.5 0 0 1 .52.038l3.5 2.5a.5.5 0 0 1 0 .814l-3.5 2.5A.5.5 0 0 1 6 10.5v-5a.5.5 0 0 1 .271-.445"/>
|
||||||
|
</svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="modal fade" id="{{ includeid }}Modal" tabindex="-1" aria-labelledby="{{ includeid }}ModalLabel" aria-hidden="true" data-bs-backdrop="static" data-bs-keyboard="false">
|
||||||
|
<div class="modal-dialog modal-lg modal-dialog-centered">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<h1 class="modal-title fs-5" id="{{ includeid }}ModalLabel">{{ audio_title }}</h1>
|
||||||
|
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close" onclick="document.querySelector('#{{ includeid }}ModalAudio').pause();"></button>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
<p class="text-center my-3">
|
||||||
|
<audio controls class="w-100" preload="metadata" id="{{ includeid }}ModalAudio">
|
||||||
|
<source src="{{ src }}" >
|
||||||
|
Your browser does not support the audio element, please <a href="{{ audio_link }}">download the file to listen</a>.
|
||||||
|
</audio>
|
||||||
|
{% if audio_poster != "" %}<img src="{{ audio_poster | relative_url }}" class="img-fluid" alt="{{ audio_title | escape }}">{% endif %}
|
||||||
|
{% unless include.caption == false %}<p class="figure-caption">
|
||||||
|
{{ audio_caption }}
|
||||||
|
</p>{% endunless %}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
{% if audio_transcript != '' %}
|
||||||
|
<div class="collapse mt-3 w-100" id="collapseTranscript{{ includeid }}">
|
||||||
|
<div class="card card-body text-start">
|
||||||
|
{% assign transcript_type = audio_transcript | slice: 0,1 %}
|
||||||
|
{% if transcript_type == '/' %}
|
||||||
|
{% assign transcript_location = audio_transcript | remove_first: '/' %}
|
||||||
|
{% assign transcript = site.pages | where: 'path', transcript_location | first %}
|
||||||
|
{{ transcript.content | markdownify }}
|
||||||
|
{% else %}
|
||||||
|
{{ audio_transcript | markdownify }}
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<button class="btn btn-outline-primary m-2" type="button" data-bs-toggle="collapse" data-bs-target="#collapseTranscript{{ includeid }}" aria-expanded="false" aria-controls="collapseTranscript{{ includeid }}">View Transcript</button>
|
||||||
|
{% endif %}
|
||||||
|
{% unless include.objectid contains '/' %}
|
||||||
|
<a href="{{ audio_link }}" class="btn btn-outline-dark m-2">Visit Item Page</a>{% endunless %}
|
||||||
|
<button type="button" class="btn btn-dark" data-bs-dismiss="modal" onclick="document.querySelector('#{{ includeid }}ModalAudio').pause();">Close</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
37
.github/_includes/feature/audio.html
vendored
Normal file
37
.github/_includes/feature/audio.html
vendored
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
{% comment %}
|
||||||
|
|
||||||
|
Audio embed from an item's objectid or external link.
|
||||||
|
This include adds a audio embed to the page using the html "audio" element.
|
||||||
|
|
||||||
|
E.G. --> {% include feature/audio.html objectid="demo_003" %}
|
||||||
|
|
||||||
|
It requires an "objectid" with the include, which is used to find the audio details. Alternatively, a URL to an external audio file can be used in "objectid".
|
||||||
|
|
||||||
|
Options:
|
||||||
|
- "objectid" = several options below (required)
|
||||||
|
- an objectid of an audio item in this collection, e.g. "demo_003"
|
||||||
|
- an external link to an MP3 file hosted elsewhere, e.g. "https://www.lib.uidaho.edu/digital/mp3s/Clouds.mp3"
|
||||||
|
- a relative link to an MP3 file somewhere else in this repository, e.g. "/assets/example.mp3"
|
||||||
|
- "caption" = by default the figure include automatically adds the title of the item from your metadata. The caption option allows you to manually add a different caption, or give the value false for none. (optional)
|
||||||
|
|
||||||
|
Note: if you have issues make sure the item is a audio item.
|
||||||
|
Audio file may not play correctly from dev server on Chrome browser! It will work in production.
|
||||||
|
|
||||||
|
{%- endcomment -%}
|
||||||
|
{% if include.objectid contains "/" %}
|
||||||
|
{%- capture src -%}{{ include.objectid | relative_url }}{%- endcapture -%}
|
||||||
|
{%- capture audio_link -%}{{ src }}{%- endcapture -%}
|
||||||
|
{%- capture audio_caption -%}{{ include.caption }}{%- endcapture -%}
|
||||||
|
{% else %}
|
||||||
|
{%- assign item = site.data[site.metadata] | where: "objectid", include.objectid | first -%}
|
||||||
|
{%- capture audio_link -%}{{ '/items/' | relative_url }}{% if item.parentid %}{{ item.parentid }}.html#{{ item.objectid }}{% else %}{{ item.objectid }}.html{% endif %}{%- endcapture -%}
|
||||||
|
{%- capture src -%}{{ item.object_location | relative_url }}{% endcapture %}
|
||||||
|
{%- capture audio_caption -%}{% if include.caption %}{{ include.caption }}{% else %}{{ item.title }}{% endif %}{%- endcapture -%}
|
||||||
|
{% endif %}
|
||||||
|
<p class="text-center my-3">
|
||||||
|
<audio controls class="w-100">
|
||||||
|
<source src="{{ src }}" >
|
||||||
|
Your browser does not support the audio element.
|
||||||
|
</audio>
|
||||||
|
{% unless include.caption == false %}<small class="figure-caption"><a href="{{ audio_link }}">{{ audio_caption }}</a></small>{% endunless %}
|
||||||
|
</p>
|
||||||
23
.github/_includes/feature/blockquote.html
vendored
Normal file
23
.github/_includes/feature/blockquote.html
vendored
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
{% comment %}
|
||||||
|
|
||||||
|
Block quote
|
||||||
|
|
||||||
|
E.G. --> {% include feature/blockquote.html text="Knowledge comes, but wisdom lingers" speaker="Alfred Lord Tennyson" source="Locksley Hall" %}
|
||||||
|
|
||||||
|
Options:
|
||||||
|
- "text" = quote text, can use Markdown (required, hint: use a capture statement to add more complex text!)
|
||||||
|
- "speaker" = name of the person who said the quote (optional)
|
||||||
|
- "source" = title of the quote's source (optional)
|
||||||
|
- "link" = link to source, will be added to speaker/source (note: will not be added unless you have a speaker or source value!)
|
||||||
|
|
||||||
|
{%- endcomment -%}
|
||||||
|
<figure class="my-3 narrow-content">
|
||||||
|
<blockquote class="blockquote fs-3">
|
||||||
|
{{ include.text | markdownify }}
|
||||||
|
</blockquote>
|
||||||
|
{% if include.speaker or include.source %}
|
||||||
|
<figcaption class="blockquote-footer text-end fs-4">{% if include.link %}<a href="{{ include.link | relative_url }}">{% endif %}
|
||||||
|
{% if include.speaker %}{{ include.speaker }}{% if include.source %}, {% endif %}{% endif %}
|
||||||
|
{% if include.source %}<cite title="Source Title">{{ include.source }}</cite>{% endif %}
|
||||||
|
{% if include.link %}</a>{% endif %}</figcaption>{% endif %}
|
||||||
|
</figure>
|
||||||
19
.github/_includes/feature/button.html
vendored
Normal file
19
.github/_includes/feature/button.html
vendored
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
{% comment %}
|
||||||
|
|
||||||
|
Bootstrap button link, https://getbootstrap.com/docs/5.1/components/buttons/
|
||||||
|
|
||||||
|
E.G. --> {% include feature/button.html text="Example Button Link" link="https://example.com" color="success" %}
|
||||||
|
|
||||||
|
Options:
|
||||||
|
- "text" = main button text
|
||||||
|
- "link" = button link
|
||||||
|
- "color" = a bootstrap color (primary, secondary, success, danger, warning, info, light, dark)
|
||||||
|
- "size" = optional btn size, choose from "lg", "sm" (defaults to normal size)
|
||||||
|
- "width" = will use Bootstrap sizing to set the % size, choose from "25", "50", "75", or "100"
|
||||||
|
- "centered" = give "true" to add the button to a div and center on page
|
||||||
|
- "float" = will use Bootstrap float utility to add float, choose from "start" (left) or "end" (right) (not recommended)
|
||||||
|
|
||||||
|
{%- endcomment -%}
|
||||||
|
{% if include.centered %}<p class="text-center mb-3">{%- endif -%}
|
||||||
|
<a class="btn{% if include.size %} btn-{{ include.size }}{% endif %} btn-{{ include.color | default: 'secondary' }}{% if include.float %} float-{{ include.float }}{% endif %}{% if include.width %} w-{{ include.width }}{% endif %}" href="{{ include.link }}">{{ include.text }}</a>
|
||||||
|
{% if include.centered %}</p>{%- endif -%}
|
||||||
36
.github/_includes/feature/card.html
vendored
Normal file
36
.github/_includes/feature/card.html
vendored
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
{% comment %}
|
||||||
|
|
||||||
|
Bootstrap Card, https://getbootstrap.com/docs/5.1/components/card/
|
||||||
|
|
||||||
|
E.G. --> {% include feature/card.html text="Some text" header="Example item" objectid="demo_004" %}
|
||||||
|
|
||||||
|
Options:
|
||||||
|
- "text" = main card text, can use markdown formatting (tip: use a Liquid capture to add more complex content)
|
||||||
|
- "header" = card header text (in bar above card content)
|
||||||
|
- "title" = card title text inside card content area
|
||||||
|
- "heading_level" = customize the level of the heading if necessary for accessibility, choose "h1", "h2", "h3", etc (optional, default "h2")
|
||||||
|
- "objectid" = the given object or link to external image will create a card cap image
|
||||||
|
- "alt" = if adding an external image using objectid option, provide alt text for image
|
||||||
|
- "width" = will use responsive sizing to set the % size on desktop (will be 100% on mobile), choose from "25", "50", "75", or "100"
|
||||||
|
- "centered" = give "true" to add mx-auto class on the card to center it (don't use with float!)
|
||||||
|
- "float" = will use responsive float utility to add float on desktop (will not float on mobile), choose from "start" (left) or "end" (right)
|
||||||
|
|
||||||
|
{%- endcomment -%}
|
||||||
|
{%- if include.objectid contains '/' -%}
|
||||||
|
{%- capture src -%}{{ include.objectid | relative_url }}{% endcapture %}
|
||||||
|
{%- capture alt -%}{{ include.alt | default: include.title }}{% endcapture %}
|
||||||
|
{%- elsif include.objectid -%}
|
||||||
|
{%- assign item = site.data[site.metadata] | where: "objectid", include.objectid | first -%}
|
||||||
|
{%- capture src -%}{{ item.image_small | default: item.object_location | relative_url }}{% endcapture %}
|
||||||
|
{%- capture alt -%}{{ item.image_alt_text | default: item.description | default: item.title }}{% endcapture %}
|
||||||
|
{%- endif -%}
|
||||||
|
<div class="narrow-content">
|
||||||
|
<div class="card mb-3{% if include.float %} feature-float-{{ include.float }}{% endif %}{% if include.width %} feature-w-{{ include.width }}{% endif %}{% if include.centered %} mx-auto{% endif %}">
|
||||||
|
{% if src %}<img class="card-img-top" src="{{ src }}" alt="{{ alt | escape }}">{%- endif -%}
|
||||||
|
{% if include.header %}<{{ include.heading_level | default: 'h2' | strip }} class="card-header">{{ include.header }}</{{ include.heading_level | default: 'h2' | strip }}>{%- endif -%}
|
||||||
|
<div class="card-body">
|
||||||
|
{% if include.title %}<{{ include.heading_level | default: 'h2' | strip }} class="card-title">{{ include.title }}</{{ include.heading_level | default: 'h2' | strip }}>{%- endif -%}
|
||||||
|
<div class="card-text">{{ include.text | markdownify }}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
19
.github/_includes/feature/cloud.html
vendored
Normal file
19
.github/_includes/feature/cloud.html
vendored
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
{% comment %}
|
||||||
|
|
||||||
|
Term cloud.
|
||||||
|
This include adds a word cloud feature based on one more metadata fields. Cloud will work best with multi-value (separated by semicolon ; ) controlled vocab type fields, such as "subject".
|
||||||
|
|
||||||
|
E.G. --> {% include feature/cloud.html fields="subject;creator" min=2 %}
|
||||||
|
|
||||||
|
Options:
|
||||||
|
- "fields" = one or more metadata fields to include in the cloud. (required)
|
||||||
|
- "min" = minimum number of times a term must appear in metadata to be displayed. Too many terms will increase load time and size of element. (optional, default 1)
|
||||||
|
- "stopwords" = words to remove from cloud terms (optional)
|
||||||
|
- "shuffle" = if "true" terms will be shuffled in random order (optional, default is alphabetical)
|
||||||
|
- "background" = change the background to a different a bootstrap color (primary, secondary, success, danger, warning, info, light, dark)
|
||||||
|
- "button" = change the button to a different a bootstrap button option (primary, secondary, success, danger, warning, info, light, dark, outline-primary, outline-secondary, outline-success, outline-danger, outline-warning, outline-info, outline-light, outline-dark)
|
||||||
|
|
||||||
|
{%- endcomment -%}
|
||||||
|
{% assign cloud_id = "cloud-div-" | append: include.fields | slugify %}
|
||||||
|
<div id="{{ cloud_id }}" class="text-center my-4 bg-{{ include.background | default: 'light' }} border rounded p-2"></div>
|
||||||
|
{% include js/cloud-js.html id=cloud_id fields=include.fields min=include.min stopwords=include.stopwords shuffle=include.shuffle button=include.button %}
|
||||||
22
.github/_includes/feature/collapse.html
vendored
Normal file
22
.github/_includes/feature/collapse.html
vendored
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
{% comment %}
|
||||||
|
|
||||||
|
Bootstrap collapse feature, https://getbootstrap.com/docs/5.3/components/collapse/
|
||||||
|
|
||||||
|
e.g. --> {% include feature/collapse.html button="Learn More" color="success" text="Such an interesting story!" %}
|
||||||
|
|
||||||
|
Options:
|
||||||
|
- "button" = text of the button that triggers the collapse to open (required)
|
||||||
|
- "text" = text inside the collapse, Markdown is supported (required, hint: use a capture statement to add more complex text!)
|
||||||
|
- "color" = color for the trigger button (optional, default: primary)
|
||||||
|
|
||||||
|
{%- endcomment -%}
|
||||||
|
<p>
|
||||||
|
<button class="btn btn-{{ include.color | default: 'primary' }}" type="button" data-bs-toggle="collapse" data-bs-target="#collapse{{ include.button | slugify }}" aria-expanded="false" aria-controls="collapse{{ include.button | slugify }}">
|
||||||
|
{{ include.button }}
|
||||||
|
</button>
|
||||||
|
</p>
|
||||||
|
<div class="collapse narrow-content mb-3" id="collapse{{ include.button | slugify }}">
|
||||||
|
<div class="card card-body">
|
||||||
|
{{ include.text | markdownify }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
73
.github/_includes/feature/gallery.html
vendored
Normal file
73
.github/_includes/feature/gallery.html
vendored
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
{% comment %}
|
||||||
|
Gallery, grid of images to be used as it's own page or within an about page.
|
||||||
|
|
||||||
|
E.G. --> (3 examples below)
|
||||||
|
|
||||||
|
{% include feature/gallery.html image-heading="demo_008" heading="Items after 1900" captions=false filter="item.date > '1900'" %}
|
||||||
|
|
||||||
|
{% include feature/gallery.html heading="All the Videos" child-objects=true gallery-type="video" %}
|
||||||
|
|
||||||
|
{% include feature/gallery.html image-heading="demo_018" heading="Items that have the subject postcard and are in Spokane" context="This uses a complex liquid filter to specify specif items." filter="item.subject contains 'postcard' and item.location contains 'Spokane'" %}
|
||||||
|
|
||||||
|
*Note that filters are CASE-SENSITIVE so if you're constructing one, either using the filter itself or the filter-field and filter-value you will need to match the case of the string search. this is unlike our browse page.*
|
||||||
|
|
||||||
|
Options:
|
||||||
|
- "filter" = logic statement (in the templating language liquid -- non liquid option indented below) that filters out most of the collection to display only select items. The first part of the statement must start with an "item." and then the category you'd like filtered, followed by an operator (https://shopify.github.io/liquid/basics/operators/) and the string or value you'd like to filter by e.g. "item.date contains '2019'".
|
||||||
|
If needed you can use the below options to construct a filter statement
|
||||||
|
- "filter-field" = the metadata field by which you'd like to filter items in your collection. i.e. title, subject, date, etc.
|
||||||
|
- "filter-value" = logic statement (in liquid) that filters out most of the collection to display only select items.
|
||||||
|
- "heading" = the heading text above the gallery (optional)
|
||||||
|
- "image-heading" = one objectid for a photo object in this collection, a relative path to an image in this project, or a full url to any image. This will include a feature/jumbotron.html includes at the top of the gallery
|
||||||
|
- "context" = a paragraph explanation of the gallery contents (optional)
|
||||||
|
- "caption" = If you don't want captions for your items, add --> captions=false with no quotations. Captions are on by default
|
||||||
|
- "item-size" = tiny, small, medium, large; default is medium, which is 3 items per row on a laptop screen size.
|
||||||
|
- "gallery-type" = this will determine how the items appear, so choosing 'video' will cause the gallery to display all items as embedded videos options: image, video, pdf, audio. Default is "image" (optional)
|
||||||
|
- container-styles = adds css classes to allow you to style the container in which the gallery appears, e.g. "w-75 mx-auto"
|
||||||
|
- item-styles = adds css classes to allow you to style the container in which the individual items appears, e.g. "card py-3"
|
||||||
|
- "image-size" - will adjust the size of the images used in the gallery, options: original, small, thumb. Default is "small" (optional)
|
||||||
|
- "child-objects" = include child items in count or only parents, true or false (optional, default false)
|
||||||
|
- "limit" will limit the number of items featured to the number included, default 50 (optional)
|
||||||
|
|
||||||
|
{%- endcomment -%}
|
||||||
|
|
||||||
|
{% if include.child-objects == true %}
|
||||||
|
{%- assign gallery-items = site.data[site.metadata] | where_exp: 'item','item.objectid' -%}
|
||||||
|
{% else %}
|
||||||
|
{%- assign gallery-items = site.data[site.metadata] | where_exp: 'item','item.objectid and item.parentid == nil' -%}
|
||||||
|
{% endif %}
|
||||||
|
{% if include.gallery-type %}
|
||||||
|
{%- assign gallery-items = gallery-items | where_exp: "item","item.display_template == include.gallery-type" -%}
|
||||||
|
{% else %}
|
||||||
|
{%- assign gallery-items = gallery-items | where_exp: "item","item.image_small != nil or item.image_thumb != nil" -%}
|
||||||
|
{% endif %}
|
||||||
|
{%- if include.filter-field and include.filter-value -%}
|
||||||
|
{%- assign gallery-items = gallery-items | where_exp: 'item','item[include.filter-field] contains include.filter-value' -%}
|
||||||
|
{%- elsif include.filter -%}
|
||||||
|
{%- assign gallery-items = gallery-items | where_exp: 'item',include.filter -%}
|
||||||
|
{% endif %}
|
||||||
|
{% assign gallery-limit = include.limit | default: 50 %}
|
||||||
|
{% capture captions %}{{ include.captions | default: "true" }}{% endcapture %}
|
||||||
|
|
||||||
|
|
||||||
|
{% if include.image-heading and include.heading%}
|
||||||
|
{% include feature/jumbotron.html objectid=include.image-heading heading=include.heading text=false padding="5rem" %}
|
||||||
|
{% elsif include.image-heading %}
|
||||||
|
{% include feature/jumbotron.html objectid=include.image-heading %}
|
||||||
|
{% elsif include.heading %}
|
||||||
|
<h2>{{ include.heading }}</h2>{% endif %}
|
||||||
|
<div class="row my-3 py-3 {{ include.container-styles }}">
|
||||||
|
{% if include.context %}<p> {{include.context}} </p>{% endif %}
|
||||||
|
{% for item in gallery-items limit:gallery-limit %}
|
||||||
|
<div class="{% if include.item-size == 'tiny' %}col-lg-2 col-sm-4 col-xs-6{% elsif include.item-size == 'small' %}col-lg-3 col-sm-6{% elsif include.item-size == 'large' %}col-xl-4 col-lg-6{% else %}col-lg-4 col-sm-6{% endif %} {{ include.item-styles }}">
|
||||||
|
{% if include.gallery-type == "video" %}
|
||||||
|
{% include feature/video.html objectid=item.objectid caption=include.captions %}
|
||||||
|
{% elsif include.gallery-type == "pdf" %}
|
||||||
|
{% include feature/pdf.html objectid=item.objectid caption=include.captions %}
|
||||||
|
{% elsif include.gallery-type == "audio" %}
|
||||||
|
{% include feature/audio.html objectid=item.objectid caption=include.captions %}
|
||||||
|
{% else %}
|
||||||
|
{% include feature/image.html objectid=item.objectid caption=include.captions %}{% endif %}
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
|
||||||
15
.github/_includes/feature/icon.html
vendored
Normal file
15
.github/_includes/feature/icon.html
vendored
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
{%- comment -%}
|
||||||
|
|
||||||
|
Bootstrap Icons, https://icons.getbootstrap.com/
|
||||||
|
|
||||||
|
This include adds a bootstrap icon using the SVG Sprite approach. This works similar to Icon Fonts. The svg will inherit font size and color from the parent, so can be used with other text.
|
||||||
|
|
||||||
|
E.G. --> {% include feature/icon.html icon="file-play" label="Audio file" %}
|
||||||
|
|
||||||
|
Options:
|
||||||
|
- "icon" = a Bootstrap Icon name, e.g. "file-image", "file-play"
|
||||||
|
- "label" = a label for accessibility (optional)
|
||||||
|
- "class" = extra classes to add directly to the svg element (optional)
|
||||||
|
|
||||||
|
{%- endcomment -%}
|
||||||
|
<svg class="bi icon-sprite {% if include.class %}{{ include.class }}{% endif %}" {% if include.label %}role="img" aria-label="{{ include.label | escape }}"{% else %}aria-hidden="true"{% endif %}><use xlink:href="{{ site.lib-assets | default: '/assets/lib' | relative_url }}/icons/bootstrap-icons.svg#{{ include.icon }}" href="{{ site.lib-assets | default: '/assets/lib' | relative_url }}/icons/bootstrap-icons.svg#{{ include.icon }}"></use></svg>
|
||||||
62
.github/_includes/feature/image.html
vendored
Normal file
62
.github/_includes/feature/image.html
vendored
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
{% comment %}
|
||||||
|
|
||||||
|
Image embed from an item's objectid or external link.
|
||||||
|
This include adds a figure to the page styled using bootstrap, https://getbootstrap.com/docs/5.1/content/figures/
|
||||||
|
|
||||||
|
It requires an "objectid" with the include, which is used to find the object title and image (for collection items). If multiple collection objectids are included (separated by ; ), they will be added to a "col-md" in a row which will automatically divided equally.
|
||||||
|
Alternatively, a URL to an external image can be used in "objectid".
|
||||||
|
|
||||||
|
E.G. --> {% include feature/image.html objectid="demo_001" %}
|
||||||
|
|
||||||
|
Options:
|
||||||
|
- "objectid" = several options below (required)
|
||||||
|
1. one or more objectids from this collection, separated by semicolon, e.g. "demo_001" or "demo_001;demo_005"
|
||||||
|
2. a full URL to an external image file, e.g. "https://www.lib.uidaho.edu/digital/images/fluffyclouds.jpg"
|
||||||
|
3. a relative link to an image file stored in this repository (that is not included in the collection), i.e. "/assets/img/evan.jpg"
|
||||||
|
IMPORTANT NOTE: Options 2 and 3 require you to add an "alt" option (or "alt" options for multiple images) in order to allow for the accessibility enabled by the "alt" tag
|
||||||
|
- "alt" = alternative text describing the image. This is a required accessibility feature IF you are using an external URL or a relative link (options 2 and 3 above)--it will be automatically filled if providing an objectid. For multiple alts, split using a semi-colon. If you do not fill this in but fill in the "caption" option, the "caption" will be included as the images alt value. (optional)
|
||||||
|
- "caption" = for option 1 above, the figure include automatically adds the title of the item from your metadata. The caption option allows you to manually add a different caption for that option, or give the value false ('caption=false' - no quotes around false) for none. For options 2 and 3, captions will only be added if the caption variable is set. For multiple images of any option, you can also use multiple captions, by splitting them with a semi-colons (optional)
|
||||||
|
- "link" = for option 1 above, the figure include automatically links to the item from your metadata. The link option allows you to manually add a different link for that image. For options 2 and 3, link will only be added if the link variable is set; otherwise, the link will be set to the external or relative image file. For multiple images of any option, you can also use multiple links, by splitting them with a semi-colons (optional)
|
||||||
|
- "width" = will use responsive sizing to set the % size on desktop (will be 100% on mobile), choose from "25", "50", "75", or "100" (optional)
|
||||||
|
|
||||||
|
{%- endcomment -%}
|
||||||
|
{%- assign figures = include.objectid | split: ";" %}
|
||||||
|
{%- assign figcount = figures | size -%}
|
||||||
|
{%- assign captions = include.caption | split: ";" %}
|
||||||
|
{%- assign alts = include.alt | split: ";" -%}
|
||||||
|
{%- assign links = include.link | split: ";" -%}
|
||||||
|
<div class="row feature-include">
|
||||||
|
{% for i in figures %}
|
||||||
|
{% if i contains "/" %}
|
||||||
|
{%- capture image_src -%}{{ i | relative_url }}{%- endcapture -%}
|
||||||
|
{%- capture image_caption -%}{{ captions[forloop.index0] }}{%- endcapture -%}
|
||||||
|
{%- capture image_alt -%}{{ alts[forloop.index0] }}{%- endcapture -%}
|
||||||
|
{%- capture image_link -%}{{ links[forloop.index0] | default: image_src }}{%- endcapture -%}
|
||||||
|
{% else %}
|
||||||
|
{%- assign figure = site.data[site.metadata] | where: "objectid", i | first -%}
|
||||||
|
{%- capture image_link -%}{{ '/items/' | relative_url }}{% if figure.parentid %}{{ figure.parentid }}.html#{{ figure.objectid }}{% else %}{{ figure.objectid }}.html{% endif %}{% endcapture %}
|
||||||
|
{%- capture image_caption -%}{{ captions[forloop.index0] | default: figure.title }}{%- endcapture -%}
|
||||||
|
{%- capture image_alt -%}{{ alts[forloop.index0] | default: figure.image_alt_text | default: figure.description | default: figure.title }}{%- endcapture -%}
|
||||||
|
{%- capture image_src -%}{{ figure.image_small | default: figure.object_location | relative_url }}{% endcapture %}
|
||||||
|
{% endif %}
|
||||||
|
<div class="col-md {% if figcount == 1 %}{% elsif forloop.first %}text-md-end{% elsif forloop.last %}text-md-start{% else %}text-center{% endif %}">
|
||||||
|
<figure class="figure {% if include.width %}feature-w-{{ include.width }}{% endif %}">
|
||||||
|
<a href="{{ image_link | default: image_src }}">
|
||||||
|
<img class="figure-img img-fluid rounded lazyload w-100" alt="{{ image_alt | default: image_caption | escape }}" title="click to see item" src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 3 2'%3E%3C/svg%3E" data-src="{{ image_src }}" >
|
||||||
|
</a>
|
||||||
|
{% unless include.caption == false %}
|
||||||
|
<figcaption class="figure-caption text-center text-muted" style="font-size: 0.85rem; width: 100%; margin-top: 0.5rem;">
|
||||||
|
|
||||||
|
<a href="{{ image_link }}"><strong>{{ figure.objectid }}</strong></a>
|
||||||
|
| {{ figure.description }}
|
||||||
|
|
||||||
|
{% if figure.date_created or figure.collection %}
|
||||||
|
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
</figcaption>
|
||||||
|
{% endunless %}
|
||||||
|
|
||||||
|
</figure>
|
||||||
|
</div>{% endfor %}
|
||||||
|
</div>
|
||||||
63
.github/_includes/feature/jumbotron.html
vendored
Normal file
63
.github/_includes/feature/jumbotron.html
vendored
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
{% comment %}
|
||||||
|
|
||||||
|
Bootstrap Jumbotron, https://getbootstrap.com/docs/5.1/examples/jumbotron/
|
||||||
|
This include adds a Jumbotron feature from an objectid.
|
||||||
|
|
||||||
|
E.G. --> {% include feature/jumbotron.html objectid="demo_001" %}
|
||||||
|
|
||||||
|
Options:
|
||||||
|
- "objectid" = one objectid for a photo object in this collection, a relative path to an image in this project, or a full url to any image. If left blank, by default this the image will be the featured-image set in theme.yml.
|
||||||
|
- "position" = set background-position, "center", "top", "bottom"
|
||||||
|
- "heading" = major heading to display. By default this will be the site title. Give the value false for no heading.
|
||||||
|
- "text" = paragraph text below heading. By default this will be the site tagline. Give the value false for no text.
|
||||||
|
- "padding" = additional padding added to the feature to increase size. Give value in em or px, e.g. "5em".
|
||||||
|
- "heading_level" = customize the level of the heading if necessary for accessibility, choose "h1", "h2", "h3", etc (optional, default "h2")
|
||||||
|
|
||||||
|
Note: if using a YouTube item and an error image appears, the video may not have a "maxresdefault" image available. Replace "maxresdefault.jpg" in the code below with "hqdefault.jpg"
|
||||||
|
|
||||||
|
{%- endcomment -%}
|
||||||
|
{% assign jumbo_div_id = "j-" | append: include.objectid | slugify | truncate: 12, "" %}
|
||||||
|
{% assign jumboId = include.objectid | default: site.data.featured_item.src %}
|
||||||
|
{% if jumboId contains '/' %}
|
||||||
|
{% assign jumboSrc = jumboId | relative_url %}
|
||||||
|
{% else %}
|
||||||
|
{% assign jumboItem = site.data[site.metadata] | where: "objectid", jumboId | first %}
|
||||||
|
{% capture jumboSrc %}{{ jumboItem.object_location | default: jumboItem.image_small | relative_url }}{% endcapture %}
|
||||||
|
{%- endif -%}
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.jumbotron {
|
||||||
|
padding: 4rem 2rem;
|
||||||
|
margin-bottom: 2rem;
|
||||||
|
background-color: #e9ecef;
|
||||||
|
border-radius: 0.3rem;
|
||||||
|
}
|
||||||
|
#{{ jumbo_div_id }} {
|
||||||
|
background-image: url({{ jumboSrc }});
|
||||||
|
background-size: cover;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: {{ include.position | default: 'center' }};
|
||||||
|
}
|
||||||
|
{% if include.padding %}
|
||||||
|
.jumbo-title-box {
|
||||||
|
padding-top: {{ include.padding }};
|
||||||
|
padding-bottom: {{ include.padding }};
|
||||||
|
}
|
||||||
|
{%- endif -%}
|
||||||
|
@media screen and (max-width: 576px) {
|
||||||
|
.jumbo-title-box {
|
||||||
|
max-height: 500px;
|
||||||
|
}
|
||||||
|
.jumbo-tagline { font-size:.85em; }
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<div class="jumbotron feature px-0 border" id="{{ jumbo_div_id }}">
|
||||||
|
<div class="jumbo-title-box">
|
||||||
|
{% unless include.heading == false and include.text == false %}
|
||||||
|
<div class="p-2 text-center text-white bg-dark bg-opacity-75">
|
||||||
|
{% unless include.heading == false %}<{{ include.heading_level | default: 'h2' | strip }} class="display-4">{{ include.heading | default: site.title }}</{{ include.heading_level | default: 'h2' | strip }}>{% endunless %}
|
||||||
|
{% unless include.text == false %}<p class="jumbo-tagline">{{ include.text | default: site.tagline }}</p>{% endunless %}
|
||||||
|
</div>
|
||||||
|
{% endunless %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
67
.github/_includes/feature/mini-map.html
vendored
Normal file
67
.github/_includes/feature/mini-map.html
vendored
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
{% comment %}
|
||||||
|
|
||||||
|
Mini Leaflet Map item feature.
|
||||||
|
This include adds a small leaflet map.
|
||||||
|
|
||||||
|
E.G> --> {% include feature/mini-map/ latitude="46.725562" longitude="-117.009633" %}
|
||||||
|
|
||||||
|
Options:
|
||||||
|
- "objectid" = feature a specific item from your metadata that has lat long. Using this option will set the map center and add a single marker to the map.
|
||||||
|
- "latitude" = center of map, required if not using objectid
|
||||||
|
- "longitude" = center of map, required if not using objectid
|
||||||
|
- "height" = height of the mini map in px (default 400px)
|
||||||
|
- "map-zoom" = provide a zoom level, default 10
|
||||||
|
- "map-link" = true/false, add a button link to the collection's default full map page (default false)
|
||||||
|
- "basemap" = set basemap option, Esri_WorldStreetMap, Esri_NatGeoWorldMap, Esri_WorldImagery. default Esri_WorldImagery.
|
||||||
|
|
||||||
|
{% endcomment %}
|
||||||
|
{% capture map_id %}mini-map_{{ include.latitude | slugify }}{% endcapture %}
|
||||||
|
{% assign map-item = site.data[site.metadata] | where: "objectid", include.objectid | first %}
|
||||||
|
<style>
|
||||||
|
#{{ map_id }} { height: {{ include.height | default: '400px' }}; z-index: 98; }
|
||||||
|
</style>
|
||||||
|
<div id="{{ map_id }}"></div>
|
||||||
|
{% if include.map-link == true %}
|
||||||
|
<a href="{{ '/map/' | relative_url }}?location={{ map-item.latitude | default: include.latitude }},{{ map-item.longitude | default: include.longitude }}{%if include.objectid %}&marker={{ include.objectid }}{% endif %}" class="btn btn-outline-primary my-3">View on Full Map</a>{% endif %}
|
||||||
|
<!-- load leaflet dependencies -->
|
||||||
|
<link rel="stylesheet" href="{{ site.lib-assets | default: '/assets/lib' | relative_url }}/leaflet/leaflet.css">
|
||||||
|
<link rel="stylesheet" href="{{ site.lib-assets | default: '/assets/lib' | relative_url }}/leaflet/leaflet.fullscreen.css">
|
||||||
|
<script src="{{ site.lib-assets | default: '/assets/lib' | relative_url }}/leaflet/leaflet.js"></script>
|
||||||
|
<script src="{{ site.lib-assets | default: '/assets/lib' | relative_url }}/leaflet/Leaflet.fullscreen.min.js"></script>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
// initial start point
|
||||||
|
var mapCenter = [{{ map-item.latitude | default: include.latitude }}, {{ map-item.longitude | default: include.longitude }}];
|
||||||
|
var mapZoom = {{ include.map-zoom | default: 10 }};
|
||||||
|
/* init map, set center and zoom */
|
||||||
|
var map = L.map('{{ map_id }}').setView(mapCenter, mapZoom);
|
||||||
|
|
||||||
|
/* add map layer options */
|
||||||
|
var Esri_WorldStreetMap = L.tileLayer('https://server.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer/tile/{z}/{y}/{x}', {
|
||||||
|
attribution: 'Tiles © Esri — Source: Esri, DeLorme, NAVTEQ, USGS, Intermap, iPC, NRCAN, Esri Japan, METI, Esri China (Hong Kong), Esri (Thailand), TomTom, 2012'
|
||||||
|
});
|
||||||
|
var Esri_NatGeoWorldMap = L.tileLayer('https://server.arcgisonline.com/ArcGIS/rest/services/NatGeo_World_Map/MapServer/tile/{z}/{y}/{x}', {
|
||||||
|
attribution: 'Tiles © Esri — National Geographic, Esri, DeLorme, NAVTEQ, UNEP-WCMC, USGS, NASA, ESA, METI, NRCAN, GEBCO, NOAA, iPC',
|
||||||
|
maxZoom: 16
|
||||||
|
});
|
||||||
|
var Esri_WorldImagery = L.tileLayer('https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}', {
|
||||||
|
attribution: 'Tiles © Esri — Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community'
|
||||||
|
});
|
||||||
|
/* add base map switcher */
|
||||||
|
var baseMaps = {
|
||||||
|
"Esri World StreetMap": Esri_WorldStreetMap,
|
||||||
|
"Esri National Geo": Esri_NatGeoWorldMap,
|
||||||
|
"Esri Imagery": Esri_WorldImagery
|
||||||
|
};
|
||||||
|
L.control.layers(baseMaps).addTo(map);
|
||||||
|
/* load base map */
|
||||||
|
{{ include.basemap | default: 'Esri_WorldImagery' }}.addTo(map);
|
||||||
|
/* add fullscreen control */
|
||||||
|
map.addControl(new L.Control.Fullscreen());
|
||||||
|
|
||||||
|
{% if include.objectid %}
|
||||||
|
/* add marker */
|
||||||
|
L.marker(mapCenter).addTo(map)
|
||||||
|
.bindPopup('{{ map-item.title | escape }}');{% endif %}
|
||||||
|
|
||||||
|
</script>
|
||||||
31
.github/_includes/feature/modal.html
vendored
Normal file
31
.github/_includes/feature/modal.html
vendored
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
{% comment %}
|
||||||
|
|
||||||
|
Bootstrap Modal, https://getbootstrap.com/docs/5.1/components/modal/
|
||||||
|
|
||||||
|
E.G. --> {% include feature/modal.html button="More Info" color="info" title="Information" text="Example text" %}
|
||||||
|
|
||||||
|
Options:
|
||||||
|
- "button" = text of button to trigger modal
|
||||||
|
- "color" = color of modal button (primary, secondary, success, danger, warning, info, light, dark)
|
||||||
|
- "title" = header text for modal pop up
|
||||||
|
- "text" = body text for modal pop up, can use markdown formatting (tip: use a Liquid capture to add more complex content)
|
||||||
|
|
||||||
|
{%- endcomment -%}
|
||||||
|
<!-- Button trigger modal -->
|
||||||
|
<p class="text-center mb-3">
|
||||||
|
<button type="button" class="btn btn-{{ include.color | default: 'primary' }}" data-bs-toggle="modal" data-bs-target="#{{ include.button | slugify }}Modal">{{ include.button }}</button>
|
||||||
|
</p>
|
||||||
|
<!-- Modal -->
|
||||||
|
<div class="modal fade" id="{{ include.button | slugify }}Modal" tabindex="-1" role="dialog" aria-labelledby="{{ include.button | slugify }}ModalLabel" aria-hidden="true">
|
||||||
|
<div class="modal-dialog" role="document">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<h1 class="modal-title" id="{{ include.button | slugify }}ModalLabel">{{ include.title }}</h1>
|
||||||
|
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body" >
|
||||||
|
{{ include.text | markdownify }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
17
.github/_includes/feature/nav-menu.html
vendored
Normal file
17
.github/_includes/feature/nav-menu.html
vendored
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
{% comment %}
|
||||||
|
|
||||||
|
About Page Nav Menu include,
|
||||||
|
add a basic nav at top of About page.
|
||||||
|
|
||||||
|
E.G. --> {% include feature/nav-menu.html sections="Background;Timeline;More Information" %}
|
||||||
|
|
||||||
|
Options:
|
||||||
|
- "sections" = headers to be added to the nav separated by semicolon (;), exactly copy text from any header written in markdown on the page (i.e. ## Example header)
|
||||||
|
|
||||||
|
Note: styling in _sass/_pages.scss adds 100px margin to top of h2 on the about page to accommodate the sticky-top option of this element. If you add headers other than h2 to this nav, they will likely overlap under the element when jumping to the section. Similarly, if more than a handful of sections or long section titles are added, the box will overlap the headers when jumping. Modify the spacing in the scss, or remove the "sticky-top" class to fix.
|
||||||
|
|
||||||
|
{%- endcomment -%}
|
||||||
|
{% assign sections = include.sections | split: ';'%}
|
||||||
|
<p class="h6 shadow-sm p-3 about-nav sticky-top bg-white">
|
||||||
|
Contents: {% for section in sections %}<a class="mx-2" href="#{{ section | slugify }}">{{ section }}</a> {% unless forloop.last %}| {% endunless %}{% endfor %}{% if page.credits == true %}| <a class="mx-2" href="#technical">Tech</a>{% endif %}
|
||||||
|
</p>
|
||||||
43
.github/_includes/feature/pdf.html
vendored
Normal file
43
.github/_includes/feature/pdf.html
vendored
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
{% comment %}
|
||||||
|
|
||||||
|
Item PDF embed from objectid or external link.
|
||||||
|
This include adds a PDF embed to the page using html5 "object" element.
|
||||||
|
|
||||||
|
E.G. --> {% include feature/pdf.html objectid="demo_002" %}
|
||||||
|
|
||||||
|
It requires an "objectid" with the include, which is used to find the object details. Alternatively, a URL to an external pdf can be used in "objectid".
|
||||||
|
By default no height is necessary as it uses 1x1 Bootstrap ratio style, https://getbootstrap.com/docs/5.1/helpers/ratio/
|
||||||
|
|
||||||
|
Options:
|
||||||
|
- "objectid" = several options below (required)
|
||||||
|
1. an objectid of a PDF item in this collection, e.g. "demo_004"
|
||||||
|
2. an external link to a PDF file hosted elsewhere, e.g. "https://www.lib.uidaho.edu/digital/pdfs/cloudtypes.pdf"
|
||||||
|
3. a relative link to a PDF file somewhere else in this repository, e.g. "/assets/pdfs/sometrees.pdf"
|
||||||
|
- "caption" = by default the figure include automatically adds the title of the item from your metadata. The caption option allows you to manually add a different caption, or give the value false for none. (optional)
|
||||||
|
- "width" = will use responsive sizing to set the % size on desktop (will be 100% on mobile), choose from "25", "50", "75", or "100" (optional)
|
||||||
|
- "height" = set embed object height in px (rather than responsive size), e.g. "800px" (optional)
|
||||||
|
- "ratio" = use Bootstrap embed ratio options "21x9", "16x9", "4x3", or "1x1" to customize the responsive aspect ratio if not using height. 1x1 is default. (optional)
|
||||||
|
|
||||||
|
Note: if you have issues make sure the item is a PDF file!
|
||||||
|
|
||||||
|
{%- endcomment -%}
|
||||||
|
{% if include.objectid contains "/" %}
|
||||||
|
{%- capture src -%}{{ include.objectid | relative_url }}{%- endcapture -%}
|
||||||
|
{%- capture pdf_link -%}{{ src }}{%- endcapture -%}
|
||||||
|
{%- capture pdf_caption -%}{{ include.caption }}{%- endcapture -%}
|
||||||
|
{% else %}
|
||||||
|
{%- assign item = site.data[site.metadata] | where: "objectid", include.objectid | first -%}
|
||||||
|
{%- capture src -%}{{ item.object_location | relative_url }}{% endcapture %}
|
||||||
|
{%- capture pdf_link -%}{{ '/items/' | relative_url }}{% if item.parentid %}{{ item.parentid }}.html#{{ item.objectid }}{% else %}{{ item.objectid }}.html{% endif %}{%- endcapture -%}
|
||||||
|
{%- capture pdf_caption -%}{% if include.caption %}{{ include.caption }}{% else %}{{ item.title }}{% endif %}{%- endcapture -%}
|
||||||
|
{% endif %}
|
||||||
|
<div class="feature-include">
|
||||||
|
<figure class="figure border rounded p-1 feature-w-{{ include.width | default: '100' }}">
|
||||||
|
<div class="{% unless include.height %}ratio ratio-{{ include.ratio | default: '1x1' }}{% endunless %}">
|
||||||
|
<object aria-label="pdf embed of {{ pdf_caption | escape }}" {% if include.height %}width="100%" height="{{ include.height }}"{% endif %} data="{{ src }}">
|
||||||
|
<p>The PDF is not rendering in your browser. Please <a href="{{ src }}">download the PDF</a> to view.</p>
|
||||||
|
</object>
|
||||||
|
</div>
|
||||||
|
{% unless include.caption == false %}<figcaption class="figure-caption text-center"><a href="{{ pdf_link }}">{{ pdf_caption }}</a></figcaption>{% endunless %}
|
||||||
|
</figure>
|
||||||
|
</div>
|
||||||
31
.github/_includes/feature/timelinejs.html
vendored
Normal file
31
.github/_includes/feature/timelinejs.html
vendored
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
{% comment %}
|
||||||
|
|
||||||
|
Embed a TimelineJS feature, https://timeline.knightlab.com/
|
||||||
|
|
||||||
|
E.G. --> {% include feature/timelinejs.html %}
|
||||||
|
|
||||||
|
Embeds a TimelineJS built from a JSON file appropriate for any CollectionBuilder page (such as Home or About page).
|
||||||
|
CB templates automatically generate a timelinejs json file in "assets/data/timelinejs.json" including all items in metadata with a value in "date" field.
|
||||||
|
By default, this include uses this json file.
|
||||||
|
|
||||||
|
Options:
|
||||||
|
- "json" = (optional) path or link to timelinejs json file.
|
||||||
|
|
||||||
|
{% endcomment %}
|
||||||
|
{%- assign json = include.json | default: '/assets/data/timelinejs.json' | relative_url -%}
|
||||||
|
<!-- timelinejs, https://timeline.knightlab.com/ -->
|
||||||
|
<link title="timeline-styles" rel="stylesheet" href="https://cdn.knightlab.com/libs/timeline3/latest/css/timeline.css">
|
||||||
|
|
||||||
|
<div id="timeline-embed" style="width: 100%; height: 800px" class="mb-4"></div>
|
||||||
|
|
||||||
|
<script src="https://cdn.knightlab.com/libs/timeline3/latest/js/timeline.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
// The TL.Timeline constructor takes at least two arguments:
|
||||||
|
// the id of the Timeline container (no '#'), and
|
||||||
|
// the URL to your JSON data file or Google spreadsheet.
|
||||||
|
// the id must refer to an element "above" this code,
|
||||||
|
// and the element must have CSS styling to give it width and height
|
||||||
|
// optionally, a third argument with configuration options can be passed.
|
||||||
|
// See below for more about options.
|
||||||
|
timeline = new TL.Timeline('timeline-embed', '{{ json }}');
|
||||||
|
</script>
|
||||||
128
.github/_includes/feature/video-modal.html
vendored
Normal file
128
.github/_includes/feature/video-modal.html
vendored
Normal file
@@ -0,0 +1,128 @@
|
|||||||
|
{% comment %}
|
||||||
|
|
||||||
|
Video modal feature from an item's objectid or external link.
|
||||||
|
This include adds a card featuring the thumb image, title, and description of a video--when clicked it opens a modal containing the video embed. The modal displays video information, transcript, link to item. This is especially useful feature if you would like multiple videos on one page.
|
||||||
|
|
||||||
|
E.G. --> {% include feature/video-modal.html objectid="demo_004" %}
|
||||||
|
|
||||||
|
It requires an "objectid" with the include, which is used to find the video details. Alternatively, a URL to an external video can be used in "objectid".
|
||||||
|
YouTube and Vimeo items will use iframe embeds, video files use html video element.
|
||||||
|
|
||||||
|
Options:
|
||||||
|
- "objectid" = several options below (required)
|
||||||
|
1. an objectid of a video item in this collection, e.g. "demo_003"
|
||||||
|
2. a full URL to a video hosted on YouTube, e.g. https://youtu.be/dbKNr3wuiuQ
|
||||||
|
3. a full URL to a video hosted on Vimeo, e.g. https://vimeo.com/464555587
|
||||||
|
4. a full URL to an external video file (supported by browsers, generally mp4), e.g. "https://www.lib.uidaho.edu/digital/videos/fluffyclouds.mp4"
|
||||||
|
5. a relative link to a video file stored in this repository (that is not included in the collection), i.e. "/assets/videos/cloudyskies.mp4"
|
||||||
|
- "title" = by default automatically adds the title from item metadata, which will be used for the card and modal title. Manually set by using the title option. (optional)
|
||||||
|
- "heading_level" = customize the level of the card heading if necessary for accessibility, choose "h1", "h2", "h3", etc (optional, default "h2")
|
||||||
|
- "caption" = by default the include automatically adds the description of the item from your metadata. The caption option allows you to manually add a different caption, or give the value false for none. (optional)
|
||||||
|
- "transcript" = by default if using an objectid, if the item has a object_transcript value, the view transcript button will automatically be added. The transcript option allows you to manually add a different transcript or provide one for non-collection videos. (optional)
|
||||||
|
- "image" = by default if using an objectid, if the item has a image_small value, the image will be used on the card and as the poster for video file embeds (not youtube). The image option allows you to manually add a image for non-collection videos. Give "false" to have no image displayed on the card (optional)
|
||||||
|
- "ratio" = use Bootstrap embed ratio options "21x9", "16x9", "4x3", or "1x1" to customize the responsive aspect ratio. 16by9 is default. (optional)
|
||||||
|
|
||||||
|
Note: if you have issues make sure the item is a video item and a web friendly format
|
||||||
|
|
||||||
|
|
||||||
|
{% endcomment %}
|
||||||
|
{%- if include.objectid contains '/' -%}
|
||||||
|
{%- capture video_title -%}{{ include.title }}{%- endcapture -%}
|
||||||
|
{% capture video_caption %}{{ include.caption }}{% endcapture %}
|
||||||
|
{% capture video_poster %}{{ include.image }}{% endcapture %}
|
||||||
|
{% capture video_transcript %}{{ include.transcript }}{% endcapture %}
|
||||||
|
{% capture raw_src %}{{ include.objectid }}{% endcapture %}
|
||||||
|
{%- capture video_link -%}{{ raw_src | relative_url }}{%- endcapture -%}
|
||||||
|
{%- else -%}
|
||||||
|
{%- assign item = site.data[site.metadata] | where: "objectid", include.objectid | first -%}
|
||||||
|
{%- capture video_title -%}{% if include.title %}{{ include.title }}{% else %}{{ item.title }}{% endif %}{%- endcapture -%}
|
||||||
|
{% capture video_caption %}{% if include.caption %}{{ include.caption }}{% else %}{{ item.description }}{% endif %}{% endcapture %}
|
||||||
|
{% capture video_poster %}{{ include.image | default: item.image_small | default: '' }}{% endcapture %}
|
||||||
|
{% capture video_transcript %}{{ include.transcript | default: item.object_transcript }}{% endcapture %}
|
||||||
|
{% capture raw_src %}{{ item.object_location }}{% endcapture %}
|
||||||
|
{%- capture video_link -%}{{ '/items/' | relative_url }}{% if item.parentid %}{{ item.parentid }}.html#{{ item.objectid }}{% else %}{{ item.objectid }}.html{% endif %}{%- endcapture -%}
|
||||||
|
{%- endif -%}
|
||||||
|
{%- if raw_src contains 'vimeo' -%}
|
||||||
|
{% assign vimeo_id = raw_src | split: '/' | last %}
|
||||||
|
{% capture video_src %}https://player.vimeo.com/video/{{ vimeo_id }}{% endcapture %}
|
||||||
|
{% assign video_type = 'vimeo' %}
|
||||||
|
{%- elsif raw_src contains 'youtu' -%}
|
||||||
|
{% assign youtube_id = raw_src | split: '/' | last %}
|
||||||
|
{% if youtube_id contains 'v=' %}{% assign youtube_id = youtube_id | split: 'v=' | last | split: '&' | first %}
|
||||||
|
{% elsif youtube_id contains '?' %}{% assign youtube_id = youtube_id | split: '?' | first %}{% endif %}
|
||||||
|
{% capture video_src %}https://www.youtube-nocookie.com/embed/{{ youtube_id }}?enablejsapi=1&rel=0&modestbranding=1{% endcapture %}
|
||||||
|
{% assign video_type = 'youtube' %}
|
||||||
|
{%- else -%}
|
||||||
|
{% assign video_src = raw_src | relative_url %}
|
||||||
|
{% assign video_type = 'video' %}
|
||||||
|
{%- endif -%}
|
||||||
|
{% capture includeid %}{% if include.objectid.size > 10 %}{{ include.objectid | slice: -10, 10 | slugify | replace: "-","_" }}{% else %}{{ include.objectid | slugify | replace: "-","_" }}{% endif %}{% endcapture %}
|
||||||
|
{% capture stop_media %}{% endcapture %}
|
||||||
|
<script>
|
||||||
|
function stopMedia{{ includeid }}() {
|
||||||
|
{% if video_type == 'youtube' %}const message = JSON.stringify({ event: 'command', func: 'pauseVideo', args: '' }); document.querySelector('#{{ includeid }}ModalVideo iframe').contentWindow.postMessage(message, '*');{% elsif video_type == 'vimeo' %}document.querySelector('#{{ includeid }}ModalVideo iframe').contentWindow.postMessage('{"method":"pause"}', '*');{% else %}document.querySelector('#{{ includeid }}ModalVideo video').pause();{% endif %}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<div class="card my-3 narrow-content">
|
||||||
|
{% if include.image != false and video_poster != '' %}<img src="{{ video_poster | relative_url }}" class="card-img-top" alt="{{ video_title | escape }}">{% endif %}
|
||||||
|
<div class="card-body text-center">
|
||||||
|
<{{ include.heading_level | default: 'h2' | strip }} class="card-title h2">{{ video_title }}</{{ include.heading_level | default: 'h2' | strip }}>
|
||||||
|
<p class="card-text">{{ video_caption }}</p>
|
||||||
|
<button class="btn btn-sm btn-primary stretched-link" type="button" data-bs-toggle="modal" data-bs-target="#{{ includeid }}Modal">
|
||||||
|
View Video
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi icon-sprite" viewBox="0 0 16 16">
|
||||||
|
<path d="M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16"/>
|
||||||
|
<path d="M6.271 5.055a.5.5 0 0 1 .52.038l3.5 2.5a.5.5 0 0 1 0 .814l-3.5 2.5A.5.5 0 0 1 6 10.5v-5a.5.5 0 0 1 .271-.445"/>
|
||||||
|
</svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="modal fade" id="{{ includeid }}Modal" tabindex="-1" aria-labelledby="{{ includeid }}ModalLabel" aria-hidden="true" data-bs-backdrop="static" data-bs-keyboard="false">
|
||||||
|
<div class="modal-dialog modal-lg modal-dialog-centered">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<h1 class="modal-title fs-5" id="{{ includeid }}ModalLabel">{{ video_title }}</h1>
|
||||||
|
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close" onclick="stopMedia{{ includeid }}()"></button>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
<figure class="">
|
||||||
|
<div class="ratio ratio-{{ include.ratio | default: '16x9' }}" id="{{ includeid }}ModalVideo">
|
||||||
|
{%- if video_src contains "vimeo" or video_src contains "youtu" -%}
|
||||||
|
<iframe title="video embed {{ video_title | escape }}" src="{{ video_src }}" allowfullscreen></iframe>
|
||||||
|
{% else %}
|
||||||
|
<video {% if video_poster %}poster="{{ video_poster | relative_url }}"{% endif %} preload="metadata" controls>
|
||||||
|
<source src="{{ video_src }}">
|
||||||
|
Your browser does not support the video tag, please <a href="{{ video_link }}">download the file to watch</a>.
|
||||||
|
</video>
|
||||||
|
{%- endif -%}
|
||||||
|
</div>
|
||||||
|
{% unless include.caption == false %}
|
||||||
|
<figcaption class="figure-caption text-center">
|
||||||
|
{{ video_caption }}
|
||||||
|
</figcaption>
|
||||||
|
{% endunless %}
|
||||||
|
</figure>
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
{% if video_transcript != '' %}
|
||||||
|
<div class="collapse mt-3 w-100" id="collapseTranscript{{ includeid }}">
|
||||||
|
<div class="card card-body text-start">
|
||||||
|
{% assign transcript_type = video_transcript | slice: 0,1 %}
|
||||||
|
{% if transcript_type == '/' %}
|
||||||
|
{% assign transcript_location = video_transcript | remove_first: '/' %}
|
||||||
|
{% assign transcript = site.pages | where: 'path', transcript_location | first %}
|
||||||
|
{{ transcript.content | markdownify }}
|
||||||
|
{% else %}
|
||||||
|
{{ video_transcript | markdownify }}
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<button class="btn btn-outline-primary m-2" type="button" data-bs-toggle="collapse" data-bs-target="#collapseTranscript{{ includeid }}" aria-expanded="false" aria-controls="collapseTranscript{{ includeid }}">View Transcript</button>
|
||||||
|
{% endif %}
|
||||||
|
{% unless include.objectid contains '/' %}
|
||||||
|
<a href="{{ video_link }}" class="btn btn-outline-dark m-2">Visit Item Page</a>{% endunless %}
|
||||||
|
<button type="button" class="btn btn-dark" data-bs-dismiss="modal" onclick="stopMedia{{ includeid }}()">Close</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
84
.github/_includes/feature/video.html
vendored
Normal file
84
.github/_includes/feature/video.html
vendored
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
{% comment %}
|
||||||
|
|
||||||
|
Video embed from an item's objectid or external link.
|
||||||
|
This include adds a video embed to the page using Bootstrap ratio styles, https://getbootstrap.com/docs/5.1/helpers/ratio/
|
||||||
|
|
||||||
|
E.G. --> {% include feature/video.html objectid="demo_003" %}
|
||||||
|
|
||||||
|
It requires an "objectid" with the include, which is used to find the video details. Alternatively, a URL to an external video can be used in "objectid".
|
||||||
|
YouTube and Vimeo items will use iframe embeds, video files use html video element.
|
||||||
|
|
||||||
|
Options:
|
||||||
|
- "objectid" = several options below (required)
|
||||||
|
1. an objectid of a video item in this collection, e.g. "demo_003"
|
||||||
|
2. a full URL to a video hosted on YouTube, e.g. https://youtu.be/dbKNr3wuiuQ
|
||||||
|
3. a full URL to a video hosted on Vimeo, e.g. https://vimeo.com/464555587
|
||||||
|
4. a full URL to an external video file (supported by browsers, generally mp4), e.g. "https://www.lib.uidaho.edu/digital/videos/fluffyclouds.mp4"
|
||||||
|
5. a relative link to a video file stored in this repository (that is not included in the collection), i.e. "/assets/videos/cloudyskies.mp4"
|
||||||
|
- "caption" = by default the include automatically adds the title of the item from your metadata. The caption option allows you to manually add a different caption, or give the value false for none. (optional)
|
||||||
|
- "transcript" = by default if using an objectid, if the item has a object_transcript value, the view transcript button will automatically be added. The transcript option allows you to manually add a different transcript or provide one for non-collection videos. (optional)
|
||||||
|
- "cover" = by default if using an objectid, if the item has a image_small value, the image will be used as the cover for video file embeds (not youtube). The cover option allows you to manually add a cover image for non-collection videos. (optional)
|
||||||
|
- "width" = will use responsive sizing to set the % size on desktop (will be 100% on mobile), choose from "25", "50", "75", or "100" (optional)
|
||||||
|
- "ratio" = use Bootstrap embed ratio options "21x9", "16x9", "4x3", or "1x1" to customize the responsive aspect ratio. 16by9 is default. (optional)
|
||||||
|
|
||||||
|
Note: if you have issues make sure the item is a video item and a web friendly format
|
||||||
|
|
||||||
|
{%- endcomment -%}
|
||||||
|
{%- if include.objectid contains '/' -%}
|
||||||
|
{% capture video_caption %}{{ include.caption }}{% endcapture %}
|
||||||
|
{% capture video_poster %}{{ include.cover }}{% endcapture %}
|
||||||
|
{% capture video_transcript %}{{ include.transcript }}{% endcapture %}
|
||||||
|
{% capture raw_src %}{{ include.objectid }}{% endcapture %}
|
||||||
|
{%- else -%}
|
||||||
|
{%- assign item = site.data[site.metadata] | where: "objectid", include.objectid | first -%}
|
||||||
|
{% capture video_caption %}{% if include.caption %}{{ include.caption }}{% else %}<a href="{{ '/items/' | relative_url }}{% if item.parentid %}{{ item.parentid }}.html#{{ item.objectid }}{% else %}{{ item.objectid }}.html{% endif %}">{{ item.title }}</a>{% endif %}{% endcapture %}
|
||||||
|
{% capture video_poster %}{{ include.cover | default: item.image_small | default: '' }}{% endcapture %}
|
||||||
|
{% capture video_transcript %}{{ include.transcript | default: item.object_transcript }}{% endcapture %}
|
||||||
|
{% capture raw_src %}{{ item.object_location }}{% endcapture %}
|
||||||
|
{%- endif -%}
|
||||||
|
{%- if raw_src contains 'vimeo' -%}
|
||||||
|
{% assign vimeo_id = raw_src | split: '/' | last %}
|
||||||
|
{% capture video_src %}https://player.vimeo.com/video/{{ vimeo_id }}{% endcapture %}
|
||||||
|
{%- elsif raw_src contains 'youtu' -%}
|
||||||
|
{% assign youtube_id = raw_src | split: '/' | last %}
|
||||||
|
{% if youtube_id contains 'v=' %}{% assign youtube_id = youtube_id | split: 'v=' | last | split: '&' | first %}
|
||||||
|
{% elsif youtube_id contains '?' %}{% assign youtube_id = youtube_id | split: '?' | first %}{% endif %}
|
||||||
|
{% capture video_src %}https://www.youtube-nocookie.com/embed/{{ youtube_id }}?rel=0&modestbranding=1{% endcapture %}
|
||||||
|
{%- else -%}
|
||||||
|
{% assign video_src = raw_src | relative_url %}
|
||||||
|
{%- endif -%}
|
||||||
|
{% capture includeid %}{% if include.objectid.size > 8 %}{{ include.objectid | slice: -8, 8 | slugify }}{% else %}{{ include.objectid | slugify }}{% endif %}{% endcapture %}
|
||||||
|
<div class="feature-include my-4">
|
||||||
|
<figure class="{% if include.width %} feature-w-{{ include.width }}{% endif %}">
|
||||||
|
<div class="ratio ratio-{{ include.ratio | default: '16x9' }}">
|
||||||
|
{%- if video_src contains "vimeo" or video_src contains "youtu" -%}
|
||||||
|
<iframe title="video embed {{ video_caption | escape }}" src="{{ video_src }}" allowfullscreen></iframe>
|
||||||
|
{% else %}
|
||||||
|
<video {% if video_poster %}poster="{{ video_poster | relative_url }}"{% endif %} preload="metadata" controls>
|
||||||
|
<source src="{{ video_src }}">
|
||||||
|
Your browser does not support the video tag.
|
||||||
|
</video>
|
||||||
|
{%- endif -%}
|
||||||
|
</div>
|
||||||
|
{% unless include.caption == false %}
|
||||||
|
<figcaption class="figure-caption text-center">
|
||||||
|
{{ video_caption }}
|
||||||
|
{% if video_transcript != '' %}<br>
|
||||||
|
<button class="btn btn-sm btn-outline-secondary" type="button" data-bs-toggle="collapse" data-bs-target="#collapseTranscript{{ includeid }}" aria-expanded="false" aria-controls="collapseTranscript{{ includeid }}">View Transcript</button>
|
||||||
|
<div class="collapse mt-3" id="collapseTranscript{{ includeid }}">
|
||||||
|
<div class="card card-body text-start">
|
||||||
|
{% assign transcript_type = video_transcript | slice: 0,1 %}
|
||||||
|
{% if transcript_type == '/' %}
|
||||||
|
{% assign transcript_location = video_transcript | remove_first: '/' %}
|
||||||
|
{% assign transcript = site.pages | where: 'path', transcript_location | first %}
|
||||||
|
{{ transcript.content | markdownify }}
|
||||||
|
{% else %}
|
||||||
|
{{ video_transcript | markdownify }}
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
</figcaption>
|
||||||
|
{% endunless %}
|
||||||
|
</figure>
|
||||||
|
</div>
|
||||||
12
.github/_includes/foot.html
vendored
Normal file
12
.github/_includes/foot.html
vendored
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
<!-- Bootstrap bundle JS -->
|
||||||
|
<script src="{{ site.lib-assets | default: '/assets/lib' | relative_url }}/bootstrap.bundle.min.js"></script>
|
||||||
|
<!-- load other js -->
|
||||||
|
<script src="{{ site.lib-assets | default: '/assets/lib' | relative_url }}/lazysizes.min.js" async></script>
|
||||||
|
{% if layout.gallery == true or page.gallery == true %}<script src="{{ site.lib-assets | default: '/assets/lib' | relative_url }}/spotlight.bundle.js" defer></script>{% endif %}
|
||||||
|
{% if page.custom-foot or layout.custom-foot %}
|
||||||
|
{%- assign page_feet = page.custom-foot | split: ";" -%}
|
||||||
|
{%- assign layout_feet = layout.custom-foot | split: ";" -%}
|
||||||
|
{%- assign feet = page_feet | concat: layout_feet -%}
|
||||||
|
{% for f in feet %}{% include {{ f }} %}
|
||||||
|
{% endfor %}
|
||||||
|
{%- endif -%}
|
||||||
47
.github/_includes/footer.html
vendored
Normal file
47
.github/_includes/footer.html
vendored
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
<div class="row border-bottom border-white pb-4 mb-2 footer-top">
|
||||||
|
|
||||||
|
<!-- LEFT: Title / description / nav -->
|
||||||
|
<div class="col-md-7 px-4 mt-3 footer-text">
|
||||||
|
<h2 class="h4">
|
||||||
|
<a href="{{ '/' | relative_url }}" class="text-white">{{ site.title }}</a>
|
||||||
|
</h2>
|
||||||
|
|
||||||
|
<p class="text-white">
|
||||||
|
<small>{{ site.description }}</small>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<nav>
|
||||||
|
<ul id="footer-nav" class="nav nav-pills">
|
||||||
|
{%- assign navItems = site.data.config-nav | where_exp: 'item', 'item.dropdown_parent == nil' -%}
|
||||||
|
{% for nav in navItems %}
|
||||||
|
<li class="nav-item">
|
||||||
|
{% if nav.stub %}
|
||||||
|
<a class="nav-link text-light{% if page.url == nav.stub %} active{% endif %}"
|
||||||
|
href="{{ nav.stub | relative_url }}">{{ nav.display_name }}</a>
|
||||||
|
{%- else -%}
|
||||||
|
{% assign childStub = site.data.config-nav | where_exp: 'item', 'item.dropdown_parent == nav.display_name and item.stub' | first %}
|
||||||
|
<a class="nav-link text-light{% if page.url == childStub.stub %} active{% endif %}"
|
||||||
|
href="{{ childStub.stub | relative_url }}">{{ nav.display_name }}</a>
|
||||||
|
{% endif %}
|
||||||
|
</li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- RIGHT: Spinning logo -->
|
||||||
|
<div class="col-md-5 mt-3 d-flex justify-content-center justify-content-md-end align-items-center">
|
||||||
|
<div class="footer-logo-spinner">
|
||||||
|
<video autoplay loop muted playsinline>
|
||||||
|
<source src="{{ '/assets/video/bqkc-logo.mp4' | relative_url }}" type="video/mp4">
|
||||||
|
</video>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-md-12 text-center pt-3 pb-1">
|
||||||
|
<p class="text-white">Last updated {{ site.time | date: "%Y-%m-%d" }} | Built with <a href="/data/">CollectionBuilder</a></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</footer>
|
||||||
5
.github/_includes/head/analytics.html
vendored
Normal file
5
.github/_includes/head/analytics.html
vendored
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
{% comment %}
|
||||||
|
Paste analytics code snippet here as provided by your platform (for example from Google Analytics or Matomo).
|
||||||
|
To avoid collecting stats from your development server, this code will be added to the head of every page ONLY during production build!
|
||||||
|
{% endcomment %}
|
||||||
|
<!-- Analytics -->
|
||||||
38
.github/_includes/head/head.html
vendored
Normal file
38
.github/_includes/head/head.html
vendored
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||||
|
<title>{{ page.title | escape }} | {{ site.title | escape }}</title>
|
||||||
|
<link rel="shortcut icon" type="image/x-icon" href="{{ '/favicon.ico' | relative_url }}">
|
||||||
|
<!--
|
||||||
|
|
||||||
|
_____ ____ __ _ ___ _ __ __
|
||||||
|
/ ___/__ / / /__ ____/ /_(_)__ ___ / _ )__ __(_) /__/ /__ ____
|
||||||
|
/ /__/ _ \/ / / -_) __/ __/ / _ \/ _ \/ _ / // / / / _ / -_) __/
|
||||||
|
\___/\___/_/_/\__/\__/\__/_/\___/_//_/____/\_,_/_/_/\_,_/\__/_/
|
||||||
|
|
||||||
|
built with CollectionBuilder-CSV
|
||||||
|
https://github.com/CollectionBuilder/collectionbuilder-csv
|
||||||
|
-->
|
||||||
|
<meta name="generator" content="collectionbuilder-csv" />
|
||||||
|
<meta http-equiv="Content-Language" content="en-us" >
|
||||||
|
|
||||||
|
<!-- load style sheets -->
|
||||||
|
{% if site.data.theme.font-cdn %}{{ site.data.theme.font-cdn }}{%- endif -%}
|
||||||
|
<link rel="stylesheet" href="{% if site.data.theme.bootswatch %}https://cdn.jsdelivr.net/npm/bootswatch@5.3.8/dist/{{ site.data.theme.bootswatch }}/bootstrap.min.css{% else %}{{ site.lib-assets | default: '/assets/lib' | relative_url }}/bootstrap.min.css{% endif %}" type="text/css">
|
||||||
|
{% if page.layout == 'data' %}<link rel="stylesheet" type="text/css" href="{{ site.lib-assets | default: '/assets/lib' | relative_url }}/datatables/datatables.min.css">{%- endif -%}
|
||||||
|
{% if page.layout == 'map' %}<link rel="stylesheet" href="{{ site.lib-assets | default: '/assets/lib' | relative_url }}/leaflet/leaflet.css">
|
||||||
|
<link rel="stylesheet" href="{{ site.lib-assets | default: '/assets/lib' | relative_url }}/leaflet/leaflet.fullscreen.css">
|
||||||
|
{% if site.data.theme.map-search == true %}<link rel="stylesheet" href="{{ site.lib-assets | default: '/assets/lib' | relative_url }}/leaflet/leaflet.fusesearch.css">{%- endif -%}
|
||||||
|
{% if site.data.theme.map-cluster == true %}<link rel="stylesheet" href="{{ site.lib-assets | default: '/assets/lib' | relative_url }}/leaflet/MarkerCluster.css">
|
||||||
|
<link rel="stylesheet" href="{{ site.lib-assets | default: '/assets/lib' | relative_url }}/leaflet/MarkerCluster.Default.css">{% endif %}{%- endif -%}
|
||||||
|
<!-- load custom css last to allow overrides -->
|
||||||
|
<link rel="stylesheet" href="{{ '/assets/css/cb.css' | relative_url }}" type="text/css">
|
||||||
|
|
||||||
|
{% comment %}
|
||||||
|
Meta tags and analytics are added during production build ONLY
|
||||||
|
{%- endcomment -%}
|
||||||
|
{% if jekyll.environment == "production" %}
|
||||||
|
{% if layout.item-meta %}{% include head/item-meta.html %}{% else %}{% include head/page-meta.html %}{% endif %}
|
||||||
|
{% include head/analytics.html %}
|
||||||
|
{%- endif -%}
|
||||||
|
{% if site.noindex == true or page.noindex == true or layout.noindex == true %}<meta name="robots" content="noindex" />{% endif %}
|
||||||
|
<!-- Last build date: {{ site.time | date: "%Y-%m-%d" }} -->
|
||||||
34
.github/_includes/head/item-meta.html
vendored
Normal file
34
.github/_includes/head/item-meta.html
vendored
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
{% if page.subject %}<meta name="keywords" content="{{ page.subject | escape }}" >{% endif %}
|
||||||
|
{% if page.description %}<meta name="description" content="Item from {{ site.title | escape }}: {{ page.description | truncatewords: 25 | escape }}">{% endif %}
|
||||||
|
<!-- DC meta -->
|
||||||
|
<link rel="schema.DCTERMS" href="http://purl.org/dc/terms/" />
|
||||||
|
{%- assign dc-fields = site.data.config-metadata | where_exp: 'item', 'item.dc_map != nil' -%}
|
||||||
|
{% for f in dc-fields %}{% if page[f.field] %}<meta name="{{ f.dc_map | xml_escape }}" content="{{ page[f.field] | truncatewords: 25 | xml_escape }}" xml:lang="en" />
|
||||||
|
{% endif %}{% endfor %}
|
||||||
|
{% if site.organization-name %}<meta name="DCTERMS.publisher" content="{{ site.organization-name | escape }}" xml:lang="en" />{% endif %}
|
||||||
|
<!-- Open Graph meta -->
|
||||||
|
<meta property="og:title" content="{{ page.title | escape }}" />
|
||||||
|
<meta property="og:type" content="website" />
|
||||||
|
<meta property="og:description" content="Item from {{ site.title | escape }}. {{ page.description | truncatewords: 30 | escape }}" />
|
||||||
|
{% if page.image_small or page.image_thumb %}
|
||||||
|
<meta property="og:image" content="{{ page.image_small | default: page.image_thumb | relative_url }}" />
|
||||||
|
<meta property="og:image:alt" content="{{ page.title | escape }}" />{% endif %}
|
||||||
|
<meta property="og:site_name" content="{{ site.title | escape }}" />
|
||||||
|
<meta property="og:url" content="{{ page.url | absolute_url }}" />
|
||||||
|
<meta property="og:locale" content="en_US" />
|
||||||
|
<!-- schema.org JSON-LD -->
|
||||||
|
<script type="application/ld+json">
|
||||||
|
{
|
||||||
|
"@context": "http://schema.org",
|
||||||
|
"@type": "CreativeWork",
|
||||||
|
{%- assign sc-fields = site.data.config-metadata | where_exp: 'item', 'item.schema_map != nil' -%}
|
||||||
|
{% for f in sc-fields %}{% if page[f.field] %}
|
||||||
|
"{{ f.schema_map }}": {{ page[f.field] | jsonify }},{% endif %}{% endfor %}
|
||||||
|
"isPartOf": {{ site.title | jsonify }},
|
||||||
|
{% if page.image_small %}"image": "{{ page.image_small | relative_url }}",{% endif %}
|
||||||
|
{% if page.image_thumb %}"thumbnailUrl": "{{ page.image_thumb | relative_url }}",{% endif %}
|
||||||
|
"url": {{ page.url | absolute_url | jsonify }}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<!-- breadcrumbs schema -->
|
||||||
|
<script type="application/ld+json">{"@context": "http://schema.org", "@type": "BreadcrumbList", "itemListElement": [{ "@type": "ListItem", "position": 1, "item": { "@id": "{{ "/" | absolute_url }}", "name": {{ site.title | jsonify }} } },{ "@type": "ListItem", "position": 2, "item": { "@id": "{{ '/browse/' | absolute_url }}", "name": "Browse Collection" } },{ "@type": "ListItem", "position": 3, "item": { "@id": "{{ page.url | absolute_url }}", "name": {{ page.title | jsonify }} } }] }</script>
|
||||||
24
.github/_includes/head/page-meta.html
vendored
Normal file
24
.github/_includes/head/page-meta.html
vendored
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
<meta name="description" content="{{ site.description | escape }}">
|
||||||
|
{% if site.author or site.organization-name %}<meta name="author" content="{% if site.author %}{{ site.author | escape }}; {% endif %}{{ site.organization-name | escape }}" >{% endif %}
|
||||||
|
{% if site.keywords %}<meta name="keywords" content="{{ site.keywords | escape }}">{% endif %}
|
||||||
|
<!-- DC meta -->
|
||||||
|
<link rel="schema.DCTERMS" href="http://purl.org/dc/terms/" />
|
||||||
|
<meta name="DCTERMS.title" content="{{ page.title | escape }}, {{ site.title | escape }}" xml:lang="en" />
|
||||||
|
{% if site.author or site.organization-name %}<meta name="DCTERMS.creator" content="{{ site.author | default: site.organization-name | escape }}" xml:lang="en" />{% endif %}
|
||||||
|
{% if site.organization-name %}<meta name="DCTERMS.publisher" content="{{ site.organization-name | escape }}" xml:lang="en" />{% endif %}
|
||||||
|
<meta name="DCTERMS.date" content="{{ site.time | date: '%Y' }}" xml:lang="en" />
|
||||||
|
<meta name="DCTERMS.description" content="{{ site.description | escape }}" xml:lang="en" />
|
||||||
|
|
||||||
|
<!-- Open Graph meta -->
|
||||||
|
<meta property="og:title" content="{% if page.title %}{{ page.title | escape }}, {% endif %}{{ site.title | escape }}" />
|
||||||
|
<meta property="og:description" content="{{ site.description | escape }}" />
|
||||||
|
<meta property="og:site_name" content="{{ site.title | escape }}" />
|
||||||
|
<meta property="og:type" content="website" />
|
||||||
|
<meta property="og:image" content="{{ site.data.featured_item.src | relative_url }}" />
|
||||||
|
<meta property="og:image:alt" content="{{ site.data.featured_item.alt | escape }}" />
|
||||||
|
<meta property="og:url" content="{{ page.url | absolute_url }}" />
|
||||||
|
<meta property="og:locale" content="en_US" />
|
||||||
|
<!-- schema.org JSON-LD -->
|
||||||
|
<script type="application/ld+json">{"@context":"http://schema.org","@type":"WebPage","headline":"{% if page.title %}{{ page.title | escape }}, {% endif %}{{ site.title | escape }}","publisher": { "@context": "https://schema.org", "@type": "Organization", "name": "{{ site.organization-name }}", "url": "{{ site.organization-link }}", "logo": "{{ site.organization-logo-banner }}" },"description":{{ site.description | jsonify }},"image":"{{ site.data.featured_item.src | relative_url }}","url":"{{ page.url | absolute_url }}"}</script>
|
||||||
|
<!-- breadcrumbs schema -->
|
||||||
|
<script type="application/ld+json">{"@context": "http://schema.org", "@type": "BreadcrumbList", "itemListElement": [{ "@type": "ListItem", "position": 1, "item": { "@id": "{{ "/" | absolute_url }}", "name": {{ site.title | jsonify }} } },{ "@type": "ListItem", "position": 2, "item": { "@id": "{{ page.url | absolute_url }}", "name": {{ page.title | jsonify }} } }] }</script>
|
||||||
18
.github/_includes/helpers/get-icon-svg.html
vendored
Normal file
18
.github/_includes/helpers/get-icon-svg.html
vendored
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
{% comment %}
|
||||||
|
|
||||||
|
Liquid utility to get a theme icon based on display_template or format.
|
||||||
|
returns an svg sprite (in html)
|
||||||
|
|
||||||
|
E.G. --> {% include helpers/get-icon-svg.html template="pdf" type="hidden" %}
|
||||||
|
|
||||||
|
Options:
|
||||||
|
|
||||||
|
- "template" - the display_template to represent (usually provided from an item metadata "display_template" or "format")
|
||||||
|
- "type" - choose from "thumb" (svg like an image), "hidden" (svg aria-hidden), or "sprite" (svg sprite) (optional, default "sprite")
|
||||||
|
|
||||||
|
{%- endcomment -%}
|
||||||
|
{%- capture iconId -%}{% if include.template contains 'image' %}icon-image{% elsif include.template contains 'pdf' %}icon-pdf{% elsif include.template contains 'video' %}icon-video{% elsif include.template contains 'audio' %}icon-audio{% elsif include.template contains 'panorama' %}icon-panorama{% elsif include.template contains 'compound' %}icon-compound-object{% elsif include.template contains 'multiple' %}icon-multiple{% elsif include.template contains 'record' %}icon-record{% else %}icon-default{% endif %}{%- endcapture -%}
|
||||||
|
{% if include.type == "thumb" %}
|
||||||
|
<svg class="bi text-body img-fluid" fill="currentColor" role="img"><title>{{ include.template }} file icon</title><use xlink:href="{{ '/assets/css/cb-icons.svg' | relative_url }}#{{ iconId }}"/></svg>
|
||||||
|
{%- else -%}
|
||||||
|
<svg class="bi icon-sprite"{% if include.type == 'hidden' %} aria-hidden="true"{% endif %}><use xlink:href="{{ '/assets/css/cb-icons.svg' | relative_url }}#{{ iconId }}"/></svg>{% endif %}
|
||||||
53
.github/_includes/helpers/get-icon.js
vendored
Normal file
53
.github/_includes/helpers/get-icon.js
vendored
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
/*
|
||||||
|
get a theme icon based on display_template or format
|
||||||
|
return svg sprite
|
||||||
|
*/
|
||||||
|
function getIcon(objectTemplate,objectFormat,svgType) {
|
||||||
|
var iconTemplate, iconId, iconTitle;
|
||||||
|
if (objectTemplate && objectTemplate != "") {
|
||||||
|
iconTemplate = objectTemplate;
|
||||||
|
} else if (objectFormat && objectFormat != "") {
|
||||||
|
iconTemplate = objectFormat;
|
||||||
|
} else {
|
||||||
|
iconTemplate = ""
|
||||||
|
}
|
||||||
|
// choose icon
|
||||||
|
if (iconTemplate.includes("image")) {
|
||||||
|
iconId = "icon-image";
|
||||||
|
iconTitle = "image file icon";
|
||||||
|
} else if (iconTemplate.includes("pdf")) {
|
||||||
|
iconId = "icon-pdf";
|
||||||
|
iconTitle = "pdf file icon";
|
||||||
|
} else if (iconTemplate.includes("video")) {
|
||||||
|
iconId = "icon-video";
|
||||||
|
iconTitle = "video file icon";
|
||||||
|
} else if (iconTemplate.includes("audio")) {
|
||||||
|
iconId = "icon-audio";
|
||||||
|
iconTitle = "audio file icon";
|
||||||
|
} else if (iconTemplate.includes("panorama")) {
|
||||||
|
iconId = "icon-panorama";
|
||||||
|
iconTitle = "panorama file icon";
|
||||||
|
} else if (iconTemplate.includes("compound")) {
|
||||||
|
iconId = "icon-compound-object";
|
||||||
|
iconTitle = "compound object icon";
|
||||||
|
} else if (iconTemplate.includes("multiple")) {
|
||||||
|
iconId = "icon-multiple";
|
||||||
|
iconTitle = "multiple object icon";
|
||||||
|
} else if (iconTemplate.includes("record")) {
|
||||||
|
iconId = "icon-record";
|
||||||
|
iconTitle = "record object icon";
|
||||||
|
} else {
|
||||||
|
iconId = "icon-default";
|
||||||
|
iconTitle = "file icon";
|
||||||
|
}
|
||||||
|
if (svgType == "thumb") {
|
||||||
|
// svg sprite as thumb
|
||||||
|
return '<svg class="bi text-body img-fluid" fill="currentColor" role="img"><title>' + iconTitle + '</title><use xlink:href="{{ "/assets/css/cb-icons.svg" | relative_url }}#' + iconId + '"/></svg>';
|
||||||
|
} else if (svgType == "hidden") {
|
||||||
|
// svg as sprite with aria-hidden
|
||||||
|
return '<svg class="bi icon-sprite" aria-hidden="true"><use xlink:href="{{ "/assets/css/cb-icons.svg" | relative_url }}#' + iconId + '"/></svg>';
|
||||||
|
} else {
|
||||||
|
// svg as sprite
|
||||||
|
return '<svg class="bi icon-sprite" aria-label="' + iconTitle + '"><use xlink:href="{{ "/assets/css/cb-icons.svg" | relative_url }}#' + iconId + '"/></svg>';
|
||||||
|
}
|
||||||
|
}
|
||||||
107
.github/_includes/index/carousel.html
vendored
Normal file
107
.github/_includes/index/carousel.html
vendored
Normal file
@@ -0,0 +1,107 @@
|
|||||||
|
{% comment %}
|
||||||
|
|
||||||
|
Image item carousel.
|
||||||
|
This include adds a Bootstrap Carousel component populated with randomly selected image items, designed with index page in mind.
|
||||||
|
https://getbootstrap.com/docs/5.1/components/carousel/
|
||||||
|
|
||||||
|
E.G. --> {% include index/carousel.html title="Sample Items" height=450 %}
|
||||||
|
|
||||||
|
Options:
|
||||||
|
|
||||||
|
- "height" = the height of the carousel in px, just give the number (optional, default 300)
|
||||||
|
- "carousel-type" = the selection of items featured in the carousel, choose from thumb (all items with image_thumb) or small (all items with image_small). (optional, default thumb)
|
||||||
|
- "child-objects" = include child items in count or only parents, true or false (optional, default false)
|
||||||
|
- "title" = card title text inside card content area (optional)
|
||||||
|
- "header" = card header text in bar above card content (optional)
|
||||||
|
- "heading_level" = customize the level of the heading if necessary for accessibility, choose "h1", "h2", "h3", etc (optional, default "h2")
|
||||||
|
- "max" = maximum images selected for slide show (optional, default 9. Do not make too big!)
|
||||||
|
- "btn-color" = a bootstrap color class to theme the buttons. Can be any bootstrap template color (e.g. info, success) or outline (e.g. outline-info, outline-success), including colors created in config-theme-colors. (optional, default "primary")
|
||||||
|
- "btn-text" = the label used in the link btn to view the carousel item (optional, default "View Item")
|
||||||
|
- "filter-field" and "filter-value" = use these options together to filter which set of items will appear in the carousel based on a particular metadata field and value in that field. filter-field must match a column in your metadata. any item with a value in the filter-field that "contains" the filter-value will be included, it does not need to be an exact match. (optional)
|
||||||
|
|
||||||
|
{%- endcomment -%}
|
||||||
|
|
||||||
|
{%- assign carousel-max = include.max | default: 9 -%}
|
||||||
|
{%- assign btn-color = include.btn-color | default: "primary" -%}
|
||||||
|
{%- assign btn-text = include.btn-text | default: "View Item" -%}
|
||||||
|
{% if include.child-objects == true %}
|
||||||
|
{%- assign carousel-items = site.data[site.metadata] | where_exp: 'item','item.objectid' | where_exp: "item","item.image_small != nil or item.image_thumb != nil"-%}
|
||||||
|
{% else %}
|
||||||
|
{%- assign carousel-items = site.data[site.metadata] | where_exp: 'item','item.objectid and item.parentid == nil' | where_exp: "item","item.image_small != nil or item.image_thumb != nil" -%}
|
||||||
|
{% endif %}
|
||||||
|
{%- if include.filter-field and include.filter-value -%}
|
||||||
|
{% assign carousel-items = carousel-items | where_exp: 'item','item[include.filter-field] contains include.filter-value' %}
|
||||||
|
{%- endif -%}
|
||||||
|
|
||||||
|
{%- comment -%}
|
||||||
|
Set up carousel div
|
||||||
|
{%- endcomment -%}
|
||||||
|
<style>
|
||||||
|
#imageCarousel .carousel-item { height: {{ include.height | remove: 'px' | strip | default: '300' }}px; }
|
||||||
|
</style>
|
||||||
|
<div class="card mb-3">
|
||||||
|
{% if include.header %}<{{ include.heading_level | default: 'h2' | strip }} class="card-header h5">{{ include.header }}</{{ include.heading_level | default: 'h2' | strip }}>{% endif %}
|
||||||
|
<div class="card-body">
|
||||||
|
{% if include.title %}<{{ include.heading_level | default: 'h2' | strip }} class="card-title h5">{{ include.title }}</{{ include.heading_level | default: 'h2' | strip }}>{% endif %}
|
||||||
|
|
||||||
|
<div id="imageCarousel" class="carousel slide bg-dark rounded mb-3" data-bs-ride="carousel">
|
||||||
|
<div id="carouselIndicators" class="carousel-indicators">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div id="carouselInner" class="carousel-inner">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<button class="carousel-control-prev" type="button" data-bs-target="#imageCarousel" data-bs-slide="prev">
|
||||||
|
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
|
||||||
|
<span class="visually-hidden">Previous</span>
|
||||||
|
</button>
|
||||||
|
<button class="carousel-control-next" type="button" data-bs-target="#imageCarousel" data-bs-slide="next">
|
||||||
|
<span class="carousel-control-next-icon" aria-hidden="true"></span>
|
||||||
|
<span class="visually-hidden">Next</span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{%- comment -%}
|
||||||
|
add slides using JS to allow for randomizing slide show
|
||||||
|
{%- endcomment -%}
|
||||||
|
<script>
|
||||||
|
/* add item data */
|
||||||
|
// title,objectid,image_thumb/small
|
||||||
|
var carouselItems = [ {% for c in carousel-items %}[ {{ c.title | escape | jsonify }}, "{{ c.objectid }}", {% if c.image_small %}{{ c.image_small | relative_url | jsonify }}{% else %}{{ c.image_thumb | relative_url | jsonify }}{% endif %}, "{{ c.parentid }}", {{ c.image_alt_text | default: c.title | escape | jsonify }} ]{% unless forloop.last %}, {% endunless %}{% endfor %}];
|
||||||
|
/* shuffle items */
|
||||||
|
carouselItems.sort(function() { return 0.5 - Math.random() });
|
||||||
|
|
||||||
|
/* add items to carousel */
|
||||||
|
var carousel = document.getElementById("carouselInner");
|
||||||
|
var carouselIndicators = document.getElementById("carouselIndicators");
|
||||||
|
var slides = "";
|
||||||
|
var indicators = "";
|
||||||
|
var i, itemImg, itemLink;
|
||||||
|
for (let i=0; i < {{ carousel-items | size | at_most: carousel-max }}; i++) {
|
||||||
|
// calculate item image location
|
||||||
|
itemImg = carouselItems[i][2];
|
||||||
|
// calculate item link
|
||||||
|
if (carouselItems[i][3]){
|
||||||
|
itemLink = '{{ '/items/' | relative_url }}' + carouselItems[i][3] + '.html#' + carouselItems[i][1];}
|
||||||
|
else {
|
||||||
|
itemLink = '{{ '/items/' | relative_url }}' + carouselItems[i][1] + '.html';
|
||||||
|
}
|
||||||
|
// create indicator
|
||||||
|
indicator = `<button type="button" data-bs-target="#imageCarousel" data-bs-slide-to="${i.toString()}" ${ i == 0 ? 'class="active" aria-current="true" ' : '' }aria-label="Slide ${i.toString()}"></button>`;
|
||||||
|
// create slide
|
||||||
|
slide = `<div class="carousel-item py-2${ i == 0 ? ' active' : '' }">
|
||||||
|
<img class="d-block h-100 mx-auto lazyload" alt="${carouselItems[i][4]}" data-src="${itemImg}">
|
||||||
|
<div class="carousel-caption">
|
||||||
|
<h3 class="carousel-item-title text-white py-2 h6">${carouselItems[i][0]}</h3>
|
||||||
|
<a href="${itemLink}" class="btn btn-sm btn-{{ btn-color }}">{{ btn-text }}</a>
|
||||||
|
</div></div>`;
|
||||||
|
slides += slide;
|
||||||
|
indicators += indicator;
|
||||||
|
}
|
||||||
|
// add indicators to page
|
||||||
|
carouselIndicators.innerHTML = indicators;
|
||||||
|
// add slides to the page
|
||||||
|
carousel.innerHTML = slides;
|
||||||
|
</script>
|
||||||
46
.github/_includes/index/content.html
vendored
Normal file
46
.github/_includes/index/content.html
vendored
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
{% comment %}
|
||||||
|
|
||||||
|
Collection content summary.
|
||||||
|
Counts item types based on "display_template" providing link to Browse page.
|
||||||
|
|
||||||
|
E.G. --> {% include index/content.html %}
|
||||||
|
|
||||||
|
E.G. --> {% include index/content.html object_field="format" others=true total=true %}
|
||||||
|
|
||||||
|
Options:
|
||||||
|
|
||||||
|
- "btn-color" - a bootstrap color class to theme the buttons. Can be any bootstrap template color (e.g. info, success) or outline (e.g. outline-info, outline-success), including colors created in config-theme-colors. (optional, default "outline-secondary")
|
||||||
|
- "heading_level" = customize the level of the heading if necessary for accessibility, choose "h1", "h2", "h3", etc (optional, default "h2")
|
||||||
|
- "object_field" = optionally change the field used to count items. Typically this is either "display_template" (default) or "format". The field should be available on the Browse page to filter! The icons assume you use something like "display_template" or "format" to select the correct icon.
|
||||||
|
- "child-objects" = include child items in count or only parents, true or false (optional, default false)
|
||||||
|
- "others" = display a count for items with no "display_template", true or false (optional, default false)
|
||||||
|
- "total" = display a count for total items, true or false (optional, default false)
|
||||||
|
|
||||||
|
{%- endcomment -%}
|
||||||
|
{%- assign object_field = include.object_field | default: 'display_template' -%}
|
||||||
|
{% if include.child-objects == true %}
|
||||||
|
{%- assign items = site.data[site.metadata] | where_exp: 'item','item.objectid' -%}
|
||||||
|
{% else %}
|
||||||
|
{%- assign items = site.data[site.metadata] | where_exp: 'item','item.objectid and item.parentid == nil' -%}
|
||||||
|
{% endif %}
|
||||||
|
{%- assign templates = items | map: object_field -%}
|
||||||
|
{%- assign types = templates | uniq | compact | sort -%}
|
||||||
|
<div class="card mb-3" >
|
||||||
|
<div class="card-body">
|
||||||
|
<p class="card-text">
|
||||||
|
{% for t in types %}
|
||||||
|
{%- assign count = templates | where_exp: 'item', 'item contains t' | size -%}
|
||||||
|
{% if count > 0 %}
|
||||||
|
{{ count }}
|
||||||
|
<a class="text-dark" href="{{ '/browse/' | relative_url }}#display_template:{{ t }}">{{ t | upcase | replace: "_", " " }}
|
||||||
|
{% include helpers/get-icon-svg.html type="hidden" template=t %}</a><br>
|
||||||
|
{%- endif -%}
|
||||||
|
{%- endfor -%}
|
||||||
|
{% if include.others == true %}{% assign others = templates | where_exp: 'item', 'item == nil or item == ""' | size %}{% if others > 0 %}
|
||||||
|
{{ others }} OTHER {% include helpers/get-icon-svg.html type="hidden" %}<br>{% endif %}{% endif %}
|
||||||
|
{% if include.total == true %}
|
||||||
|
{{ templates | size }} TOTAL ITEMS<br>{% endif %}
|
||||||
|
<a class="btn btn-sm btn-{{ include.btn-color | default: 'outline-secondary' }} mt-2" href="{{ '/browse/' | relative_url }}">View archive</a>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
45
.github/_includes/index/data-download.html
vendored
Normal file
45
.github/_includes/index/data-download.html
vendored
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
{% comment %}
|
||||||
|
|
||||||
|
Collection data downloads.
|
||||||
|
Based on the stubs present in the config-nav, displays relevant download btn links for metadata derivatives in a variety of formats. This highlights the ability to explore and reuse collection data.
|
||||||
|
|
||||||
|
E.G. --> {% include index/data-download.html %}
|
||||||
|
|
||||||
|
Options:
|
||||||
|
|
||||||
|
- "heading_level" = customize the level of the heading if necessary for accessibility, choose "h1", "h2", "h3", etc (optional, default "h2")
|
||||||
|
|
||||||
|
{%- endcomment -%}
|
||||||
|
{%- assign stubs = site.data.config-nav | map: 'stub' | join: ';' -%}
|
||||||
|
{% if include.no_toc %}
|
||||||
|
<div class="card mb-3 no_toc">
|
||||||
|
{% else %}
|
||||||
|
<div class="card mb-3">
|
||||||
|
{% endif %}
|
||||||
|
<div class="card-body">
|
||||||
|
<p><small>Download this collection's metadata in a variety of reusable formats. Psst: <a href="/copyright/" target="_blank">check out this archive's copyright information before downloading!</a></small></p>
|
||||||
|
<p class="card-text text-center">
|
||||||
|
<a class="btn btn-sm btn-secondary m-1" href="{{ '/assets/data/metadata.csv' | relative_url }}" download>Metadata CSV</a>
|
||||||
|
<a class="btn btn-sm btn-secondary m-1" href="{{ '/assets/data/metadata.json' | relative_url }}" target="_blank">Metadata JSON</a>
|
||||||
|
{% if stubs contains "subject" %}
|
||||||
|
<a class="btn btn-sm btn-secondary m-1" href="{{ '/assets/data/subjects.csv' | relative_url }}" download>Subjects CSV</a>
|
||||||
|
<a class="btn btn-sm btn-secondary m-1" href="{{ '/assets/data/subjects.json' | relative_url }}" target="_blank">Subjects JSON</a>
|
||||||
|
{% endif %}
|
||||||
|
{% if stubs contains "map" %}
|
||||||
|
<a class="btn btn-sm btn-secondary m-1" href="{{ '/assets/data/geodata.json' | relative_url }}" target="_blank">Geodata JSON</a>
|
||||||
|
{% endif %}
|
||||||
|
{% if stubs contains "location" %}
|
||||||
|
<a class="btn btn-sm btn-secondary m-1" href="{{ '/assets/data/locations.csv' | relative_url }}" download>Locations CSV</a>
|
||||||
|
<a class="btn btn-sm btn-secondary m-1" href="{{ '/assets/data/locations.json' | relative_url }}" target="_blank">Locations JSON</a>
|
||||||
|
{% endif %}
|
||||||
|
{% if stubs contains "timeline" %}
|
||||||
|
<a class="btn btn-sm btn-secondary m-1" href="{{ '/assets/data/timelinejs.json' | relative_url }}" target="_blank">Timeline JSON</a>
|
||||||
|
{% endif %}
|
||||||
|
{% if site.data.theme.metadata-facets-fields %}
|
||||||
|
<a class="btn btn-sm btn-secondary m-1" href="{{ '/assets/data/facets.json' | relative_url }}" target="_blank">Facets JSON</a>
|
||||||
|
{% endif %}
|
||||||
|
<a class="btn btn-sm btn-secondary m-1" href="{{ site.source-code }}" rel="noopener">Source Code</a>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
21
.github/_includes/index/description.html
vendored
Normal file
21
.github/_includes/index/description.html
vendored
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
{% comment %}
|
||||||
|
|
||||||
|
Collection Description card.
|
||||||
|
Pulls description from _config.yml. Provides btn link to About page if present in the config-nav.
|
||||||
|
|
||||||
|
E.G. --> {% include index/description.html %}
|
||||||
|
|
||||||
|
Options:
|
||||||
|
|
||||||
|
- "btn-color" - a bootstrap color class to theme the buttons. Can be any bootstrap template color (e.g. info, success) or outline (e.g. outline-info, outline-success), including colors created in config-theme-colors. (optional, default "primary")
|
||||||
|
- "heading_level" = customize the level of the heading if necessary for accessibility, choose "h1", "h2", "h3", etc (optional, default "h2")
|
||||||
|
|
||||||
|
{%- endcomment -%}
|
||||||
|
<div class="card mb-3">
|
||||||
|
<div class="card-body">
|
||||||
|
<{{ include.heading_level | default: 'h3' | strip }} class="card-title h5"></{{ include.heading_level | default: 'h3' | strip }}>
|
||||||
|
<p class="card-text">{{ site.description }}</p>
|
||||||
|
{%- assign about = site.data.config-nav | where: "stub","/about/" | size -%}{% if about > 0 %}
|
||||||
|
<a class="btn btn-{{ include.btn-color | default: 'primary' }}" href="{{ '/about/' | relative_url }}" >Learn More »</a>{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
53
.github/_includes/index/featured-terms.html
vendored
Normal file
53
.github/_includes/index/featured-terms.html
vendored
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
{% comment %}
|
||||||
|
|
||||||
|
Featured Terms button-links.
|
||||||
|
This include creates a card with btn links to the Browse page from a set of automatically generated or manually selected terms. Either use the "field" option to auto generate *or* the "featured" option to manually create list of terms.
|
||||||
|
|
||||||
|
E.G. --> {% include index/featured-terms.html field="subject" title="Top Subjects" btn-color="outline-info" max=8 %}
|
||||||
|
|
||||||
|
E.G. --> {% include index/featured-terms.html featured="Example term; Another; One more" title="Topic Areas" btn-color="success" %}
|
||||||
|
|
||||||
|
Options:
|
||||||
|
|
||||||
|
- "field" - a field from your metadata that will be used to auto generate top terms (required to auto generate)
|
||||||
|
- "featured" - a manually created list of featured terms, separated by ; semicolon (required if not auto generating from a field)
|
||||||
|
- "title" - card title text inside card content area (optional)
|
||||||
|
- "header" = card header text in bar above card content (optional)
|
||||||
|
- "heading_level" = customize the level of the heading if necessary for accessibility, choose "h1", "h2", "h3", etc (optional, default "h2")
|
||||||
|
- "max" - max number of terms to display if auto generating (optional, default 5)
|
||||||
|
- "btn-color" - a bootstrap color class to theme the buttons. Can be any bootstrap template color (e.g. info, success) or outline (e.g. outline-info, outline-success), including colors created in config-theme-colors. (optional, default "primary")
|
||||||
|
|
||||||
|
Requires CB's "array_count_uniq.rb" plugin!
|
||||||
|
|
||||||
|
{%- endcomment -%}
|
||||||
|
|
||||||
|
{% if include.featured %}
|
||||||
|
{% assign topTerms = include.featured | split: ";" %}
|
||||||
|
{%- else -%}
|
||||||
|
|
||||||
|
|
||||||
|
{% comment %}
|
||||||
|
Use termsField and termsMax to customize feature
|
||||||
|
{% endcomment %}
|
||||||
|
{% assign termsField = include.field | default: "subject" %}
|
||||||
|
{% assign termsMax = include.max | default: 5 %}
|
||||||
|
{% if site.data.theme.browse-child-objects == true %}
|
||||||
|
{%- assign terms = site.data[site.metadata] | where_exp: 'item','item.objectid' | map: termsField | join: ";" -%}
|
||||||
|
{% else %}
|
||||||
|
{%- assign terms = site.data[site.metadata] | where_exp: 'item','item.parentid == nil' | map: termsField | join: ";" -%}
|
||||||
|
{%- endif -%}
|
||||||
|
{%- assign uniqTerms = terms | downcase | split: ";" | array_count_uniq -%}
|
||||||
|
{% capture topTerms %}
|
||||||
|
{% for i in uniqTerms limit: termsMax %}{{ i[0] }};{% endfor %}{% endcapture %}
|
||||||
|
{% assign topTerms = topTerms | split: ";" %}
|
||||||
|
{%- endif -%}
|
||||||
|
<div class="card mb-3">
|
||||||
|
{% if include.header %}<{{ include.heading_level | default: 'h2' | strip }} class="card-header h5">{{ include.header }}</{{ include.heading_level | default: 'h2' | strip }}>{% endif %}
|
||||||
|
<div class="card-body">
|
||||||
|
{% if include.title %}<{{ include.heading_level | default: 'h2' | strip }} class="card-title h5">{{ include.title }}</{{ include.heading_level | default: 'h2' | strip }}>{% endif %}
|
||||||
|
<p class="card-text">
|
||||||
|
{% for s in topTerms %}
|
||||||
|
<a class="btn btn-sm btn-{{ include.btn-color | default: 'primary' }} m-1" href="{{ s | strip | url_param_escape | prepend: ':' | prepend: termsField | prepend: '/browse/#' | relative_url }}">{{ s | strip }}</a>{% endfor %}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
31
.github/_includes/index/time.html
vendored
Normal file
31
.github/_includes/index/time.html
vendored
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
{% comment %}
|
||||||
|
|
||||||
|
Collection time span.
|
||||||
|
Extracts all content of "date" field, displays the smallest and largest.
|
||||||
|
You may encounter issues if you do not have a correctly ISO formatted "date" field.
|
||||||
|
|
||||||
|
E.G. --> {% include index/time.html %}
|
||||||
|
|
||||||
|
Options:
|
||||||
|
|
||||||
|
- "date_field" - optionally change the field used for date range. Only ISO or year-only dates are supported. (optional, default "date")
|
||||||
|
- "btn-color" - a bootstrap color class to theme the buttons. Can be any bootstrap template color (e.g. info, success) or outline (e.g. outline-info, outline-success), including colors created in config-theme-colors. (optional, default "outline-secondary")
|
||||||
|
- "heading_level" = customize the level of the heading if necessary for accessibility, choose "h1", "h2", "h3", etc (optional, default "h2")
|
||||||
|
|
||||||
|
{%- endcomment -%}
|
||||||
|
{% assign date_field = include.date_field | default: 'date' %}
|
||||||
|
{% if site.data.theme.timeline-child-objects == true %}
|
||||||
|
{%- assign date-items = site.data[site.metadata] | where_exp: 'item','item.objectid' -%}
|
||||||
|
{% else %}
|
||||||
|
{%- assign date-items = site.data[site.metadata] | where_exp: 'item','item.objectid and item.parentid == nil' -%}
|
||||||
|
{% endif %}
|
||||||
|
{%- assign raw-dates = date-items | map: date_field | compact | uniq -%}
|
||||||
|
{%- capture clean-years -%}{% for date in raw-dates %}{% if date contains "-" %}{{ date | strip | split: "-" | first }}{% elsif date contains "/" %}{{ date | strip | split: "/" | last }}{% else %}{{ date | strip }}{% endif %}{% unless forloop.last %};{% endunless %}{%- endfor -%}{%- endcapture -%}
|
||||||
|
{%- assign date-range = clean-years | remove: " " | split: ";" | uniq | sort -%}
|
||||||
|
<div class="card mb-3">
|
||||||
|
<div class="card-body">
|
||||||
|
<{{ include.heading_level | default: 'h2' | strip }} class="card-title h5">Time Span</{{ include.heading_level | default: 'h2' | strip }}>
|
||||||
|
<p class="card-text h5">{{ date-range | first }} to {{ date-range | last }}
|
||||||
|
<br><a href="{{ '/timeline.html' | relative_url }}" class="btn btn-sm btn-{{ include.btn-color | default: 'outline-secondary' }} mt-2">View Timeline</a></p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
48
.github/_includes/item/3d-model-viewer.html
vendored
Normal file
48
.github/_includes/item/3d-model-viewer.html
vendored
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
{% comment %}
|
||||||
|
|
||||||
|
Embed an interactive viewer to display 3d model files in glTF/GLB format (.glb or .gltf).
|
||||||
|
Uses the model-viewer component, https://modelviewer.dev/
|
||||||
|
This assumes that the item's object_location is a .glb or .gltf file.
|
||||||
|
If an image_small is set in the metadata, that image is used as a "poster" and model is not loaded until user clicks.
|
||||||
|
|
||||||
|
{% endcomment %}
|
||||||
|
<!-- import model-viewer component from CDN -->
|
||||||
|
<script type="module" src="https://ajax.googleapis.com/ajax/libs/model-viewer/3.1.1/model-viewer.min.js"></script>
|
||||||
|
{% if page.image_small %}
|
||||||
|
<style>
|
||||||
|
/* add styles for poster image and load button */
|
||||||
|
#poster-image {
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
top: 0;
|
||||||
|
bottom: 0;
|
||||||
|
background-image: url("{{ page.image_small | relative_url }}");
|
||||||
|
background-size: contain;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: center;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
#load-model-btn {
|
||||||
|
position: absolute;
|
||||||
|
left: 50%;
|
||||||
|
top: 50%;
|
||||||
|
transform: translate3d(-50%, -50%, 0);
|
||||||
|
}
|
||||||
|
</style>{% endif %}
|
||||||
|
<!-- add 3d viewer to page -->
|
||||||
|
<div class="ratio ratio-4x3">
|
||||||
|
<model-viewer id="item-model-viewer" alt="{{ page.image_alt_text | default: page.description | default: page.title | escape }}" src="{{ page.object_location | relative_url }}" shadow-intensity="1" camera-controls touch-action="pan-y" {% if page.image_small %}reveal="manual"{% endif %}>
|
||||||
|
{% if page.image_small %}
|
||||||
|
<div id="poster-image" slot="poster"></div>
|
||||||
|
<button id="load-model-btn" class="btn btn-lg btn-primary" slot="poster">Load 3D Model</button>
|
||||||
|
{% endif %}
|
||||||
|
</model-viewer>
|
||||||
|
</div>
|
||||||
|
{% if page.image_small %}
|
||||||
|
<script>
|
||||||
|
/* load model on user click */
|
||||||
|
var itemModelViewer = document.querySelector('#item-model-viewer');
|
||||||
|
itemModelViewer.addEventListener('click', () => itemModelViewer.dismissPoster());
|
||||||
|
</script>
|
||||||
|
{% endif %}
|
||||||
10
.github/_includes/item/audio-player.html
vendored
Normal file
10
.github/_includes/item/audio-player.html
vendored
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
{% comment %}
|
||||||
|
|
||||||
|
Adds html audio element with source listed in object_location.
|
||||||
|
Provides a fallback to download the file.
|
||||||
|
|
||||||
|
{%- endcomment -%}
|
||||||
|
<audio controls class="w-100">
|
||||||
|
<source src="{{ page.object_location | relative_url }}">
|
||||||
|
Your browser does not support the audio element. Please <a href="{{ page.object_location | relative_url }}">download the audio file</a>.
|
||||||
|
</audio>
|
||||||
11
.github/_includes/item/breadcrumbs.html
vendored
Normal file
11
.github/_includes/item/breadcrumbs.html
vendored
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
{% comment %}
|
||||||
|
|
||||||
|
Adds Bootstrap styled breadcrumbs to page.
|
||||||
|
By default the crumbs are: Home (index.html) / Items (browse/) / current page title (from the metadata, truncated to 10 words max).
|
||||||
|
|
||||||
|
{%- endcomment -%}
|
||||||
|
<ol class="breadcrumb">
|
||||||
|
<li class="breadcrumb-item"><a class="text-dark" href="{{ '/' | relative_url }}">Home</a></li>
|
||||||
|
<li class="breadcrumb-item"><a class="text-dark" href="{{ '/browse/' | relative_url }}">Items</a></li>
|
||||||
|
<li class="breadcrumb-item active text-dark" aria-current="page">{{ page.title | truncatewords: 10 }}</li>
|
||||||
|
</ol>
|
||||||
100
.github/_includes/item/browse-buttons.html
vendored
Normal file
100
.github/_includes/item/browse-buttons.html
vendored
Normal file
@@ -0,0 +1,100 @@
|
|||||||
|
{% comment %}
|
||||||
|
|
||||||
|
Adds previous and next button arrows to provide navigation between items.
|
||||||
|
Requires cb_page_gen plugin.
|
||||||
|
The item order follows the order in the metadata CSV, so pre-sort the CSV to the desired order.
|
||||||
|
|
||||||
|
{%- endcomment -%}
|
||||||
|
<div class="text-center">
|
||||||
|
<a class="btn btn-secondary" href="{{ page.previous_item | relative_url }}" id="prev-page-button">« Previous</a>
|
||||||
|
<a class="btn btn-secondary" href="{{ '/browse/' | relative_url }}">Back to The Archive</a>
|
||||||
|
<a class="btn btn-secondary" href="{{ page.next_item | relative_url }}" id="next-page-button">Next »</a>
|
||||||
|
</div>
|
||||||
|
<div id="item-nav">
|
||||||
|
<div class="d-none d-md-block">
|
||||||
|
<a class="previous btn btn-lg btn-secondary" href="{{ page.previous_item | relative_url }}">«</a>
|
||||||
|
<a class="next btn btn-lg btn-secondary" href="{{ page.next_item | relative_url }}">»</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
function leftArrowPressed() {
|
||||||
|
location.href = document.getElementById("prev-page-button").href;
|
||||||
|
};
|
||||||
|
|
||||||
|
function rightArrowPressed() {
|
||||||
|
location.href = document.getElementById("next-page-button").href;
|
||||||
|
};
|
||||||
|
|
||||||
|
function leftModalArrowPressed() {
|
||||||
|
// Get the modal element.
|
||||||
|
var modalshow = document.querySelector(".modal.show");
|
||||||
|
// If the modal exists, get the prev button element.
|
||||||
|
if (modalshow) {
|
||||||
|
const prevButton = modalshow.querySelector(".prev-child-button");
|
||||||
|
// If the prev button exists, click it.
|
||||||
|
if (prevButton) {
|
||||||
|
prevButton.click();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
function rightModalArrowPressed() {
|
||||||
|
// Get the modal element.
|
||||||
|
var modalshow = document.querySelector(".modal.show");
|
||||||
|
// If the modal exists, get the prev button element.
|
||||||
|
if (modalshow) {
|
||||||
|
const nextButton = modalshow.querySelector(".next-child-button");
|
||||||
|
// If the prev button exists, click it.
|
||||||
|
if (nextButton) {
|
||||||
|
nextButton.click();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
function isModalShown() {
|
||||||
|
// Get the modal element.
|
||||||
|
const modal = document.querySelector(".modal.show");
|
||||||
|
|
||||||
|
// Check if the modal has the "show" class.
|
||||||
|
return modal && modal.classList.contains("show");
|
||||||
|
};
|
||||||
|
|
||||||
|
function isSpotlightModalShown() {
|
||||||
|
// Get the modal element.
|
||||||
|
const spotlight = document.getElementById("spotlight");
|
||||||
|
// Check if the modal has the "show" class.
|
||||||
|
return spotlight && spotlight.classList.contains("show");
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
document.onkeydown = function (evt) {
|
||||||
|
if (isSpotlightModalShown()) {
|
||||||
|
|
||||||
|
|
||||||
|
} else if (isModalShown()) {
|
||||||
|
// The modal is shown.
|
||||||
|
evt = evt || window.event;
|
||||||
|
switch (evt.keyCode) {
|
||||||
|
case 37:
|
||||||
|
leftModalArrowPressed();
|
||||||
|
break;
|
||||||
|
case 39:
|
||||||
|
rightModalArrowPressed();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// The modal is not shown.
|
||||||
|
evt = evt || window.event;
|
||||||
|
switch (evt.keyCode) {
|
||||||
|
case 37:
|
||||||
|
leftArrowPressed();
|
||||||
|
break;
|
||||||
|
case 39:
|
||||||
|
rightArrowPressed();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
</script>
|
||||||
10
.github/_includes/item/child/audio-player.html
vendored
Normal file
10
.github/_includes/item/child/audio-player.html
vendored
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
{% comment %}
|
||||||
|
|
||||||
|
Adds html audio element with source listed in object_location of a child item.
|
||||||
|
Provides a fallback to download the file.
|
||||||
|
|
||||||
|
{%- endcomment -%}
|
||||||
|
<audio controls class="w-100">
|
||||||
|
<source src="{{ child.object_location | relative_url }}">
|
||||||
|
Your browser does not support the audio element. Please <a href="{{ child.object_location | relative_url }}">download the audio file</a>.
|
||||||
|
</audio>
|
||||||
47
.github/_includes/item/child/citation-box.html
vendored
Normal file
47
.github/_includes/item/child/citation-box.html
vendored
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
{% comment %}
|
||||||
|
|
||||||
|
Adds a basic citation box for child item with reference link to the child modal.
|
||||||
|
|
||||||
|
{%- endcomment -%}
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-header">Attribution</div>
|
||||||
|
<div class="card-body">
|
||||||
|
<dl>
|
||||||
|
<dt>Citation:</dt>
|
||||||
|
<dd id="citation-text">
|
||||||
|
{% if page.collection %}
|
||||||
|
"{{ page.title }}," *{{ page.collection }}*,
|
||||||
|
{% else %}
|
||||||
|
"{{ page.title }},"
|
||||||
|
{% endif %}
|
||||||
|
{% if page.date_created %}
|
||||||
|
{{ page.date_created }}.
|
||||||
|
{% endif %}
|
||||||
|
<a href="{{ page.url | absolute_url }}">{{ page.url | absolute_url }}</a>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<button id="copy-button" class="btn btn-primary">Copy Citation</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
// Get the citation text and the button
|
||||||
|
const citationText = document.getElementById("citation-text").innerText;
|
||||||
|
const copyButton = document.getElementById("copy-button");
|
||||||
|
|
||||||
|
// When the button is clicked, copy the citation to the clipboard
|
||||||
|
copyButton.addEventListener("click", function () {
|
||||||
|
const textArea = document.createElement("textarea");
|
||||||
|
textArea.value = citationText;
|
||||||
|
document.body.appendChild(textArea);
|
||||||
|
textArea.select();
|
||||||
|
document.execCommand("copy");
|
||||||
|
document.body.removeChild(textArea);
|
||||||
|
|
||||||
|
// Optionally, provide feedback to the user
|
||||||
|
copyButton.innerText = "Copied!";
|
||||||
|
setTimeout(() => {
|
||||||
|
copyButton.innerText = "Copy Citation";
|
||||||
|
}, 2000);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
47
.github/_includes/item/child/compound-item-download-buttons.html
vendored
Normal file
47
.github/_includes/item/child/compound-item-download-buttons.html
vendored
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
{% comment %}
|
||||||
|
|
||||||
|
Adds button links for compound object parent item page.
|
||||||
|
If item has date to Timeline, if item has lat/long to Map, if item has child objects with object_location it adds Download options for each.
|
||||||
|
Styled as a Bootstrap btn-group.
|
||||||
|
|
||||||
|
{%- endcomment -%}
|
||||||
|
<div class="btn-group my-3" role="group" aria-label="Item options">
|
||||||
|
{% if page.object_transcript %}<button class="btn btn-outline-primary" type="button" data-bs-toggle="collapse" data-bs-target="#collapseTranscript" aria-expanded="false" aria-controls="collapseTranscript">View Transcript</button>{% endif %}
|
||||||
|
{% if page.date %}{%- capture year -%}{% if page.date contains "-" %}{{ page.date | split: "-" | first }}{% elsif page.date contains "/" %}{{ page.date | split: "/" | last }}{% else %}{{ page.date }}{% endif %}{%- endcapture -%}
|
||||||
|
<a href="{{ year | strip | prepend: '/timeline.html#y' | relative_url }}" class="btn btn-outline-primary">View on Timeline</a>{% endif %}
|
||||||
|
{% if page.latitude and page.longitude %}
|
||||||
|
<a href="{{ '/map/?location=' | append: page.latitude | append: ',' | append: page.longitude | append: '&marker=' | append: page.objectid | relative_url }}" class="btn btn-outline-primary">View on Map</a>{% endif %}
|
||||||
|
|
||||||
|
<div class="btn-group" role="group">
|
||||||
|
<button class="btn btn-outline-primary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
|
||||||
|
Download
|
||||||
|
</button>
|
||||||
|
<ul class="dropdown-menu">
|
||||||
|
{% if page.object_location %}<li><a target="_blank" rel="noopener" href="{{ page.object_location | relative_url }}" class="dropdown-item">{{ page.title }} ({{ page.format | split: '/' | last | upcase }})</a></li>{% endif %}
|
||||||
|
{% for child in children %}
|
||||||
|
{% unless child.object_location == nil %}
|
||||||
|
<li>
|
||||||
|
<a target="_blank" rel="noopener" href="{{ child.object_location | relative_url }}" class="dropdown-item">
|
||||||
|
{% if page.title != child.title and child.title != nil %}{{ child.title | truncatewords: 3 }}{% else %}Item {{ forloop.index }}{% endif %}
|
||||||
|
{% if child.format %}({{ child.format | split: '/' | last | upcase }}){% endif %}
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
{% endunless %}
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% if page.object_transcript %}
|
||||||
|
<div class="collapse mt-3" id="collapseTranscript">
|
||||||
|
<div class="card card-body text-start">
|
||||||
|
{% assign transcript_type = page.object_transcript | slice: 0,1 %}
|
||||||
|
{% if transcript_type == '/' %}
|
||||||
|
{% assign transcript_location = page.object_transcript | remove_first: '/' %}
|
||||||
|
{% assign transcript = site.pages | where: 'path', transcript_location | first %}
|
||||||
|
{{ transcript.content | markdownify }}
|
||||||
|
{% else %}
|
||||||
|
{{ page.object_transcript | markdownify }}
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
166
.github/_includes/item/child/compound-item-modal-gallery.html
vendored
Normal file
166
.github/_includes/item/child/compound-item-modal-gallery.html
vendored
Normal file
@@ -0,0 +1,166 @@
|
|||||||
|
{% comment %}
|
||||||
|
|
||||||
|
Creates a gallery of thumbnails images or icons for each child item in a compound object. The thumb defaults to image_thumb or image_small, otherwise an icon is added based on the display_template or format of the child item.
|
||||||
|
|
||||||
|
Each child item is given a popup modal with full display and metadata information. The display is chosen based on the display_template of the child item.
|
||||||
|
|
||||||
|
This include requires the Liquid object "child" to be present! The item display requires the compound object item includes in "item/child/".
|
||||||
|
|
||||||
|
{% endcomment %}
|
||||||
|
<div class="row row-cols-2 row-cols-lg-4 g-2">
|
||||||
|
{% for child in children %}
|
||||||
|
<div class="col">
|
||||||
|
<div class="card h-100">
|
||||||
|
<div class="my-auto">
|
||||||
|
<div class="card-body text-center" id="{{ child.objectid }}Card">
|
||||||
|
|
||||||
|
{% if child.title %}<div class="small text-dark mb-2">{{ child.title | truncatewords: 4 }}</div>{% endif %}
|
||||||
|
|
||||||
|
<div class="mb-2">
|
||||||
|
{% if child.image_thumb or child.image_small %}
|
||||||
|
<img class="img-thumbnail compound-thumb" src="{{ child.image_thumb | default: child.image_small | relative_url }}" alt="{{ child.image_alt_text | default: child.description | default: child.title | escape }}">
|
||||||
|
{% else %}
|
||||||
|
<svg class="bi text-body compound-thumb" fill="currentColor" aria-hidden="true">
|
||||||
|
{%- assign icon_template = child.display_template | default: item.format -%}
|
||||||
|
<use xlink:href="{{ '/assets/css/cb-icons.svg' | relative_url }}#{% if icon_template contains 'image' %}icon-image{% elsif icon_template contains 'pdf' %}icon-pdf{% elsif icon_template contains 'audio' %}icon-audio{% elsif icon_template contains 'video' %}icon-video{% else %}icon-default{% endif %}" />
|
||||||
|
</svg>
|
||||||
|
<span class="visually-hidden">{{ child.title | escape }} - {{ child.format }}</span>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- child object modal button -->
|
||||||
|
<a id="item-{{ forloop.index }}"
|
||||||
|
role="button"
|
||||||
|
data-bs-toggle="modal"
|
||||||
|
href="#{{ child.objectid }}"
|
||||||
|
onclick="window.location.hash='{{ child.objectid }}'"
|
||||||
|
class="btn btn-sm btn-outline-secondary small stretched-link">
|
||||||
|
{{ child.display_template | upcase | default: "Item" }} <svg class="bi icon-sprite" fill="currentColor" aria-hidden="true"><use xlink:href="{{ '/assets/css/cb-icons.svg' | relative_url }}#icon-{{ child.display_template | default: 'file'}}"/></svg>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<!-- child object modal -->
|
||||||
|
<div class="modal fade" id="{{ child.objectid }}" tabindex="-1"role="dialog" aria-labelledby="{{ child.objectid }}Label"aria-hidden="true" data-bs-backdrop="static" data-bs-keyboard="false">
|
||||||
|
|
||||||
|
<div class="modal-dialog modal-xxl">
|
||||||
|
<div class="modal-content text-start">
|
||||||
|
|
||||||
|
<div class="modal-header ">
|
||||||
|
<div class="modal-title w-100" id="{{ child.objectid }}ModalLabel">
|
||||||
|
<div class="row">
|
||||||
|
{% capture stopMedia %}{% if child.display_template == 'video' %}{% if child.object_location contains 'vimeo' %}vimeo{% elsif child.object_location contains 'youtu' %}youtube{% else %}video{% endif %}{% elsif child.display_template == 'audio' %}audio{% else %}{% endif %}{% endcapture %}
|
||||||
|
<div class="col-12 text-end">
|
||||||
|
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"
|
||||||
|
onclick="{% if stopMedia != '' %}stopMedia('{{ child.objectid }}','{{ stopMedia }}');{% endif %}history.pushState('', '', window.location.pathname)"></button>
|
||||||
|
</div>
|
||||||
|
{% capture next_index %}{% if forloop.index == forloop.length %}0{% else %}{{ forloop.index0 | plus: 1 }}{% endif %}{% endcapture %}
|
||||||
|
{% assign next_index = next_index | times: 1 %}
|
||||||
|
{% capture prev_index %}{% if forloop.index0 == 0 %}{{ forloop.length | minus: 1 }}{% else %}{{ forloop.index0 | minus: 1 }}{% endif %}{% endcapture %}
|
||||||
|
{% assign prev_index = prev_index | times: 1 %}
|
||||||
|
{% capture next_item_id %}{{ children[next_index].objectid }}{% endcapture %}
|
||||||
|
{% capture prev_item_id %}{{ children[prev_index].objectid }}{% endcapture %}
|
||||||
|
<div class="col-1 col-md-2">
|
||||||
|
<button data-bs-target="#{{ prev_item_id }}" data-bs-toggle="modal" onclick="{% if stopMedia != '' %}stopMedia('{{ child.objectid }}','{{ stopMedia }}');{% endif %}window.location.hash='{{ prev_item_id }}'" class="btn btn-outline-dark btn-sm prev-child-button" >
|
||||||
|
<svg class="bi icon-sprite" role="img" aria-label="Previous Item">
|
||||||
|
<use xlink:href="{{ '/assets/css/cb-icons.svg' | relative_url }}#arrow-left"/>
|
||||||
|
</svg>
|
||||||
|
<span class="d-none d-md-inline">Previous Item</span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div class="col-9 col-md-8 text-center">
|
||||||
|
<h3 class="h5">{{ page.title }}
|
||||||
|
<span class="d-none d-md-inline">-</span><span class="d-md-none"><br></span>
|
||||||
|
Item {{ forloop.index }} of {{ children | size }}
|
||||||
|
</h3>
|
||||||
|
</div>
|
||||||
|
<div class="col-1 col-md-2 text-end">
|
||||||
|
<button data-bs-target="#{{ next_item_id }}" data-bs-toggle="modal" onclick="{% if stopMedia != '' %}stopMedia('{{ child.objectid }}','{{ stopMedia }}');{% endif %}window.location.hash='{{ next_item_id }}'" class="ms-md-5 btn btn-outline-dark btn-sm next-child-button">
|
||||||
|
<span class="d-none d-md-inline">Next Item</span>
|
||||||
|
<svg class="bi icon-sprite" role="img" aria-label="Next Item">
|
||||||
|
<use xlink:href="{{ '/assets/css/cb-icons.svg' | relative_url }}#arrow-right"/>
|
||||||
|
</svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="modal-body">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-8">
|
||||||
|
<div class="card mb-4 text-center">
|
||||||
|
<div class="m-2">
|
||||||
|
{% if child.display_template == 'image' %}
|
||||||
|
{% include item/child/image-gallery.html %}
|
||||||
|
{% elsif child.display_template == 'video' %}
|
||||||
|
{% if child.object_location contains 'vimeo' or child.object_location contains 'youtu' %}
|
||||||
|
{% include item/child/video-embed.html %}
|
||||||
|
{% else %}
|
||||||
|
{% include item/child/video-player.html %}
|
||||||
|
{% endif %}
|
||||||
|
{% elsif child.display_template == 'audio' %}
|
||||||
|
<div class="my-auto">
|
||||||
|
{% include item/child/audio-player.html %}
|
||||||
|
</div>
|
||||||
|
{% elsif child.display_template == 'panorama' %}
|
||||||
|
{% include item/child/panorama.html %}
|
||||||
|
{% else %}
|
||||||
|
{% include item/child/item-thumb.html %}
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
<div class="my-2">
|
||||||
|
{% include item/child/download-buttons.html %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-4">
|
||||||
|
{% include item/child/metadata.html %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row justify-content-center mt-4">
|
||||||
|
<div class="col-md-5 py-4">
|
||||||
|
{% include item/child/citation-box.html %}
|
||||||
|
</div>
|
||||||
|
{% if child.rights or child.rightsstatement %}
|
||||||
|
<div class="col-md-5 py-4">
|
||||||
|
{% include item/child/rights-box.html %}
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- end child modal -->
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
function stopMedia(objectid, type) {
|
||||||
|
// stop media based on type
|
||||||
|
if (type == "audio") {
|
||||||
|
const mediaElement = document.querySelector(`#${ objectid } audio`);
|
||||||
|
mediaElement.pause();
|
||||||
|
//mediaElement.currentTime = 0;
|
||||||
|
}
|
||||||
|
if (type == "video") {
|
||||||
|
const mediaElement = document.querySelector(`#${ objectid } video`);
|
||||||
|
mediaElement.pause();
|
||||||
|
//mediaElement.currentTime = 0;
|
||||||
|
}
|
||||||
|
if (type == "youtube") {
|
||||||
|
const mediaElement = document.querySelector(`#${ objectid } iframe`);
|
||||||
|
const message = JSON.stringify({ event: 'command', func: 'pauseVideo', args: '' });
|
||||||
|
mediaElement.contentWindow.postMessage(message, '*');
|
||||||
|
}
|
||||||
|
if (type == "vimeo") {
|
||||||
|
const mediaElement = document.querySelector(`#${ objectid } iframe`);
|
||||||
|
mediaElement.contentWindow.postMessage('{"method":"pause"}', '*');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
34
.github/_includes/item/child/download-buttons.html
vendored
Normal file
34
.github/_includes/item/child/download-buttons.html
vendored
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
{% comment %}
|
||||||
|
|
||||||
|
Adds child modal button links, styled as a Bootstrap btn-group.
|
||||||
|
Features:
|
||||||
|
- View Transcript -- if the item has the field "object_transcript", this button is added along with a Bootstrap collapse containing the transcript content. If the value of "object_transcript" starts with objects/ it will look for the matching transcript file in the objects fold, otherwise it will use the value directly. Both will be rendered in Markdown.
|
||||||
|
- View on Timeline -- if the item has a "date" value, links to Timeline page.
|
||||||
|
- View on Map -- if item has "latitude" and "longitude" value, links to location on map.
|
||||||
|
- Download -- if the item has "object_location" value, adds a download button along with the item format, or if the value is a YouTube or Vimeo link adds a "View on" link.
|
||||||
|
|
||||||
|
{%- endcomment -%}
|
||||||
|
<div class="btn-group my-2" role="group" aria-label="Item options">
|
||||||
|
{% if child.object_transcript %}<button class="btn btn-outline-primary" type="button" data-bs-toggle="collapse" data-bs-target="#collapseTranscript{{ child.objectid }}" aria-expanded="false" aria-controls="collapseTranscript{{ child.objectid }}">View Transcript</button>{% endif %}
|
||||||
|
{% if child.date %}{%- capture year -%}{% if child.date contains "-" %}{{ child.date | split: "-" | first }}{% elsif child.date contains "/" %}{{ child.date | split: "/" | last }}{% else %}{{ child.date }}{% endif %}{%- endcapture -%}
|
||||||
|
<a href="{{ year | strip | prepend: '/timeline.html#y' | relative_url }}" class="btn btn-outline-primary">View on Timeline</a>{% endif %}
|
||||||
|
{% if child.latitude and child.longitude %}
|
||||||
|
<a href="{{ '/map/?location=' | append: page.latitude | append: ',' | append: page.longitude | append: '&marker=' | append: page.objectid | relative_url }}" class="btn btn-outline-primary">View on Map</a>{% endif %}
|
||||||
|
{% if child.object_location %}<a target="_blank" rel="noopener" href="{{ child.object_location | relative_url }}" class="btn btn-outline-primary">
|
||||||
|
{% if child.display_template == 'video' and child.object_location contains 'vimeo' %}View on Vimeo{% elsif child.display_template == 'video' and child.object_location contains 'youtu' %}View on YouTube{% elsif child.display_template == 'record'%}Link to Object{% else %}Download {{ child.format | split: '/' | last | default: page.display_template | upcase }}{% endif %}
|
||||||
|
</a>{% endif %}
|
||||||
|
</div>
|
||||||
|
{% if child.object_transcript %}
|
||||||
|
<div class="collapse mt-3" id="collapseTranscript{{ child.objectid }}">
|
||||||
|
<div class="card card-body text-start">
|
||||||
|
{% assign transcript_type = child.object_transcript | slice: 0,1 %}
|
||||||
|
{% if transcript_type == '/' %}
|
||||||
|
{% assign transcript_location = child.object_transcript | remove_first: '/' %}
|
||||||
|
{% assign transcript = site.pages | where: 'path', transcript_location | first %}
|
||||||
|
{{ transcript.content | markdownify }}
|
||||||
|
{% else %}
|
||||||
|
{{ child.object_transcript | markdownify }}
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
27
.github/_includes/item/child/ia-embed.html
vendored
Normal file
27
.github/_includes/item/child/ia-embed.html
vendored
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
{% comment %}
|
||||||
|
|
||||||
|
Internet Archive item embed.
|
||||||
|
Loads a book/pdf, video, or audio item from Internet Archive via their standard iframe embed.
|
||||||
|
|
||||||
|
The item's "objects_location" must be the full public URL to the object on IA. The item url looks something like:
|
||||||
|
|
||||||
|
book, https://archive.org/details/uidaho_gem_1903
|
||||||
|
video, https://archive.org/details/fluxusfireplace
|
||||||
|
audio, https://archive.org/details/aladore_1704_librivox
|
||||||
|
|
||||||
|
The embed works for books/pdfs, video, and audio--however, you will want to tweak the aspect ratio for different item types!
|
||||||
|
|
||||||
|
Options:
|
||||||
|
|
||||||
|
- "ratio" = use Bootstrap embed ratio options "21x9", "16x9", "4x3", or "1x1" to customize the responsive aspect ratio if not using height. 4x3 is default. (optional)
|
||||||
|
- "height" = set embed object height in px (rather than responsive size), width will be 100%, e.g. "800px" (optional)
|
||||||
|
- "style" = apply an arbitrary style to the div containing the embed. This is useful if you are trying to add a min height or custom aspect ratio. (optional)
|
||||||
|
- min height is useful for book items on mobile, e.g. "min-height: 500px;"
|
||||||
|
- custom aspect ratio may be useful for book items, e.g. "--bs-aspect-ratio: %115;"
|
||||||
|
- both e.g. "min-height: 500px;--bs-aspect-ratio: calc(3 / 4 * 100%);"
|
||||||
|
|
||||||
|
{% endcomment %}
|
||||||
|
{% assign archive_id = child.object_location | split: '/' | last %}
|
||||||
|
<div class="{% unless include.height %}ratio ratio-{{ include.ratio | default: '4x3' }}{% endunless %}"{% if include.style %} style="{{ include.style }}"{% endif %}>
|
||||||
|
<iframe title="item embed for {{ child.title | escape }}" src="https://archive.org/embed/{{ archive_id }}" {% if include.height %}class="w-100" height="{{ include.height }}"{% endif %} frameborder="0" webkitallowfullscreen="true" mozallowfullscreen="true" allowfullscreen></iframe>
|
||||||
|
</div>`
|
||||||
10
.github/_includes/item/child/image-gallery.html
vendored
Normal file
10
.github/_includes/item/child/image-gallery.html
vendored
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
{% comment %}
|
||||||
|
|
||||||
|
Adds child image in a Spotlight gallery markup.
|
||||||
|
Ensure dependencies are added by including `gallery: true` in the layout front matter calling this include.
|
||||||
|
|
||||||
|
{%- endcomment -%}
|
||||||
|
<a id="{{ child.objectid }}" class="spotlight gallery-img" {% if child.object_location %}data-download="true"{% endif %} title="{{ child.title | escape }}" href="{{ child.object_location | default: child.image_small | relative_url }}">
|
||||||
|
<img src="{{ child.image_small | relative_url }}" alt="{{ child.image_alt_text | default: child.description | default: child.title | escape }}" class="img-fluid">
|
||||||
|
<div><small class="text-dark">Click to view full screen</small></div>
|
||||||
|
</a>
|
||||||
17
.github/_includes/item/child/item-thumb.html
vendored
Normal file
17
.github/_includes/item/child/item-thumb.html
vendored
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
{% comment %}
|
||||||
|
|
||||||
|
Add a thumbnail image or icon based on format for a child item, with a object_location link (if available).
|
||||||
|
|
||||||
|
{% endcomment %}
|
||||||
|
{% if child.object_location %}<a href="{{ child.object_location | relative_url }}" target="_blank" rel="noopener">{% endif %}
|
||||||
|
{% if child.image_thumb or child.image_small %}
|
||||||
|
<img class="img-thumbnail" src="{{ child.image_small | default: child.image_thumb | relative_url }}" alt="{{ child.image_alt_text | default: child.description | default: child.title | escape }}">
|
||||||
|
{% else %}
|
||||||
|
<svg class="bi text-body" fill="currentColor" aria-hidden="true">
|
||||||
|
{%- assign icon_template = child.display_template | default: child.format -%}
|
||||||
|
<use xlink:href="{{ '/assets/css/cb-icons.svg' | relative_url }}#{% if icon_template contains 'image' %}icon-image{% elsif icon_template contains 'pdf' %}icon-pdf{% elsif icon_template contains 'audio' %}icon-audio{% elsif icon_template contains 'video' %}icon-video{% elsif icon_template contains 'record' %}icon-record{% else %}icon-default{% endif %}"/>
|
||||||
|
</svg>
|
||||||
|
<span class="visually-hidden">{{ child.title | escape }} - {{ child.format }}</span>
|
||||||
|
{% endif %}
|
||||||
|
{% if child.object_location %}</a>{% endif %}
|
||||||
|
|
||||||
25
.github/_includes/item/child/metadata.html
vendored
Normal file
25
.github/_includes/item/child/metadata.html
vendored
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
{% comment %}
|
||||||
|
|
||||||
|
Adds child metadata to child modal in a description list element.
|
||||||
|
Fields are configured via _data/config-metadata.csv
|
||||||
|
|
||||||
|
{%- endcomment -%}
|
||||||
|
{%- assign fields = site.data.config-metadata | where_exp: 'item', 'item.display_name != nil' -%}
|
||||||
|
<div id="item-metadata">
|
||||||
|
<dl>
|
||||||
|
{% for f in fields %}{% if child[f.field] %}
|
||||||
|
<dt class="field">{{ f.display_name }}:</dt>
|
||||||
|
<dd class="field-value">
|
||||||
|
{% if f.browse_link == "true" %}
|
||||||
|
{% assign topics = child[f.field] | split: ";" %}
|
||||||
|
{% for t in topics %}
|
||||||
|
<a class="me-3" href="{{ t | strip | url_param_escape | prepend: '/browse/#' | relative_url }}">{{ t | strip }}</a>
|
||||||
|
{% endfor %}
|
||||||
|
{% elsif f.external_link == "true" %}
|
||||||
|
<a href="{{ child[f.field] }}">{{ child[f.field] }}</a>
|
||||||
|
{% else %}
|
||||||
|
{{ child[f.field] | replace: '""','"' }}{% endif %}
|
||||||
|
</dd>
|
||||||
|
{% endif %}{% endfor %}
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
27
.github/_includes/item/child/panorama.html
vendored
Normal file
27
.github/_includes/item/child/panorama.html
vendored
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
{% comment %}
|
||||||
|
|
||||||
|
Adds a panorama image viewer using Pannellum for child modals.
|
||||||
|
Default is set for equirectangular projection types.
|
||||||
|
https://pannellum.org/documentation/reference/
|
||||||
|
|
||||||
|
{%- endcomment -%}
|
||||||
|
<link rel="stylesheet" href="{{ site.lib-assets | default: '/assets/lib' | relative_url }}/pannellum/pannellum.css">
|
||||||
|
<div id="panorama" class="ratio ratio-4x3 my-4"></div>
|
||||||
|
<script src="{{ site.lib-assets | default: '/assets/lib' | relative_url }}/pannellum/pannellum.js"></script>
|
||||||
|
<script>
|
||||||
|
pannellum.viewer('panorama', {
|
||||||
|
"type": "equirectangular",
|
||||||
|
"panorama": "{{ child.object_location | relative_url }}",
|
||||||
|
"autoLoad": false,
|
||||||
|
/*
|
||||||
|
* Uncomment the next line to print the coordinates of mouse clicks
|
||||||
|
* to the browser's developer console, which makes it much easier
|
||||||
|
* to figure out where to place hot spots. Always remove it when
|
||||||
|
* finished, though.
|
||||||
|
*/
|
||||||
|
"hotSpotDebug": false,
|
||||||
|
"hotSpots": [
|
||||||
|
|
||||||
|
]
|
||||||
|
});
|
||||||
|
</script>
|
||||||
17
.github/_includes/item/child/rights-box.html
vendored
Normal file
17
.github/_includes/item/child/rights-box.html
vendored
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
{% comment %}
|
||||||
|
|
||||||
|
Adds a box to highlight rights information if child item has a "rights" or "rightsstatement" field.
|
||||||
|
|
||||||
|
{%- endcomment -%}
|
||||||
|
<div class="card mb-2">
|
||||||
|
<div class="card-header">Rights</div>
|
||||||
|
<div class="card-body">
|
||||||
|
<dl>
|
||||||
|
{% if child.rights %}<dt>Rights:</dt>
|
||||||
|
<dd>{{ child.rights }}</dd>{% endif %}
|
||||||
|
{% if child.rightsstatement %}<dt>Standardized Rights:</dt>
|
||||||
|
<dd><a href="{{ child.rightsstatement }}">{{ child.rightsstatement }}</a>
|
||||||
|
</dd>{% endif %}
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
18
.github/_includes/item/child/video-embed.html
vendored
Normal file
18
.github/_includes/item/child/video-embed.html
vendored
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
{% comment %}
|
||||||
|
|
||||||
|
Adds an iframe video embed from a YouTube or Vimeo link given in child item's object_location.
|
||||||
|
|
||||||
|
{%- endcomment -%}
|
||||||
|
{% if child.object_location contains 'vimeo' %}
|
||||||
|
{% assign vimeo_id = child.object_location | split: '/' | last %}
|
||||||
|
<div class="ratio ratio-16x9">
|
||||||
|
<iframe title="video embed {{ child.title | escape }}" src="https://player.vimeo.com/video/{{ vimeo_id }}" allowfullscreen></iframe>
|
||||||
|
</div>
|
||||||
|
{%- elsif child.object_location contains 'youtu' -%}
|
||||||
|
{% assign youtube_id = child.object_location | split: '/' | last %}
|
||||||
|
{% if youtube_id contains 'v=' %}{% assign youtube_id = youtube_id | split: 'v=' | last | split: '&' | first %}
|
||||||
|
{% elsif youtube_id contains '?' %}{% assign youtube_id = youtube_id | split: '?' | first %}{% endif %}
|
||||||
|
<div class="ratio ratio-16x9">
|
||||||
|
<iframe title="video embed {{ child.title | escape }}" src="https://www.youtube-nocookie.com/embed/{{ youtube_id }}?enablejsapi=1&rel=0&modestbranding=1" allowfullscreen></iframe>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
12
.github/_includes/item/child/video-player.html
vendored
Normal file
12
.github/_includes/item/child/video-player.html
vendored
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
{% comment %}
|
||||||
|
|
||||||
|
Adds html video element with source given in child's object_location.
|
||||||
|
Sizing is controlled using Bootstrap "ratio" styles.
|
||||||
|
|
||||||
|
{%- endcomment -%}
|
||||||
|
<div class="ratio ratio-16x9">
|
||||||
|
<video {% if child.image_small %}poster="{{ child.image_small | relative_url }}" {% endif %}preload="metadata" controls>
|
||||||
|
<source src="{{ child.object_location | relative_url }}">
|
||||||
|
Your browser does not support the video tag.
|
||||||
|
</video>
|
||||||
|
</div>
|
||||||
47
.github/_includes/item/citation-box.html
vendored
Normal file
47
.github/_includes/item/citation-box.html
vendored
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
{% comment %}
|
||||||
|
|
||||||
|
Adds a basic citation box for the item with reference link to the item page.
|
||||||
|
|
||||||
|
{%- endcomment -%}
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-header">Attribution</div>
|
||||||
|
<div class="card-body">
|
||||||
|
<dl>
|
||||||
|
<dt>Citation:</dt>
|
||||||
|
<dd id="citation-text">
|
||||||
|
{% if page.collection %}
|
||||||
|
"{{ page.title }}," <i>{{ page.collection }}</i>, {{site.title}}.
|
||||||
|
{% else %}
|
||||||
|
"{{ page.title }},"
|
||||||
|
{% endif %}
|
||||||
|
{% if page.date_created %}
|
||||||
|
{{ page.date_created }}.
|
||||||
|
{% endif %}
|
||||||
|
<a href="{{ page.url | absolute_url }}">{{ page.url | absolute_url }}</a>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<button id="copy-button" class="btn btn-primary">Copy Citation</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
// Get the citation text and the button
|
||||||
|
const citationText = document.getElementById("citation-text").innerText;
|
||||||
|
const copyButton = document.getElementById("copy-button");
|
||||||
|
|
||||||
|
// When the button is clicked, copy the citation to the clipboard
|
||||||
|
copyButton.addEventListener("click", function () {
|
||||||
|
const textArea = document.createElement("textarea");
|
||||||
|
textArea.value = citationText;
|
||||||
|
document.body.appendChild(textArea);
|
||||||
|
textArea.select();
|
||||||
|
document.execCommand("copy");
|
||||||
|
document.body.removeChild(textArea);
|
||||||
|
|
||||||
|
// Optionally, provide feedback to the user
|
||||||
|
copyButton.innerText = "Copied!";
|
||||||
|
setTimeout(() => {
|
||||||
|
copyButton.innerText = "Copy Citation";
|
||||||
|
}, 2000);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
34
.github/_includes/item/download-buttons.html
vendored
Normal file
34
.github/_includes/item/download-buttons.html
vendored
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
{% comment %}
|
||||||
|
|
||||||
|
Adds Item page button links, styled as a Bootstrap btn-group.
|
||||||
|
Features:
|
||||||
|
- View Transcript -- if the item has the field "object_transcript", this button is added along with a Bootstrap collapse containing the transcript content. If the value of "object_transcript" starts with objects/ it will look for the matching transcript file in the objects fold, otherwise it will use the value directly. Both will be rendered in Markdown.
|
||||||
|
- View on Timeline -- if the item has a "date" value, links to Timeline page.
|
||||||
|
- View on Map -- if item has "latitude" and "longitude" value, links to location on map.
|
||||||
|
- Download -- if the item has "object_location" value, adds a download button along with the item format, or if the value is a YouTube or Vimeo link adds a "View on" link.
|
||||||
|
|
||||||
|
{%- endcomment -%}
|
||||||
|
<div class="btn-group" role="group" aria-label="Item options">
|
||||||
|
{% if page.object_transcript %}<button class="btn btn-outline-primary" type="button" data-bs-toggle="collapse" data-bs-target="#collapseTranscript" aria-expanded="false" aria-controls="collapseTranscript">View Transcript</button>{% endif %}
|
||||||
|
{% if page.date %}{%- capture year -%}{% if page.date contains "-" %}{{ page.date | split: "-" | first }}{% elsif page.date contains "/" %}{{ page.date | split: "/" | last }}{% else %}{{ page.date }}{% endif %}{%- endcapture -%}
|
||||||
|
<a href="{{ year | strip | prepend: '/timeline.html#y' | relative_url }}" class="btn btn-outline-primary">View on Timeline</a>{% endif %}
|
||||||
|
{% if page.latitude and page.longitude %}
|
||||||
|
<a href="{{ '/map/?location=' | append: page.latitude | append: ',' | append: page.longitude | append: '&marker=' | append: page.objectid | relative_url }}" class="btn btn-outline-primary">View on Map</a>{% endif %}
|
||||||
|
{% if page.object_location %}<a target="_blank" rel="noopener" href="{{ page.object_location | relative_url }}" class="btn btn-outline-primary">
|
||||||
|
{% if page.display_template == 'video' and page.object_location contains 'vimeo' %}View on Vimeo{% elsif page.display_template == 'video' and page.object_location contains 'youtu' %}View on YouTube{% elsif page.display_template == 'record'%}Link to Object{% else %}Download {{ page.format | split: '/' | last | default: page.display_template | upcase }}{% endif %}
|
||||||
|
</a>{% endif %}
|
||||||
|
</div>
|
||||||
|
{% if page.object_transcript %}
|
||||||
|
<div class="collapse mt-3" id="collapseTranscript">
|
||||||
|
<div class="card card-body text-start">
|
||||||
|
{% assign transcript_type = page.object_transcript | slice: 0,1 %}
|
||||||
|
{% if transcript_type == '/' %}
|
||||||
|
{% assign transcript_location = page.object_transcript | remove_first: '/' %}
|
||||||
|
{% assign transcript = site.pages | where: 'path', transcript_location | first %}
|
||||||
|
{{ transcript.content | markdownify }}
|
||||||
|
{% else %}
|
||||||
|
{{ page.object_transcript | markdownify }}
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
27
.github/_includes/item/ia-embed.html
vendored
Normal file
27
.github/_includes/item/ia-embed.html
vendored
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
{% comment %}
|
||||||
|
|
||||||
|
Internet Archive item embed.
|
||||||
|
Loads a book/pdf, video, or audio item from Internet Archive via their standard iframe embed.
|
||||||
|
|
||||||
|
The item's "objects_location" must be the full public URL to the object on IA. The item url looks something like:
|
||||||
|
|
||||||
|
book, https://archive.org/details/uidaho_gem_1903
|
||||||
|
video, https://archive.org/details/fluxusfireplace
|
||||||
|
audio, https://archive.org/details/aladore_1704_librivox
|
||||||
|
|
||||||
|
The embed works for books/pdfs, video, and audio--however, you will want to tweak the aspect ratio for different item types!
|
||||||
|
|
||||||
|
Options:
|
||||||
|
|
||||||
|
- "ratio" = use Bootstrap embed ratio options "21x9", "16x9", "4x3", or "1x1" to customize the responsive aspect ratio if not using height. 4x3 is default. (optional)
|
||||||
|
- "height" = set embed object height in px (rather than responsive size), width will be 100%, e.g. "800px" (optional)
|
||||||
|
- "style" = apply an arbitrary style to the div containing the embed. This is useful if you are trying to add a min height or custom aspect ratio. (optional)
|
||||||
|
- min height is useful for book items on mobile, e.g. "min-height: 500px;"
|
||||||
|
- custom aspect ratio may be useful for book items, e.g. "--bs-aspect-ratio: %115;"
|
||||||
|
- both e.g. "min-height: 500px;--bs-aspect-ratio: calc(3 / 4 * 100%);"
|
||||||
|
|
||||||
|
{% endcomment %}
|
||||||
|
{% assign archive_id = page.object_location | split: '/' | last %}
|
||||||
|
<div class="{% unless include.height %}ratio ratio-{{ include.ratio | default: '4x3' }}{% endunless %}"{% if include.style %} style="{{ include.style }}"{% endif %}>
|
||||||
|
<iframe title="item embed for {{ page.title | escape }}" src="https://archive.org/embed/{{ archive_id }}" {% if include.height %}class="w-100" height="{{ include.height }}"{% endif %} frameborder="0" webkitallowfullscreen="true" mozallowfullscreen="true" allowfullscreen></iframe>
|
||||||
|
</div>`
|
||||||
20
.github/_includes/item/iiif-manifest-universal-viewer.html
vendored
Normal file
20
.github/_includes/item/iiif-manifest-universal-viewer.html
vendored
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
{% comment %}
|
||||||
|
|
||||||
|
Embed Universal Viewer to load item from an IIIF manifest file, https://github.com/UniversalViewer/universalviewer
|
||||||
|
This include assumes that Item's object_location field is a relative link or direct url to a IIIF manifest json file. e.g. https://wellcomelibrary.org/iiif/b18035723/manifest
|
||||||
|
If you are using an external manifest url, you may encounter CORS policy error if the server hosting the manifest is not set up correctly--one workaround is to download the json file, add to your "objects" folder, and use a relative link, e.g. "objects/book-manifest1.json". You do not need the images, just the manifest file!
|
||||||
|
|
||||||
|
{% endcomment %}
|
||||||
|
<!-- add IIIF Universal Viewer assets from CDN -->
|
||||||
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/universalviewer@4.0.0/dist/uv.css"/>
|
||||||
|
<script src="https://cdn.jsdelivr.net/npm/universalviewer@4.0.0/dist/umd/UV.js"></script>
|
||||||
|
<!-- add div for viewer -->
|
||||||
|
<div class="uv" id="uv" style="width: 100%; height: 668px;"></div>
|
||||||
|
<script>
|
||||||
|
// initialize Universal Viewer
|
||||||
|
var uvOptions = {
|
||||||
|
manifest: {{ page.object_location | relative_url | jsonify }}
|
||||||
|
// add options here!
|
||||||
|
};
|
||||||
|
var iiif_viewer = UV.init("uv", uvOptions);
|
||||||
|
</script>
|
||||||
10
.github/_includes/item/image-gallery.html
vendored
Normal file
10
.github/_includes/item/image-gallery.html
vendored
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
{% comment %}
|
||||||
|
|
||||||
|
For image items, a zoomable, full screen gallery view is added using Spotlight gallery.
|
||||||
|
Ensure dependencies are added by including `gallery: true` in the layout front matter calling this include.
|
||||||
|
|
||||||
|
{%- endcomment -%}
|
||||||
|
<a id="{{ page.objectid }}" class="spotlight gallery-img" {% if page.object_location %}data-download="true"{% endif %} title="{{ page.title | escape }}" href="{{ page.object_location | default: page.image_small | relative_url }}">
|
||||||
|
<img src="{{ page.image_small | relative_url }}" alt="{{ page.image_alt_text | default: page.description | default: page.title | escape }}" class="img-fluid">
|
||||||
|
<div><small class="text-dark">Click to view full screen</small></div>
|
||||||
|
</a>
|
||||||
16
.github/_includes/item/item-thumb.html
vendored
Normal file
16
.github/_includes/item/item-thumb.html
vendored
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
{% comment %}
|
||||||
|
|
||||||
|
Add a thumbnail image or icon based on format for an item, with a object_location link (if available).
|
||||||
|
|
||||||
|
{% endcomment %}
|
||||||
|
{% if page.object_location %}<a href="{{ page.object_location | relative_url }}" target="_blank" rel="noopener">{% endif %}
|
||||||
|
{% if page.image_thumb or page.image_small %}
|
||||||
|
<img class="img-thumbnail" src="{{ page.image_small | default: page.image_thumb | relative_url }}" alt="{{ page.image_alt_text | default: page.description | default: page.title | escape }}">
|
||||||
|
{% else %}
|
||||||
|
<svg class="bi text-body" fill="currentColor" aria-hidden="true">
|
||||||
|
{%- assign icon_template = page.display_template | default: page.format -%}
|
||||||
|
<use xlink:href="{{ '/assets/css/cb-icons.svg' | relative_url }}#{% if icon_template contains 'image' %}icon-image{% elsif icon_template contains 'pdf' %}icon-pdf{% elsif icon_template contains 'audio' %}icon-audio{% elsif icon_template contains 'video' %}icon-video{% elsif icon_template contains 'record' %}icon-record{% else %}icon-default{% endif %}"/>
|
||||||
|
</svg>
|
||||||
|
<span class="visually-hidden">{{ page.title | escape }} - {{ page.format }}</span>
|
||||||
|
{% endif %}
|
||||||
|
{% if page.object_location %}</a>{% endif %}
|
||||||
25
.github/_includes/item/metadata.html
vendored
Normal file
25
.github/_includes/item/metadata.html
vendored
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
{% comment %}
|
||||||
|
|
||||||
|
Adds metadata to item pages in a description list element.
|
||||||
|
Fields are configured via _data/config-metadata.csv
|
||||||
|
|
||||||
|
{%- endcomment -%}
|
||||||
|
{%- assign fields = site.data.config-metadata | where_exp: 'item', 'item.display_name != nil' -%}
|
||||||
|
<div id="item-metadata">
|
||||||
|
<dl>
|
||||||
|
{% for f in fields %}{% if page[f.field] %}
|
||||||
|
<dt class="field">{{ f.display_name }}:</dt>
|
||||||
|
<dd class="field-value">
|
||||||
|
{% if f.browse_link == "true" %}
|
||||||
|
{% assign topics = page[f.field] | split: ";" %}
|
||||||
|
{% for t in topics %}
|
||||||
|
<a class="me-3" href="{{ t | strip | url_param_escape | prepend: ':' | prepend: f.field | prepend: '/browse/#' | relative_url }}">{{ t | strip }}</a>
|
||||||
|
{% endfor %}
|
||||||
|
{% elsif f.external_link == "true" %}
|
||||||
|
<a href="{{ page[f.field] }}">{{ page[f.field] }}</a>
|
||||||
|
{% else %}
|
||||||
|
{{ page[f.field] | replace: '""','"' }}{% endif %}
|
||||||
|
</dd>
|
||||||
|
{% endif %}{% endfor %}
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
59
.github/_includes/item/mini-map.html
vendored
Normal file
59
.github/_includes/item/mini-map.html
vendored
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
{% comment %}
|
||||||
|
|
||||||
|
Adds a Leaflet map featuring a single marker based on the item's lat long.
|
||||||
|
|
||||||
|
Options:
|
||||||
|
- "map-marker" = true/false, add a marker using the item's lat long and title (default true)
|
||||||
|
- "map-height" = height of the mini map in px (default 400px)
|
||||||
|
- "map-zoom" = provide a zoom level, default 10
|
||||||
|
- "map-link" = true/false, add a button link to the collection's default full map page (default false)
|
||||||
|
|
||||||
|
{% endcomment %}
|
||||||
|
|
||||||
|
<style>
|
||||||
|
#mini-map { height: {{ include.map-height | default: '400px' }}; z-index: 98; }
|
||||||
|
</style>
|
||||||
|
<div id="mini-map"></div>
|
||||||
|
{% if include.map-link == true %}
|
||||||
|
<a href="{{ '/map/?location=' | append: page.latitude | append: ',' | append: page.longitude | append: '&marker=' | append: page.objectid | relative_url }}" class="btn btn-outline-primary my-3">View on Full Map</a>{% endif %}
|
||||||
|
<!-- load leaflet dependencies -->
|
||||||
|
<link rel="stylesheet" href="{{ site.lib-assets | default: '/assets/lib' | relative_url }}/leaflet/leaflet.css">
|
||||||
|
<link rel="stylesheet" href="{{ site.lib-assets | default: '/assets/lib' | relative_url }}/leaflet/leaflet.fullscreen.css">
|
||||||
|
<script src="{{ site.lib-assets | default: '/assets/lib' | relative_url }}/leaflet/leaflet.js"></script>
|
||||||
|
<script src="{{ site.lib-assets | default: '/assets/lib' | relative_url }}/leaflet/Leaflet.fullscreen.min.js"></script>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
// initial start point
|
||||||
|
var mapCenter = [{{ page.latitude }}, {{ page.longitude }}];
|
||||||
|
var mapZoom = {{ include.map-zoom | default: 10 }};
|
||||||
|
/* init map, set center and zoom */
|
||||||
|
var map = L.map('mini-map').setView(mapCenter, mapZoom);
|
||||||
|
|
||||||
|
/* add map layer options */
|
||||||
|
var Esri_WorldStreetMap = L.tileLayer('https://server.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer/tile/{z}/{y}/{x}', {
|
||||||
|
attribution: 'Tiles © Esri — Source: Esri, DeLorme, NAVTEQ, USGS, Intermap, iPC, NRCAN, Esri Japan, METI, Esri China (Hong Kong), Esri (Thailand), TomTom, 2012'
|
||||||
|
});
|
||||||
|
var Esri_NatGeoWorldMap = L.tileLayer('https://server.arcgisonline.com/ArcGIS/rest/services/NatGeo_World_Map/MapServer/tile/{z}/{y}/{x}', {
|
||||||
|
attribution: 'Tiles © Esri — National Geographic, Esri, DeLorme, NAVTEQ, UNEP-WCMC, USGS, NASA, ESA, METI, NRCAN, GEBCO, NOAA, iPC',
|
||||||
|
maxZoom: 16
|
||||||
|
});
|
||||||
|
var Esri_WorldImagery = L.tileLayer('https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}', {
|
||||||
|
attribution: 'Tiles © Esri — Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community'
|
||||||
|
});
|
||||||
|
/* add base map switcher */
|
||||||
|
var baseMaps = {
|
||||||
|
"Esri World StreetMap": Esri_WorldStreetMap,
|
||||||
|
"Esri National Geo": Esri_NatGeoWorldMap,
|
||||||
|
"Esri Imagery": Esri_WorldImagery
|
||||||
|
};
|
||||||
|
L.control.layers(baseMaps).addTo(map);
|
||||||
|
/* load base map */
|
||||||
|
Esri_WorldImagery.addTo(map);
|
||||||
|
/* add fullscreen control */
|
||||||
|
map.addControl(new L.Control.Fullscreen());
|
||||||
|
{% unless include.map-marker == false %}
|
||||||
|
/* add marker */
|
||||||
|
L.marker(mapCenter).addTo(map)
|
||||||
|
.bindPopup('{{ page.title | escape }}');{% endunless %}
|
||||||
|
|
||||||
|
</script>
|
||||||
27
.github/_includes/item/panorama.html
vendored
Normal file
27
.github/_includes/item/panorama.html
vendored
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
{% comment %}
|
||||||
|
|
||||||
|
Adds a panorama image viewer using Pannellum.
|
||||||
|
Default is set for equirectangular projection types.
|
||||||
|
https://pannellum.org/documentation/reference/
|
||||||
|
|
||||||
|
{%- endcomment -%}
|
||||||
|
<link rel="stylesheet" href="{{ site.lib-assets | default: '/assets/lib' | relative_url }}/pannellum/pannellum.css">
|
||||||
|
<div id="panorama" class="ratio ratio-4x3 my-4"></div>
|
||||||
|
<script src="{{ site.lib-assets | default: '/assets/lib' | relative_url }}/pannellum/pannellum.js"></script>
|
||||||
|
<script>
|
||||||
|
pannellum.viewer('panorama', {
|
||||||
|
"type": "equirectangular",
|
||||||
|
"panorama": "{{ page.object_location | relative_url }}",
|
||||||
|
"autoLoad": false,
|
||||||
|
/*
|
||||||
|
* Uncomment the next line to print the coordinates of mouse clicks
|
||||||
|
* to the browser's developer console, which makes it much easier
|
||||||
|
* to figure out where to place hot spots. Always remove it when
|
||||||
|
* finished, though.
|
||||||
|
*/
|
||||||
|
"hotSpotDebug": false,
|
||||||
|
"hotSpots": [
|
||||||
|
|
||||||
|
]
|
||||||
|
});
|
||||||
|
</script>
|
||||||
12
.github/_includes/item/pdf-embed.html
vendored
Normal file
12
.github/_includes/item/pdf-embed.html
vendored
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
{% comment %}
|
||||||
|
|
||||||
|
Embed PDF so that it directly loads on the item page.
|
||||||
|
Please note that embedding large PDFs will slow your user's accessing the page.
|
||||||
|
Size is controlled using Bootstrap Custom ratios, https://getbootstrap.com/docs/5.3/helpers/ratio/#custom-ratios
|
||||||
|
|
||||||
|
{% endcomment %}
|
||||||
|
<div class="ratio" style="--bs-aspect-ratio: 115%;">
|
||||||
|
<object title="PDF file of {{ page.title }}" data="{{ page.object_location | relative_url }}" type="application/pdf" width="100%" >
|
||||||
|
<p>The PDF is not rendering in your browser, please use the button below to download the PDF.</p>
|
||||||
|
</object>
|
||||||
|
</div>
|
||||||
17
.github/_includes/item/rights-box.html
vendored
Normal file
17
.github/_includes/item/rights-box.html
vendored
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
{% comment %}
|
||||||
|
|
||||||
|
Adds a box to highlight rights information if item has a "rights" or "rightsstatement" field.
|
||||||
|
|
||||||
|
{%- endcomment -%}
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-header">Rights</div>
|
||||||
|
<div class="card-body">
|
||||||
|
<dl>
|
||||||
|
{% if page.rights %}<dt>Rights:</dt>
|
||||||
|
<dd>{{ page.rights }}</dd>{% endif %}
|
||||||
|
{% if page.rightsstatement %}<dt>Standardized Rights:</dt>
|
||||||
|
<dd><a href="{{ page.rightsstatement }}">{{ page.rightsstatement }}</a>
|
||||||
|
</dd>{% endif %}
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
19
.github/_includes/item/video-embed.html
vendored
Normal file
19
.github/_includes/item/video-embed.html
vendored
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
{% comment %}
|
||||||
|
|
||||||
|
Adds an iframe video embed from a YouTube or Vimeo link given in object_location.
|
||||||
|
Sizing is controlled using Bootstrap "ratio" sizing.
|
||||||
|
|
||||||
|
{%- endcomment -%}
|
||||||
|
{% if page.object_location contains 'vimeo' %}
|
||||||
|
{% assign vimeo_id = page.object_location | split: '/' | last %}
|
||||||
|
<div class="ratio ratio-16x9">
|
||||||
|
<iframe title="video embed {{ page.title | escape }}" src="https://player.vimeo.com/video/{{ vimeo_id }}" allowfullscreen></iframe>
|
||||||
|
</div>
|
||||||
|
{%- elsif page.object_location contains 'youtu' -%}
|
||||||
|
{% assign youtube_id = page.object_location | split: '/' | last %}
|
||||||
|
{% if youtube_id contains 'v=' %}{% assign youtube_id = youtube_id | split: 'v=' | last | split: '&' | first %}
|
||||||
|
{% elsif youtube_id contains '?' %}{% assign youtube_id = youtube_id | split: '?' | first %}{% endif %}
|
||||||
|
<div class="ratio ratio-16x9">
|
||||||
|
<iframe title="video embed {{ page.title | escape }}" src="https://www.youtube-nocookie.com/embed/{{ youtube_id }}?rel=0&modestbranding=1" allowfullscreen></iframe>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
12
.github/_includes/item/video-player.html
vendored
Normal file
12
.github/_includes/item/video-player.html
vendored
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
{% comment %}
|
||||||
|
|
||||||
|
Adds html video element with source given in object_location.
|
||||||
|
Sizing is controlled using Bootstrap "ratio" styles.
|
||||||
|
|
||||||
|
{%- endcomment -%}
|
||||||
|
<div class="ratio ratio-16x9">
|
||||||
|
<video {% if page.image_small %}poster="{{ page.image_small | relative_url }}" {% endif %}preload="metadata" controls>
|
||||||
|
<source src="{{ page.object_location | relative_url }}">
|
||||||
|
Your browser does not support the video tag. Please <a href="{{ page.object_location | relative_url }}">download the video file</a>.
|
||||||
|
</video>
|
||||||
|
</div>
|
||||||
1057
.github/_includes/js/browse-js.html
vendored
Normal file
1057
.github/_includes/js/browse-js.html
vendored
Normal file
File diff suppressed because it is too large
Load Diff
257
.github/_includes/js/browse-simple-js.html
vendored
Normal file
257
.github/_includes/js/browse-simple-js.html
vendored
Normal file
@@ -0,0 +1,257 @@
|
|||||||
|
<script>
|
||||||
|
|
||||||
|
/* add items */
|
||||||
|
var items = [
|
||||||
|
{% for item in items %}
|
||||||
|
{ {% for f in fields %}{% if item[f.field] %}{{ f.field | escape | jsonify }}:{{ item[f.field] | strip | jsonify }}, {%- endif -%}{%- endfor -%}
|
||||||
|
{% if item.image_thumb %}"img": {{ item.image_thumb | relative_url | jsonify }}, {%- endif -%}
|
||||||
|
{% if item.display_template %}"display_template": {{ item.display_template | jsonify }}, {%- endif -%}
|
||||||
|
{% if item.format %}"format": {{ item.format | jsonify }}, {%- endif -%}
|
||||||
|
{% if item.image_alt_text %}"alt": {{ item.image_alt_text | escape | jsonify }}, {%- endif -%}
|
||||||
|
"title":{{ item.title | strip | escape | jsonify }},
|
||||||
|
{% if item.parentid %}"parent": {{ item.parentid | jsonify }}, {%- endif -%}
|
||||||
|
"id":{{ item.objectid | jsonify }} }{% unless forloop.last %},{% endunless %}{%- endfor -%}
|
||||||
|
];
|
||||||
|
|
||||||
|
{% include helpers/get-icon.js %}
|
||||||
|
|
||||||
|
/* function to create cards for each item */
|
||||||
|
function makeCard(obj) {
|
||||||
|
// placeholder image for lazyload
|
||||||
|
var placeholder = "data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 3 2'%3E%3C/svg%3E";
|
||||||
|
// find item link
|
||||||
|
var itemHref = `{{ '/items/' | relative_url }}${ obj.parent ? obj.parent + ".html#" + obj.id : obj.id + ".html"}`;
|
||||||
|
// find image
|
||||||
|
var imgSrc, thumbIcon;
|
||||||
|
// if there is a thumb in the csv display it
|
||||||
|
if(obj.img) {
|
||||||
|
imgSrc = obj.img;
|
||||||
|
// else add an icon based on display_template or format
|
||||||
|
} else {
|
||||||
|
thumbIcon = getIcon(obj.template,obj.format,"thumb");
|
||||||
|
}
|
||||||
|
var imgAlt = obj.alt ? obj.alt : obj.title;
|
||||||
|
|
||||||
|
// start card
|
||||||
|
var card = '<div class="item col-lg-4 col-md-6 mb-2"><div class="card">';
|
||||||
|
// top image for items with image
|
||||||
|
if(imgSrc) {
|
||||||
|
card += '<a href="' + itemHref + '"> <img class="card-img-top lazyload" src="' + placeholder + '" data-src="' + imgSrc + '" alt="' + imgAlt + '"></a>';
|
||||||
|
}
|
||||||
|
// title
|
||||||
|
card += '<div class="card-body text-center"> <h3 class="card-title h4"><a href="' + itemHref + '" class="text-dark">' + obj.title + '</a></h3>';
|
||||||
|
// icon thumb for item without image
|
||||||
|
if(thumbIcon){
|
||||||
|
card += '<p><a href="' + itemHref + '">' + thumbIcon + '</a></p>';
|
||||||
|
}
|
||||||
|
// other fields
|
||||||
|
card += '<p class="card-text">';
|
||||||
|
{% for f in fields %}{% unless f.hidden == 'true' %}
|
||||||
|
if(obj[{{ f.field | jsonify }}]){
|
||||||
|
{% if f.display_name %}card += '<strong>{{ f.display_name }}:</strong> ';{% endif %}
|
||||||
|
{% if f.btn == 'true' %}
|
||||||
|
var btns = obj[{{ f.field | jsonify }}].split(";");
|
||||||
|
for (var i = 0, len = btns.length; i < len; i++) {
|
||||||
|
if(btns[i] != "") {
|
||||||
|
card += '<a class="btn btn-sm btn-secondary m-1 text-wrap" href="{{ page.url | relative_url }}#' + encodeURIComponent(btns[i].trim()) + '">' + btns[i].trim() + '</a>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
{% else %}
|
||||||
|
card += obj[{{ f.field | jsonify }}];
|
||||||
|
{% endif %}
|
||||||
|
{% unless forloop.last %}card += '<br>';{% endunless %}
|
||||||
|
}
|
||||||
|
{% endunless %}{% endfor %}
|
||||||
|
card += '</p>';
|
||||||
|
// media type
|
||||||
|
if(obj.template && obj.template != "") {
|
||||||
|
mediaIcon = getIcon(obj.template,obj.format,"hidden");
|
||||||
|
card += '<p class="card-text"><small><a class="btn btn-sm btn-outline-secondary" href="{{ page.url | relative_url }}#' + encodeURIComponent(obj.template) + '">' +
|
||||||
|
obj.template.toUpperCase().replace("_"," ") + ' ' + mediaIcon + '</a></small></p>';
|
||||||
|
}
|
||||||
|
// view button
|
||||||
|
card += '<hr><a href="' + itemHref + '" class="btn btn-sm btn-light" title="link to ' + obj.title + '">View Full Record</a>';
|
||||||
|
// close divs
|
||||||
|
card += '</div></div></div>';
|
||||||
|
// send back big string
|
||||||
|
return card;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* filter items function */
|
||||||
|
function filterItems(arr,q,field) {
|
||||||
|
// show loading icon
|
||||||
|
loadingIcon.classList.remove("d-none");
|
||||||
|
// dont filter if no q
|
||||||
|
if (q=="") {
|
||||||
|
var filteredItems = arr;
|
||||||
|
} else {
|
||||||
|
q = q.trim().toUpperCase();
|
||||||
|
// js indexOf filter
|
||||||
|
var filteredItems = [];
|
||||||
|
for (var i = 0, len = arr.length; i < len; i++) {
|
||||||
|
var val = "";
|
||||||
|
// if field is specified, only search that field
|
||||||
|
if (field && field !== "all" && arr[i][field]) {
|
||||||
|
val = arr[i][field] + " ";
|
||||||
|
} else {
|
||||||
|
// search all fields
|
||||||
|
for (var k in arr[i]) {
|
||||||
|
if (k != "img") { val += arr[i][k] + " "; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(val.toUpperCase().indexOf(q) != -1){
|
||||||
|
filteredItems.push(arr[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// add number
|
||||||
|
document.querySelector("#numberOf").innerHTML = filteredItems.length + " of {{ items | size }} items";
|
||||||
|
|
||||||
|
// add stuff, make cards first in giant var, then add all at once to speed things up
|
||||||
|
var cards = "";
|
||||||
|
for (var i = 0, len = filteredItems.length; i < len; i++) {
|
||||||
|
cards += makeCard(filteredItems[i]);
|
||||||
|
}
|
||||||
|
browseItemsDiv.innerHTML = cards;
|
||||||
|
|
||||||
|
// finish
|
||||||
|
if (q != "") {
|
||||||
|
filterTextBox.focus();
|
||||||
|
}
|
||||||
|
loadingIcon.classList.add("d-none");
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Fisher-Yates shuffle https://bost.ocks.org/mike/shuffle/ */
|
||||||
|
function shuffle(array) {
|
||||||
|
var m = array.length, t, i;
|
||||||
|
while (m) {
|
||||||
|
i = Math.floor(Math.random() * m--);
|
||||||
|
t = array[m];
|
||||||
|
array[m] = array[i];
|
||||||
|
array[i] = t;
|
||||||
|
}
|
||||||
|
return array;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* init browse page */
|
||||||
|
|
||||||
|
/* set default sort or randomize items once at page load */
|
||||||
|
{% if site.data.theme.default-sort-field %}
|
||||||
|
var defaultSort = "{{ site.data.theme.default-sort-field }}".toLowerCase();
|
||||||
|
// Apply default sort
|
||||||
|
sorting(items, defaultSort);
|
||||||
|
// Update UI to show default sort is active
|
||||||
|
var defaultSortButton = document.querySelector('[data-filter="' + defaultSort + '"]');
|
||||||
|
if (defaultSortButton) {
|
||||||
|
defaultSortButton.classList.add("active");
|
||||||
|
var sortFilter = document.querySelector("#sortFilter");
|
||||||
|
if (sortFilter) {
|
||||||
|
sortFilter.innerHTML = defaultSortButton.textContent;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
{% else %}
|
||||||
|
/* randomize items once at page load */
|
||||||
|
shuffle(items);
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
/* set some elements */
|
||||||
|
var loadingIcon = document.querySelector("#loadingIcon");
|
||||||
|
var filterTextBox = document.querySelector('#filterTextBox');
|
||||||
|
var filterButton = document.querySelector("#filterButton");
|
||||||
|
var browseItemsDiv = document.querySelector("#browseItems");
|
||||||
|
|
||||||
|
/* filter if hash in initial URL */
|
||||||
|
var query = "";
|
||||||
|
var searchField = "all";
|
||||||
|
if(window.location.hash) {
|
||||||
|
var hashValue = decodeURIComponent(location.hash.substr(1));
|
||||||
|
if (hashValue != 'maincontent') {
|
||||||
|
// check if hash contains field:query format
|
||||||
|
if (hashValue.includes(":")) {
|
||||||
|
var parts = hashValue.split(":");
|
||||||
|
searchField = parts[0];
|
||||||
|
query = parts.slice(1).join(":"); // rejoin in case value contains colons
|
||||||
|
} else {
|
||||||
|
query = hashValue;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
query = "";
|
||||||
|
}
|
||||||
|
filterTextBox.value = query;
|
||||||
|
filterItems(items,query,searchField);
|
||||||
|
} else {
|
||||||
|
query = "";
|
||||||
|
filterItems(items,query,searchField);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* filter form */
|
||||||
|
function submitFilter() {
|
||||||
|
query = filterTextBox.value;
|
||||||
|
window.location.hash = encodeURIComponent(query);
|
||||||
|
}
|
||||||
|
/* reset filters */
|
||||||
|
function resetFilter() {
|
||||||
|
query = "";
|
||||||
|
filterTextBox.value = query;
|
||||||
|
window.location.hash = encodeURIComponent(query);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* filter if hash changes */
|
||||||
|
window.addEventListener("hashchange", function() {
|
||||||
|
// read hash
|
||||||
|
var hashValue = decodeURIComponent(location.hash.substr(1));
|
||||||
|
if (hashValue != 'maincontent') {
|
||||||
|
// check if hash contains field:query format
|
||||||
|
if (hashValue.includes(":")) {
|
||||||
|
var parts = hashValue.split(":");
|
||||||
|
searchField = parts[0];
|
||||||
|
query = parts.slice(1).join(":"); // rejoin in case value contains colons
|
||||||
|
} else {
|
||||||
|
searchField = "all";
|
||||||
|
query = hashValue;
|
||||||
|
}
|
||||||
|
filterTextBox.value = query;
|
||||||
|
// filter
|
||||||
|
filterItems(items,query,searchField);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
/* item array sorting function */
|
||||||
|
function sorting(json_object, key_to_sort_by) {
|
||||||
|
function sortByKey(a, b) {
|
||||||
|
var x = a[key_to_sort_by];
|
||||||
|
var y = b[key_to_sort_by];
|
||||||
|
if (typeof x === 'string' ) { x = x.toUpperCase(); }
|
||||||
|
if (typeof y === 'string' ) { y = y.toUpperCase(); }
|
||||||
|
return ((x==null) ? 1: (y==null) ? -1: (x < y) ? -1 : ((x > y) ? 1 : 0));
|
||||||
|
}
|
||||||
|
json_object.sort(sortByKey);
|
||||||
|
};
|
||||||
|
|
||||||
|
/* add sort function on click of sort options */
|
||||||
|
var sortFilter = document.querySelector("#sortFilter");
|
||||||
|
var sortOptions = document.querySelectorAll(".browse-sort-item");
|
||||||
|
sortOptions.forEach((button) => {
|
||||||
|
button.addEventListener("click", (event) => {
|
||||||
|
// get the sort field
|
||||||
|
var field = button.dataset.filter;
|
||||||
|
var display_name = button.textContent;
|
||||||
|
// get current filter
|
||||||
|
var query = filterTextBox.value;
|
||||||
|
// switch active sort option
|
||||||
|
sortOptions.forEach((option) => { option.classList.remove("active"); } );
|
||||||
|
button.classList.add("active");
|
||||||
|
sortFilter.innerHTML = display_name;
|
||||||
|
// send to sort and filter
|
||||||
|
if (field != 'random') {
|
||||||
|
sorting(items, field);
|
||||||
|
filterItems(items, query);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
shuffle(items);
|
||||||
|
filterItems(items, query);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
</script>
|
||||||
69
.github/_includes/js/cloud-js.html
vendored
Normal file
69
.github/_includes/js/cloud-js.html
vendored
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
{%- comment -%}
|
||||||
|
|
||||||
|
Generates a subject cloud using js to process the terms for display on "cloud" layout.
|
||||||
|
Requires CB's array_count_uniq.rb plugin!
|
||||||
|
|
||||||
|
{%- endcomment -%}
|
||||||
|
{% if site.data.theme.browse-child-objects == true %}
|
||||||
|
{%- assign items = site.data[site.metadata] | where_exp: 'item','item.objectid' -%}
|
||||||
|
{% else %}
|
||||||
|
{%- assign items = site.data[site.metadata] | where_exp: 'item','item.objectid and item.parentid == nil' -%}
|
||||||
|
{% endif %}
|
||||||
|
{%- assign termsMin = include.min | plus: 0 | default: 1 -%}
|
||||||
|
{%- assign cloud_id = include.id | default: "cloud" -%}
|
||||||
|
{%- assign cloud-fields = include.fields | split: ";" -%}
|
||||||
|
|
||||||
|
{%- comment -%} capture terms from all cloud fields {%- endcomment -%}
|
||||||
|
{%- assign terms = "" -%}
|
||||||
|
{%- for c in cloud-fields -%}
|
||||||
|
{% assign new = items | map: c | compact | join: ";" | split: ";" %}
|
||||||
|
{% capture field_terms %}{% for n in new %}{{n}}~{{c}};{% endfor %}{% endcapture %}
|
||||||
|
{% assign terms = terms | append: ";" | append: field_terms %}
|
||||||
|
{%- endfor -%}
|
||||||
|
{%- comment -%} find unique terms and counts {%- endcomment -%}
|
||||||
|
{%- assign uniqTerms = terms | downcase | split: ";" | array_count_uniq | sort | where_exp: 't','t[1] >= termsMin' -%}
|
||||||
|
|
||||||
|
<script>
|
||||||
|
(function(){
|
||||||
|
/* subject terms + count */
|
||||||
|
var terms = [
|
||||||
|
{% for t in uniqTerms %}{% assign term_field = t[0] | split: "~" %}[{{ term_field[0] | jsonify }}, {{ t[1] | jsonify }},{{term_field[1] | jsonify}}]{% unless forloop.last %}, {% endunless %}{% endfor %}
|
||||||
|
];
|
||||||
|
|
||||||
|
{% if include.stopwords %}/* apply stopwords */
|
||||||
|
var stopWords = {{ include.stopwords | downcase | split: ';' | jsonify }};
|
||||||
|
terms = terms.filter(function(a) { return stopWords.indexOf(a[0]) < 0;});{% endif %}
|
||||||
|
/* calculate max size */
|
||||||
|
var counts = terms.map(function(obj){ return obj[1]; });
|
||||||
|
var countMax = counts.reduce(function(a, b) { return Math.max(a, b); });
|
||||||
|
var cloud = document.getElementById("{{ cloud_id }}");
|
||||||
|
{% if include.shuffle == true %}
|
||||||
|
/* Fisher-Yates shuffle https://bost.ocks.org/mike/shuffle/ */
|
||||||
|
function shuffle(array) {
|
||||||
|
var m = array.length, t, i;
|
||||||
|
while (m) {
|
||||||
|
i = Math.floor(Math.random() * m--);
|
||||||
|
t = array[m];
|
||||||
|
array[m] = array[i];
|
||||||
|
array[i] = t;
|
||||||
|
}
|
||||||
|
return array;
|
||||||
|
}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
function mapSize(x) { return Math.round(x * 9 / countMax + 1); }
|
||||||
|
/* create cloud */
|
||||||
|
function makeGrid(array) {
|
||||||
|
var i, size;
|
||||||
|
var items = "";
|
||||||
|
{% if include.shuffle == true %}shuffle(array);{% endif %}
|
||||||
|
for (let i = 0; i < array.length; i++) {
|
||||||
|
size = mapSize(array[i][1]);
|
||||||
|
items += '<a class="btn btn-{{ include.button | default: "outline-primary" }} m-2 tagcloud' + size + '" href="{{ "/browse/" | relative_url }}#' + array[i][2] + ':' + encodeURIComponent(array[i][0]) + '" >' + array[i][0] + '</a>';
|
||||||
|
}
|
||||||
|
cloud.innerHTML = items;
|
||||||
|
}
|
||||||
|
makeGrid(terms);
|
||||||
|
|
||||||
|
})();
|
||||||
|
</script>
|
||||||
75
.github/_includes/js/lunr-js.html
vendored
Normal file
75
.github/_includes/js/lunr-js.html
vendored
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
{%- assign fields = site.data.config-search -%}
|
||||||
|
{%- assign index_fields = fields | where: 'index','true' -%}
|
||||||
|
<script src="{{ site.lib-assets | default: '/assets/lib' | relative_url }}/lunr.min.js"></script>
|
||||||
|
<script src="{{ '/assets/js/lunr-store.js' | relative_url }}"></script>
|
||||||
|
<script>
|
||||||
|
/* initialize lunr */
|
||||||
|
var idx = lunr(function () {
|
||||||
|
/* add index fields from config */
|
||||||
|
this.ref('id')
|
||||||
|
{% for f in index_fields %}
|
||||||
|
this.field({{ f.field | jsonify }})
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
//this.pipeline.remove(lunr.trimmer)
|
||||||
|
|
||||||
|
for (var item in store) {
|
||||||
|
this.add({
|
||||||
|
{% for f in index_fields %}
|
||||||
|
{{ f.field | jsonify }}: store[item][{{ f.field | jsonify }}],
|
||||||
|
{% endfor %}
|
||||||
|
id: item
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
/* search function */
|
||||||
|
function lunr_search () {
|
||||||
|
var resultdiv = document.querySelector('#lunrResults');
|
||||||
|
var query = document.querySelector('#lunrSearchBox').value;//.toLowerCase();
|
||||||
|
/* basic search that supports operators */
|
||||||
|
var result = idx.search(query);
|
||||||
|
/* more fuzzy search, but doesn't support operators:
|
||||||
|
var result =
|
||||||
|
idx.query(function (q) {
|
||||||
|
query.split(lunr.tokenizer.separator).forEach(function (term) {
|
||||||
|
q.term(term, { boost: 100 })
|
||||||
|
if(query.lastIndexOf(" ") != query.length-1){
|
||||||
|
q.term(term, { usePipeline: false, wildcard: lunr.Query.wildcard.TRAILING, boost: 10 })
|
||||||
|
}
|
||||||
|
if (term != ""){
|
||||||
|
q.term(term, { usePipeline: false, editDistance: 1, boost: 1 })
|
||||||
|
}
|
||||||
|
})
|
||||||
|
});*/
|
||||||
|
resultdiv.innerHTML = "";
|
||||||
|
var newresults = '<tr><td><h4 class="mt-3">' + result.length + ' Result(s) found</h4></td></tr>';
|
||||||
|
for (var item in result) {
|
||||||
|
var ref = result[item].ref;
|
||||||
|
var searchitem =
|
||||||
|
'<tr>'+
|
||||||
|
'<td>' +
|
||||||
|
{% assign display = fields | where: 'display','true' %}
|
||||||
|
{% for d in display %}
|
||||||
|
{% if forloop.first %}
|
||||||
|
'<p class="h4"><a href="{{ "/items/" | relative_url }}' + store[ref].id + '">' + store[ref][{{ fields[0].field | jsonify }}] + '</a></p>' +
|
||||||
|
'<p class="ms-3">';
|
||||||
|
{% else %}
|
||||||
|
if(store[ref][{{ d.field | jsonify }}]) {
|
||||||
|
searchitem += store[ref][{{ d.field | jsonify }}] + '<br> '; }
|
||||||
|
{% endif %}{% endfor %}
|
||||||
|
searchitem += '</p></td>' +
|
||||||
|
'</tr>';
|
||||||
|
newresults += searchitem;
|
||||||
|
}
|
||||||
|
resultdiv.innerHTML = newresults;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* init search box and get query string */
|
||||||
|
if (window.location.search) {
|
||||||
|
var queryString = decodeURIComponent(window.location.search.substring(1).split("=")[1]);
|
||||||
|
document.querySelector('#lunrSearchBox').value = queryString;
|
||||||
|
lunr_search();
|
||||||
|
}
|
||||||
|
</script>
|
||||||
205
.github/_includes/js/map-js.html
vendored
Normal file
205
.github/_includes/js/map-js.html
vendored
Normal file
@@ -0,0 +1,205 @@
|
|||||||
|
{% if site.data.theme.map-child-objects == true %}
|
||||||
|
{%- assign items = site.data[site.metadata] | where_exp: 'item','item.objectid' -%}
|
||||||
|
{% else %}
|
||||||
|
{%- assign items = site.data[site.metadata] | where_exp: 'item','item.objectid and item.parentid == nil' -%}
|
||||||
|
{% endif %}
|
||||||
|
{%- assign items = items | where_exp: 'item','item.latitude != nil and item.longitude != nil' -%}
|
||||||
|
{%- assign fields = site.data.config-map -%}
|
||||||
|
<!-- load leaflet dependencies -->
|
||||||
|
<script src="{{ site.lib-assets | default: '/assets/lib' | relative_url }}/leaflet/leaflet.js"></script>
|
||||||
|
<script src="{{ site.lib-assets | default: '/assets/lib' | relative_url }}/leaflet/Leaflet.fullscreen.min.js"></script>
|
||||||
|
{% if site.data.theme.map-search == true %}<script src="{{ site.lib-assets | default: '/assets/lib' | relative_url }}/leaflet/fuse.min.js"></script>
|
||||||
|
<script src="{{ site.lib-assets | default: '/assets/lib' | relative_url }}/leaflet/leaflet.fusesearch.js"></script>{% endif %}
|
||||||
|
{% if site.data.theme.map-cluster == true %}<script src="{{ site.lib-assets | default: '/assets/lib' | relative_url }}/leaflet/leaflet.markercluster.js"></script>{% endif %}
|
||||||
|
{% if site.data.theme.map-search == true and site.data.theme.map-cluster == true %}<script src="{{ site.lib-assets | default: '/assets/lib' | relative_url }}/leaflet/leaflet.markercluster.freezable.js"></script>{% endif %}
|
||||||
|
|
||||||
|
<script>
|
||||||
|
(function(){
|
||||||
|
/* add collection map data */
|
||||||
|
var geodata = { "type": "FeatureCollection", "features": [
|
||||||
|
{% for item in items %}
|
||||||
|
{ "type":"Feature", "geometry":{ "type":"Point", "coordinates":[{{ item.longitude | strip }},{{ item.latitude | strip }}] }, "properties":
|
||||||
|
{
|
||||||
|
{% for f in fields %}{% if item[f.field] %}{{ f.field | escape | jsonify }}:{{ item[f.field] | strip | escape | jsonify }}, {%- endif -%}{%- endfor -%}
|
||||||
|
{% if item.image_thumb %}"img": {{ item.image_thumb | relative_url | jsonify }},{% endif %}
|
||||||
|
{% if item.display_template %}"template": {{ item.display_template | escape | jsonify }}, {%- endif -%}
|
||||||
|
{% if item.format %}"format": {{ item.format | escape | jsonify }}, {%- endif -%}
|
||||||
|
{% if item.image_alt_text %}"alt": {{ item.image_alt_text | escape | jsonify }}, {%- endif -%}
|
||||||
|
{% if item.parentid %}"parent": {{ item.parentid | jsonify }}, {%- endif -%}
|
||||||
|
"title": {{ item.title | escape | jsonify }},
|
||||||
|
"id": {{ item.objectid | jsonify }}
|
||||||
|
} }{% unless forloop.last %}, {% endunless %}{% endfor %}
|
||||||
|
]};
|
||||||
|
|
||||||
|
/* check for url parameters and setup initial view options */
|
||||||
|
let url = new URL(window.location);
|
||||||
|
const locationSearchParams = url.searchParams.get('location');
|
||||||
|
var mapCenter = locationSearchParams ? locationSearchParams.split(',') : [{{ site.data.theme.latitude | default: 46.727485 }}, {{ site.data.theme.longitude | default: -117.014185 }}];
|
||||||
|
var mapZoom = locationSearchParams ? 16 : {{ site.data.theme.zoom-level | default: 5 }};
|
||||||
|
var markerFilter = url.searchParams.get('marker') ? url.searchParams.get('marker') : "";
|
||||||
|
|
||||||
|
/* init map */
|
||||||
|
var map = L.map('mapContainer');
|
||||||
|
|
||||||
|
/* add map layer options */
|
||||||
|
var Esri_WorldStreetMap = L.tileLayer('https://server.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer/tile/{z}/{y}/{x}', {
|
||||||
|
attribution: 'Tiles © Esri — Source: Esri, DeLorme, NAVTEQ, USGS, Intermap, iPC, NRCAN, Esri Japan, METI, Esri China (Hong Kong), Esri (Thailand), TomTom, 2012'
|
||||||
|
});
|
||||||
|
var Esri_NatGeoWorldMap = L.tileLayer('https://server.arcgisonline.com/ArcGIS/rest/services/NatGeo_World_Map/MapServer/tile/{z}/{y}/{x}', {
|
||||||
|
attribution: 'Tiles © Esri — National Geographic, Esri, DeLorme, NAVTEQ, UNEP-WCMC, USGS, NASA, ESA, METI, NRCAN, GEBCO, NOAA, iPC',
|
||||||
|
maxZoom: 16
|
||||||
|
});
|
||||||
|
var Esri_WorldImagery = L.tileLayer('https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}', {
|
||||||
|
attribution: 'Tiles © Esri — Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community'
|
||||||
|
});
|
||||||
|
var OpenStreetMap_Mapnik = L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', {
|
||||||
|
maxZoom: 19,
|
||||||
|
attribution: '© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'
|
||||||
|
});
|
||||||
|
/* add base map switcher */
|
||||||
|
var baseMaps = {
|
||||||
|
"Esri World StreetMap": Esri_WorldStreetMap,
|
||||||
|
"Esri National Geo": Esri_NatGeoWorldMap,
|
||||||
|
"Esri Imagery": Esri_WorldImagery,
|
||||||
|
"Open Street Map": OpenStreetMap_Mapnik
|
||||||
|
};
|
||||||
|
L.control.layers(baseMaps).addTo(map);
|
||||||
|
/* load base map */
|
||||||
|
{{ site.data.theme.map-base | default: 'Esri_WorldStreetMap' }}.addTo(map);
|
||||||
|
|
||||||
|
{% if site.data.theme.map-search == true %}
|
||||||
|
/* add search, https://github.com/naomap/leaflet-fusesearch */
|
||||||
|
var options = {
|
||||||
|
title: 'Search Map Items',
|
||||||
|
placeholder: 'Search map items...',
|
||||||
|
threshold: {{ site.data.theme.map-search-fuzziness | default: 0.35 }},
|
||||||
|
showResultFct: function(feature, container) {
|
||||||
|
var result = `<strong>${feature.properties.title}</strong><br>`;
|
||||||
|
{% for f in fields %}
|
||||||
|
if(feature.properties[{{ f.field | jsonify }}]) { result += feature.properties[{{ f.field | jsonify }}] + `<br>`; }
|
||||||
|
{% endfor %}
|
||||||
|
container.innerHTML = result;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
var searchCtrl = L.control.fuseSearch(options);
|
||||||
|
searchCtrl.addTo(map);
|
||||||
|
searchCtrl.indexFeatures(geodata.features, {{ fields | where: 'search','true' | map: 'field' | unshift: 'title' | jsonify }});{% endif %}
|
||||||
|
|
||||||
|
/* add fullscreen control */
|
||||||
|
map.addControl(new L.Control.Fullscreen());
|
||||||
|
|
||||||
|
{% if site.data.theme.map-cluster == true %}
|
||||||
|
/* create cluster group */
|
||||||
|
var markers = L.markerClusterGroup({
|
||||||
|
maxClusterRadius: {{ site.data.theme.map-cluster-radius | default: 15 }},
|
||||||
|
singleMarkerMode: true,
|
||||||
|
iconCreateFunction: function(cluster) {
|
||||||
|
/* custom icon function, tweak default to add more alt text */
|
||||||
|
var childCount = cluster.getChildCount();
|
||||||
|
var csize;
|
||||||
|
if (childCount < 10) {
|
||||||
|
csize = 'small';
|
||||||
|
} else if (childCount < 100) {
|
||||||
|
csize = 'medium';
|
||||||
|
} else {
|
||||||
|
csize = 'large';
|
||||||
|
}
|
||||||
|
var c = ' marker-cluster-' + csize;
|
||||||
|
return new L.DivIcon({ html: '<div><span class="visually-hidden">' + csize +' cluster of </span><span>' + childCount + '</span><span class="visually-hidden"> items</span></div>', className: 'marker-cluster' + c, iconSize: new L.Point(40, 40) });
|
||||||
|
}
|
||||||
|
{% if site.data.theme.map-search == true %}, removeOutsideVisibleBounds: false{% endif %}
|
||||||
|
});{% endif %}
|
||||||
|
|
||||||
|
/* get icons function */
|
||||||
|
{% include helpers/get-icon.js %}
|
||||||
|
|
||||||
|
/* object popup function */
|
||||||
|
function objectPopups(feature, layer) {
|
||||||
|
{% if site.data.theme.map-search == true %}/* bind feature for search */
|
||||||
|
feature.layer = layer;{% endif %}
|
||||||
|
// find item link
|
||||||
|
var itemHref = `{{ '/items/' | relative_url }}${ feature.properties.parent ? feature.properties.parent + ".html#" + feature.properties.id : feature.properties.id + ".html"}`;
|
||||||
|
// find image
|
||||||
|
var imgAlt = feature.properties.alt ? feature.properties.alt : feature.properties.title;
|
||||||
|
var thumbImg;
|
||||||
|
if (feature.properties.img) {
|
||||||
|
thumbImg = '<img class="map-thumb" src="' + feature.properties.img + '" alt="' + imgAlt + '">';
|
||||||
|
} else {
|
||||||
|
thumbImg = getIcon(feature.properties.template,feature.properties.format,"thumb")
|
||||||
|
}
|
||||||
|
// set up popup content
|
||||||
|
var popupTemplate = '<h2 class="h4"><a class="text-dark" href="' + itemHref + '">' +
|
||||||
|
feature.properties.title + '</a></h2><div class="text-center"><a href="' + itemHref +
|
||||||
|
'" >' + thumbImg + '</a></div><p>';
|
||||||
|
{% for f in fields %}{% if f.display_name %}
|
||||||
|
if (feature.properties[{{ f.field | escape | jsonify }}]) {
|
||||||
|
popupTemplate += '<strong>{{ f.display_name }}:</strong> ' + feature.properties[{{ f.field | escape | jsonify }}] + '<br>';
|
||||||
|
}
|
||||||
|
{% endif %}{% endfor %}
|
||||||
|
popupTemplate += '</p><div class="text-center"><a class="btn btn-light" href="' + itemHref + '" >View Item</a></div>';
|
||||||
|
layer.bindPopup(popupTemplate);
|
||||||
|
}
|
||||||
|
function objectMarkers(feature,latlng) {
|
||||||
|
var marker = L.marker(latlng, {alt: feature.properties.title});
|
||||||
|
{% if site.data.theme.map-cluster == true %}markers.addLayer(marker);{% endif %}
|
||||||
|
return marker;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* add objects from geoJson features */
|
||||||
|
var mapFeatures = L.geoJson(geodata, {
|
||||||
|
onEachFeature: objectPopups,
|
||||||
|
pointToLayer: objectMarkers
|
||||||
|
}){% if site.data.theme.map-cluster != true %}.addTo(map);{% else %};
|
||||||
|
map.addLayer(markers);{% endif %}
|
||||||
|
|
||||||
|
{% if site.data.theme.auto-center-map == true %}
|
||||||
|
/* if no location was specified in the URL query parameters, auto center the map */
|
||||||
|
if (locationSearchParams === null) {
|
||||||
|
const featureBounds = mapFeatures.getBounds()
|
||||||
|
if (featureBounds?.isValid()) {
|
||||||
|
map.fitBounds(featureBounds);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
/* set map view based on URL parameters */
|
||||||
|
map.setView(mapCenter, mapZoom);
|
||||||
|
}
|
||||||
|
{% else %}
|
||||||
|
/* set map view based on configuration or URL parameters */
|
||||||
|
map.setView(mapCenter, mapZoom);
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if site.data.theme.map-cluster == true and site.data.theme.map-search == true %}
|
||||||
|
/* uncluster when search is clicked */
|
||||||
|
document.querySelector('a.button').addEventListener("click", function() {
|
||||||
|
markers.disableClustering();
|
||||||
|
});
|
||||||
|
/* recluster when search is closed */
|
||||||
|
document.querySelector('a.close').addEventListener("click", function() {
|
||||||
|
markers.enableClustering();
|
||||||
|
document.querySelector('input.search-input').value = "";
|
||||||
|
});{% endif %}
|
||||||
|
|
||||||
|
/* show popup if id in URL query */
|
||||||
|
if (markerFilter != "") {
|
||||||
|
{% if site.data.theme.map-cluster == true %}
|
||||||
|
markers.eachLayer(layer => {
|
||||||
|
if (layer.feature.properties.id === markerFilter) {
|
||||||
|
/* uncluster clusters, then show */
|
||||||
|
if (markers.getVisibleParent(layer)["_childCount"]) {
|
||||||
|
markers.getVisibleParent(layer).spiderfy();
|
||||||
|
}
|
||||||
|
layer.openPopup();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
{% else %}
|
||||||
|
mapFeatures.eachLayer(layer => {
|
||||||
|
if (layer.feature.properties.id === markerFilter) {
|
||||||
|
layer.openPopup();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
{% endif %}
|
||||||
|
}
|
||||||
|
|
||||||
|
})();
|
||||||
|
|
||||||
|
</script>
|
||||||
11
.github/_includes/js/modal-hash-js.html
vendored
Normal file
11
.github/_includes/js/modal-hash-js.html
vendored
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
<script>
|
||||||
|
window.addEventListener('load', function () {
|
||||||
|
if (window.location.hash) {
|
||||||
|
/* if url has a hash, open the related item modal */
|
||||||
|
var hashModal = decodeURIComponent(location.hash.substr(1));
|
||||||
|
if (document.querySelector('#' + hashModal + 'Card a')) {
|
||||||
|
document.querySelector('#' + hashModal + 'Card a').click();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
32
.github/_includes/js/table-js.html
vendored
Normal file
32
.github/_includes/js/table-js.html
vendored
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
{% assign fcount = site.data.config-table | size %}
|
||||||
|
<!-- load DataTables with jquery bundled -->
|
||||||
|
<script type="text/javascript" language="javascript" src="{{ site.lib-assets | default: '/assets/lib' | relative_url }}/datatables/datatables.min.js"></script>
|
||||||
|
<script>
|
||||||
|
/* use jquery to initialize DataTables and load collection data */
|
||||||
|
$(document).ready( function () {
|
||||||
|
$('#item-table').DataTable( {
|
||||||
|
// use DataTables ajax load
|
||||||
|
ajax: { url: '{{ "/assets/js/metadata.min.json" | relative_url }}', dataSrc: 'objects' },
|
||||||
|
// defer render to speed up large sets
|
||||||
|
"deferRender": true,
|
||||||
|
// enable pagination
|
||||||
|
"paging": true,
|
||||||
|
"lengthMenu": [[ 25, 50, 100, -1], [ 25, 50, 100, "All"]],
|
||||||
|
// add download features
|
||||||
|
dom: 'B<"row mt-2"<"col-md-6"l><"col-md-6"f>>t<"row"<"col-md-6"i><"col-md-6"p>>',
|
||||||
|
buttons: [ 'excelHtml5', 'csvHtml5' ],
|
||||||
|
// get the data from json
|
||||||
|
columns: [ {% for i in (0..fcount) %}{ data: '{{ i }}' }{% unless forloop.last %},{% endunless %}{% endfor %} ],
|
||||||
|
columnDefs: [
|
||||||
|
// turn relative link into absolute
|
||||||
|
{ "render": function ( data ) { return '{{ "/" | relative_url }}' + data; },"targets": {{ fcount }} },
|
||||||
|
// combine link with first column
|
||||||
|
{ "render": function ( data, type, row ) { return '<a href="' + row['{{ fcount }}'] +'">'+ data +'</a>'; },"targets": 0 },
|
||||||
|
// hide the link column
|
||||||
|
{ "visible": false, "targets": [ {{ fcount }} ] }
|
||||||
|
],
|
||||||
|
// sort based on the second column
|
||||||
|
order: [[ 1, "asc" ]]
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user