beta edits, version .5

This commit is contained in:
Nasir Anthony Montalvo
2026-01-18 14:45:06 -06:00
parent 150e95e0d1
commit 6678eb6de6
18 changed files with 207 additions and 117 deletions

View File

@@ -24,7 +24,7 @@ title: "{B/qKC}"
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 database and official site for {B/qKC}: an archival project challenging institutional archival practices within the frame and study of midwestern Black queer history."
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

View File

@@ -1,6 +1,6 @@
display_name,stub,dropdown_parent
HOME,/,
THE_ARCHIVE,/browse/,
THE ARCHIVE,/browse/,
COLLECTIONS,,
EXPLORE,,
READ,,
1 display_name stub dropdown_parent
2 HOME /
3 THE_ARCHIVE THE ARCHIVE /browse/
4 COLLECTIONS
5 EXPLORE
6 READ

View File

@@ -1,6 +1,6 @@
field,index,display
title,true,true
date,true,true
date_created,true,true
description,true,true
subject,true,true
location,true,false
1 field index display
2 title true true
3 date date_created true true
4 description true true
5 subject true true
6 location true false

View File

@@ -48,18 +48,12 @@
<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>
<option value="{{ f.field }}">{{ f.facet_name | default: f.display_name | default: cap-field }}</option>
{% endfor %}
</select>
</div>
<div class="col-10 col-md-6">
<input type="text" class="form-control form-control-sm search-input" placeholder="Enter search term">
<div class="date-range-inputs">
<div class="date-input-group">
<input type="text" class="form-control form-control-sm start-date" placeholder="Start Date">
<span class="date-separator">to</span>
<input type="text" class="form-control form-control-sm end-date" placeholder="End Date">
</div>
<div class="text-input-wrapper">
<input type="text" class="form-control form-control-sm search-input" placeholder="Enter search term">
</div>
</div>
<div class="col-2 col-md-1">

View File

@@ -1,6 +1,6 @@
<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>Technical Credits - CollectionBuilder</h3>
<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>

View File

@@ -84,82 +84,79 @@
{% capture listModifier %}{% if orderedList %}ol{% else %}ul{% endif %}{% endcapture %}
{% for node in nodes %}
{% if node == "" %}
{% continue %}
{% 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 %}
{% assign currLevel = node | replace: '"', '' | slice: 0, 1 | times: 1 %}
{% 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 %}
{% if currLevel < minHeader or currLevel > maxHeader %}
{% continue %}
{% endif %}
{% capture jekyll_toc %}{{ jekyll_toc }}<li{{ listItemClass }}>{{ listItem }}{% endcapture %}
{% assign _workspace = node | split: '</h' %}
{% assign lastLevel = currLevel %}
{% assign firstHeader = false %}
{% endfor %}
{% 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 %}

View File

@@ -12,17 +12,16 @@
<div class="modal-dialog modal-lg" role="document">
<div class="modal-content">
<div class="modal-header">
<h1 class="modal-title" id="dataModalLabel">Collection Data</h1>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<p>Download this collection's data in a variety of reusable formats. Beware of this archive's copyright information!</p>
<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">Complete Metadata</h2>
<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>
@@ -32,8 +31,8 @@
{% if site.data.theme.metadata-facets-fields %}
<div class="card my-3">
<div class="card-body">
<h2 class="card-title h4">Metadata Facets</h2>
<p class="card-text">List of unique values and their count for specific metadata fields, useful for understanding content of the fields.</p>
<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>
@@ -41,8 +40,8 @@
{% if stubs contains "subject" %}
<div class="card my-3">
<div class="card-body">
<h2 class="card-title h4">Subject Metadata</h2>
<p class="card-text">Unique values and counts of subject metadata, useful for further analyzing the content of this collection.</p>
<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>
@@ -51,8 +50,8 @@
{% if stubs contains "location" %}
<div class="card my-3">
<div class="card-body">
<h2 class="card-title h4">Locations</h2>
<p class="card-text">Unique values and counts of location metadata, useful for further visualization and analysis of this collection's place names.</p>
<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>
@@ -61,8 +60,8 @@
{% if stubs contains "map" %}
<div class="card my-3">
<div class="card-body">
<h2 class="card-title h4">GeoJSON</h2>
<p class="card-text">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>
<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>
@@ -70,16 +69,16 @@
{% if stubs contains "timeline" %}
<div class="card my-3">
<div class="card-body">
<h2 class="card-title h4">Timeline</h2>
<p class="card-text">A time-focused JSON data export designed for use with <a href="https://timeline.knightlab.com/">TimelineJS</a>.</p>
<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">Website Source Code</h2>
<p class="card-text">GitHub repository containing source code for this project built with <a href="https://github.com/CollectionBuilder/collectionbuilder-csv">CollectionBuilder-CSV</a>.</p>
<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>

View File

@@ -41,7 +41,7 @@
</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 CollectionBuilder</p>
<p class="text-white">Last updated {{ site.time | date: "%Y-%m-%d" }} | Built with <a href="/data/">CollectionBuilder</a></p>
</div>
</footer>

View File

