From 9dbef065b2d2eff144fdaa08a5da949db9560025 Mon Sep 17 00:00:00 2001 From: mathewjordan Date: Tue, 28 Nov 2023 22:36:38 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20@=20canopy-i?= =?UTF-8?q?iif/docs@4c4aadf1c293fe606b24adb4b9a65ec5056b028b=20?= =?UTF-8?q?=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 404.html | 4 +- .../_buildManifest.js | 2 +- .../_ssgManifest.js | 0 _next/static/chunks/nextra-data-en-US.json | 2 +- ...reate-markdown-content-bff7c3519bfed974.js | 1 + ...reate-markdown-content-df3fc7d6b10d2e42.js | 1 - ...own-content-referenced-item-0.4f9e50e2.png | Bin 0 -> 5853005 bytes ...own-content-referenced-item-1.29d1d248.png | Bin 0 -> 4313948 bytes ...own-content-referenced-item-2.28755a43.png | Bin 0 -> 2279728 bytes ...own-content-referenced-item-3.b88c6e85.png | Bin 0 -> 2633691 bytes ...own-content-referenced-item-4.248d9a80.png | Bin 0 -> 3141807 bytes about.html | 4 +- configuration.html | 4 +- configuration/basic.html | 4 +- configuration/locale.html | 4 +- configuration/map.html | 4 +- configuration/search.html | 4 +- configuration/theme.html | 4 +- content.html | 4 +- content/card.html | 4 +- content/markdown.html | 4 +- content/slider.html | 4 +- content/viewer.html | 4 +- create-markdown-content.html | 150 +++++++++++++++++- customize-the-search-index.html | 4 +- deploy-to-github-pages.html | 4 +- deploy-to-vercel.html | 4 +- development.html | 4 +- enable-a-map-with-navPlace.html | 4 +- ...ing-markdown-content-referenced-item-0.png | Bin 0 -> 5853005 bytes ...ing-markdown-content-referenced-item-1.png | Bin 0 -> 4313948 bytes ...ing-markdown-content-referenced-item-2.png | Bin 0 -> 2279728 bytes ...ing-markdown-content-referenced-item-3.png | Bin 0 -> 2633691 bytes ...ing-markdown-content-referenced-item-4.png | Bin 0 -> 3141807 bytes get-started.html | 4 +- guides.html | 4 +- index.html | 4 +- 37 files changed, 193 insertions(+), 47 deletions(-) rename _next/static/{5HToGOLEM7RGndqsMjF_f => 2KITcG0zQZ51_3WvKb_gk}/_buildManifest.js (97%) rename _next/static/{5HToGOLEM7RGndqsMjF_f => 2KITcG0zQZ51_3WvKb_gk}/_ssgManifest.js (100%) create mode 100644 _next/static/chunks/pages/create-markdown-content-bff7c3519bfed974.js delete mode 100644 _next/static/chunks/pages/create-markdown-content-df3fc7d6b10d2e42.js create mode 100644 _next/static/media/creating-markdown-content-referenced-item-0.4f9e50e2.png create mode 100644 _next/static/media/creating-markdown-content-referenced-item-1.29d1d248.png create mode 100644 _next/static/media/creating-markdown-content-referenced-item-2.28755a43.png create mode 100644 _next/static/media/creating-markdown-content-referenced-item-3.b88c6e85.png create mode 100644 _next/static/media/creating-markdown-content-referenced-item-4.248d9a80.png create mode 100644 examples/creating-markdown-content-referenced-item-0.png create mode 100644 examples/creating-markdown-content-referenced-item-1.png create mode 100644 examples/creating-markdown-content-referenced-item-2.png create mode 100644 examples/creating-markdown-content-referenced-item-3.png create mode 100644 examples/creating-markdown-content-referenced-item-4.png diff --git a/404.html b/404.html index bc54047..c18bd67 100644 --- a/404.html +++ b/404.html @@ -1,5 +1,5 @@ -404: This page could not be found

404

This page could not be found.

\ No newline at end of file +

404

This page could not be found.