@@ -11,7 +11,11 @@
{%- endcomment -%}
{%- assign stubs = site.data.config-nav | map: 'stub' | join: ';' -%}
<div class="card mb-3">
{% 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">
@@ -37,4 +41,5 @@
<a class="btn btn-sm btn-secondary m-1" href="{{ site.source-code }}" rel="noopener">Source Code</a>
</p>
</div>
</div>
</div>

View File

@@ -7,7 +7,7 @@
{%- endcomment -%}
<div class="text-center">
<a class="btn btn-secondary" href="{{ page.previous_item | relative_url }}" id="prev-page-button">&laquo; Previous</a>
<a class="btn btn-secondary" href="{{ '/browse/' | relative_url }}">Back to Browse</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 &raquo;</a>
</div>
<div id="item-nav">

View File

@@ -3,12 +3,45 @@
Adds a basic citation box for child item with reference link to the child modal.
{%- endcomment -%}
<div class="card mb-2">
<div class="card">
<div class="card-header">Attribution</div>
<div class="card-body">
<dl>
<dt>Citation:</dt>
<dd>"{{ child.title | default: page.title }}", {{ site.title }}, {% if site.organization-name %}{{ site.organization-name }}, {% endif %}<a href="{{ page.url | absolute_url }}#{{ child.objectid }}">{{ page.url | absolute_url }}#{{ child.objectid }}</a></dd>
<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>
</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>

View File

@@ -8,7 +8,40 @@
<div class="card-body">
<dl>
<dt>Citation:</dt>
<dd>"{{ page.title }}", {{ site.title }}, {% if site.organization-name %}{{ site.organization-name }}, {% endif %}<a href="{{ page.url | absolute_url }}">{{ page.url | absolute_url }}</a></dd>
<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>
</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>

View File

@@ -8,9 +8,28 @@
}
}
</script>
<a href="#maincontent" id="scroll-to-top" class="btn btn-link" title="Back to Top">
<a href="javascript:void(0)" id="scroll-to-top" class="btn btn-link" title="Back to Top">
<span class="visually-hidden">Back to top</span>
<svg class="bi icon-sprite" role="img" aria-label="Up Arrow">
<use xlink:href="{{ '/assets/css/cb-icons.svg' | relative_url }}#icon-back-to-top"/>
</svg>
</a>
</a>
<script>
const scrollBtn = document.getElementById("scroll-to-top");
window.addEventListener("scroll", function () {
if (window.scrollY > 500) {
scrollBtn.style.display = "block";
} else {
scrollBtn.style.display = "none";
}
});
scrollBtn.addEventListener("click", function () {
window.scrollTo({
top: 0,
left: 0,
behavior: "smooth"
});
});
</script>

View File

@@ -52,9 +52,8 @@ custom-foot: js/browse-js.html
<!-- Update the date range inputs section -->
<div id="dateRangeInputs" class="date-range-inputs">
<div class="date-input-group">
<input type="text" id="startDate" class="ms-2 form-control" placeholder="Start Date">
<span class="date-separator">to</span>
<input type="text" id="endDate" class="me-2 form-control" placeholder="End Date">
<!-- Single text input for the date_created field -->
<input type="text" id="dateCreated" class="ms-2 form-control" placeholder="Enter Date (Text)">
</div>
</div>
<button class="btn btn-success" type="submit" title="Filter items" id="filterButton" >Search</button>

View File

@@ -837,6 +837,10 @@ blockquote {
margin-top: 0.5rem;
border-top: 1px solid rgba(0,0,0,0.1);
}
/* Remove Spotlight auto-fit button */
.spl-autofit {
display: none !important;
}

View File

@@ -131,4 +131,9 @@ Since 2022, {B/qKC} has launched at least two public exhibitions per year, and e
---
## Technical Credits
{% include cb/credits.html %}
{% include cb/credits.html %}
<blockquote class="quote-box">
<p class="quote-text">Learn more about what's powering this site on <a href="/data/">"Our Data"</a> page!</p>
</blockquote>

View File

@@ -157,5 +157,7 @@ The table below provides sorting and basic search of the archive's contents.
Use the "CSV" button below to download the filtered metadata you see on the page.
Alternatively, click the "Download" button at the top right to view the full archive's metadata in various formats.
{% include data-download-modal.html %}
{% include data-table.html %}
{% include data-download-modal.html no_toc=true %}
{% include data-table.html %}

View File

@@ -79,9 +79,9 @@ BY [NASIR MONTALVO](https://1800nasi.net)  ORIGINALLY PUBLISHED IN THE KAN
*{B/qKC}* is making this content available for **educational and research purposes**. The Defender has obtained the needed permissions from various copyright holders for the use of this material and presents the majority of this material under a licensing agreement as part of *{B/qKC}*-unless otherwise noted.
*{B/qKC}* does not own any of this licensed content, and none of these works are in the public domain. Permissions to reproduce any of this material must be obtained from the copyright holder. **You are responsible for obtaining written permission from the copyright owners of materials not in the public domain for distribution, reproduction, or other use of protected items beyond educational and personal use.** If you would like to use the materials for screenings, remixes, or any other project please contact us and we will do our best to collaborate with you or put you in contact with the owners. For any inquiries, please email [](mailto:nasir@kansascitydefender.com)<nasiranthonymontalvo@gmail.com> and include links to all the material you wish to reference.
*{B/qKC}* does not own any of this licensed content, and none of these works are in the public domain. Permissions to reproduce any of this material must be obtained from the copyright holder. **You are responsible for obtaining written permission from the copyright owners of materials not in the public domain for distribution, reproduction, or other use of protected items beyond educational and personal use.** If you would like to use the materials for screenings, remixes, or any other project please contact us and we will do our best to collaborate with you or put you in contact with the owners. For any inquiries, please email [](mailto:1800nasi@tutamail.com)<1800nasi@tutamail.com> and include links to all the material you wish to reference.
If you are the copyright holder and feel for any reason that your work has been presented on this page without your consent, please email <nasiranthonymontalvo@gmail.com> to request the removal from this site.
If you are the copyright holder and feel for any reason that your work has been presented on this page without your consent, please email <1800nasi@tutamail.com> to request the removal from this site.
</details>