\ No newline at end of file diff --git a/_next/static/5HToGOLEM7RGndqsMjF_f/_buildManifest.js b/_next/static/2KITcG0zQZ51_3WvKb_gk/_buildManifest.js similarity index 97% rename from _next/static/5HToGOLEM7RGndqsMjF_f/_buildManifest.js rename to _next/static/2KITcG0zQZ51_3WvKb_gk/_buildManifest.js index 79fad11..7900754 100644 --- a/_next/static/5HToGOLEM7RGndqsMjF_f/_buildManifest.js +++ b/_next/static/2KITcG0zQZ51_3WvKb_gk/_buildManifest.js @@ -1 +1 @@ -self.__BUILD_MANIFEST=function(e){return{__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},"/":["static/chunks/37a763b4-474a632b9382a395.js","static/chunks/ee9ce975-1c3815c2ec2057b5.js",e,"static/chunks/549-2f80bf56386c6308.js","static/chunks/pages/index-496eb5e71b408aa5.js"],"/_error":["static/chunks/pages/_error-ee5b5fb91d29d86f.js"],"/about":[e,"static/chunks/pages/about-675b025fecc6dfd3.js"],"/configuration":[e,"static/chunks/pages/configuration-c365daece9289a17.js"],"/configuration/basic":[e,"static/chunks/pages/configuration/basic-7e15e97f3a988fdf.js"],"/configuration/locale":[e,"static/chunks/pages/configuration/locale-a213088b7251d86c.js"],"/configuration/map":[e,"static/chunks/pages/configuration/map-fc5e65fb50fdb180.js"],"/configuration/search":[e,"static/chunks/pages/configuration/search-cdca811b224ef584.js"],"/configuration/theme":[e,"static/chunks/pages/configuration/theme-3b8971467f85e43a.js"],"/content":[e,"static/chunks/pages/content-ba935def8bb40ba5.js"],"/content/card":[e,"static/chunks/pages/content/card-8d4a46ec6c2984e3.js"],"/content/markdown":[e,"static/chunks/pages/content/markdown-b2efd509c73245c8.js"],"/content/slider":[e,"static/chunks/pages/content/slider-468a4a12cc8fce31.js"],"/content/viewer":[e,"static/chunks/pages/content/viewer-9971e6def552a7d5.js"],"/create-markdown-content":[e,"static/chunks/pages/create-markdown-content-df3fc7d6b10d2e42.js"],"/customize-the-search-index":[e,"static/chunks/pages/customize-the-search-index-93a073c19910c529.js"],"/deploy-to-github-pages":[e,"static/chunks/pages/deploy-to-github-pages-f65b8b46da2e8ebc.js"],"/deploy-to-vercel":[e,"static/chunks/pages/deploy-to-vercel-cdd1f2bffa669881.js"],"/development":[e,"static/chunks/pages/development-daeb0a1c7428c381.js"],"/enable-a-map-with-navPlace":[e,"static/chunks/pages/enable-a-map-with-navPlace-828e4fc5ea7e0338.js"],"/get-started":[e,"static/chunks/pages/get-started-33c7acd36618d9ad.js"],"/guides":[e,"static/chunks/pages/guides-6973a36eeca62be6.js"],sortedPages:["/","/_app","/_error","/about","/configuration","/configuration/basic","/configuration/locale","/configuration/map","/configuration/search","/configuration/theme","/content","/content/card","/content/markdown","/content/slider","/content/viewer","/create-markdown-content","/customize-the-search-index","/deploy-to-github-pages","/deploy-to-vercel","/development","/enable-a-map-with-navPlace","/get-started","/guides"]}}("static/chunks/673-d6d9313911892065.js"),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB(); \ No newline at end of file +self.__BUILD_MANIFEST=function(e){return{__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},"/":["static/chunks/37a763b4-474a632b9382a395.js","static/chunks/ee9ce975-1c3815c2ec2057b5.js",e,"static/chunks/549-2f80bf56386c6308.js","static/chunks/pages/index-496eb5e71b408aa5.js"],"/_error":["static/chunks/pages/_error-ee5b5fb91d29d86f.js"],"/about":[e,"static/chunks/pages/about-675b025fecc6dfd3.js"],"/configuration":[e,"static/chunks/pages/configuration-c365daece9289a17.js"],"/configuration/basic":[e,"static/chunks/pages/configuration/basic-7e15e97f3a988fdf.js"],"/configuration/locale":[e,"static/chunks/pages/configuration/locale-a213088b7251d86c.js"],"/configuration/map":[e,"static/chunks/pages/configuration/map-fc5e65fb50fdb180.js"],"/configuration/search":[e,"static/chunks/pages/configuration/search-cdca811b224ef584.js"],"/configuration/theme":[e,"static/chunks/pages/configuration/theme-3b8971467f85e43a.js"],"/content":[e,"static/chunks/pages/content-ba935def8bb40ba5.js"],"/content/card":[e,"static/chunks/pages/content/card-8d4a46ec6c2984e3.js"],"/content/markdown":[e,"static/chunks/pages/content/markdown-b2efd509c73245c8.js"],"/content/slider":[e,"static/chunks/pages/content/slider-468a4a12cc8fce31.js"],"/content/viewer":[e,"static/chunks/pages/content/viewer-9971e6def552a7d5.js"],"/create-markdown-content":[e,"static/chunks/pages/create-markdown-content-bff7c3519bfed974.js"],"/customize-the-search-index":[e,"static/chunks/pages/customize-the-search-index-93a073c19910c529.js"],"/deploy-to-github-pages":[e,"static/chunks/pages/deploy-to-github-pages-f65b8b46da2e8ebc.js"],"/deploy-to-vercel":[e,"static/chunks/pages/deploy-to-vercel-cdd1f2bffa669881.js"],"/development":[e,"static/chunks/pages/development-daeb0a1c7428c381.js"],"/enable-a-map-with-navPlace":[e,"static/chunks/pages/enable-a-map-with-navPlace-828e4fc5ea7e0338.js"],"/get-started":[e,"static/chunks/pages/get-started-33c7acd36618d9ad.js"],"/guides":[e,"static/chunks/pages/guides-6973a36eeca62be6.js"],sortedPages:["/","/_app","/_error","/about","/configuration","/configuration/basic","/configuration/locale","/configuration/map","/configuration/search","/configuration/theme","/content","/content/card","/content/markdown","/content/slider","/content/viewer","/create-markdown-content","/customize-the-search-index","/deploy-to-github-pages","/deploy-to-vercel","/development","/enable-a-map-with-navPlace","/get-started","/guides"]}}("static/chunks/673-d6d9313911892065.js"),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB(); \ No newline at end of file diff --git a/_next/static/5HToGOLEM7RGndqsMjF_f/_ssgManifest.js b/_next/static/2KITcG0zQZ51_3WvKb_gk/_ssgManifest.js similarity index 100% rename from _next/static/5HToGOLEM7RGndqsMjF_f/_ssgManifest.js rename to _next/static/2KITcG0zQZ51_3WvKb_gk/_ssgManifest.js diff --git a/_next/static/chunks/nextra-data-en-US.json b/_next/static/chunks/nextra-data-en-US.json index e7a66d5..1719f2a 100644 --- a/_next/static/chunks/nextra-data-en-US.json +++ b/_next/static/chunks/nextra-data-en-US.json @@ -1 +1 @@ -{"/about":{"title":"About","data":{"":"The project name \"Canopy\" is inspired by the tree motiff in the presentation, A Tree's Strength Is Its Trunk: IIIF as Central Operational Infrastructure, delivered by María Matienzo (formerly Stanford University Libraries) and Esmé Cowles (Princeton University Library) at the CNI Fall 2020 Virtual Membership Meeting. Following this infrastructure vision, Canopy was created as a front end solution for rapid and easy creation of static sites using a IIIF Collection and its Manifests.Canopy IIIF is created using Next.js 13, with a FlexSearch index for text search, IIIF Presentation API 3.0 delivering resource content, Radix UI and Stitches used throughout for the user interface, and various community modules from IIIF Commons and Samvera supporting the work presentation and resource delivery.","origination#Origination":"Canopy was initially conceived at the University of Tennessee Libraries in the Summer '21 as a statically generated web application for the Rising from the Ashes: The Chimney Tops 2 Wildfires Oral History Project. This project was generated from a single IIIF Collection; however, the components delivering the user interface became heavily tailored to the source material of the Rising from the Ashes project, thus limiting the reuse of the codebase for other collections. The original Canopy featured a heavily integrated IIIF A/V Viewer designed to deliver Sound and Video resources. This A/V viewer would eventually evolve into a partial inspiration for Clover IIIF.Canopy was reimagined as Canopy IIIF in early Winter '22 with the primary focus of the project maintaining the the ability to build an interoperable site from any IIIF Collection following IIIF Presentation API 2.0 and 3.0 specifications.","contributors#Contributors":"Creators\nMat Jordan - Northwestern University\nLibraries, formerly University of Tennessee Libraries\nMark Baggett - University of Tennessee\nLibraries\nAdam Arling - Northwestern University\nLibraries\nAdditional Credits\nEmily Gore - University of Georgia Libraries, formerly University of Tennessee\nLibraries\nDavid Schober - Northwestern University Libraries\nMartim Passos - Instituto Moreira Salles\nTarje Lavik - University of Bergen Library"}},"/configuration":{"title":"Configuration","data":{}},"/configuration/basic":{"title":"Basic Canopy IIIF Configuration","data":{"":"The Canopy IIIF build process will read from a custom configuration file at config/canopy.json if it exists. If this configuration file does not exist, the default configuration config/.default/canopy.default.json will be used as a fallback for demonstration purposes.\nSee the Create a Project guide for a step-by-step guide\nillustrating the setup of Canopy IIIF project.\nFind your config/ directory\nCopy canopy.sample.json to canopy.json\nMake updates to both the prod and dev configurations","properties#Properties":"","collection#Collection":"The collection property is required and must be the id of the referenced source IIIF Collection. Collections of Collections are not currently supported.\n\"collection\": \"https://iiif.bodleian.ox.ac.uk/iiif/collection/hobhouse\"","label-and-summary#Label and Summary":"The Canopy IIIF site title and description are respectively the label and summary IIIF Presentation API properties of the set IIIF Collection resource. You can optionally override this by providing a valid Presentation 3.0 label and/or summary property. These values are transformed to meta elements in the of the HTML document.\n\"label\": { \"none\": [\"Hobhouse\"] },\n\"summary\": { \"none\": [\"Manuscripts from the archive of Emily Hobhouse.\"] }","featured-manifests#Featured Manifests":"You can inform Canopy IIIF of featured Manifests by providing an array of ids. These must be within the referenced collection resource and the Manifest URIs must be an exact match. These Manifests will render throughout the interface in featured components.Warning: In the current pre-release, featured Manifests must have an Image body on the first Canvas.\n\"featured\": [\n \"https://iiif.bodleian.ox.ac.uk/iiif/manifest/8da97e8c-4e12-457d-aad8-3327b3aec183.json\",\n \"https://iiif.bodleian.ox.ac.uk/iiif/manifest/2968d5c7-3718-44ef-92ea-ee4cc58cc677.json\"\n]","metadata-and-facets#Metadata and Facets":"Curating Metadata allows implementers of Canopy IIIF to select metadata labels that provide use to end users. An optimal case is a label common to all or most manifests with some in diversity of values across those resources. Metadata labels that are curated will be automatically included as featured elements on the homepage, the metadata page, linking from works, and as facets on the search page.Note: Metadata labels are not yet BCP 47 language code aware; however, aggregation processes will make exact string comparisons regardless of language code.\n\"metadata\": [\"Extent\", \"Title\", \"Date Statement\", \"Language\"]","production-and-development#Production and Development":"Both the prod and dev environments have a configuration. These configurations can match each other; however in some cases, development speed can be aided by targeting a smaller IIIF Collection id as a fixture.","example-configuration#Example Configuration":"The following is an example configuration for the Bodleian Libraries' Emily Hobhouse collection. Two Manifests are featured and four metadata labels are curated.\n{\n \"prod\": {\n \"label\": { \"none\": [\"Hobhouse\"] },\n \"summary\": { \"none\": [\"Manuscripts from the archive of Emily Hobhouse.\"] },\n \"collection\": \"https://iiif.bodleian.ox.ac.uk/iiif/collection/hobhouse\",\n \"featured\": [\n \"https://iiif.bodleian.ox.ac.uk/iiif/manifest/8da97e8c-4e12-457d-aad8-3327b3aec183.json\",\n \"https://iiif.bodleian.ox.ac.uk/iiif/manifest/2968d5c7-3718-44ef-92ea-ee4cc58cc677.json\"\n ],\n \"metadata\": [\"Extent\", \"Title\", \"Date Statement\", \"Language\"]\n },\n \"dev\": {\n \"label\": { \"none\": [\"Hobhouse\"] },\n \"summary\": { \"none\": [\"Manuscripts from the archive of Emily Hobhouse.\"] },\n \"collection\": \"https://iiif.bodleian.ox.ac.uk/iiif/collection/hobhouse\",\n \"featured\": [\n \"https://iiif.bodleian.ox.ac.uk/iiif/manifest/8da97e8c-4e12-457d-aad8-3327b3aec183.json\",\n \"https://iiif.bodleian.ox.ac.uk/iiif/manifest/2968d5c7-3718-44ef-92ea-ee4cc58cc677.json\"\n ],\n \"metadata\": [\"Extent\", \"Title\", \"Date Statement\", \"Language\"]\n }\n}"}},"/configuration/locale":{"title":"Locale Preferences","data":{"":"Canopy IIIF supports locale preferences for user interface language. The default configuration language is English; however, additional languages can be defined. For more information, see Locale.\n\"locales\": [\n {\n \"config\": \"locales/en.json\",\n \"label\": \"English\",\n \"lang\": \"en\"\n }\n]","customizing-a-locale#Customizing a Locale":"User interface language strings are set through a locale configuration file located in the config/locales directory. Persons customizing a Canopy instance can add new language configurations to support their preferred locales. We welcome all pull requests to add new locales to the Canopy IIIF project.English configuration is predefined and found at config/locales/en.json\n{\n \"footerSourceCollection\": \"Source Collection\",\n \"footerToggleTheme\": \"Toggle Theme\",\n \"homepageHighlightedWorks\": \"Highlighted Works\",\n \"searchButton\": \"Search\",\n \"searchResults\": \"Results\",\n \"searchFilter\": \"Filter\",\n \"searchFilterAny\": \"Any\",\n \"searchFilterClear\": \"Clear All\",\n \"searchFilterClose\": \"Close\",\n \"searchFilterSubmit\": \"View Results\"\n}","multiple-locales#Multiple Locales":"If more than one locale is defined in the config/options.json, a select element will render in the header allowing users to toggle the defined languages. In addition, Canopy will attempt to align the language set by the user's browser with the available options. As a fallback, the first locale defined in the array will be set.As an example, if a visitor with en-US visited a Canopy instance that included both no and en as language options, the en locale configuration would be the default locale. Whereas, if a user visited this same instance with fr as their browser language, the default locale would be the no configuration.\n\"locales\": [\n {\n \"config\": \"locales/no.json\",\n \"label\": \"Norsk\",\n \"lang\": \"no\"\n },\n {\n \"config\": \"locales/en.json\",\n \"label\": \"English\",\n \"lang\": \"en\"\n }\n]"}},"/configuration/map":{"title":"Map","data":{"map#Map":"A map route can be enabled to provide geographic discovery of works via config/options.json. This feature builds markers off of geographic point features found in navPlace properties at the Manifest level. To enable this option, set the option to true.Note: Currently, only navPlace properties found at the Manifest level are displayed. Also, onlyFeatures of type: \"Point\" are displayed.\n\"map\": { \"enabled\": true }\nThe map's tile layers are also configured here, giving users the ability to choose and customize layers for their project. Additional services, such as MapBox, can be easily integrated following this pattern. Each tile layer defined here will appear as an option in the layer control of the map. The name property defines the text next to the radio button. The url property is the link to the tile layer. Finally, the attribution property defines the text that appears at the bottom of the map in case the tile layer requires any specific attribution on use. The first tile layer in the array will be used as the default map.\n\"tileLayers\": [\n {\n \"name\": \"OpenStreetMap\",\n \"url\": \"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png\",\n \"attribution\": \"© OpenStreetMap contributors\"\n },\n {\n \"name\": \"OpenTopoMap\",\n \"url\": \"https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png\",\n \"attribution\": \"© OpenStreetMap contributors\"\n }\n]"}},"/configuration/search":{"title":"Search","data":{"":"Search options can be configured in config/options.json. By default, the search index is included but can be disabled by setting enabled: false. If the search index is enabled, the label property on the manifest is always indexed. The properties of the metadata property are also indexed by default, but this can be modified to have these values not be indexed at all by setting search.index.metadata.enabled to false. Furthermore, all metadata values may be indexed OR you may specify only the properties that are specified in config/canopy.json by modifying search.index.metadata.all.The only property that can be indexed outside of metadata and label currently is summary. This is configured with search.index.summary.enabled .","flexsearch-customization#FlexSearch Customization":"Users can customize their FlexSearch configuration using search.flexSearch to fit around the source Collection and its Manifest label, metadata, and summary properties. Customizations range from defining language-specific options such as charset and stemmer, as well as scoring options like resolution and depth.","default-search-configuration#Default Search Configuration":"\"search\": {\n \"enabled\": true,\n \"flexSearch\": {\n \"charset\": \"latin:extra\",\n \"optimize\": true,\n \"tokenize\": \"strict\",\n \"bidirectional\": false,\n \"document\": {\n \"index\": [\n {\n \"field\": \"label\",\n \"tokenize\": \"full\",\n \"resolution\": 9,\n \"depth\": 3,\n \"bidirectional\": true\n },\n {\n \"field\": \"metadata\",\n \"resolution\": 2\n },\n {\n \"field\": \"summary\",\n \"resolution\": 1\n }\n ]\n }\n },\n \"index\": {\n \"metadata\": {\n \"enabled\": true,\n \"all\": false\n },\n \"summary\": {\n \"enabled\": false\n }\n }\n}"}},"/configuration/theme":{"title":"Theme","data":{"theme#Theme":"The default theme for users can be set via config/options.json. This feature sets the initial theme for users as light, dark, or system. The Toggle Theme button can also be enabled or disabled here.Note: Theme settings are stored in the users local browser storage. Setting the theme will only affect new users to your site. It will not change the default theme for users who have already visited.\n\"theme\": { \"defaultTheme\": \"light\", \"toggleEnabled\": false }"}},"/content":{"title":"Contextual Content","data":{"":"Canopy allows for easy creation of contextual content that supports the automatically generated content at /, search/ and works/. For the purpose of easy content generation Canopy utilizes MDX which \"allows you to use JSX in your markdown content.\"","authoring-new-content#Authoring new Content":"Canopy IIIF is designed to work with Markdown using the MDX library. This allows us to cleanly leverage custom Canopy components alongside our Markdown content. Markdown content can be edited in the /content directory at the root of your Canopy IIIF project.See the Markdown Example page for additional information.\n---\ntitle: New Page Title\nnavigation: \"about\"\n---\n# New Page Title\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Donec eget odio vitae diam aliquam sodales. Sed vitae eros vitae urna aliquam aliquet. Donec euismod, nisl vitae aliquam ultricies, nunc nisl aliquam nunc, vitae aliquam nisl nunc vitae nisl. Donec vitae nisl vitae nisl aliquam aliquet. Donec euismod, nisl vitae aliquam ultricies, nunc nisl aliquam nunc, vitae aliquam nisl nunc vitae nisl.\n## Content continues..."}},"/content/card":{"title":"Card","data":{}},"/content/markdown":{"title":"Markdown","data":{}},"/content/slider":{"title":"Slider","data":{}},"/content/viewer":{"title":"Viewer","data":{}},"/create-markdown-content":{"title":"Create Markdown Content","data":{}},"/deploy-to-github-pages":{"title":"Deploy to GitHub Pages","data":{"":"Canopy IIIF is designed to be deployed as a statically generated website.\nStatic sites are a great option for many projects, as they are fast, secure,\nand easy to deploy and maintain. This guide will walk you through the\nprocess of deploying project as a static website using GitHub Pages using\nthe incorporated GitHub Actions in Canopy to automate the build and\ndeployment process.\nRequires a GitHub account.","use-case#Use Case":"You are a graduate student researching the American painter Beauford Delaney\nand you would like to easily create and host a digital scholarship project\nanalyzing items in your institution's digital collections.","implementation#Implementation":"","create-your-template-repository#Create your template repository":"Click the \"Use this template\" button at the top of the Canopy IIIF\nrepository to create a new repository based on this template. Select \"Create a new repository\" and choose the GitHub\naccount or organization you want to copy the contents to from the Owner dropdown. Choose a name for your new repository\nand entire it in the Repository name field. Unless you have a paid GitHub account, select Public. Click the\n\"Create repository\" button to create the new repository.","adjust-repository-settings#Adjust repository settings":"Once the repository is created, press the Settings button and Actions → General under Code and automation.Then select Read and write permissions under Workflow permissions and press Save. This allows the GitHub\nworkflow to run and the static Canopy output to be deployed to a new branch.","modify-environmmental-variables#Modify environmmental variables":"Next, modify the .github/workflows/gh-pages.deploy.yml file in repository for the NEXT_PUBLIC_URL and NEXT_PUBLIC_BASE_PATH\nto be relative to the new repository. After changing these settings, commit your change and trigger the action to run.\nOnce the action has run, the action indicator should change from a red X to a green check mark and a new branch called\ngh-pages will be created.","watch-the-build#Watch the build":"Once the gh-pages branch exists and the action indicator is a green check mark, again press the Settings button.\nUnder Code and automation, click Pages and select gh-pages from the Branch dropdown under Build and deployment\nand click *Save. Now your Canopy site will be active at the URL you defined in the NEXT_PUBLIC_URL setting."}},"/customize-the-search-index":{"title":"Customize the Search Index","data":{}},"/deploy-to-vercel":{"title":"Deploy to Vercel","data":{"":"Canopy can be deployed to a Next.js managed hosting\nservice.\nDoing so will allow you to take advantage of server-side components (e.g.,\nAPI routing). This guide will walk you through the process of\ndeploying Canopy to Vercel.\nRequires a Vercel account.","use-case#Use Case":"You are developer tasked with using Canopy and leveraging API routing to serve the /api/search\nendpoint as IIIF for Collections-as-data purposes. As part of this requirement, you need to deploy\nthe application to a managed hosting service and have selected Vercel for its Next.js compatibility.","implementation#Implementation":"","import-the-repository#Import the Repository":"After you've logged in to Vercel, click the Start deploying button. Then, from the Let's Build Something New\nscreen, click the Import button next to the repository you've created.","configure#Configure":"Next, give your repository a name a press Deploy. Vercel will then build and deploy your application and make it available at ${YOUR-PROJECT-NAME}.vercel.app.","environment-variables#Environment Variables":"Finally, edit the .env in your repository on Github and make sure that the NEXT_PUBLIC_URL variable and\nNEXT_PUBLIC_BASE_PATH variables match your project in Vercel. By default, the NEXT_PUBLIC_URL variable should be\nsimilar to your project name and you should not have to modify NEXT_PUBLIC_BASE_PATH."}},"/development":{"title":"Development","data":{"environment#Environment":"When you are ready to deploy your site, you will need to modify environment variables to reflect how your site is hosted.","updating#Updating":"Edit the .env file at the root of the working directory to reflect your site's configuration.The NEXT_PUBLIC_URL variable is used to declare the base URL of your site. This base url is critical to routing of works in Canopy and wiring up canonical links in SEO.If you plan to host your site in a subdirectory or subdomain, you will need to set the NEXT_PUBLIC_BASE_PATHto reflect this. For example, if your site is hosted at https://example.org/exhibit, you would set the value to /canopy.\nNEXT_PUBLIC_URL = \"https://canopy-iiif.vercel.app\"\nNEXT_PUBLIC_BASE_PATH = \"\"","avoid-code-conflicts#Avoid Code Conflicts":"To avoid potential code conflicts on future release updates, it is advised not to update the following integrated Canopy pages in the Next.js pages directory.\nNote: Future considerations will be delivered upon for updating content within these pages."}},"/enable-a-map-with-navPlace":{"title":"Enable a Map with navPlace Properties","data":{"":"The Map component enhances Canopy sites with optional geospatial navigation, allowing users to explore the underlying\ncollection through an interactive map. When activated, this component displays a map featuring markers representing each\npoint Feature within the navPlace properties found throughout the manifests of the overarching collection.","what-are-navplace-properties#What are navPlace Properties":"navPlace properties are defined by the navPlace extension.A navPlace property may look like this and identifies a single or multiple geographic areas pertinent to a resource\nusing a GeoJSON Feature Collection containing one or more Features.:\n{\n \"navPlace\": {\n \"id\": \"https://digital.lib.utk.edu/notdereferenceable/featurecollection//1\",\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"id\": \"https://digital.lib.utk.edu/notdereferenceable/feature/1\",\n \"type\": \"Feature\",\n \"properties\": {\n \"label\": {\n \"en\": [\n \"Interview with Seemona and Daniel Whaley, 2019-09-20 -- Discussion of Gatlinburg, TN\"\n ]\n }\n },\n \"geometry\": {\n \"type\": \"Point\",\n \"coordinates\": [\n -83.51189,\n 35.71453\n ]\n }\n }\n ]\n }\n}","does-canopy-leverage-all-navplace-properties#Does Canopy Leverage All navPlace Properties":"Not currently. Canopy only leverages the navPlace properties found in manifests with geometry properties of type\nPoint.","interacting-with-the-map#Interacting with the Map":"From the map component, clicking on a marker will display the label of the Feature and the thumbnail of its parent\nmanifest.Clicking the thumbnail or the label will navigate the user to the corresponding work page in Canopy.","customizing-the-map#Customizing the Map":"The Map component can be enabled within options.json by switching the value of enabled from false to true.\n {\n \"map\": {\n \"defaultBounds\": [[51.505, -0.09]],\n \"enabled\": true,\n \"icon\": {\n \"iconUrl\": \"images/marker-icon.png\",\n \"iconSize\": [24, 36],\n \"iconAnchor\": [12, 36]\n },\n \"tileLayers\": [\n {\n \"name\": \"OpenStreetMap\",\n \"url\": \"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png\",\n \"attribution\": \"© OpenStreetMap contributors\"\n }\n ]\n }\n }","defaultbounds#defaultBounds":"The defaultBounds property defines the coordinates of the initial view of the map. This property is an array of\narrays of longitude and latitude coordinates. Unless there are no markers found within the manifests of the\noverarching collection, this property will be ignored.","icon#icon":"The icon property defines the icon used to represent each marker on the map. The iconUrl property is the path to\nthe image file used as the icon. The iconSize property is an array of the width and height of the icon in pixels.\nThe iconAnchor property is an array of the x and y coordinates of the icon's anchor point in pixels. These values\nare used to position the icon relative to its marker's coordinates.","tilelayers#tileLayers":"The tileLayers property defines the tile layers used to render the map. This property is an array of objects, each\nof which defines a tile layer. Each tile layer object must have a name property, a url property, and an attribution.\nThe titleLayer at index 0 will be the default tile layer used to render the map. The other tile layers will be available\nto the user as options in the map's layer control which is available in the upper right corner of the map."}},"/get-started":{"title":"Create a Canopy Project","data":{"":"Have a project in mind? Let's get started! This guide will walk you through\nthe process of creating a basic Canopy IIIF project using a readily provided\nIIIF Collection.","use-case#Use Case":"You are on a team at a university library seeking to create a digital exhibit for a Korean Literary\ncollection in your digital repository that is provided as a IIIF Collection. You want to create\na discovery focused web site that allows users to search and browse the collection.","implementation#Implementation":"","create-a-project#Create a project":"","using-a-github-template#Using a Github template":"This method requires a GitHub account; however, it\nshould be easier to follow for users of Canopy without a developer\nenvironment.\nNavigate to the Canopy IIIF repository in GitHub\nClick the \"Use this template\" button\nClick the \"Create a new repository\" button\nSelect the account you want to own the repository\nEnter a repository name and optional description\nClick the \"Create repository\" button","using-git-clone#Using git clone":"In your terminal, navigate to the a working directory where you want to create your project\nClone the canopy-iiif/canopy-iiif repository OR your Canopy repository instance\ncd ~/Projects\ngit clone git@github.com:canopy-iiif/canopy-iiif.git","install-dependencies#Install dependencies":"Navigate to your new project directory and install dependencies.\ncd canopy-iiif\nnpm install","create-configuration-file#Create configuration file":"Copy the example configuration file and update the prod and dev values with your IIIF Collection URL.\ncp config/canopy.sample.json config/canopy.json\nIn this example we will use the Korean Literary Collection IIIF Collection URL provided by University of Washington Libraries.\ncollection is the IIIF Collection URI to be used as the root of your Canopy IIIF site\nfeatured array is a list of Manifest URIs that will be promoted thoughout your Canopy IIIF site\nmetadata array is a list of metadata labels that match string values in your Manifest URI metadata entries to be used for discovery purposes\n{\n \"prod\": {\n \"collection\": \"https://digitalcollections.lib.washington.edu/iiif/2/korean/manifest.json\",\n \"featured\": [\n \"https://cdm16786.contentdm.oclc.org/iiif/korean:138/manifest.json\"\n ],\n \"metadata\": [\"Author\", \"Place of Publication\"]\n },\n \"dev\": {\n \"collection\": \"https://digitalcollections.lib.washington.edu/iiif/2/korean/manifest.json\",\n \"featured\": [\n \"https://cdm16786.contentdm.oclc.org/iiif/korean:138/manifest.json\"\n ],\n \"metadata\": [\"Author\", \"Place of Publication\"]\n }\n}\nSee Options for more information regarding configuration.","ready-to-go#Ready to go!":"If you are using GitHub, you can skip this step and run Canopy without a\ndeveloper environment directly using GitHub Pages.\nNow that you have a project and configuration set, you can run Canopy IIIF.\nnpm run dev","build-process#Build process":"The build process may take a few minutes depending on the size of your IIIF Collection and provider response times. A Collection of ~100 items should build in 30 seconds or less.\nBuilding - Canopy retrieves the source IIIF Collection\nCreate Manifest listing - Canopy retrives all IIIF Manifests in the Collection\nCreate facets as IIIF Collections - Canopy anaylzes the Manifests and creates IIIF Collections for each unique metadata label and value\nBuild search entries - Canopy is creates search entries for each Manifest from descriptive metadta\nReady 🚀 - Canopy is ready to go!\nBuilding Canopy from IIIF Collection...\nhttps://digitalcollections.lib.washington.edu/iiif/2/korean/manifest.json\nCreating Manifest listing...\nAggregating 135 Manifest(s) in 14 chunk(s)...\nChunk (1/14)\n✓ https://cdm16786.contentdm.oclc.org/iiif/korean:560/manifest.json ➜ 200\n✓ https://cdm16786.contentdm.oclc.org/iiif/korean:1494/manifest.json ➜ 200\n✓ https://cdm16786.contentdm.oclc.org/iiif/korean:678/manifest.json ➜ 200\n✓ https://cdm16786.contentdm.oclc.org/iiif/korean:983/manifest.json ➜ 200\n✓ https://cdm16786.contentdm.oclc.org/iiif/korean:138/manifest.json ➜ 200\n✓ https://cdm16786.contentdm.oclc.org/iiif/korean:314/manifest.json ➜ 200\n✓ https://cdm16786.contentdm.oclc.org/iiif/korean:1105/manifest.json ➜ 200\n✓ https://cdm16786.contentdm.oclc.org/iiif/korean:498/manifest.json ➜ 200\n✓ https://cdm16786.contentdm.oclc.org/iiif/korean:839/manifest.json ➜ 200\n✓ https://cdm16786.contentdm.oclc.org/iiif/korean:1363/manifest.json ➜ 200\n## build continues...\nChunk (14/14)\n✓ https://cdm16786.contentdm.oclc.org/iiif/korean:28181/manifest.json ➜ 200\n✓ https://cdm16786.contentdm.oclc.org/iiif/korean:27749/manifest.json ➜ 200\n✓ https://cdm16786.contentdm.oclc.org/iiif/korean:28140/manifest.json ➜ 200\n✓ https://cdm16786.contentdm.oclc.org/iiif/korean:28280/manifest.json ➜ 200\n✓ https://cdm16786.contentdm.oclc.org/iiif/korean:27976/manifest.json ➜ 200\n135/135 Manifests(s) retrieved successfully.\nCreating facets as IIIF Collections...\n↓ /api/facet/author/unidentified.json\n↓ /api/facet/author/kim-tong-in.json\n↓ /api/facet/author/chng-chi-yong-chong-chi-yong.json\n↓ /api/facet/author/yi-tae-jun.json\n↓ /api/facet/author/an-hoe-nam.json\n↓ /api/facet/author/im-hak-su.json\n## build continues...\nBuilding search entries...\n...Ready 🚀\n▲ Next.js 13.5.4\n- Local: http://localhost:5001\n- Environments: .env","browse-your-site#Browse your site":"In your browser, navigate to http://localhost:5001 to view your Canopy IIIF site.","home-page#Home page":"Content on the home page is geared towards discovery of your IIIF Collection. The home page will render a hero component for featured Manifests and a slider components for defined metadata labels and their most common values.","search-page#Search page":"All Manifests in your IIIF Collection are now represented as results at the /search route. In addition to full text search, results are filterable by defined metadata labels and available values. In the example Korean Literary Collection, there are 135 items available for search. A query for poems returns 43 results.","work-page#Work page":"All Manifests in your IIIF Collection are now available as statically generated pages with a /work/slug-generated-from-label pattern. Each work represents a single Manifest, its descriptive metadata, and various other IIIF properties. Clover IIIF is the defacto deep-zoom and A/V capable viewer in Canopy IIIF but other IIIF viewers can be easily configured."}},"/guides":{"title":"User Guides","data":{"":"To get started with Canopy IIIF, check out the following guides that provide step-by-step instructions."}},"/":{"title":"Index","data":{"":"{\n \"@context\": \"http://iiif.io/api/presentation/3/context.json\",\n \"id\": \"https://collections.britishart.yale.edu/iiif/collection/paintings_of_francis_danby\",\n \"type\": \"Collection\",\n \"label\": {\n \"en\": [\"Paintings of Francis Danby\"]\n },\n \"items\": [\n {\n \"id\": \"https://manifests.collections.yale.edu/ycba/obj/116\",\n \"type\": \"Manifest\",\n \"label\": {\n \"en\": [\"The Mountain Torrent\"]\n }\n },\n {\n \"id\": \"https://manifests.collections.yale.edu/ycba/obj/38658\",\n \"type\": \"Manifest\",\n \"label\": {\n \"en\": [\"A View across the Artist's Garden from his House at Exmouth, Devonshire\"]\n }\n }\n ]\n}\nWhat is Canopy IIIF?\nCanopy is an open source site generator built with\nIIIF and Next.js. Using a IIIF\nCollection as a data\nsource, Canopy IIIF generates a browseable and searchable static site and\nprovides a straightforward solution using Markdown for adding scholary context\nto the resources that are referenced.\nScholarship\nResearchers can curate and aggregate content from various providers and\nadd their own context to resources\nExhibits\nLibraries, museums, and archives can create digital exhibits from the\nworks in their repositories\nMinimal infrastructure\nSmall-scale, headless infrastructure for institutions with limited\nresources to build their own digital collections application\nFeatures\nCanopy IIIF extends the features of Next.js to produce a full-text search\nindex using FlexSearch, provides support for both IIIF Presentation API\n2.x and 3.0 specifications, and automatically generates facets based on\nthe curated metadata labels and values found within Manifests. The\nplatform’s API routes return IIIF collections and allow for users to\nreference IIIF resources internally and externally. In addition to these\nfeatures, the product roadmap and planned features include expanding\ninternationalization support, generating interactive maps and timelines\nbased on the presence of navPlace and navDate properties, and leveraging\nIIIF Content State and Change Discovery APIs."}}} \ No newline at end of file +{"/about":{"title":"About","data":{"":"The project name \"Canopy\" is inspired by the tree motiff in the presentation, A Tree's Strength Is Its Trunk: IIIF as Central Operational Infrastructure, delivered by María Matienzo (formerly Stanford University Libraries) and Esmé Cowles (Princeton University Library) at the CNI Fall 2020 Virtual Membership Meeting. Following this infrastructure vision, Canopy was created as a front end solution for rapid and easy creation of static sites using a IIIF Collection and its Manifests.Canopy IIIF is created using Next.js 13, with a FlexSearch index for text search, IIIF Presentation API 3.0 delivering resource content, Radix UI and Stitches used throughout for the user interface, and various community modules from IIIF Commons and Samvera supporting the work presentation and resource delivery.","origination#Origination":"Canopy was initially conceived at the University of Tennessee Libraries in the Summer '21 as a statically generated web application for the Rising from the Ashes: The Chimney Tops 2 Wildfires Oral History Project. This project was generated from a single IIIF Collection; however, the components delivering the user interface became heavily tailored to the source material of the Rising from the Ashes project, thus limiting the reuse of the codebase for other collections. The original Canopy featured a heavily integrated IIIF A/V Viewer designed to deliver Sound and Video resources. This A/V viewer would eventually evolve into a partial inspiration for Clover IIIF.Canopy was reimagined as Canopy IIIF in early Winter '22 with the primary focus of the project maintaining the the ability to build an interoperable site from any IIIF Collection following IIIF Presentation API 2.0 and 3.0 specifications.","contributors#Contributors":"Creators\nMat Jordan - Northwestern University\nLibraries, formerly University of Tennessee Libraries\nMark Baggett - University of Tennessee\nLibraries\nAdam Arling - Northwestern University\nLibraries\nAdditional Credits\nEmily Gore - University of Georgia Libraries, formerly University of Tennessee\nLibraries\nDavid Schober - Northwestern University Libraries\nMartim Passos - Instituto Moreira Salles\nTarje Lavik - University of Bergen Library"}},"/configuration":{"title":"Configuration","data":{}},"/configuration/basic":{"title":"Basic Canopy IIIF Configuration","data":{"":"The Canopy IIIF build process will read from a custom configuration file at config/canopy.json if it exists. If this configuration file does not exist, the default configuration config/.default/canopy.default.json will be used as a fallback for demonstration purposes.\nSee the Create a Project guide for a step-by-step guide\nillustrating the setup of Canopy IIIF project.\nFind your config/ directory\nCopy canopy.sample.json to canopy.json\nMake updates to both the prod and dev configurations","properties#Properties":"","collection#Collection":"The collection property is required and must be the id of the referenced source IIIF Collection. Collections of Collections are not currently supported.\n\"collection\": \"https://iiif.bodleian.ox.ac.uk/iiif/collection/hobhouse\"","label-and-summary#Label and Summary":"The Canopy IIIF site title and description are respectively the label and summary IIIF Presentation API properties of the set IIIF Collection resource. You can optionally override this by providing a valid Presentation 3.0 label and/or summary property. These values are transformed to meta elements in the of the HTML document.\n\"label\": { \"none\": [\"Hobhouse\"] },\n\"summary\": { \"none\": [\"Manuscripts from the archive of Emily Hobhouse.\"] }","featured-manifests#Featured Manifests":"You can inform Canopy IIIF of featured Manifests by providing an array of ids. These must be within the referenced collection resource and the Manifest URIs must be an exact match. These Manifests will render throughout the interface in featured components.Warning: In the current pre-release, featured Manifests must have an Image body on the first Canvas.\n\"featured\": [\n \"https://iiif.bodleian.ox.ac.uk/iiif/manifest/8da97e8c-4e12-457d-aad8-3327b3aec183.json\",\n \"https://iiif.bodleian.ox.ac.uk/iiif/manifest/2968d5c7-3718-44ef-92ea-ee4cc58cc677.json\"\n]","metadata-and-facets#Metadata and Facets":"Curating Metadata allows implementers of Canopy IIIF to select metadata labels that provide use to end users. An optimal case is a label common to all or most manifests with some in diversity of values across those resources. Metadata labels that are curated will be automatically included as featured elements on the homepage, the metadata page, linking from works, and as facets on the search page.Note: Metadata labels are not yet BCP 47 language code aware; however, aggregation processes will make exact string comparisons regardless of language code.\n\"metadata\": [\"Extent\", \"Title\", \"Date Statement\", \"Language\"]","production-and-development#Production and Development":"Both the prod and dev environments have a configuration. These configurations can match each other; however in some cases, development speed can be aided by targeting a smaller IIIF Collection id as a fixture.","example-configuration#Example Configuration":"The following is an example configuration for the Bodleian Libraries' Emily Hobhouse collection. Two Manifests are featured and four metadata labels are curated.\n{\n \"prod\": {\n \"label\": { \"none\": [\"Hobhouse\"] },\n \"summary\": { \"none\": [\"Manuscripts from the archive of Emily Hobhouse.\"] },\n \"collection\": \"https://iiif.bodleian.ox.ac.uk/iiif/collection/hobhouse\",\n \"featured\": [\n \"https://iiif.bodleian.ox.ac.uk/iiif/manifest/8da97e8c-4e12-457d-aad8-3327b3aec183.json\",\n \"https://iiif.bodleian.ox.ac.uk/iiif/manifest/2968d5c7-3718-44ef-92ea-ee4cc58cc677.json\"\n ],\n \"metadata\": [\"Extent\", \"Title\", \"Date Statement\", \"Language\"]\n },\n \"dev\": {\n \"label\": { \"none\": [\"Hobhouse\"] },\n \"summary\": { \"none\": [\"Manuscripts from the archive of Emily Hobhouse.\"] },\n \"collection\": \"https://iiif.bodleian.ox.ac.uk/iiif/collection/hobhouse\",\n \"featured\": [\n \"https://iiif.bodleian.ox.ac.uk/iiif/manifest/8da97e8c-4e12-457d-aad8-3327b3aec183.json\",\n \"https://iiif.bodleian.ox.ac.uk/iiif/manifest/2968d5c7-3718-44ef-92ea-ee4cc58cc677.json\"\n ],\n \"metadata\": [\"Extent\", \"Title\", \"Date Statement\", \"Language\"]\n }\n}"}},"/configuration/locale":{"title":"Locale Preferences","data":{"":"Canopy IIIF supports locale preferences for user interface language. The default configuration language is English; however, additional languages can be defined. For more information, see Locale.\n\"locales\": [\n {\n \"config\": \"locales/en.json\",\n \"label\": \"English\",\n \"lang\": \"en\"\n }\n]","customizing-a-locale#Customizing a Locale":"User interface language strings are set through a locale configuration file located in the config/locales directory. Persons customizing a Canopy instance can add new language configurations to support their preferred locales. We welcome all pull requests to add new locales to the Canopy IIIF project.English configuration is predefined and found at config/locales/en.json\n{\n \"footerSourceCollection\": \"Source Collection\",\n \"footerToggleTheme\": \"Toggle Theme\",\n \"homepageHighlightedWorks\": \"Highlighted Works\",\n \"searchButton\": \"Search\",\n \"searchResults\": \"Results\",\n \"searchFilter\": \"Filter\",\n \"searchFilterAny\": \"Any\",\n \"searchFilterClear\": \"Clear All\",\n \"searchFilterClose\": \"Close\",\n \"searchFilterSubmit\": \"View Results\"\n}","multiple-locales#Multiple Locales":"If more than one locale is defined in the config/options.json, a select element will render in the header allowing users to toggle the defined languages. In addition, Canopy will attempt to align the language set by the user's browser with the available options. As a fallback, the first locale defined in the array will be set.As an example, if a visitor with en-US visited a Canopy instance that included both no and en as language options, the en locale configuration would be the default locale. Whereas, if a user visited this same instance with fr as their browser language, the default locale would be the no configuration.\n\"locales\": [\n {\n \"config\": \"locales/no.json\",\n \"label\": \"Norsk\",\n \"lang\": \"no\"\n },\n {\n \"config\": \"locales/en.json\",\n \"label\": \"English\",\n \"lang\": \"en\"\n }\n]"}},"/configuration/map":{"title":"Map","data":{"map#Map":"A map route can be enabled to provide geographic discovery of works via config/options.json. This feature builds markers off of geographic point features found in navPlace properties at the Manifest level. To enable this option, set the option to true.Note: Currently, only navPlace properties found at the Manifest level are displayed. Also, onlyFeatures of type: \"Point\" are displayed.\n\"map\": { \"enabled\": true }\nThe map's tile layers are also configured here, giving users the ability to choose and customize layers for their project. Additional services, such as MapBox, can be easily integrated following this pattern. Each tile layer defined here will appear as an option in the layer control of the map. The name property defines the text next to the radio button. The url property is the link to the tile layer. Finally, the attribution property defines the text that appears at the bottom of the map in case the tile layer requires any specific attribution on use. The first tile layer in the array will be used as the default map.\n\"tileLayers\": [\n {\n \"name\": \"OpenStreetMap\",\n \"url\": \"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png\",\n \"attribution\": \"© OpenStreetMap contributors\"\n },\n {\n \"name\": \"OpenTopoMap\",\n \"url\": \"https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png\",\n \"attribution\": \"© OpenStreetMap contributors\"\n }\n]"}},"/configuration/search":{"title":"Search","data":{"":"Search options can be configured in config/options.json. By default, the search index is included but can be disabled by setting enabled: false. If the search index is enabled, the label property on the manifest is always indexed. The properties of the metadata property are also indexed by default, but this can be modified to have these values not be indexed at all by setting search.index.metadata.enabled to false. Furthermore, all metadata values may be indexed OR you may specify only the properties that are specified in config/canopy.json by modifying search.index.metadata.all.The only property that can be indexed outside of metadata and label currently is summary. This is configured with search.index.summary.enabled .","flexsearch-customization#FlexSearch Customization":"Users can customize their FlexSearch configuration using search.flexSearch to fit around the source Collection and its Manifest label, metadata, and summary properties. Customizations range from defining language-specific options such as charset and stemmer, as well as scoring options like resolution and depth.","default-search-configuration#Default Search Configuration":"\"search\": {\n \"enabled\": true,\n \"flexSearch\": {\n \"charset\": \"latin:extra\",\n \"optimize\": true,\n \"tokenize\": \"strict\",\n \"bidirectional\": false,\n \"document\": {\n \"index\": [\n {\n \"field\": \"label\",\n \"tokenize\": \"full\",\n \"resolution\": 9,\n \"depth\": 3,\n \"bidirectional\": true\n },\n {\n \"field\": \"metadata\",\n \"resolution\": 2\n },\n {\n \"field\": \"summary\",\n \"resolution\": 1\n }\n ]\n }\n },\n \"index\": {\n \"metadata\": {\n \"enabled\": true,\n \"all\": false\n },\n \"summary\": {\n \"enabled\": false\n }\n }\n}"}},"/configuration/theme":{"title":"Theme","data":{"theme#Theme":"The default theme for users can be set via config/options.json. This feature sets the initial theme for users as light, dark, or system. The Toggle Theme button can also be enabled or disabled here.Note: Theme settings are stored in the users local browser storage. Setting the theme will only affect new users to your site. It will not change the default theme for users who have already visited.\n\"theme\": { \"defaultTheme\": \"light\", \"toggleEnabled\": false }"}},"/content":{"title":"Contextual Content","data":{"":"Canopy allows for easy creation of contextual content that supports the automatically generated content at /, search/ and works/. For the purpose of easy content generation Canopy utilizes MDX which \"allows you to use JSX in your markdown content.\"","authoring-new-content#Authoring new Content":"Canopy IIIF is designed to work with Markdown using the MDX library. This allows us to cleanly leverage custom Canopy components alongside our Markdown content. Markdown content can be edited in the /content directory at the root of your Canopy IIIF project.See the Markdown Example page for additional information.\n---\ntitle: New Page Title\nnavigation: \"about\"\n---\n# New Page Title\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Donec eget odio vitae diam aliquam sodales. Sed vitae eros vitae urna aliquam aliquet. Donec euismod, nisl vitae aliquam ultricies, nunc nisl aliquam nunc, vitae aliquam nisl nunc vitae nisl. Donec vitae nisl vitae nisl aliquam aliquet. Donec euismod, nisl vitae aliquam ultricies, nunc nisl aliquam nunc, vitae aliquam nisl nunc vitae nisl.\n## Content continues..."}},"/content/card":{"title":"Card","data":{}},"/content/markdown":{"title":"Markdown","data":{}},"/content/slider":{"title":"Slider","data":{}},"/content/viewer":{"title":"Viewer","data":{}},"/create-markdown-content":{"title":"Create Markdown Content","data":{"":"Implementers of Canopy IIIF can author contextual content to support\nManifest resources using formatted Markdown files. These files are stored in\nthe /content directory of your project. In doing so, you can add context\nto items in your IIIF Collection and craft a custom experience using\nintegrated components provided by Canopy IIIF.\nThis guide assumes you have a Canopy IIIF project. See the Create a\nProject guide to get started.","use-case#Use Case":"As a digital humanist, you have authored scholarly content for distinct items in a IIIF Collection. Your aim is to publish a digital scholarship project that highlights your context alongside these items.","implementation#Implementation":"","create-a-markdown-file#Create a Markdown file":"In your content directory, find the about subdirectory and create the new file sample.mdx.\nAdd the following barebones Markdown and front matter to your file and save.\n---\ntitle: The Nez Percé (Nimíipuu)\n---\n# The Nez Percé (Nimíipuu)\nThis a sample page for scholarly content with historical context relating to the [Nez Percé](https://en.wikipedia.org/wiki/Nez_Perce), also known as the Nimíipuu.\nYour file is now accessible at the relative route /about/nez-perce. If running in development mode, your file is accessible at http://localhost:5001/about/nez-perce.","update-navigation-menu#Update Navigation Menu":"Add the navigation key to the front matter with the about value. In this example the about navigation menu is defined by the content/about/_meta.json file.\n---\ntitle: The Nez Percé (Nimíipuu)\nnavigation: \"about\"\n---\n# The Nez Percé (Nimíipuu)\nThis a sample page for scholarly content with historical context relating to the [Nez Percé](https://en.wikipedia.org/wiki/Nez_Perce), also known as the Nimíipuu.\nEdit the content/about/_meta.json file and Add the new menu item to the array. Note that the /about/nez-perce path matches the relative path of the Markdown file.\n[\n {\n \"path\": \"/about\",\n \"text\": \"About\"\n },\n {\n \"path\": \"/about/example\",\n \"text\": \"Markdown Example\"\n },\n {\n \"path\": \"/about/nez-perce\",\n \"text\": \"The Nez Percé (Nimíipuu)\"\n }\n]\nYou will see the menu rendered in the