Simple-Jekyll-Search

Build Status dependencies Status devDependencies Status

A JavaScript library to add search functionality to any Jekyll blog.

Use case

You have a blog, built with Jekyll, and want a lightweight search functionality on your blog, purely client-side?

No server configurations or databases to maintain.

Just 5 minutes to have a fully working searchable blog.


Installation

npm

1
npm install simple-jekyll-search

Getting started

Create search.json

Place the following code in a file called search.json in the root of your Jekyll blog. (You can also get a copy from here)

This file will be used as a small data source to perform the searches on the client side:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
---
layout: none
---
[
  
    {
      "title"    : "Jekyll Doc Theme is published!",
      "category" : "",
      "tags"     : "",
      "url"      : "/blog/2017/05/03/jekyll-doc-theme/",
      "date"     : "2017-05-03 00:00:00 -0600"
    } ,
  
    {
      "title"    : "Welcome to Jekyll!",
      "category" : "",
      "tags"     : "",
      "url"      : "/blog/2017/02/01/welcome-to-jekyll/",
      "date"     : "2017-02-01 02:41:09 -0700"
    } 
  
]

Preparing the plugin

Add DOM elements

SimpleJekyllSearch needs two DOM elements to work:

  • a search input field
  • a result container to display the results

Give me the code

Here is the code you can use with the default configuration:

You need to place the following code within the layout where you want the search to appear. (See the configuration section below to customize it)

For example in _layouts/default.html:

1
2
3
4
5
6
<!-- HTML elements for search -->
<input type="text" id="search-input" placeholder="Search blog posts..">
<ul id="results-container"></ul>

<!-- or without installing anything -->
<script src="https://unpkg.com/simple-jekyll-search@latest/dest/simple-jekyll-search.min.js"></script>

Usage

Customize SimpleJekyllSearch by passing in your configuration options:

1
2
3
4
5
var sjs = SimpleJekyllSearch({
  searchInput: document.getElementById('search-input'),
  resultsContainer: document.getElementById('results-container'),
  json: '/search.json'
})

returns { search }

A new instance of SimpleJekyllSearch returns an object, with the only property search.

search is a function used to simulate a user input and display the matching results. 

E.g.:

1
2
var sjs = SimpleJekyllSearch({ ...options })
sjs.search('Hello')

💡 it can be used to filter posts by tags or categories!

Options

Here is a list of the available options, usage questions, troubleshooting & guides.

searchInput (Element) [required]

The input element on which the plugin should listen for keyboard event and trigger the searching and rendering for articles.

resultsContainer (Element) [required]

The container element in which the search results should be rendered in. Typically a <ul>.

json (String|JSON) [required]

You can either pass in an URL to the search.json file, or the results in form of JSON directly, to save one round trip to get the data.

searchResultTemplate (String) [optional]

The template of a single rendered search result.

The templating syntax is very simple: You just enclose the properties you want to replace with curly braces.

E.g.

The template

1
2
3
4
5
6
var sjs = SimpleJekyllSearch({
  searchInput: document.getElementById('search-input'),
  resultsContainer: document.getElementById('results-container'),
  json: '/search.json',
  searchResultTemplate: '<li><a href="https://romanticcircles.github.io{url}">{title}</a></li>'
})

will render to the following

1
<li><a href="/jekyll/update/2014/11/01/welcome-to-jekyll.html">Welcome to Jekyll!</a></li>

If the search.json contains this data

1
2
3
4
5
6
7
8
9
[
    {
      "title"    : "Welcome to Jekyll!",
      "category" : "",
      "tags"     : "",
      "url"      : "/jekyll/update/2014/11/01/welcome-to-jekyll.html",
      "date"     : "2014-11-01 21:07:22 +0100"
    }
]

templateMiddleware (Function) [optional]

A function that will be called whenever a match in the template is found.

It gets passed the current property name, property value, and the template.

If the function returns a non-undefined value, it gets replaced in the template.

This can be potentially useful for manipulating URLs etc.

Example:

1
2
3
4
5
6
7
8
9
SimpleJekyllSearch({
  ...
  templateMiddleware: function(prop, value, template) {
    if (prop === 'bar') {
      return value.replace(/^\//, '')
    }
  }
  ...
})

See the tests for an in-depth code example

sortMiddleware (Function) [optional]

A function that will be used to sort the filtered results.

It can be used for example to group the sections together.

Example:

1
2
3
4
5
6
7
8
9
SimpleJekyllSearch({
  ...
  sortMiddleware: function(a, b) {
    var astr = String(a.section) + "-" + String(a.caption);
    var bstr = String(b.section) + "-" + String(b.caption);
    return astr.localeCompare(bstr)
  }
  ...
})

noResultsText (String) [optional]

The HTML that will be shown if the query didn’t match anything.

limit (Number) [optional]

You can limit the number of posts rendered on the page.

fuzzy (Boolean) [optional]

Enable fuzzy search to allow less restrictive matching.

exclude (Array) [optional]

Pass in a list of terms you want to exclude (terms will be matched against a regex, so URLs, words are allowed).

success (Function) [optional]

A function called once the data has been loaded.

debounceTime (Number) [optional]

Limit how many times the search function can be executed over the given time window. This is especially useful to improve the user experience when searching over a large dataset (either with rare terms or because the number of posts to display is large). If no debounceTime (milliseconds) is provided a search will be triggered on each keystroke.


If search isn’t working due to invalid JSON

  • There is a filter plugin in the _plugins folder which should remove most characters that cause invalid JSON. To use it, add the simple_search_filter.rb file to your _plugins folder, and use remove_chars as a filter.

For example: in search.json, replace

1
"content": "# [Simple-Jekyll-Search](https://www.npmjs.com/package/simple-jekyll-search)[![Build Status](https://img.shields.io/travis/christian-fei/Simple-Jekyll-Search/master.svg?)](https://travis-ci.org/christian-fei/Simple-Jekyll-Search)[![dependencies Status](https://img.shields.io/david/christian-fei/Simple-Jekyll-Search.svg)](https://david-dm.org/christian-fei/Simple-Jekyll-Search)[![devDependencies Status](https://img.shields.io/david/dev/christian-fei/Simple-Jekyll-Search.svg)](https://david-dm.org/christian-fei/Simple-Jekyll-Search?type=dev)A JavaScript library to add search functionality to any Jekyll blog.## Use caseYou have a blog, built with Jekyll, and want a **lightweight search functionality** on your blog, purely client-side?*No server configurations or databases to maintain*.Just **5 minutes** to have a **fully working searchable blog**.---## Installation### npm```shnpm install simple-jekyll-search```## Getting started### Create `search.json`Place the following code in a file called `search.json` in the **root** of your Jekyll blog. (You can also get a copy [from here](/example/search.json))This file will be used as a small data source to perform the searches on the client side:```yaml---layout: none---[  {% for post in site.posts %}    {      "title"    : "{{ post.title | escape }}",      "category" : "{{ post.category }}",      "tags"     : "{{ post.tags | join: ', ' }}",      "url"      : "{{ site.baseurl }}{{ post.url }}",      "date"     : "{{ post.date }}"    } {% unless forloop.last %},{% endunless %}  {% endfor %}]```## Preparing the plugin### Add DOM elementsSimpleJekyllSearch needs two `DOM` elements to work:- a search input field- a result container to display the results#### Give me the codeHere is the code you can use with the default configuration:You need to place the following code within the layout where you want the search to appear. (See the configuration section below to customize it)For example in  **_layouts/default.html**:```html```## UsageCustomize SimpleJekyllSearch by passing in your configuration options:```jsvar sjs = SimpleJekyllSearch({  searchInput: document.getElementById('search-input'),  resultsContainer: document.getElementById('results-container'),  json: '/search.json'})```### returns { search }A new instance of SimpleJekyllSearch returns an object, with the only property `search`.`search` is a function used to simulate a user input and display the matching results. E.g.:```jsvar sjs = SimpleJekyllSearch({ ...options })sjs.search('Hello')```💡 it can be used to filter posts by tags or categories!## OptionsHere is a list of the available options, usage questions, troubleshooting & guides.### searchInput (Element) [required]The input element on which the plugin should listen for keyboard event and trigger the searching and rendering for articles.### resultsContainer (Element) [required]The container element in which the search results should be rendered in. Typically a ``.### json (String|JSON) [required]You can either pass in an URL to the `search.json` file, or the results in form of JSON directly, to save one round trip to get the data.### searchResultTemplate (String) [optional]The template of a single rendered search result.The templating syntax is very simple: You just enclose the properties you want to replace with curly braces.E.g.The template```jsvar sjs = SimpleJekyllSearch({  searchInput: document.getElementById('search-input'),  resultsContainer: document.getElementById('results-container'),  json: '/search.json',  searchResultTemplate: '{title}'})```will render to the following```htmlWelcome to Jekyll!```If the `search.json` contains this data```json[    {      "title"    : "Welcome to Jekyll!",      "category" : "",      "tags"     : "",      "url"      : "/jekyll/update/2014/11/01/welcome-to-jekyll.html",      "date"     : "2014-11-01 21:07:22 +0100"    }]```### templateMiddleware (Function) [optional]A function that will be called whenever a match in the template is found.It gets passed the current property name, property value, and the template.If the function returns a non-undefined value, it gets replaced in the template.This can be potentially useful for manipulating URLs etc.Example:```jsSimpleJekyllSearch({  ...  templateMiddleware: function(prop, value, template) {    if (prop === 'bar') {      return value.replace(/^\//, '')    }  }  ...})```See the [tests](https://github.com/christian-fei/Simple-Jekyll-Search/blob/master/tests/Templater.test.js) for an in-depth code example### sortMiddleware (Function) [optional]A function that will be used to sort the filtered results.It can be used for example to group the sections together.Example:```jsSimpleJekyllSearch({  ...  sortMiddleware: function(a, b) {    var astr = String(a.section) + "-" + String(a.caption);    var bstr = String(b.section) + "-" + String(b.caption);    return astr.localeCompare(bstr)  }  ...})```### noResultsText (String) [optional]The HTML that will be shown if the query didn't match anything.### limit (Number) [optional]You can limit the number of posts rendered on the page.### fuzzy (Boolean) [optional]Enable fuzzy search to allow less restrictive matching.### exclude (Array) [optional]Pass in a list of terms you want to exclude (terms will be matched against a regex, so URLs, words are allowed).### success (Function) [optional]A function called once the data has been loaded.### debounceTime (Number) [optional]Limit how many times the search function can be executed over the given time window. This is especially useful to improve the user experience when searching over a large dataset (either with rare terms or because the number of posts to display is large). If no `debounceTime` (milliseconds) is provided a search will be triggered on each keystroke.---## If search isn't working due to invalid JSON- There is a filter plugin in the _plugins folder which should remove most characters that cause invalid JSON. To use it, add the simple_search_filter.rb file to your _plugins folder, and use `remove_chars` as a filter.For example: in search.json, replace```json"content": "{{ page.content | strip_html | strip_newlines }}"```with```json"content": "{{ page.content | strip_html | strip_newlines | remove_chars | escape }}"```If this doesn't work when using Github pages you can try `jsonify` to make sure the content is json compatible:```js"content": {{ page.content | jsonify }}```**Note: you don't need to use quotes `"` in this since `jsonify` automatically inserts them.**## Enabling full-text searchReplace `search.json` with the following code:```yaml---layout: none---[  {% for post in site.posts %}    {      "title"    : "{{ post.title | escape }}",      "category" : "{{ post.category }}",      "tags"     : "{{ post.tags | join: ', ' }}",      "url"      : "{{ site.baseurl }}{{ post.url }}",      "date"     : "{{ post.date }}",      "content"  : "{{ post.content | strip_html | strip_newlines }}"    } {% unless forloop.last %},{% endunless %}  {% endfor %}  ,  {% for page in site.pages %}   {     {% if page.title != nil %}        "title"    : "{{ page.title | escape }}",        "category" : "{{ page.category }}",        "tags"     : "{{ page.tags | join: ', ' }}",        "url"      : "{{ site.baseurl }}{{ page.url }}",        "date"     : "{{ page.date }}",        "content"  : "{{ page.content | strip_html | strip_newlines }}"     {% endif %}   } {% unless forloop.last %},{% endunless %}  {% endfor %}]```## Development- `npm install`- `npm test`#### Acceptance tests```bashcd example; jekyll serve# in another tabnpm run cypress -- run```## ContributorsThanks to all [contributors](https://github.com/christian-fei/Simple-Jekyll-Search/graphs/contributors) over the years! You are the best :)> [@daviddarnes](https://github.com/daviddarnes)[@XhmikosR](https://github.com/XhmikosR)[@PeterDaveHello](https://github.com/PeterDaveHello)[@mikeybeck](https://github.com/mikeybeck)[@egladman](https://github.com/egladman)[@midzer](https://github.com/midzer)[@eduardoboucas](https://github.com/eduardoboucas)[@kremalicious](https://github.com/kremalicious)[@tibotiber](https://github.com/tibotiber)and many others!## Stargazers over time[![Stargazers over time](https://starchart.cc/christian-fei/Simple-Jekyll-Search.svg)](https://starchart.cc/christian-fei/Simple-Jekyll-Search)"

with

1
"content": "# [Simple-Jekyll-Search](https://www.npmjs.com/package/simple-jekyll-search)[![Build Status](https://img.shields.io/travis/christian-fei/Simple-Jekyll-Search/master.svg?)](https://travis-ci.org/christian-fei/Simple-Jekyll-Search)[![dependencies Status](https://img.shields.io/david/christian-fei/Simple-Jekyll-Search.svg)](https://david-dm.org/christian-fei/Simple-Jekyll-Search)[![devDependencies Status](https://img.shields.io/david/dev/christian-fei/Simple-Jekyll-Search.svg)](https://david-dm.org/christian-fei/Simple-Jekyll-Search?type=dev)A JavaScript library to add search functionality to any Jekyll blog.## Use caseYou have a blog, built with Jekyll, and want a **lightweight search functionality** on your blog, purely client-side?*No server configurations or databases to maintain*.Just **5 minutes** to have a **fully working searchable blog**.---## Installation### npm```shnpm install simple-jekyll-search```## Getting started### Create `search.json`Place the following code in a file called `search.json` in the **root** of your Jekyll blog. (You can also get a copy [from here](/example/search.json))This file will be used as a small data source to perform the searches on the client side:```yaml---layout: none---[  {% for post in site.posts %}    {      &quot;title&quot;    : &quot;{{ post.title | escape }}&quot;,      &quot;category&quot; : &quot;{{ post.category }}&quot;,      &quot;tags&quot;     : &quot;{{ post.tags | join: &#39;, &#39; }}&quot;,      &quot;url&quot;      : &quot;{{ site.baseurl }}{{ post.url }}&quot;,      &quot;date&quot;     : &quot;{{ post.date }}&quot;    } {% unless forloop.last %},{% endunless %}  {% endfor %}]```## Preparing the plugin### Add DOM elementsSimpleJekyllSearch needs two `DOM` elements to work:- a search input field- a result container to display the results#### Give me the codeHere is the code you can use with the default configuration:You need to place the following code within the layout where you want the search to appear. (See the configuration section below to customize it)For example in  **_layouts/default.html**:```html```## UsageCustomize SimpleJekyllSearch by passing in your configuration options:```jsvar sjs = SimpleJekyllSearch({  searchInput: document.getElementById(&#39;search-input&#39;),  resultsContainer: document.getElementById(&#39;results-container&#39;),  json: &#39;/search.json&#39;})```### returns { search }A new instance of SimpleJekyllSearch returns an object, with the only property `search`.`search` is a function used to simulate a user input and display the matching results. E.g.:```jsvar sjs = SimpleJekyllSearch({ ...options })sjs.search(&#39;Hello&#39;)```💡 it can be used to filter posts by tags or categories!## OptionsHere is a list of the available options, usage questions, troubleshooting &amp; guides.### searchInput (Element) [required]The input element on which the plugin should listen for keyboard event and trigger the searching and rendering for articles.### resultsContainer (Element) [required]The container element in which the search results should be rendered in. Typically a ``.### json (String|JSON) [required]You can either pass in an URL to the `search.json` file, or the results in form of JSON directly, to save one round trip to get the data.### searchResultTemplate (String) [optional]The template of a single rendered search result.The templating syntax is very simple: You just enclose the properties you want to replace with curly braces.E.g.The template```jsvar sjs = SimpleJekyllSearch({  searchInput: document.getElementById(&#39;search-input&#39;),  resultsContainer: document.getElementById(&#39;results-container&#39;),  json: &#39;/search.json&#39;,  searchResultTemplate: &#39;{title}&#39;})```will render to the following```htmlWelcome to Jekyll!```If the `search.json` contains this data```json[    {      &quot;title&quot;    : &quot;Welcome to Jekyll!&quot;,      &quot;category&quot; : &quot;&quot;,      &quot;tags&quot;     : &quot;&quot;,      &quot;url&quot;      : &quot;/jekyll/update/2014/11/01/welcome-to-jekyll.html&quot;,      &quot;date&quot;     : &quot;2014-11-01 21:07:22 +0100&quot;    }]```### templateMiddleware (Function) [optional]A function that will be called whenever a match in the template is found.It gets passed the current property name, property value, and the template.If the function returns a non-undefined value, it gets replaced in the template.This can be potentially useful for manipulating URLs etc.Example:```jsSimpleJekyllSearch({  ...  templateMiddleware: function(prop, value, template) {    if (prop === &#39;bar&#39;) {      return value.replace(/^\//, &#39;&#39;)    }  }  ...})```See the [tests](https://github.com/christian-fei/Simple-Jekyll-Search/blob/master/tests/Templater.test.js) for an in-depth code example### sortMiddleware (Function) [optional]A function that will be used to sort the filtered results.It can be used for example to group the sections together.Example:```jsSimpleJekyllSearch({  ...  sortMiddleware: function(a, b) {    var astr = String(a.section) + &quot;-&quot; + String(a.caption);    var bstr = String(b.section) + &quot;-&quot; + String(b.caption);    return astr.localeCompare(bstr)  }  ...})```### noResultsText (String) [optional]The HTML that will be shown if the query didn&#39;t match anything.### limit (Number) [optional]You can limit the number of posts rendered on the page.### fuzzy (Boolean) [optional]Enable fuzzy search to allow less restrictive matching.### exclude (Array) [optional]Pass in a list of terms you want to exclude (terms will be matched against a regex, so URLs, words are allowed).### success (Function) [optional]A function called once the data has been loaded.### debounceTime (Number) [optional]Limit how many times the search function can be executed over the given time window. This is especially useful to improve the user experience when searching over a large dataset (either with rare terms or because the number of posts to display is large). If no `debounceTime` (milliseconds) is provided a search will be triggered on each keystroke.---## If search isn&#39;t working due to invalid JSON- There is a filter plugin in the _plugins folder which should remove most characters that cause invalid JSON. To use it, add the simple_search_filter.rb file to your _plugins folder, and use `remove_chars` as a filter.For example: in search.json, replace```json&quot;content&quot;: &quot;{{ page.content | strip_html | strip_newlines }}&quot;```with```json&quot;content&quot;: &quot;{{ page.content | strip_html | strip_newlines | remove_chars | escape }}&quot;```If this doesn&#39;t work when using Github pages you can try `jsonify` to make sure the content is json compatible:```js&quot;content&quot;: {{ page.content | jsonify }}```**Note: you don&#39;t need to use quotes `&quot;` in this since `jsonify` automatically inserts them.**## Enabling full-text searchReplace `search.json` with the following code:```yaml---layout: none---[  {% for post in site.posts %}    {      &quot;title&quot;    : &quot;{{ post.title | escape }}&quot;,      &quot;category&quot; : &quot;{{ post.category }}&quot;,      &quot;tags&quot;     : &quot;{{ post.tags | join: &#39;, &#39; }}&quot;,      &quot;url&quot;      : &quot;{{ site.baseurl }}{{ post.url }}&quot;,      &quot;date&quot;     : &quot;{{ post.date }}&quot;,      &quot;content&quot;  : &quot;{{ post.content | strip_html | strip_newlines }}&quot;    } {% unless forloop.last %},{% endunless %}  {% endfor %}  ,  {% for page in site.pages %}   {     {% if page.title != nil %}        &quot;title&quot;    : &quot;{{ page.title | escape }}&quot;,        &quot;category&quot; : &quot;{{ page.category }}&quot;,        &quot;tags&quot;     : &quot;{{ page.tags | join: &#39;, &#39; }}&quot;,        &quot;url&quot;      : &quot;{{ site.baseurl }}{{ page.url }}&quot;,        &quot;date&quot;     : &quot;{{ page.date }}&quot;,        &quot;content&quot;  : &quot;{{ page.content | strip_html | strip_newlines }}&quot;     {% endif %}   } {% unless forloop.last %},{% endunless %}  {% endfor %}]```## Development- `npm install`- `npm test`#### Acceptance tests```bashcd example; jekyll serve# in another tabnpm run cypress -- run```## ContributorsThanks to all [contributors](https://github.com/christian-fei/Simple-Jekyll-Search/graphs/contributors) over the years! You are the best :)&gt; [@daviddarnes](https://github.com/daviddarnes)[@XhmikosR](https://github.com/XhmikosR)[@PeterDaveHello](https://github.com/PeterDaveHello)[@mikeybeck](https://github.com/mikeybeck)[@egladman](https://github.com/egladman)[@midzer](https://github.com/midzer)[@eduardoboucas](https://github.com/eduardoboucas)[@kremalicious](https://github.com/kremalicious)[@tibotiber](https://github.com/tibotiber)and many others!## Stargazers over time[![Stargazers over time](https://starchart.cc/christian-fei/Simple-Jekyll-Search.svg)](https://starchart.cc/christian-fei/Simple-Jekyll-Search)"

If this doesn’t work when using Github pages you can try jsonify to make sure the content is json compatible:

1
"content": "# [Simple-Jekyll-Search](https://www.npmjs.com/package/simple-jekyll-search)\n\n[![Build Status](https://img.shields.io/travis/christian-fei/Simple-Jekyll-Search/master.svg?)](https://travis-ci.org/christian-fei/Simple-Jekyll-Search)\n[![dependencies Status](https://img.shields.io/david/christian-fei/Simple-Jekyll-Search.svg)](https://david-dm.org/christian-fei/Simple-Jekyll-Search)\n[![devDependencies Status](https://img.shields.io/david/dev/christian-fei/Simple-Jekyll-Search.svg)](https://david-dm.org/christian-fei/Simple-Jekyll-Search?type=dev)\n\nA JavaScript library to add search functionality to any Jekyll blog.\n\n## Use case\n\nYou have a blog, built with Jekyll, and want a **lightweight search functionality** on your blog, purely client-side?\n\n*No server configurations or databases to maintain*.\n\nJust **5 minutes** to have a **fully working searchable blog**.\n\n---\n\n## Installation\n\n### npm\n\n```sh\nnpm install simple-jekyll-search\n```\n\n## Getting started\n\n### Create `search.json`\n\nPlace the following code in a file called `search.json` in the **root** of your Jekyll blog. (You can also get a copy [from here](/example/search.json))\n\nThis file will be used as a small data source to perform the searches on the client side:\n\n```yaml\n---\nlayout: none\n---\n[\n  {% for post in site.posts %}\n    {\n      \"title\"    : \"{{ post.title | escape }}\",\n      \"category\" : \"{{ post.category }}\",\n      \"tags\"     : \"{{ post.tags | join: ', ' }}\",\n      \"url\"      : \"{{ site.baseurl }}{{ post.url }}\",\n      \"date\"     : \"{{ post.date }}\"\n    } {% unless forloop.last %},{% endunless %}\n  {% endfor %}\n]\n```\n\n\n## Preparing the plugin\n\n### Add DOM elements\n\nSimpleJekyllSearch needs two `DOM` elements to work:\n\n- a search input field\n- a result container to display the results\n\n#### Give me the code\n\nHere is the code you can use with the default configuration:\n\nYou need to place the following code within the layout where you want the search to appear. (See the configuration section below to customize it)\n\nFor example in  **_layouts/default.html**:\n\n```html\n<!-- HTML elements for search -->\n<input type=\"text\" id=\"search-input\" placeholder=\"Search blog posts..\">\n<ul id=\"results-container\"></ul>\n\n<!-- or without installing anything -->\n<script src=\"https://unpkg.com/simple-jekyll-search@latest/dest/simple-jekyll-search.min.js\"></script>\n```\n\n\n## Usage\n\nCustomize SimpleJekyllSearch by passing in your configuration options:\n\n```js\nvar sjs = SimpleJekyllSearch({\n  searchInput: document.getElementById('search-input'),\n  resultsContainer: document.getElementById('results-container'),\n  json: '/search.json'\n})\n```\n\n### returns { search }\n\nA new instance of SimpleJekyllSearch returns an object, with the only property `search`.\n\n`search` is a function used to simulate a user input and display the matching results. \n\nE.g.:\n\n```js\nvar sjs = SimpleJekyllSearch({ ...options })\nsjs.search('Hello')\n```\n\n💡 it can be used to filter posts by tags or categories!\n\n## Options\n\nHere is a list of the available options, usage questions, troubleshooting & guides.\n\n### searchInput (Element) [required]\n\nThe input element on which the plugin should listen for keyboard event and trigger the searching and rendering for articles.\n\n\n### resultsContainer (Element) [required]\n\nThe container element in which the search results should be rendered in. Typically a `<ul>`.\n\n\n### json (String|JSON) [required]\n\nYou can either pass in an URL to the `search.json` file, or the results in form of JSON directly, to save one round trip to get the data.\n\n\n### searchResultTemplate (String) [optional]\n\nThe template of a single rendered search result.\n\nThe templating syntax is very simple: You just enclose the properties you want to replace with curly braces.\n\nE.g.\n\nThe template\n\n```js\nvar sjs = SimpleJekyllSearch({\n  searchInput: document.getElementById('search-input'),\n  resultsContainer: document.getElementById('results-container'),\n  json: '/search.json',\n  searchResultTemplate: '<li><a href=\"{{ site.url }}{url}\">{title}</a></li>'\n})\n```\n\nwill render to the following\n\n```html\n<li><a href=\"/jekyll/update/2014/11/01/welcome-to-jekyll.html\">Welcome to Jekyll!</a></li>\n```\n\nIf the `search.json` contains this data\n\n```json\n[\n    {\n      \"title\"    : \"Welcome to Jekyll!\",\n      \"category\" : \"\",\n      \"tags\"     : \"\",\n      \"url\"      : \"/jekyll/update/2014/11/01/welcome-to-jekyll.html\",\n      \"date\"     : \"2014-11-01 21:07:22 +0100\"\n    }\n]\n```\n\n\n### templateMiddleware (Function) [optional]\n\nA function that will be called whenever a match in the template is found.\n\nIt gets passed the current property name, property value, and the template.\n\nIf the function returns a non-undefined value, it gets replaced in the template.\n\nThis can be potentially useful for manipulating URLs etc.\n\nExample:\n\n```js\nSimpleJekyllSearch({\n  ...\n  templateMiddleware: function(prop, value, template) {\n    if (prop === 'bar') {\n      return value.replace(/^\\//, '')\n    }\n  }\n  ...\n})\n```\n\nSee the [tests](https://github.com/christian-fei/Simple-Jekyll-Search/blob/master/tests/Templater.test.js) for an in-depth code example\n\n### sortMiddleware (Function) [optional]\n\nA function that will be used to sort the filtered results.\n\nIt can be used for example to group the sections together.\n\nExample:\n\n```js\nSimpleJekyllSearch({\n  ...\n  sortMiddleware: function(a, b) {\n    var astr = String(a.section) + \"-\" + String(a.caption);\n    var bstr = String(b.section) + \"-\" + String(b.caption);\n    return astr.localeCompare(bstr)\n  }\n  ...\n})\n```\n\n### noResultsText (String) [optional]\n\nThe HTML that will be shown if the query didn't match anything.\n\n\n### limit (Number) [optional]\n\nYou can limit the number of posts rendered on the page.\n\n\n### fuzzy (Boolean) [optional]\n\nEnable fuzzy search to allow less restrictive matching.\n\n### exclude (Array) [optional]\n\nPass in a list of terms you want to exclude (terms will be matched against a regex, so URLs, words are allowed).\n\n### success (Function) [optional]\n\nA function called once the data has been loaded.\n\n### debounceTime (Number) [optional]\n\nLimit how many times the search function can be executed over the given time window. This is especially useful to improve the user experience when searching over a large dataset (either with rare terms or because the number of posts to display is large). If no `debounceTime` (milliseconds) is provided a search will be triggered on each keystroke.\n\n---\n\n## If search isn't working due to invalid JSON\n\n- There is a filter plugin in the _plugins folder which should remove most characters that cause invalid JSON. To use it, add the simple_search_filter.rb file to your _plugins folder, and use `remove_chars` as a filter.\n\nFor example: in search.json, replace\n\n```json\n\"content\": \"{{ page.content | strip_html | strip_newlines }}\"\n```\n\nwith\n\n```json\n\"content\": \"{{ page.content | strip_html | strip_newlines | remove_chars | escape }}\"\n```\n\nIf this doesn't work when using Github pages you can try `jsonify` to make sure the content is json compatible:\n\n```js\n\"content\": {{ page.content | jsonify }}\n```\n\n**Note: you don't need to use quotes `\"` in this since `jsonify` automatically inserts them.**\n\n\n## Enabling full-text search\n\nReplace `search.json` with the following code:\n\n```yaml\n---\nlayout: none\n---\n[\n  {% for post in site.posts %}\n    {\n      \"title\"    : \"{{ post.title | escape }}\",\n      \"category\" : \"{{ post.category }}\",\n      \"tags\"     : \"{{ post.tags | join: ', ' }}\",\n      \"url\"      : \"{{ site.baseurl }}{{ post.url }}\",\n      \"date\"     : \"{{ post.date }}\",\n      \"content\"  : \"{{ post.content | strip_html | strip_newlines }}\"\n    } {% unless forloop.last %},{% endunless %}\n  {% endfor %}\n  ,\n  {% for page in site.pages %}\n   {\n     {% if page.title != nil %}\n        \"title\"    : \"{{ page.title | escape }}\",\n        \"category\" : \"{{ page.category }}\",\n        \"tags\"     : \"{{ page.tags | join: ', ' }}\",\n        \"url\"      : \"{{ site.baseurl }}{{ page.url }}\",\n        \"date\"     : \"{{ page.date }}\",\n        \"content\"  : \"{{ page.content | strip_html | strip_newlines }}\"\n     {% endif %}\n   } {% unless forloop.last %},{% endunless %}\n  {% endfor %}\n]\n```\n\n\n\n## Development\n\n- `npm install`\n- `npm test`\n\n#### Acceptance tests\n\n```bash\ncd example; jekyll serve\n\n# in another tab\n\nnpm run cypress -- run\n```\n\n## Contributors\n\nThanks to all [contributors](https://github.com/christian-fei/Simple-Jekyll-Search/graphs/contributors) over the years! You are the best :)\n\n> [@daviddarnes](https://github.com/daviddarnes)\n[@XhmikosR](https://github.com/XhmikosR)\n[@PeterDaveHello](https://github.com/PeterDaveHello)\n[@mikeybeck](https://github.com/mikeybeck)\n[@egladman](https://github.com/egladman)\n[@midzer](https://github.com/midzer)\n[@eduardoboucas](https://github.com/eduardoboucas)\n[@kremalicious](https://github.com/kremalicious)\n[@tibotiber](https://github.com/tibotiber)\nand many others!\n\n## Stargazers over time\n\n[![Stargazers over time](https://starchart.cc/christian-fei/Simple-Jekyll-Search.svg)](https://starchart.cc/christian-fei/Simple-Jekyll-Search)\n"

Note: you don’t need to use quotes " in this since jsonify automatically inserts them.

Replace search.json with the following code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
---
layout: none
---
[
  
    {
      "title"    : "Jekyll Doc Theme is published!",
      "category" : "",
      "tags"     : "",
      "url"      : "/blog/2017/05/03/jekyll-doc-theme/",
      "date"     : "2017-05-03 00:00:00 -0600",
      "content"  : "A new custom Jekyll theme for documentation and blogging is out. It is ideal for Open Source Software projects to publish under GitHub Pages.Your contribution is welcome!"
    } ,
  
    {
      "title"    : "Welcome to Jekyll!",
      "category" : "",
      "tags"     : "",
      "url"      : "/blog/2017/02/01/welcome-to-jekyll/",
      "date"     : "2017-02-01 02:41:09 -0700",
      "content"  : "You’ll find this post in your _posts directory. Go ahead and edit it and re-build the site to see your changes. You can rebuild the site in many different ways, but the most common way is to run jekyll serve, which launches a web server and auto-regenerates your site when a file is updated.To add new posts, simply add a file in the _posts directory that follows the convention YYYY-MM-DD-name-of-post.ext and includes the necessary front matter. Take a look at the source for this post to get an idea about how it works.Jekyll also offers powerful support for code snippets:def print_hi(name)  puts "Hi, #{name}"endprint_hi('Tom')#=&gt; prints 'Hi, Tom' to STDOUT.Check out the Jekyll docs for more info on how to get the most out of Jekyll. File all bugs/feature requests at Jekyll’s GitHub repo. If you have questions, you can ask them on Jekyll’s dedicated Help repository."
    } 
  
  ,
  
   {
     
   } ,
  
   {
     
        "title"    : "SSL (Security) Certificate Renewal",
        "category" : "",
        "tags"     : "",
        "url"      : "/docs/SSL-cert/",
        "date"     : "",
        "content"  : "SSL (Secure Sockets Layer) is the secure protocol that websites use to validate themselves to users and secure user data. Secure sites must display an SSL certificate, obtained through a CSR (Certificate Signing Request), to modern browsers to demonstrate their security status. SSL certificates must be periodically renewed in order to maintain the site’s security protocol (which enables the https site); at present, the longest certificate period available is one calendar year.The RC site uses an affordable service called Comodo to furnish its SLL certificate once a year, though generally we purchase several years’ worth of renewals at a time. RC technical / assistant editors must go through the process of renewing these certificates once a year (currently, in mid-December).This guide will walk you through the process:  When the SSL certificate is due for renewal, you (or a general editor) should recieve an e-mail (likely in late November). Log in to the Comodo site using the appropriate credentials (the general editors can provide them).Take any necessary steps to execute certificate renewal through Comodo’s CertPanel (accessed via the MyOrders panel). If a paid extension is required, contact a general editor for payment.  If a new CSR (Certificate Signing Request) is needed, generate one in Acquia Cloud by navigating to Prod / SSL / Generate CSR. This will generate a “Personal Key” string that you’ll upload to Comodo / CertPanel once the renewal transaction or process is complete.  Once the certificate is (re)issued, its status in CertPanel may say “Pending.” If so, you’ll need to re-validate your security status (i.e., prove that you have secure access to the site’s backend). Click on the “Pending” icon to open validation options.  Currently there is no “admin@romantic-circles.org” e-mail, which Comodo wants to use as the default validation. Change the validation/verification method to “http file upload.”  This should generate a new validation interface that will let you download a text file for verification. Download it.  Make sure your local git repository for the dev site is synced to the origin (“git pull”) and that you’re on a local branch that could be deployed to production.  In your local repo, navigate to: sites/devdesktop/romanticcircles-dev/docroot/.well- known/pki-validation/ (if you do not see the hidden folder “.well-known,” press SHIFT+COMMAND+[period key] to show all files). Copy the text (.txt) file you downloaded, without altering it, into this location (in the pki-validation folder).  This repository change will show up in your Git GUI (e.g., GitHub Desktop, GitKraken), if you’re using one. Commit the change and push it up to the Dev environment.  In Acquia Cloud Platform, you will see this commit in the task log on the Environments page. Once you do, deploy the dev code to the prod environment.  Once the code has deployed, return to the Comodo CertPanel tool. Click on the “search for file” validation button. If this succeeds, you’ll see a black screen with the secure text string. The CertPanel should now show “Validation Status: Valid.”  You’ll now have the option to download the certificate files from the bottom of the page. Do so. This downloads a zip file; once you unzip it, you’ll see several folders. All you need is the “Plain Text Files” folder.  Return to Acquia Cloud Platform. From the SSL page (under “Prod”), scroll to the “Certificate Signing Requests” section. Click on “Install” next to the CSR you just generated.  This will bring up a page with 3 fields. Your CSR “Private Key” should automatically appear in the middle field if this is a new certificate; if you see it, move on. If the field is blank, you’ve likely renewed an existing certificate, and you’ll need to pull the Private Key from the certificate being renewed. Click on the three-dot menu next to the old cert at the bottom of the page and select “View,” then copy ALL text in the “RSA Private Key” field after you click “Show.”  From the Comodo certificate “Plain Text” folder, cut and paste ALL of the text in the “romantic-circles_org.txt” file into the top “SSL Certificate” field. Then cut and paste ALL of the text in the “CA bundle.txt” file into the bottom “CA Intermediate Certificates” field.  Click “Install” at the bottom of the page. Once the certificate is successfully installed, you must activate it. Simply click “Activate” next to the new certificate on the SSL dashboard. Any older certificates will be automatically deactivated (and can be deleted).Congrats: You’re done! To confirm the certificates are working, visit both https://romantic-circles.org and https://www.romantic-circles.org."
     
   } ,
  
   {
     
        "title"    : "About",
        "category" : "",
        "tags"     : "",
        "url"      : "/about/",
        "date"     : "",
        "content"  : "This is the base Jekyll theme. You can find out more info about customizing your Jekyll theme, as well as basic Jekyll usage documentation at jekyllrb.comYou can find the source code for Minima at GitHub:jekyll /minimaYou can find the source code for Jekyll at GitHub:jekyll /jekyll"
     
   } ,
  
   {
     
        "title"    : "Returning Copyedits &amp; Accepting Changes",
        "category" : "",
        "tags"     : "",
        "url"      : "/docs/accepting-changes/",
        "date"     : "",
        "content"  : "Once all essays within a volume have been copyedited, they should be sent back to the volume editor, who will distribute the essays to the contributors for review. It’s never a bad idea to review all your comments for tone/clarity before sending the documents back to the authors.Clear communication is important through the review process to ensure the authors only review your changes and don’t continue tinkering with their prose (which would, of course, necessitate a fresh copyedit). Use the following template to facilitate your return of the essay.Boilerplate for Returning Copyedits to Volume EditorsDear [volume editor(s)],Attached you’ll find the copy edits of all eight essays in your forthcoming volume with Romantic Circles, [INSERT TITLE]. At your earliest convenience, please pass these edited essays to your contributors for their approval. To keep everything on schedule, we’re requesting that all edits be approved and these documents returned by [INSERT DATE]. Here are a few guidelines and considerations to pass along:  I’ve attached a PDF of the RC house style to this e-mail [or link to Contributor Resources / RC House Style]. Specific editorial decisions are outlined here, so please provide this document to each author along with their edited essay.  All edits have been marked using MS Word’s “Track Changes” function. Please leave this function switched on. Authors should feel free to enforce suggested edits, leave comments, etc., but they should not “accept” any changes. Upon our re-receipt of the files, RC technical editors will treat all remaining changes in the document as approved (if there are no comments to the contrary) and will “accept” all changes.  If an author wishes to reject a revision or suggestion, they should leave a comment rather than removing (“rejecting”) the edit from Track Changes.  The attached copy edits are for final production. We cannot accommodate substantive edits or changes beyond those requested by the copyeditor(s).  We ask that all responses/edits be finalized by [INSERT DATE]. Each author should return their essay to the volume editor, and the editor will pass them back to me. To prevent lost files, please return all essay files for the volume in a single e-mail to this thread.  After [INSERT DATE], RC will assume all changes have been approved and will begin the TEI encoding process, after which no further changes will be possible.  After the encoding stage, RC technical editors will distribute a link to online proofs of the volume for final approval. This normally occurs 2–4 weeks after our re-receipt of the edited essays.Accepting changesPer RC’s instructions for author review of copyedits, when you receive the essays back, Track Changes should still be turned on and all comments and edits should still appear (i.e., be unresolved). Carefully go through the document, review each author’s responses to your comments, and make the necessary corrections to the essay. Delete each comment as you address it. Once this process is complete, you should be able to “Approve All” changes within the Track Changes toolbar/menu. Once all changes have been resolved and all comments have been deleted (the page size should “shrink” back to its original size when no more changes are marked), you should save the clean copy of each essay as a new file.If, in your review of the document, an author disputes your changes or disputes an edit, review your work. If either decision seems correct, defer to the author. If you feel strongly about your decision—and/or the author’s wishes seem factually, ethically, or academically problematic, you should refer the issue to the volume and section editors. If necessary, the final decision for any editorial decision will be made by the general editors in consultation with the appropriate ection editor(s)."
     
   } ,
  
   {
     
        "title"    : "Acquia Environments  Dev, Stage, Prod + IDE",
        "category" : "",
        "tags"     : "",
        "url"      : "/docs/acquia-env/",
        "date"     : "",
        "content"  : "go."
     
   } ,
  
   {
     
        "title"    : "Acquia + Server Guide",
        "category" : "",
        "tags"     : "",
        "url"      : "/docs/acquia-guide/",
        "date"     : "",
        "content"  : "Acquia is RC’s managed hosting service. You will receive an email invite to create an account to access the Acquia Cloud Platform web application when you begin working with RC. Bookmark this page, as you’ll be logging into Acquia Cloud Platform quite a bit.This section of the handbook is an overview of the server-side jobs, maintenance, and security tasks requisite to running the RC site. Most of the information and tutorials in this “Acquia” section of the technical documentation cover “backend” development and tasks, as opposed to the “frontend” development in the Drupal CMS covered in the previous section.  Throughout this section of the guide, we’ll be dealing with files which standard Mac and PC operating systems will hide by default (“hidden files”). To show hidden files on Mac OS, simply perform the keystroke CMD + SHIFT + . in any Finder window. In Windows, open a File Explorer window, then click the “…” (“more options”) icon in the header bar and select “Options.” In the settings window that opens, click the “View” tab, and under “Files and Folders,” click the “Show hidden files, folders, and drives” static button. (You can also apply this “show all” setting to all folders of the same type using the option at the top of this window.)The LAMP stackWhereas Drupal manages all site content and provides robust tools to sort and display that content (mostly through Views), Drupal itself must have an environment to run in and structures through which to store and retrieve the data it reproduces on content pages and the metadata underneath it. The tech “stack” that Drupal requires to run is commonly referred to as a LAMP stack and is, in many ways, similar to how a piece of software runs on a local machine. The layers of this stack can be represented as follows, where each successive layer of the tech stack depends on the preceding elements in order to function:  Linux OS (Ubuntu, runs on Aquia’s virtual servers [computers])   Apache Web Server (serves https site, web infrastructure)   PHP codebase (the language Drupal is built on)   MySQL database (where Drupal stores all node/field data)   File system (FTP)   Drupal site (with admin UI @ RC login)Thus the “LAMP stack”: Linux / Apache / MySQL / PHP. This section will describe the preceding elements in the terms you need to manage and develop the backend of RC’s Drupal installation, including configuring and updating the relevant software. For more information, see Acquia’s advertised technology stack for Cloud Platform.The final two elements above (FTP, Drupal admin) were covered in the frontend (Drupal) section of this documentation, as were content-related database queries as executed through Drupal Views functionality. This section will cover the remaining elements of the tech stack as they relate to maintaining the functionality of the site—and, vitally, updating its code and dependencies.This all sounds a bit daunting, but the good news is that the server-side Linux distribution (Ubuntu) and Apache are fully managed by Acquia: not only is there no need to tinker with these elements of the stack, but Acquia has removed the switches to do so. They simply keep everything running and up to date for us, and all server configuration options we have control over appear in the Acquia Cloud UI.The bad news is that running the backend of a Drupal installation, with its various modules, dependencies, constant updates, and quirks, can be a bit challenging. Hang in there; we’ll give you all the help we can over the following pages."
     
   } ,
  
   {
     
        "title"    : "Blog",
        "category" : "",
        "tags"     : "",
        "url"      : "/allposts.html",
        "date"     : "",
        "content"  : "            All Posts                     Jekyll Doc Theme is published!            on May  3, 2017  by aksakalli                                    Welcome to Jekyll!            on February  1, 2017  by Jekyll                    "
     
   } ,
  
   {
     
        "title"    : "Bootstrap Features",
        "category" : "",
        "tags"     : "",
        "url"      : "/docs/bootstrap/",
        "date"     : "",
        "content"  : "ButtonsDefaultPrimarySuccessInfoWarningDangerLinkDefaultPrimarySuccessInfoWarningDangerLink  Default        Action    Another action    Something else here        Separated link    Primary        Action    Another action    Something else here        Separated link    Success        Action    Another action    Something else here        Separated link    Info        Action    Another action    Something else here        Separated link    Warning        Action    Another action    Something else here        Separated link  Large buttonDefault buttonSmall buttonMini buttonTypographyEmphasis classesFusce dapibus, tellus ac cursus commodo, tortor mauris nibh.Nullam id dolor id nibh ultricies vehicula ut id elit.Etiam porta sem malesuada magna mollis euismod.Donec ullamcorper nulla non metus auctor fringilla.Duis mollis, est non commodo luctus, nisi erat porttitor ligula.Maecenas sed diam eget risus varius blandit sit amet non magna.Tables            #      Column heading      Column heading      Column heading                  1      Column content      Column content      Column content              2      Column content      Column content      Column content              3      Column content      Column content      Column content              4      Column content      Column content      Column content              5      Column content      Column content      Column content              6      Column content      Column content      Column content              7      Column content      Column content      Column content      Tabs  Home  Profile  Disabled            Dropdown               Action            Another action            Raw denim you probably haven't heard of them jean shorts Austin. Nesciunt tofu stumptown aliqua, retro synth master cleanse. Mustache cliche tempor, williamsburg carles vegan helvetica. Reprehenderit butcher retro keffiyeh dreamcatcher synth. Cosby sweater eu banh mi, qui irure terry richardson ex squid. Aliquip placeat salvia cillum iphone. Seitan aliquip quis cardigan american apparel, butcher voluptate nisi qui.        Food truck fixie locavore, accusamus mcsweeney's marfa nulla single-origin coffee squid. Exercitation +1 labore velit, blog sartorial PBR leggings next level wes anderson artisan four loko farm-to-table craft beer twee. Qui photo booth letterpress, commodo enim craft beer mlkshk aliquip jean shorts ullamco ad vinyl cillum PBR. Homo nostrud organic, assumenda labore aesthetic magna delectus mollit.        Etsy mixtape wayfarers, ethical wes anderson tofu before they sold out mcsweeney's organic lomo retro fanny pack lo-fi farm-to-table readymade. Messenger bag gentrify pitchfork tattooed craft beer, iphone skateboard locavore carles etsy salvia banksy hoodie helvetica. DIY synth PBR banksy irony. Leggings gentrify squid 8-bit cred pitchfork.        Trust fund seitan letterpress, keytar raw denim keffiyeh etsy art party before they sold out master cleanse gluten-free squid scenester freegan cosby sweater. Fanny pack portland seitan DIY, art party locavore wolf cliche high life echo park Austin. Cred vinyl keffiyeh DIY salvia PBR, banh mi before they sold out farm-to-table VHS viral locavore cosby sweater.  LabelsDefaultPrimarySuccessWarningDangerInfoList groups                                                            14 Cras justo odio                                                    2 Dapibus ac facilisis in                                                    1 Morbi leo risus                                                                                                  Cras justo odio                                Dapibus ac facilisis in                                Morbi leo risus                                                                                                    List group item heading                    Donec id elit non mi porta gravida at eget metus. Maecenas sed diam eget risus varius blandit.                                                    List group item heading                    Donec id elit non mi porta gravida at eget metus. Maecenas sed diam eget risus varius blandit.                                        Panels                                                            Basic panel                                                        Panel heading                                    Panel content                                                                            Panel content                                Panel footer                        &lt; &gt;                                                                        Panel primary                                                    Panel content                                                                            Panel success                                                    Panel content                                                                            Panel warning                                                    Panel content                                                                                                    Panel danger                                                    Panel content                                                                            Panel info                                                    Panel content                                        Wells                                        Look, I'm in a well!                                                                Look, I'm in a small well!                                                                Look, I'm in a large well!                        &lt; &gt;            "
     
   } ,
  
   {
     
        "title"    : "Romantic Circles House Style (for copyeditors)",
        "category" : "",
        "tags"     : "",
        "url"      : "/docs/ce-house-style/",
        "date"     : "",
        "content"  : "paste content here."
     
   } ,
  
   {
     
        "title"    : "Copyediting Instructions &amp; Resources",
        "category" : "",
        "tags"     : "",
        "url"      : "/docs/ce-instructions/",
        "date"     : "",
        "content"  : "Once the files have been cleaned up, they must be edited for copy prior to coding. See this section’s main page for an overview of the process and descriptions of the different “levels” of edits you’ll be undertaking.As noted on the previous page, the copyediting process will seem quite slow at first. You’re essentially reading the document several times at once, simultaneously evaluating the correctness of usage, mechanics and sentence structure; the appropriateness, correctness, and ethical use of citations and statements of fact; the consistency across each essay and volume of sources, citations, facts, and specific usages; and finally, the felicity of language, the essay’s organization, the arrangement of sentences/paragraphs, and the coherence of the argument as a whole. The technical and stylistic aspects of copyediting should be prioritized, especially for RC’s purposes, while the substantive aspects of the task—e.g., evaluating the efficacy of an argument as a whole—should have lower priority and take up less of your time. If you notice large issues with an essay’s flow, organization, or overall argument, however, it is appropriate to suggest that an author undertake reorganization or minor rewrites to fix the issue. If an essay seems to you to contain major academic or ethical missteps (if, e.g., an author appears to use the legacy of a contemporary black feminist poet to launder the reputation of a dead British poet), you should bring the issue directly to the general editors for their review.The following sections offer guidance and specific tips on how to successfully wade into the copyediting process.Track Changes and CommentsThe track changes function in MS Word should remain on throughout the copyediting process, with the exception of formatting corrections that can be made silently (as outlined in the Document Preparation Guide: enforcing correct spacing and dash use, making formatting consistent, etc.). Because all your changes will be tracked, the author will be able to identify all relevant changes in order to approve or challenge your edits. When there is more at stake than a simple correction, you should also employ MS Word’s comment function, which allows you to select text and leave a comment at that location (select text and then click “New Comment” on the Review tab).It takes experience to feel out when it is best to enforce edits within the running text vs. when it is more appropriate to leave a comment suggesting a correction, rewording, etc. As a rule of thumb, enforce changes directly to the text when something is amiss and a clear solution is possible, whether it be a misplaced comma, a comma splice, or a dangling modifier. Leave a comment when you’re suggesting changes for clarity or when a course of action is unclear. The more specific you can be in your comments, the better; it is best to make specific suggestions and to include a sample of rewritten words/phrases/sentences in the comment itself. For specific advice, see the guidelines on comments and queries. You may also find it helpful to study the provided examples of completed copyedits in the “DOCUMENTATION” folder of the RC production sync drive.RC House StyleLike any academic (or ac-adjacent) publisher, RC has developed a coherent house style that outlines various editorial and formatting conventions to be followed across the sections of the RC site. The RC House Style document can be found in the RC Production Sync shared drive at DOCUMENTATION / STYLE. This document should be consulted and, if appropriate, updated throughout the copyediting of each volume.Note that the House Style document consists of two parts:  the style document proper, which is prescriptive;  and the “Spelling / Formatting Guide,” which is meant to be adaptive.Do not edit the former without consulting the general editors and other RC editors; the latter, however, should be consulted and then, if necessary, updated whenever you encounter a singular usage or formatting case in the copyediting process. You’ll record individual style decisions here that both the RC House Style and the Chicago Manual of Style are silent or ambiguous on, and future copyeditors will consult this document and follow your lead for the sake of consistency across the site.MLA and CMOSAt present, RC uses both the Modern Language Association (MLA) Handbook and the Chicago Manual of Style (CMOS) as our style guides. In short, the MLA issues citation guidelines for writers of research papers, while CMOS goes further to also include publishing, usage, and specific formatting guidelines.RC Editions uses Chicago style in all matters, including notes and bibliography citation practice instead of parenthetical citation. Praxis and Pedagogies essays follow MLA citation style—parenthetical citation and Works Cited but defer to Chicago in all other matters of style and formatting. RC Unbound does not generally include citations, but the short essays should be edited to conform to Chicago’s guidelines.When the RC House Style conflicts with these style guides, follow the House Style. If you encounter a conflict between MLA and CMOS—or any other issue that is not covered explicitly by either style guide or the House Style—you should add a bullet point to the appropriate section of the House Style document to enforce a decision (again, to enforce consistency across future RC materials)."
     
   } ,
  
   {
     
        "title"    : "Markdown Cheatsheet",
        "category" : "",
        "tags"     : "",
        "url"      : "/docs/cheatsheet/",
        "date"     : "",
        "content"  : "From adam-p/markdown-hereTable of ContentsHeadersEmphasisListsLinksImagesCode and Syntax HighlightingTablesBlockquotesInline HTMLHorizontal RuleLine BreaksYoutube videosHeaders# H1## H2### H3#### H4##### H5###### H6Alternatively, for H1 and H2, an underline-ish style:Alt-H1======Alt-H2------H1H2H3H4H5H6Alternatively, for H1 and H2, an underline-ish style:Alt-H1Alt-H2EmphasisEmphasis, aka italics, with *asterisks* or _underscores_.Strong emphasis, aka bold, with **asterisks** or __underscores__.Combined emphasis with **asterisks and _underscores_**.Strikethrough uses two tildes. ~~Scratch this.~~Emphasis, aka italics, with asterisks or underscores.Strong emphasis, aka bold, with asterisks or underscores.Combined emphasis with asterisks and underscores.Strikethrough uses two tildes. Scratch this.Lists(In this example, leading and trailing spaces are shown with with dots: ⋅)1. First ordered list item2. Another item⋅⋅* Unordered sub-list.1. Actual numbers don't matter, just that it's a number⋅⋅1. Ordered sub-list4. And another item.⋅⋅⋅You can have properly indented paragraphs within list items. Notice the blank line above, and the leading spaces (at least one, but we'll use three here to also align the raw Markdown).⋅⋅⋅To have a line break without a paragraph, you will need to use two trailing spaces.⋅⋅⋅⋅⋅Note that this line is separate, but within the same paragraph.⋅⋅⋅⋅⋅(This is contrary to the typical GFM line break behaviour, where trailing spaces are not required.)* Unordered list can use asterisks- Or minuses+ Or pluses  First ordered list item  Another item          Unordered sub-list.        Actual numbers don’t matter, just that it’s a number  Ordered sub-list      And another item.    You can have properly indented paragraphs within list items. Notice the blank line above, and the leading spaces (at least one, but we’ll use three here to also align the raw Markdown).    To have a line break without a paragraph, you will need to use two trailing spaces.Note that this line is separate, but within the same paragraph.(This is contrary to the typical GFM line break behaviour, where trailing spaces are not required.)    Unordered list can use asterisks  Or minuses  Or plusesLinksThere are two ways to create links.[I'm an inline-style link](https://www.google.com)[I'm an inline-style link with title](https://www.google.com "Google's Homepage")[I'm a reference-style link][Arbitrary case-insensitive reference text][I'm a relative reference to a repository file](../blob/master/LICENSE)[You can use numbers for reference-style link definitions][1]Or leave it empty and use the [link text itself].URLs and URLs in angle brackets will automatically get turned into links.http://www.example.com or &lt;http://www.example.com&gt; and sometimesexample.com (but not on Github, for example).Some text to show that the reference links can follow later.[arbitrary case-insensitive reference text]: https://www.mozilla.org[1]: http://slashdot.org[link text itself]: http://www.reddit.comI’m an inline-style linkI’m an inline-style link with titleI’m a reference-style linkI’m a relative reference to a repository fileYou can use numbers for reference-style link definitionsOr leave it empty and use the link text itself.URLs and URLs in angle brackets will automatically get turned into links.http://www.example.com or http://www.example.com and sometimesexample.com (but not on Github, for example).Some text to show that the reference links can follow later.ImagesHere's our logo (hover to see the title text):Inline-style:![alt text](https://github.com/adam-p/markdown-here/raw/master/src/common/images/icon48.png "Logo Title Text 1")Reference-style:![alt text][logo][logo]: https://github.com/adam-p/markdown-here/raw/master/src/common/images/icon48.png "Logo Title Text 2"Here’s our logo (hover to see the title text):Inline-style:Reference-style:Code and Syntax HighlightingCode blocks are part of the Markdown spec, but syntax highlighting isn’t. However, many renderers – like Github’s and Markdown Here – support syntax highlighting. Which languages are supported and how those language names should be written will vary from renderer to renderer. Markdown Here supports highlighting for dozens of languages (and not-really-languages, like diffs and HTTP headers); to see the complete list, and how to write the language names, see the highlight.js demo page.Inline `code` has `back-ticks around` it.Inline code has back-ticks around it.Blocks of code are either fenced by lines with three back-ticks ```, or are indented with four spaces. I recommend only using the fenced code blocks – they’re easier and only they support syntax highlighting.```javascriptvar s = "JavaScript syntax highlighting";alert(s);``````pythons = "Python syntax highlighting"print s``````No language indicated, so no syntax highlighting.But let's throw in a &lt;b&gt;tag&lt;/b&gt;.```12var s = "JavaScript syntax highlighting";alert(s);12s = "Python syntax highlighting"print s12No language indicated, so no syntax highlighting in Markdown Here (varies on Github).But let's throw in a &lt;b&gt;tag&lt;/b&gt;.TablesTables aren’t part of the core Markdown spec, but they are part of GFM and Markdown Here supports them. They are an easy way of adding tables to your email – a task that would otherwise require copy-pasting from another application.Colons can be used to align columns.| Tables        | Are           | Cool  || ------------- |:-------------:| -----:|| col 3 is      | right-aligned | $1600 || col 2 is      | centered      |   $12 || zebra stripes | are neat      |    $1 |There must be at least 3 dashes separating each header cell.The outer pipes (|) are optional, and you don't need to make theraw Markdown line up prettily. You can also use inline Markdown.Markdown | Less | Pretty--- | --- | ---*Still* | `renders` | **nicely**1 | 2 | 3Colons can be used to align columns.            Tables      Are      Cool                  col 3 is      right-aligned      $1600              col 2 is      centered      $12              zebra stripes      are neat      $1                  There must be at least 3 dashes separating each header cell. The outer pipes (      ) are optional, and you don’t need to make the raw Markdown line up prettily. You can also use inline Markdown.                  Markdown      Less      Pretty                  Still      renders      nicely              1      2      3      Blockquotes&gt; Blockquotes are very handy in email to emulate reply text.&gt; This line is part of the same quote.Quote break.&gt; This is a very long line that will still be quoted properly when it wraps. Oh boy let's keep writing to make sure this is long enough to actually wrap for everyone. Oh, you can *put* **Markdown** into a blockquote.  Blockquotes are very handy in email to emulate reply text.This line is part of the same quote.Quote break.  This is a very long line that will still be quoted properly when it wraps. Oh boy let’s keep writing to make sure this is long enough to actually wrap for everyone. Oh, you can put Markdown into a blockquote.Inline HTMLYou can also use raw HTML in your Markdown, and it’ll mostly work pretty well.&lt;dl&gt;  &lt;dt&gt;Definition list&lt;/dt&gt;  &lt;dd&gt;Is something people use sometimes.&lt;/dd&gt;  &lt;dt&gt;Markdown in HTML&lt;/dt&gt;  &lt;dd&gt;Does *not* work **very** well. Use HTML &lt;em&gt;tags&lt;/em&gt;.&lt;/dd&gt;&lt;/dl&gt;  Definition list  Is something people use sometimes.  Markdown in HTML  Does *not* work **very** well. Use HTML tags.Horizontal Rule12345678910111213Three or more...---Hyphens***Asterisks___UnderscoresThree or more…HyphensAsterisksUnderscoresLine BreaksMy basic recommendation for learning how line breaks work is to experiment and discover – hit &lt;Enter&gt; once (i.e., insert one newline), then hit it twice (i.e., insert two newlines), see what happens. You’ll soon learn to get what you want. “Markdown Toggle” is your friend.Here are some things to try out:123456Here's a line for us to start with.This line is separated from the one above by two newlines, so it will be a *separate paragraph*.This line is also a separate paragraph, but...This line is only separated by a single newline, so it's a separate line in the *same paragraph*.Here’s a line for us to start with.This line is separated from the one above by two newlines, so it will be a separate paragraph.This line is also begins a separate paragraph, but…This line is only separated by a single newline, so it’s a separate line in the same paragraph.(Technical note: Markdown Here uses GFM line breaks, so there’s no need to use MD’s two-space line breaks.)Youtube videosThey can’t be added directly but you can add an image with a link to the video like this:&lt;a href="http://www.youtube.com/watch?feature=player_embedded&amp;v=YOUTUBE_VIDEO_ID_HERE" target="_blank"&gt;&lt;img src="http://img.youtube.com/vi/YOUTUBE_VIDEO_ID_HERE/0.jpg"alt="IMAGE ALT TEXT HERE" width="240" height="180" border="10" /&gt;&lt;/a&gt;Or, in pure Markdown, but losing the image sizing and border:[![IMAGE ALT TEXT HERE](http://img.youtube.com/vi/YOUTUBE_VIDEO_ID_HERE/0.jpg)](http://www.youtube.com/watch?v=YOUTUBE_VIDEO_ID_HERE)Referencing a bug by #bugID in your git commit links it to the slip. For example #1.License: CC-BY"
     
   } ,
  
   {
     
        "title"    : "Codebase, Database, Filebase",
        "category" : "",
        "tags"     : "",
        "url"      : "/docs/code-data-file/",
        "date"     : "",
        "content"  : "go."
     
   } ,
  
   {
     
        "title"    : "Communication &amp; DH Resources",
        "category" : "",
        "tags"     : "",
        "url"      : "/docs/comms-resources/",
        "date"     : "",
        "content"  : "In general, if you have a question or problem with the site or production process you can reach out via Slack to one of the RC assistant/technical editors. If the site managers can’t immediately resolve the issue, or if they deem that it needs to be taken to a section or general editor, they will contact the appropriate editor/admin on your behalf.The following links will aid you in your self-directed learning process. As you start to navigate your way through RC’s infrastructure and to learn the many skills needed to manage the site (described in detail the following Production Documentation section), you’re going to be consulting various resources on the web to figure stuff out. Usually doing a web search for an issue (often in the form of a specific error message) will get you answers. But sometimes it seems like there’s no bottom to what’s happening in the Digital Humanities, much less the wider programming community. Here are some resources that have proved useful to others who have come before you.Coding / web resources  Drupal home  Drupal First-time User Guide  Drupal Module project  Text Encoding Initiative (TEI) site, with guidelines  Acquia Cloud Platform          Acquia Product Documentation / Tutorials (see esp. “Cloud Platform,” “Dev Desktop,” “Resources,” and “Support”)        w3schools.com  guides and tutorials for learning and practicing the various coding languages you’ll encounter working with RC: HTML, CSS, XML, XSLT, PHP, etc.  HackerRank  web development and coding modules, practice problems, certifications  Oxygen XML tutorial  StackOverflow  online community of coders and problem solvers; if you have an issue, Google the error message and you’ll likely find a solution here  freeCodeCamp  online coding community with resources, tutorials, and help  TEIGarage TEI conversion  converts common text formats to XML  GitHub  RC’s GitHub ReposCopyediting, proofing, and digital publishing resources:  MLA Formatting and Style Guide @ Purdue OWL  The Chicago Manual of Style (CMOS) Online          Access through your CU or UMD library online account        “How to Hire &amp; Work with an Academic Copyeditor” by Wendy Laura Belcher  an excellent and informative article that serves as an introduction to copyediting and discusses its professional dimensions (i.e., future applications) as well.  Info on Galley Proofs and the author’s role in proofing before publicationMore Digital Humanities initiatives and resources:  National Endowment for the Humanities, Office of Digital Humanities  Digital Humanities Now  Digital Humanities Summer Institute (DHSI)  DH Commons (mostly collects academic/conference opportunities)  HASTAC (Humanities, Arts, Science, and Technology Alliance)  Text Encoding Initiative (TEI)  ArcGIS /OpenStreetMap (GIS mapping)  List of DH GIS projects by Anterotesis  StoryMapJS (map-based storytelling, frame by frame)  TimelineJS (plug-&amp;-play timeline builder)  RAWGraphs (data visualization from CSV files)  Twine (tool for interactive, nonlinear storytelling that can get as complex as you want it to)  p5.js (JavaScript library for creative coding / research-creation)  Omeka (digital collections/exhibit web publishing platform)  Voyant (visualize patterns in a corpus of text)  DH Tools list by MIT (more advanced resources, text/data mining, etc.)"
     
   } ,
  
   {
     
        "title"    : "Composer  Updating &amp; Maintaining the Site",
        "category" : "",
        "tags"     : "",
        "url"      : "/docs/composer/",
        "date"     : "",
        "content"  : "Composer!"
     
   } ,
  
   {
     
        "title"    : "RC Copyediting Guide",
        "category" : "",
        "tags"     : "",
        "url"      : "/docs/copy-editing-guide/",
        "date"     : "",
        "content"  : "Copyediting is the task of correcting an article or manuscript as the first step in the production process. Once a manuscript (volume, article, edition, etc.) is accepted for publication at Romantic Circles, the relevant section editor will gather all necessary documents and forward them to the RC general editors, who will then review and forward these files to the RC technical editors, who will place them in the file production system for copyediting.The copyediting process includes all four “kinds” of copyediting:  Technical editing, which involves correcting simple and complex errors of grammar and usage, as well as identifying and correcting errors of fact, quotation, and attribution;  Style editing, which involves standardizing formatting, documentation, citation, elements of writing style and usage, etc., across the manuscript (or volume);  Correlation editing, which involves ensuring that citations, statements of fact, descriptions, cross-references, names, titles, etc., are consistent and accurate across individual essays, the entire volume being copyedited, and (as much as possible) across the RC site; and  Substantive editing, which involves correcting content issues within a manuscript, including rearranging or recasting sentences/paragraphs for clarity, identifying and removing repeated sentences/paragraphs, pointing out possible mis-readings of phrases or potentially offensive/libelous statements, suggesting cuts or elaboration for clarity, evaluating research/citation practices and querying authors for further sourcing, suggesting corrections for impenetrable/illogical arguments, etc.For more information on these types of copyediting, see this article.How much time should this take?As with all tasks at RC, the always rigorous demands of the copyediting process must be evaluated in tension with expected production schedules, personal sanity, contracted work hours, and other considerations. As a general rule, the importance and required attention to the elements of copyediting decreases sequentially from #1 (technical editing) to #4 (substantive editing)—it is most important, in other words, that RC publications contain no clear grammatical or factual errors, so that task should be given the greatest priority, and so on.Seasoned copyeditors report that edits of academic manuscripts should average about 4 pages per hour, with individual projects/essays requiring between a page an hour (for an extremely dense/sloppy manuscript requiring a lot of fact- and cross-checking) to 8 pages an hour (for an extremely clean manuscript). An editor/intern’s first few copyediting projects are likely to be fairly slow, and they should expect this as part of the learning/training process. If you feel that a specific manuscript is egregiously negligent in its preparation, or if you find your copyediting duties far more (or less) time-consuming than the rules of thumb suggested here, don’t hesitate to reach out to a senior technical editor or, if appropriate, a general editor."
     
   } ,
  
   {
     
        "title"    : "Customization",
        "category" : "",
        "tags"     : "",
        "url"      : "/docs/customization/",
        "date"     : "",
        "content"  : "This template uses bootstrap-sass along with bootwatch themes.You can create your own theme by writing your own sass files.Create a new a theme folder like _sass/bootwatch/custom and set your bootwatch variables in _config.yml to custom:1#bootwatch: custom"
     
   } ,
  
   {
     
        "title"    : "MySQL Database",
        "category" : "",
        "tags"     : "",
        "url"      : "/docs/database/",
        "date"     : "",
        "content"  : "About Drupal DatabasesDatabases have data.MySQL + Drupal + AcquiaNot super easy.How to Access and Edit RC DatabasesNote that you’ll need to be running Mac OS to perform the following steps.You’ll need to have the following pre-requisites in place before starting this tutorial:  Establish a connection to Acquia server via SSH;  Download the local MySQL editor Sequel Pro;  Have access to an Acquia Cloud Platform administrator account.For security reasons, Acquia doesn’t allow direct SSH access to the database server; instead, you’ll need to set up local “SSH tunneling,” or port forwarding, to connect your local database application (Sequel Pro) to RC’s remote MySQL instance (database).To begin, you’ll need to set up SSH tunneling between Acquia and your local MySQL server (Sequel Pro). This requires opening the Terminal shell on your Mac. From the root of a terminal instance (default directory upon opening), type:1ssh -i /path/to/id_rsa -f -L 1111:127.0.0.1:3306 username@database.ssh.host-name.com -NWhere “/path/to/id_rsa” is replaced by the path to your local SSH key (the default here will be /Users/your-username/.ssh/id_rsa); “username” is simply “romanticcircles.[env]” (as appropriate: dev, test, or prod); and “database.ssh.host-name.com” is replaced by the database SSH Host address, which is provided by Acquia. This address varies by environment (dev, stage, prod), so be sure to select the correct environment to tunnel into.To find the SSH Host address, log in to Acquia Cloud Platform as an admin. Click on the appropriate environment (dev, stage, or prod) and navigate to the “Databases” page. Click on the database you want to access, and then select the “Settings” tab. Here you’ll see the SSH Host address. We’ll need more info from this page soon, so don’t navigate away!Once you enter the command above into terminal, you should be prompted for your SSH passphrase (which you set up when you created the SSH key; if you didn’t create a passphrase, simply hit “return”). If this process succeeds, congrats!—you’ve successfully configured your machine to tunnel to Acquia’s MySQL server.Now we need to connect Sequel Pro. When you open the app, you’ll be prompted to open a connection. Choose “Standard,” and then enter the required elements as follows:  Name: give this database connection so that you’ll remember it (e.g., “RC-dev-db”)  Host: 127.0.0.1  Username: the MySQL username provided by Acquia Cloud Platform (in Env/Database/Settings, as described above); looks like a random string  Password: the MySQL password provided on the same panel  Database: the name of the database provided on the Settings panel in the “Name” field  Port: 1111Leave “Connect Using SSL” unchecked. If you plan to connect to this database again in the future, click “Add to Favorites,” which will allow Sequel Pro to save the MySQL credentials for a (much) quicker login next time. You’ll still need to repeat the ssh command above every time you log in to “re-open” the tunneling port between your local machine and the Acquia server.Click Connect. Hopefully you’re in!For more detail on this process, read Acquia’s full tutorial."
     
   } ,
  
   {
     
        "title"    : "Web Development Overview",
        "category" : "",
        "tags"     : "",
        "url"      : "/docs/dev-overview/",
        "date"     : "",
        "content"  : "In order to continue publishing on the RC site, the Drupal environment must be maintained. This document provides an overview of this process; specific instructions for individual tasks appear in the “Technical Documentation” later in this guide, with links to the technical guides provided throughout this overview.DrupalRC is built on an open-source content management system (CMS) called Drupal.AcquiaThe Drupal site is hosted by Acquia.Jekyll + GitHub PagesThis documentation site is a static site run on Jekyll / GitHub pages."
     
   } ,
  
   {
     
        "title"    : "Digital Publishing Guide",
        "category" : "",
        "tags"     : "",
        "url"      : "/docs/digital-pub-guide/",
        "date"     : "",
        "content"  : "The following subsections will walk you through the process of publishing a volume to the RC site. We highly recommend you read this intro page in its entirety before diving into attempting to publish a volume, as it will provide a neat overview of the entire publication process.At this point in the production process, you should have:  Concluded the copyediting process, accepted all changes, and cleaned up the volume docs;  Converted the (Word) docs into XML (TEI);  Fully encoded all docs in TEI that validates in OxygenXML;  Transformed each individual TEI file into HTML using RC’s XSLT templates; and  Created, via a second transformation scenario, an XML “corpus” file.Overview of volume publicationThe publication process involves 8 distinct steps, which are covered in detail over this section’s pages. Here’s a brief overview of the process; it’s best to be familiar with its logics before you begin.  Ensure all necessary files are present.          One HTML file for each essay, produced via transformation from TEI (in the TEI GitHub repo);      One XML corpus file for the entire volume, containing all TEI in a single doc (in the TEI GitHub repo);      Any images or other media linked by the volume, including volume TOC page banner (stored in RC’s “production sync” shared Google Drive).        Create the volume Table of Contents and contributor bio pages.          Create contributor pages for any contemporary or historical authors who don’t already have bio pages on the site.      The TOC page should NOT be published until proofing is complete.      If autogeneration of the TOC is not desired for the volume, remove the “TOC block” from the layout builder.        Upload all necessary files to the FTP:          Place all HTML files (but not the corpus file) in the appropriate feeds directory (e.g., /prod/sites/default/files/feeds/praxis/) where the feeds fetcher will search for them.      Place all image/media files in the appropriate directory (whatever was coded into the TEI) in the “Imported” directory, usually following this pattern: /prod/sites/defualt/files/imported/[section]/[volume]/images/        Run the XML/HTML importers from the Drupal UI.          The XML importer will create nodes based on the metadata in your TEI, populating database fields like author, URL alias, etc.      The HTML importer will place the content HTML into each node (essay).        Peruse and clean up imported content.          The importers aren’t perfect; all imported content will need to be checked for formatting, correctness, etc.        Distribute volume proofs to the volume editors.  Make revisions to TEI based on author feedback and repeat steps 1-5 above.          Any outstanding disputes or conversations about content should be resolved with the authors before you re-upload the content to the site, which is a lengthy process.        Publish the content, alert volume editor(s), and distribute an announcement to Romanticist listservs and social media.Note that steps 1-4 don’t necessarily need to be done in the order presented; this is simply the way that has proved, through trial and error, to be most effective. Once you understand the process, it’s time to give it a try."
     
   } ,
  
   {
     
        "title"    : "Preparing Word Files for XML Conversion",
        "category" : "",
        "tags"     : "",
        "url"      : "/docs/docpreparation/",
        "date"     : "",
        "content"  : "Once the copyedited Word files have been returned from author review and all changes have been accepted (as described in the Returning Copyedits &amp; Accepting Changes section), each DOCX file is ready to be converted to XML format, which is the language that TEI uses for document markup. An online conversion tool will generate the XML files, but first it’s a good idea to clean up the Word files.Cleaning Up Word Docs for XML ConversionBefore transforming a word document using TEIGarage, we highly recommend first “cleaning” up the document using the following checklist. These steps will result in an XML doc that is much cleaner and easier to code.  Ensure that all notes are endnotes.  Turn off the “Track Changes” function, remove all comments from the document, and accept any remaining changes. Make sure the margins return to normal (if any tracked changes or comments are present, the right margin will be expanded).  Remove as much formatting as possible from the Word doc, including different fonts and font sizes, centering of heads and/or excerpts, colors, highlighting, extraneous bolding, etc. In general, the simpler the formatting of the source essay, the easier its conversion to TEI will be.  Remove the hanging indent from all entries in the Bibliography / Works Cited section.  Remove any images from the document itself and create placeholder text for yourself so you will remember to include an html link in that location. (E.g., «*insert figure 1 here, filename [sample].jpg»)  Remove any other elements that have been formatted by word (tables, etc.); it’ll be best to recreate these elements, if needed, in XML once the TEI document has been generated (the auto-conversion process will produce a lot of extraneous code/mess).Converting DOC(X) Files to XMLThe next step in the production process is converting your cleaned up DOC(X) files to XML using an online tool provided by the TEI consortium: TEIGarage. Instructions on running the conversion and next steps can be found in the TEI Coding Walkthrough."
     
   } ,
  
   {
     
        "title"    : "Drupal Assets (UI-based)",
        "category" : "",
        "tags"     : "",
        "url"      : "/docs/drupal-assets/",
        "date"     : "",
        "content"  : "In web development, “assets” is a catch-all term for backend or file-based components that beautify the frontend experience on the site. On this Jekyll documentation site, for instance, all CSS, JavaScript, fonts, and images are stored in an “assets” directory at the root directory (see this folder in the repo).On the RC Drupal site, assets are also centralized to the greatest degree possible, though not, as you’d imagine, in a single folder. This section will cover two asset “logics” used on RC’s Drupal installation: the Asset Injector module (CSS &amp; JS) and the site’s Bootstrap theming. The following page on Media in Drupal will cover the third element of Drupal asset logics, media files.Asset InjectorsThe contributed Asset Injector Module allows for site CSS stylesheets and JavaScript to be created and edited directly from Drupal’s admin UI. These admin can then configure rules to determine where in the site architecture this code is “injected,” meaning you can customize CSS/JS at a granular page-by-page level, if desired.The Asset Injector interface can be accessed from the admin Configuration menu, under the “Development” section. From here you can select the CSS or JS injector.CSS InjectorThe CSS injector page currently contains 27 separate injectors that add CSS styling to different pages across the RC site ecosystem. Use of these injectors is fairly straightforward: whether you’re editing an existing injector or creating a new one, you’ll simply see a large field to hold the desired CSS, followed by customizable rules for applying this CSS to different content types, themes, taxonomy vocabularies, or even individual pages (by path).  Interestingly, the asset injector module causes all injected CSS (and JS) to be stored in the site’s MySQL database and not, as you might expect, in the code. This means that the site’s injected CSS/JS code is not tracked by the git VCS. We’ve elected to go this route for an easier dev workflow if new CSS needs to be added to the site, as it does from time to time, even in a standard production workflow; but the tradeoff is that the code is not tracked or versioned (and thus any errors cannot be as easily reverted).For a general overview of CSS, see the Language Guide provided in this documentation; a more involved CSS tutorial can be found at W3Schools.JS InjectorThe JS injector works exactly like the CSS injector, but accepts JavaScript to be injected on customizable parts of the site.Since RC tends to use JS sparingly and only for new features, this won’t be a common destination; you shouldn’t need to touch the 4 JS injectors currently on the site, each of which enables a specific dynamic function on the site.BootstrapThe site’s default theme, DXPR (1.x.x), requires Bootstrap (3), which are both contributed themes installed to the site code (docroot/themes/contrib). This functionality is extended to views via the (Views Bootstrap module](https://www.drupal.org/project/views_bootstrap). Bootstrap is a site-wide CSS web development framework that provides adaptive templates for responsive web design (behind the scenes, Bootstrap runs on HTML, CSS, and JavaScript). This makes the site mobile-friendly, as Bootstrap can detect screen width and adjust page display accordingly.Bootstrap CSS classes and JS plugins are available globally on the site and are configurable from the Bootstrap theme page at Appearance / Bootstrap 3 / Settings.(Most) Bootstrap 3 components, classes, and plugins are available for use on the site. Documentation on what components are available and how to use them can be found at Bootstrap.  For an example of hand-coded Bootstrap components on the RC site, see the final “Custom TOC” section of the TOC Creation documentation."
     
   } ,
  
   {
     
        "title"    : "Drupal Components",
        "category" : "",
        "tags"     : "",
        "url"      : "/docs/drupal-components/",
        "date"     : "",
        "content"  : "This page covers some of Drupal’s core and contributed components that provide site functionality, determine the site’s appearance, help organize content and metadata, and so on.ModulesAs noted on previous pages, modules are pieces of software that either ship with Drupal core or are contributed by third-party developers and institutions to extend Drupal’s functionality. The RC site relies on a number of contributed modules (and it is in fact these modules that drive the development of Drupal forward: the now-essential core Views module started as a contributed module). A quick description of a several important contributed modules installed on the site may be useful here, as the functionalities provided by these modules will reappear later in this guide:  Asset Injector: Provides a UI interfact (through “Configuration”) where site CSS and JS can be both edited and targeted to specific parts of the site.  Feeds: A related group of 3 modules that enable the site to import feeds and, vitally, to parse them using XPath. This functionality allows us to import content in large batches, and have XML/HTML tags auto-populate fields on each imported node.  Geofield/Leaflet: enables mapping and map layers.  Colorbox/Ng_lightbox: enables “pop-up” functionality on certain paths, configurable through ng_lightbox.  Layout Builder Styles: allows block-level elements to be formatted using custom CSS; see “Layout Builder” section below.  Google Analytics/Megatag: provides SEO for the site, allowing Google search to index the site and optimizing that indexing.  Pathauto: auto-generates URL aliases for nodes based on configurable patterns.  Views Slideshow: powers the slideshow functionality on the RC homepage.Contributed modules must be installed via Composer (dependency manager) and are stored in the site’s codebase at docroot/modules/contrib. See the Composer documentation for more information on installing and removing modules.ViewsBy far the most important and powerful feature provided by Drupal. So much so that it gets its own page. See using Drupal Views.FeedsFor standard production use of the feeds module, see the Content Import guide in the Production Documentation. For instructions on how to configure a new feed and/or edit an existing feed, see the Drupal Feeds guide that follows.ThemesThemes control the appearance of Drupal and can be found under the admin “Appearance” tab. Two separate themes are active, or set to “Default,” at any time: a standard “front-end” theme, which controls what visitors to the site see, and an “admin” theme, which controls the appearance of the admin UI toolbars and menus.As of Drupal 9.5, the default themes that ship with core are Olivero (front-end) and Claro (admin). The RC rebuild adopted a robust, well-maintained 3rd-party theme, DXPR, which requires another contributed theme, Bootstrap (3), to function. Both contributed themes are updated and maintained through Composer dependencies; for more on Composer and updates, see the Composer documentation. The code for contributed themes can be found in the site’s codebase at docroot/themes/contrib.Layout Builder, Blocks, TemplatesThe Layout Builder, which is a new addition to Drupal core, is a powerful tool to structure content on a page. The Layout Builder allows you to determine how, and vitally where, the fields for each node appear on the page. It also allows you to add elements that aren’t contained in a node’s fields in the form of Blocks and Views.Generally any non-field “Layout” work occurs around the borders of a content page, which will of course display your node (field) content (the exception being the home page and section pages, which are all Layout Builder elements). Elements added “around” node content, which often persists across multiple content pages in the form of a sidebar, etc., are usually Blocks, which is Drupal lingo for a container that holds/presents a definable page element. A block can be configured to display HTML content (such as text or an image), or can even be “filled” using the output from a View. Blocks (or their associated Views) can be edited directly from Layout Builder using the “Configure” option from the contextual link.The functionality of Layout Builder is surprisingly intuitive; the best way to familiarize yourself with its use is to click on the “Layout” admin tab on any page and poke around using Drupal’s contextual links (little “pen” buttons). For a use case tutorial, see the “Custom TOC” section of the TOC guide in the Production Documentation.  For hands-on demo of these components, see a walkthrough for content creation involving the Layout Builder, a Views block, and image style options in the Media &amp; Mapping section of this documentation under the “Image Styles” section.Templates. Layout Builder allows the building of templates that are applied to all new nodes of a certain content type; for example, all new “Praxis Publication” (index) pages default to a template that includes a Block that displays a View to auto-generate that volume’s TOC from the titles of all essay nodes that designate the TOC page’s node number as their “parent volume.” Fortunately, the Template Builder defaults to editing only the page layout at hand. To edit the template for all nodes of a content type, click “Edit the template for all” option that appears when you open Layout Builder (by clicking “Layout” on a node).  We’ve extended through a contributed module to add CSS classes to any layout element; see Layout Builder Styles module documentation. When you configure a Block using Layout Builder, you’ll see style options with selector boxes; each corresponds to a CSS class or classes. To inspect these existing CSS block styles, or to add your own, navigate to Configuration / Layout Builder Styles. In the “CSS Classes” configuration box, you’ll just add the name of a class; you then have to add that class to a CSS injector (Configuration / Asset Injector / CSS) and define it. See the Assets section for using the Asset Injectors. The first image below shows the “Styles” options that appear when you “Configure” a block from the Layout Builder; the second image shows the admin page to configure the styles via a simple CSS class name.TaxonomyDrupal core includes a robust Taxonomy system that manages all metadata fields and tags used across the site (all content types). Navigate to Structure / Taxonomy to access it.The logic here is pretty straightforward:  Vocabularies allow you to sort metadata tags into useful categories, such as “people,” “places,” and “tags”; and  Terms are individual taxonomic entries, corresponding to a name, an idea, etc., whose use, if the term is entered in a node field, can be tracked across the site.Terms that exist in the Taxonomy system will auto-populate by suggestion in relevant fields in the Drupal backend (via Entity Reference). New terms (or vocabularies) can be created, of course, from inside the Taxonomy system.A note about tags. On the D7 site, RC simply allowed authors to generate their own tags (“terms”) for each essay. While practical, this led to vocabulary “sprawl” that essentially made all tags useless since most tags only had one instance on the site. We’re now providing authors with a list of acceptable tags, which can be found under the Contributor Resources below (Tagging Options). Authors/editors can petition to add new tags, but as much as possible they should stick to the list so that tags remain useful."
     
   } ,
  
   {
     
        "title"    : "Drupal Content Logics",
        "category" : "",
        "tags"     : "",
        "url"      : "/docs/drupal-content/",
        "date"     : "",
        "content"  : "Drupal calls any nominal element in its ecosystem an entity; in other words, any individuated thing in the Drupal content ecosystem is an entity. The basic unit of content in Drupal is an entity called a node; the basic entity in the taxonomy system (as metadata/metacontent) is called a term.Individual nodes (i.e., pages) must belong to a specified content type, just as individual terms (i.e., metadata tags) must belong to a specified vocabulary. Each content type or vocabulary, in turn, has specific data and metadata fields assigned to it, meaning each node can take on multiple field values, depending on its content type. All of the above are Drupal entities.All nodes on the site are populated (newest first) and can be sorted/searched on the admin “Content” page discussed in the previous section. All terms are contained in the Taxonomy system, as described on the Drupal components page. This all can be a bit confusing in the abstract, but will begin to make more sense as we look at examples through the rest of this section of the documentation.Content TypesEach major section of the RC site is represented by a distinct content type in the Drupal database; for each content type, some content fields are allowed and others are disabled.To see the RC site’s available content types, log into the admin section of the site and navigate to Structure / Content Types. From here, you can manage the fields available to each existing content type and also, if you wish, create new content types.VocabulariesThe equivalent of a content type in Drupal’s taxonomy system is a vocabulary. Just as a content type holds nodes of that type (with a consistent set of fields by content type; see below), a vocabulary groups and holds taxonomic terms with consistent uses and behaviors on the site. For example, a single vocabulary called “Places” holds and tracks mentions of all place-based metadata on the site. Each vocabulary has default fields for holding simple metadata, but a vocabulary can be configured with custom fields, if desired (at Structure / Taxonomy / Edit or Create Vocabulary / Manage fields).The taxonomy system itself is covered on the following page, Drupal components.FieldsA field is just that: a single data point in the Drupal database. Fields are associated with a specific content type or a taxonomy vocabulary; each content type or vocabulary, then, has its own distinct set of fields that can “hold” content and metadata for a node or term of that content type or in that vocabulary.Practically, a field simply represents a single content element on a page, whether data or metadata, that can be displayed or used by Drupal. A field can hold everything from an essay’s title, to its main body of text, to its original date of publication. All are fields. Any element that is fillable/editable on the Drupal UI’s “Edit” page for a piece of content (node) is a field.Fields can be configured in various ways and can accept different types of input. This ends up being rather intuitive; the best way to understand fields and their various input options is simply to go check out the field types that exist on an existing content type. Here, for example, is a sampling of the fields available to the content type “Editions Article”:It may occasionally be necessary to add a field to a content type to accomplish something you want to do in Drupal (especially when sorting by Views is involved). Here’s a practical example from our development of the new site:  On the Index/”Publication”-level page for each volume, there’s a View that auto-generates the TOC, but these TOCs weren’t always appearing in the correct order. Solution: Add a field to the Praxis and Editions content types called “Index Page Order” that simply accepts a numeric value. This field does not display anywhere as content, but can be used by Views to sort the content in the desired order. Here’s what the field looks like from the “Edit” page of a node of the “Editions Article” content type:NodesThe node is the most basic page-level content unit in Drupal. On the RC site, this means any individual page, article, review, etc. Nodes are populated with content by specific fields, which are controlled by the content type assigned to the node.To create a node, simply navigate to the “Content” tab of the admin UI, and click “Add content.” You’ll be prompted to assign a content type to the new node, and then you’ll be able to fill the fields allowed by that content type.To edit the content (fields) or appearance of a node, simply click the links provided by the Drupal admin UI at the top of each node page:Edit gives you access to edit all the node’s fields, while Layout opens the Layout Builder for the current node. RC doesn’t currently use content revisions, so don’t use the Revisions tab. The View link simply returns you to a view of the content as users will see it. These links also appear as tabs from within these “edit” pages:Upon creation, each node is assigned a node ID by Drupal. This is a unique 6-digit number that identifies this content page and also acts as a URL to access it; each node’s default URL is in the form romantic-circles.org/node/123456. The site’s Pathauto module and feeds importers together generate URL aliases for all content, making the nodes available at the desired RC URL (e.g., romantic-circles/editions/guide_lakes/; see the “URL Alias” field on the “Edit” page of any node to see how this works). Occasionally it may be necessary to manually enter a node ID into an entity reference field (see below on entity references). To see the node ID for any node while logged into the admin UI, simply hover your mouse over the “Edit” tab and look at the bottom-left of your browser window: there’s the default URL, complete with node ID.  Note: Nodes can be “tied together,” and related to other entities, via Drupal’s “entity reference” capability; thus, for example, the “parent” resource of an essay—its home index page, or TOC—is a node, and that node is associated in the Drupal database with each node that “belongs” under it hierarchically (through the “parent resource” field on each article).Taxonomy termsTerms in the taxonomy system are parallel to content nodes, and like nodes they generate their own unique pages on the site. Unlike nodes, however, terms generally act as concepts rather than content: a taxonomy term like “aesthetics,” for example, serves as a tag that can be placed into the “Tag” field of any content node on the site. A term’s page, which can be accessed from the vocabulary that “holds” it in the admin UI (Structure / Taxonomy / List terms (on vocab) / Edit (on term)), will simply display all pages on the site that are also tagged with that term:When a site user clicks on a term’s name anywhere it appears on the site (e.g., on the sidebar of an essay), the site is configured to generate a Colorbox pop-up. (For info on how to configure this behavior, see the Colorbox documentation on the Media &amp; Mapping documentation.)Just as with nodes, Drupal generates a unique ID on the creation of a new term; this is known as the term ID. As before, the best way to find a term ID if you need it is to hover your mouse over the term’s “Edit” link and look to the bottom of your browser window.BlocksIn Drupal, a block is a container that holds/presents a definable page element. A block can be configured to display HTML content (such as text or an image), or can even be “filled” using the output from a View. Blocks are responsible for much of the user-facing design elements on the site, including the site footer, the home banner, and the layout of individual content pages (using Drupal’s Layout Builder; see the Drupal Components documentation).When you’re logged into Drupal’s admin UI, blocks can usually be identified on a page by the contextual links (little pen icons) that appear at the top-right boundary of each block. Here’s an example using the site’s footer:You can also identify and configure blocks easily using the Layout Builder (accessed by clicking the “Layout” tab when editing any page [node]). Here’s what this looks like:To configure a block or, if the block has been manually built into the site using HTML (as is partially the case, for example, with the footer pictured above), just click on the contextual edit link (pen). Then select “Configure”/”Configure block” to reveal the block’s underlying configuration (this is often quite simple, but the Layout Builder Styles module does allow you to set a CSS class or classes on a single block under “Style”  see the Components section for how to configure these styles). In some cases, the easiest way to see the HTML powering a block is to choose “quick edit,” then click the “&lt;&gt; Source” button to reveal the underlying HTML code.  Note: If a block contains the output from a Drupal View, it will have very few configuration options in the “Configure block” dialog, though setting a Layout style on these blocks can be a powerful tool. To see the configuration of the View that is actually generating the content contained in the block, you’ll have to note the name of the view, which is stated in the block name (e.g, “‘Praxis-toc’ views block”), then navigate to Structure / Views menu and click “Edit” to see the construction of the relevant view.Entity ReferencesAs noted at the outset, all of the above content elements are Drupal entities. One of Drupal’s most powerful features is its ability to create relations among its entities: these relations are known as entity references. Essentially, on any content type (or vocabulary), Drupal gives you the option to create fields that reference other content on the site. Perhaps the simplest example of this is a taxonomy reference field: this field will accomplish the “tying together” of all uses of a given taxonomy term on all nodes that hold that term in a reference field. Here’s what the creation of a field that creates an entity reference based on taxonomy terms looks like:Nodes can also reference other nodes. This is how RC hierarchically “groups” a number of essays or pages under a single main volume page (index page/TOC), and also how a given node is “tied” to its author, whose bio, links, etc., exist on a node of a different content type. Here’s what these fields look like from a node’s “Edit” page:Note two unique things about the pictured fields:  There are grey circles at the right-end of the text fields. This signifies that Drupal is expecting a reference to another node/term/entity and will auto-populate available options into the field as you type. This functionality makes creating entity references across different content types way easier.  Once a term populates, Drupal supplies its node or term ID in parentheses. It will do this even when these fields are auto-populated by our feeds importers, meaning the linkages between content on the site should just work. This is rather convenient.  This entity reference functionality powers many of the links generated by views on the site: the ability to click on an author and get a bio, to click on a tag (term) and see its uses across the site, to click on a title in a TOC and get the article. Entity references are invisible, but very powerful."
     
   } ,
  
   {
     
        "title"    : "Feeds Importers + Config",
        "category" : "",
        "tags"     : "",
        "url"      : "/docs/drupal-feeds/",
        "date"     : "",
        "content"  : "RC’s Drupal site uses three separate contributed modules to facilitate the importation of fields into the Drupal database:  Feeds  the base feeds module, which enables the importation of content fields onto any Drupal content type.  Feeds Extensible Parsers  extends the feeds module to enable the importation of XML documents and, vitally, parse them via XPath.  Feeds Tamper  extends the feeds module to enable the transformation of content as part of the import process (e.g., a tamper could perform a search-and-replace on all imported content, removing certain words or tags).These three modules work seamlessly together in Drupal’s backend to enable you to create/configure and then run an importer. This technical guide covers the configuration of new or existing importers. If you simply need instructions on importing content using an existing importer, see Importing Content into the Drupal CMS in the Production Documentation.Creating, configuring, and/or editing importersImporters can be created and configured from the “Feed types” page under the admin menu’s “Structure” tab. From this page, you can create a new feed with “Add feed type” or edit an existing feed.To configure an existing feed, simply click “edit” to go to its config page. On each feed’s config page, you’ll see several tabs:  Edit  controls the basic feed configuration. The fetcher tells Drupal how the database should fetch your imported file or content (usually an uploaded file or FTP directory). The parser selects what method the importer will use to parse imported content. We want to use XPath, so for normal imports this should be “XML.” The processor tells Drupal how to process the content parsed by the importer; this will usually be “node,” meaning Drupal should create a new node for each essay. The content type tells the importer what Drupal content type to create nodes/fields for. Each importer can only import into one content type; note that each content type has different possible/associated fields, which affects how content can be imported          Settings: For RC importers, “Import period” will be set to off (no automatic imports). Under “Fetcher Settings,” ensure you set the importer to accept the type of file you’re importing and, if appropriate, point it to the right upload directory. Under “Processor settings,” almost certainly you’ll want to “Insert new content items” and to “Update existing content items.”        Mapping  controls the behavior of the parser via Xpath. Set a “Context” for the base query, then select a “Target” field (the choice of fields is determined by the set content type). For each target field, you can configure a “Source” from the imported file(s). For new sources, you’ll need to “Configure new XML XPath source”; this is how the parser knows how to find a piece of content by an XML/HTML tag within the imported document. Under configuration, you can tell the parser to treat a field’s value as unique (the title will always be unique); set how to reference, or “tie together,” fields (usually by Title); and set whether entities should be autocreated (which could be useful if importing taxonomy terms, for instance). To configure XPath sources, you’ll likely need the RC Language Guide.  Tamper  for each mapping target, you can set a “tamper” from this page that will alter or change the behavior of the imported content. Simply select “Add plugin” under the appropriate mapping target. An example of a simple tamper used on most importers is a filter to enforce contextual links, stripping the base domain from all imported RC links; to set it up, simply add the “Find replace” plugin, set it to find https://romantic-circles.org/, and leave the replacement field blank (which will simply delete the “found” text). You can also use this functionality to, for instance, force the importer to import content with a specific node as parent content (as is necessary, for example, when importing mapping data).  Custom sources  this is an extremely useful tab that displays all your XPath configurations in a single place and allows you to edit them. Each target label is listed alongside its XPath mapping.  Manage fields  can be used to add a new field to the import. Do not use.  Manage form display  simply configures how information about the importer itself is captured in the database and displayed. No need to use.  Manage display  controls the UI of the importer, which would be useful for periodic imports and the like. No need to use.The process of setting up an importer seems rather intimidating, but through a bit of trial and error you’ll soon get how it works. To get the hang of using XPath mappings, it’s always best to create a new importer as a sandbox rather than editing an existing feed type (and potentially losing XPath mappings).  For more on using XPath, see the RC Language Guide.Getting the mappings “right”The best way to familiarize yourself with the process of setting mappings is to review the importers that already exist on the site. They reflect various shortcuts and use of selectors that will put you on the right path, so to speak.Since XPath is so adaptable, there are probably dozens of ways to get to a “correct” mapping to import the field content you’re after. The importers don’t care how efficient your XPath is, only that it gets to a fetchable result. With this said, it can be helpful to keep in mind a few principles as you’re setting importer mappings:  The “Context” field on the “Mapping” tab is your base query, meaning that any other mapping you set builds onto this path. The more broad your import needs to be, the more general the base query in the context field will be.          If, for example, you’re simply grabbing content from a sequence of (parallel) XML nodes that are all located (in the TEI document) at /TEI/text/body/div/listPlace/place/placeName with the XML tag logic &lt;placeName id="BostonCommon"&gt;Boston Common&lt;/placeName&gt;, you could set the context as /TEI//placeName and your mappings to . (which will fetch “Boston Common”) and, if you need it, @id (which will fetch “BostonCommon”).        You’re probably not going to get the mappings right the first time. If a field isn’t importing properly, the mapping is probably off in some way. A bit of trial and error will usually get you to something that works; try different ways of mapping to your desired tag / content, and you’ll eventually hit on something that works.  Set as specific a mapping path as possible. We’ve found that if there’s any ambiguity in your mapping XPath (e.g., if you point to a tag has both an @attribute and content), the importer might not be able to fetch anything. XPath’s “@” and “dot” [.] selectors can be particularly useful in this regard.  Lean on the online dev community. In the process of building the existing importers, we spent many hours on Stack Overflow, reddit, etc., reading threads that solve exactly the sort of issues we were facing. A simple online search for your problem will usually get you some answers.Notes on the TamperIf you need to use the Tamper submodule’s functionality (and you should, as it can be quite helpful), it’s important to note whether each tamper plugin is reusable between volumes or must be edited before importing future content.A good example of a temper that must be reset or edited between imports is the Colorbox Annotation Importer’s tamper plugin for the “article-parent_link” (parent resource) field, which simply sets a default value (in this case, a node #) for all imported items. If you were to leave this tamper in place and attempt a new import on a fresh set of “notes-as-nodes,” which is the content type this importer imports to, the nodes imported will all be set as “belonging to” the wrong volume: i.e., the one previously imported.For this reason, if you’re using an importer that is not one of RC’s 4 “vanilla” importers (Praxis/Editions XML/HTML), it’s a good idea to check the tamper settings before you execute an import. If you don’t, you might have a big mess to clean up."
     
   } ,
  
   {
     
        "title"    : "Drupal Guide",
        "category" : "",
        "tags"     : "",
        "url"      : "/docs/drupal-guide/",
        "date"     : "",
        "content"  : "Drupal OverviewDrupal is an open-source CMS (content management system) that is widely used to create and manage dynamic websites. Drupal installations run off a combination of core and contributed (third-party) modules, which control site functionality, data management, user experience, and adaptive presentation of content. The CMS is especially adept at implementing structures to store, organize, sort, and present large amounts of metadata. Drupal uses specific terminology for the many parts of the CMS and how they work together. The following is meant to serve as a primer for understanding these terms and thus how to navigate the CMS.When you come on board with RC, a current technical editor will provide you with a login and password for Drupal’s admin backend. Log in at romantic-circles.org/login.Content ManagementMore stuff. We can, for example, we can easily create coding guides with enhanced visibility using fenced code blocks.  For example:Creating a new SSH key      Open a terminal and enter the following:    1 ssh-keygen -t ed25519 -C "your_email@example.com"        You should see a message similar to this:    12 Generating public/private ed25519 key pair. Enter file in which to save the key (/users/your-user-name/.ssh/id_ed25519):         Simply hit “Return” to accept the default key location. If it doesn’t already exist, the “.ssh” folder will be created in your user root directory. This is a hidden folder; on Mac OS, you can show hidden files using the keystroke CMD + SHIFT + . (period).        When prompted, enter and repeat a passphrase for use with your SSH key. If you have sole and secure access to your machine, you can simply hit “Return” to use a blank passkey. Here’s what the completion of this interaction should look like:    12345678910111213141516171819 Enter passphrase (empty for no passphrase):  Enter same passphrase again:  Your identification has been saved in /users/your-user-name/.ssh/id_ed25519. Your public key has been saved in /users/your-user-name/.ssh/id_ed25519.pub. The key fingerprint is: SHA256:gTVWKbn41z6123456789LC4abcdefghijklmnopqrstuvwxy youremail@address.com The key's randomart image is: +--[ED25519 256]--+ |==+.    +o..     | |.oE.   +o..      | |    . ...o       | |     .o...       | |     oo+S  .     | |  + ..B = . .    | |.+.+.oo+ * o .   | |o++.o+  . + +    | |B+ o.    .   .   | +----[SHA256]-----+ youremail@address.com ~ %              That’s it. Add your key to your server or service for secure access (GitHub, Acquia, Bitbucket, etc.).  "
     
   } ,
  
   {
     
        "title"    : "Importing Content to the Drupal CMS",
        "category" : "",
        "tags"     : "",
        "url"      : "/docs/drupal-import/",
        "date"     : "",
        "content"  : "RC’s Drupal site uses three separate contributed modules to facilitate the importation of fields into the Drupal database: Feeds, Feeds Extensible Parsers, and Feeds Tamper. These three modules work seamlessly together in Drupal’s backend to enable you to create/configure and then run an importer. The resulting importers allow the bulk importation of metadata and HTML content into the site; this is important since manually producing, to take one example, each of the thousands of Southey letters for web presentation would take countless hours. The importers allow this process to happen in a matter of seconds. Unfortunately, this process is not perfect, as you’ll see below, but it does a pretty good job of getting content into the site.  The present guide is concerned only with the importation of content in the production process using existing feeds importers. If you need to create a new importer or modify the behavior of an existing one, head over to the Feeds Importer page in the technical documentation.Once all production files are in the sFTP, you’re ready to (1) import the volume’s main content and then (2) clean it up.Running the feeds importersTo “run” a feeds importer, navigate to the “Feeds” tab of the admin “Content” menu.Most of the time you’ll be (re)running a feed that already exists and pointing its fetcher to a different file or directory. Note that, from the main Feeds content page, two importers already exist for Praxis and Editions content, one “XML” and one “HTML.”By using both the XML and HTML importers for a volume, we can import all its content and metadata into the Drupal database with only a few simple steps. Though the order in which you execute the importers probably doesn’t matter, it seems like a best practice to begin with the XML import, which brings in many of the metadata fields for each node (identified by title), and then follow with the HTML import, which brings in the content fields (abstract, body, notes, etc.).  Note that if you click on the name of a feed, Drupal will take you to the feed page, which will only give you the option to re-run the same import or delete previously imported items. You don’t want to do either. Instead, Edit each feed to change its import behavior for each volume.Follow the instructions below to execute the XML feeds import, then the HTML import.XML feedsThe XML feed simply parses the corpus file you created in the XML to HTML and Corpus Transformations documentation above. It does so according to the XPath mapping set in each feed type’s configuration, as described in the previous section.To import new content, simply Edit the appropriate XML feed, click “Remove” to change the target file, and then “Browse” to your volume’s corpus file (in your local RC-TEI repo). Click “Save and Import.” If successful, you should see a message like “Successfully created 8 nodes” or similar.HTML feedsThe HTML feed uses XPath to parse the individual HTML files you created via an XSL transformation scenario in the XML to HTML and Corpus Transformations documentation above.Because this importer needs to run on multiple files, the fetcher is configured to pull from the public directory of the site FTP (sites/default/files/feeds/). Before running the importer, all HTML files for the volume should be uploaded to the specified directory on the FTP. Accessing and navigating the FTP are covered in the next section, Uploading Files to the FTP.Once all HTML files are present in the directory the feeds importer path points to (e.g., “public://feeds/praxis”), click “Save and Import.” As before, you should see a success message, but now (hopefully) something like “Successfully updated 8 nodes.”Other feedsSome features of the RC site  notably, “Colorbox annotation” (formerly known as “standalone note”) and Leaflet mapping  require their own importers. The Colorbox annotation importer, for instance, creates numerous individual notes-as-nodes (which often contain pictures and other content) for a given parent volume, which is set by a tamper plugin that must specified/changed before each unique import. These separate pages can then be “popped up” upon linking to them using the Colorbox function (which is enabled by a module). Once you familiarize yourself with the logic of the feeds importers and the operation of XPath in parsing/selecting specific content via tags, the construction and function of these importers should be clear.  We highly recommend you review the technical documentation for the Feeds Importers before you attempt to run any feed other than the site’s 4 “vanilla” feeds importers, covered above: Praxis XML &amp; HTML / Editions XML &amp; HTML.Content cleanup / known issues with FeedsUnfortunately, the feeds importers aren’t perfect; while they are able to retrieve most content and put it in the relevant Drupal field, a bit of cleanup is needed post-import. You’ll need to perform the following 3 steps each time you (re)import a volume.Here’s a list of known issues and fixes, which are all quick &amp; easy:  Titles appear twice at the top of articles. Simply navigate to each article’s UI “backend” edit page in Drupal and delete the title from the “Body” field.  The text may be formatted in strange ways. For some reason, the WYSIWYG editor doesn’t automatically set the Full HTML you’ve imported as being “source” code: while you’re in the Edit page for each article, simply click the “Source” button on the editor toolbar (&lt;&gt;) for the Abstract (summary), Body, and Notes fields.  Some fields don’t populate. Occasionally there might be metadata fields that don’t have content when they should. Do a quick one-over of each article’s Edit page and simply supply any missing information manually.Because these steps can be fairly time-consuming, particularly on a large edition, we recommend you perform them only once, when the volume is ready to go to the proofing stage. If errors are found in the volume and the source TEI must be edited, you’ll also need to repeat the cleanup upon the final importation of the volume."
     
   } ,
  
   {
     
        "title"    : "Drupal Maintenance (UI)",
        "category" : "",
        "tags"     : "",
        "url"      : "/docs/drupal-maintenance/",
        "date"     : "",
        "content"  : "Finally, we come to site maintenance and updates. This brief guide will cover maintenance and performance tasks that can be executed from within the Drupal UI. However:  Nearly all maintenance tasks and updates to the Drupal ecosystem MUST be made via Composer from the site’s docroot in the code. Even if the Drupal admin pages prompt you for updates, you should NEVER attempt to update modules from the UI. For instructions on how to update Drupal and its modules correctly, see the Composer documentation.Here are some tasks that can be executed from Drupal’s admin pages.Update.phpOccasionally you’ll need to update the Drupal database, particularly after anything about your Drupal installation changes  an update to Drupal core or contributed modules, for instance. One way to do so is to navigate to Drupal’s built-in database update function, which can be accessed at [site-URL]/update.php/. Note that you’ll need to be logged into Drupal’s admin pages for this path to work.Drupal provides on-screen instructions to execute the script; for specifics, see the step-by-step below. If the site is live and you’re updating the prod environment, it’s important that you put it into maintenance mode via the provided link. This will make sure the database isn’t corrupted by user queries during the update process, but it also means that the site will go down for a few minutes. For this reason, it’s best to execute the update.php script outside of work hours.Here are specific steps to safely execute the update.php script.  Back up the site code by performing a $ git pull on your local repo to ensure you have a copy of the most recent site code on your local machine, just in case. If necessary, read the provided git guide for instructions on how to do so.  Acquia automatically backs up the database for each environment every morning. If you’ve recently made changes to the site, however, you may want to create a manual database backup using Acquia Cloud Platform (in Environment –&gt; Databases –&gt; “Back Up”). If the update fails, you can restore from here.  Put your site in Maintenance mode (Administration –&gt; Configuration –&gt; Development) if you’re in a production environment (i.e., if site visitors could be performing database queries during the update).  Append /update.php to the site’s base URL.  Click “Continue.” It’s possible that no update is possible (“No pending updates”), in which case you can go to step 7.  If there is an update available, run it. If the site crashes or you encounter an error, restore from the most recent database copy in Acquia.  If you put the site into maintenance mode, take it back to production mode.  Note: It’s also possible to perform this database update via Drush (“Drupal shell”), Drupal’s Linux command line tool (as discussed in the Composer documentation). If you want to do so, you’ll need to put the appropriate environment in “Live Development” mode (from the Overview of any environment in Acquia, simply select Actions / “Enable Live Development”). SSH into the site as described here. Now navigate to the site’s docroot folder: $ cd ~/docroot and from there run this command: $ drush updatedb. While you’re at it, you might as well also run $ drush cache-rebuild, which is a good idea every once in a while.Clear site cacheThe Drupal MySQL database  which, as we’ve discussed, sorts and sorts basically all content on the site  creates cache tables as the site runs. These cache tables essentially help Drupal serve content, settings, etc., that have already been loaded by the site more efficiently. But all this caching can bog down the site’s performance as the database grows in size.There are actually three ways to clear these database caches: in the Drupal UI, via drush, and manually, by truncating tables directly inside the database. The first of these options is the easiest by far.To clear all site caches, simply navigate to the admin “Configuration” menu, and click on “Performance” (under the “Development” section). From the performance page, simply click “Clear Caches.”CronCron is a utility built into (but not exclusive to) Drupal core that automatically executes scheduled jobs, or scripts, on the site. These are known as “cron jobs.”Drupal’s cron utility can be found on the “Configuration” admin menu under the “System” section. By default, the site’s cron runs every three hours; Drupal checks for core/module updates and re-indexes the site for search. You can manually run cron from this page if, for example, RC is publishing a big new volume that you want to be searchable as soon as the content goes live."
     
   } ,
  
   {
     
        "title"    : "Media and Mapping",
        "category" : "",
        "tags"     : "",
        "url"      : "/docs/drupal-media-maps/",
        "date"     : "",
        "content"  : "The RC Drupal site can handle media assets in several distinct ways, including a dedicated module ecosystem for mapping. This page provides a brief overview of media storage and use as well as documentation on how the site’s Colorbox and mapping functions work.Images and video contentThe RC site serves images to users in two distinct ways:  From the filesystem: the most common way images appear on the site. Links are created inside an individual piece of content to a path in the file system associated with that content (e.g., ../editions/guide_lakes/images/x.jpg). The image file (here, “x.jpg”) is manually uploaded to the SFTP (see documentation), and the HTML link created within the content “finds” it and places it on the page.  From a database field (link): any image that is uploaded through the Drupal UI ends up being a field in the database. Drupal stores the associated image somewhere in the file system (by default it places them at the root of the site’s public path, though the upload directory can be specified when creating the image field [Structure / Content Types / [Type] / Manage Fields]). These images, like all entities in Drupal, are associated with a content type; when creating or editing a content type, a field can be created to enable the uploading of an image (or file). See screenshot below for an example of an image field on a content type.  Note: This is an area for future attention among site developers: the question of whether (and how) to make the site’s under-the-hood handling of images more consistent and efficient.Image stylesDrupal’s admin “Configuration” menu dedicates a whole section to media settings. Despite appearances, there’s not much here that can be configured except “Image Styles” and the various elements of the Colorbox ecosystem (see below).The Image styles menu can be used to configure default behaviors and sizes for images that can be applied consistently across parallel content across the site. A quick demonstration of a use case for image styles on the site follows; if you haven’t yet read the preceding Drupal Views documentation, you should do so before proceeding here.Since certain content types on RC use images in standardized, repetitive ways, it is possible to create clearly defined image styles to standardize resolution, dimensions, and other attributes for images that will be uploaded as fields via the Drupal UI. This is the case with book reviews in the “Reviews &amp; Resources” section of the site: every book review appears with an image of the cover art for the featured book. Thus we create an image field on the “Reviews and Resources Book Review” content type to allow an image to be uploaded with each review. So far, so easy.But we don’t set an “image style” on that field; indeed, it is not possible to do so. Instead, we create an image style from the admin Configuration / Media menu, discussed above:Next, we set a layout template for the “Reviews and Resources Book Review” content type in Drupal’s Layout Builder, which allows us to insert different view blocks and fields that create several adaptive elements onto the page, such as title, date published, author name, the book image, the body of the review, and so on. The first image below is the resulting page, and the second is the Layout Builder that creates it:We see in the Layout Builder that a Drupal view block called “R+R Review Body” is generating the page’s main content. Unfortunately, all we can do from the Layout Builder is “configure” the block, which will allow us to set a CSS class on the block via the Layout Builder Styles module, but does not allow us to edit the underlying view. We’ll need to navigate to Structure / Views / R+R Review Body to see what’s going on.As expected, we’ll see that the “Content: Image” field is pulled in for the “Reviews and Resources Book Review” content type (the former being “pulled” as a field, the latter being applied as a filter). If we click on the “Content: Image” field (which, note, is set to “hidden”), we’ll see the following config options:Here, at last, we see the image style created above come into play: we apply it to the field when we use it. Luckily, this view is used to create all present and future reviews, so it only needs to be configured in this way once.  Note: It’s worth noting that the view just examined uses the method described in the Views documentation of hiding fields that are “pulled” by the view and re-arranging them in custom ways using the “Custom: Global Text” field option. In this case, the image, book details, and review body are all combined via PHP “replacement patterns” that allow HTML tags with CSS classes to be inserted into the view output. This is what allows the image to appear with a formatted description under it and text wrapping around it.VideosRC tries to minimize the use of video content on the site, and currently does not host any video files on its servers. If a contributor, editor, or content creator wants video content included as a vital part of their work, you can simply use the embed code provided by a hosting service like YouTube or Vimeo. Simply cut and paste this HTML to the appropriate place in the HTML body of the essay or content (but be sure to select the “Full HTML” option on the WYSIWYG editor and tick the “Source” button before you do so).  Note: If the embedded video should appear with particular formatting, note that you can “tweak” the default HTML related to size and position provided by the “embed” link. If more formatting is desired, consider creating a new &lt;div&gt; around the embed code and adding a CSS class that accomplishes the formatting you desire. See the Asset Injector documentation for more info on this process.Colorbox “pop-up” functionality  Unfortunately, at present (March 2023), the Colorbox popup functionality is behaving strangely on the site. The information that follows should technically produce working popups in all cases, but in practice this has proved hit or miss. Hopefully a resolution can be found to the non-triggering of the popup function on content pages.The RC site’s Colorbox “pop-up” (or “lightbox”) functionality is produced by 3 separate contributed modules:  Colorbox  the main Colorbox module that provides the jQuery plugin integration into Drupal and offers a number of settings for how its “pop-up” Colorboxes appear and behave. Configurable at Configuration / [Media] / Colorbox settings.  Colorbox Load  extends the main Colorbox module so that it can open nodes and other content (e.g., taxonomy terms) that doesn’t appear on the current page via AJAX.  NG_lightbox  extends Colorbox Load by providing a paths interface for configuring which nodes on the site will be rendered in Colorbox lightboxes (or, if you prefer, Drupal core modals). Configurable at Configuration / [Media] / NG Lightbox.The settings for the Colorbox function itself is fairly straightforward, if highly customizable.The only component here that requires configuration for new content to appear in Colorbox pop-ups is the NG Lightbox menu. This simple interface has a “Paths” field that allows you to input line-separated paths that will appear in lightboxes; as noted in the instructions, these paths must start with / and can accept the wildcard character *.Note that the current path configuration means that any taxonomy term or contributor page will appear, whenever clicked on the site, generate a Colorbox:  As noted above, not all intended Colorboxes on the site are functional; the “note” paths attempted in the screenshot above  which should generate Colorboxes on node-as-note content linked on individual Editions pages  have no effect at all, for an unknown reason.Mapping: Leaflet &amp; Geofield modules  We highly recommend you read all of the preceding Drupal documentation as a prerequisite to this section.Like the site’s Colorbox functionality, RC’s mapping capabilities are enabled by a suite of contributed modules:  Leaflet  the main mapping module; it ports the Leaflet JavaScript mapping library into Drupal.  Leaflet Layers  extends the main Leaflet module to allow bundles of maps that can be layered over the main map.  Leaflet Markercluster  actually a submodule of Leaflet that allows for regional clustering of map marker points (on zooming out of the map, for example).  Leaflet Views  also a submodule of Leaflet; enables the “Leaflet map” output format for views on the site, meaning you can generate a Leaflet map by creating a view that retrieves geolocation data via database query.  Geofield  Leaflet depends on this module, as it enables the inputting of Lat/Long data fields into Drupal content types.  Note: Because the “Markercluster” and “Views” submodules described above are submodules of the main Leaflet module (generally meaning they were originally developed as separate modules and then merged into the development of the main module’s code), they will not appear as individual entities required in Composer’s composer.json file. Rest assured that their dependencies and updates are still tied to your overall Drupal installation through the main Leaflet module. See the Composer documentation for more info.The creation of a map on the site incorporates basically every element of Drupal this documentation has covered thus far. Thus a walkthrough of this process is in order, as it also serves as a concrete illustration of many of the principles we’ve been discussing over these many pages. It may be helpful to begin by outlining the logics that leverage different Drupal components and functions to successfully produce a map.Mapping logics: Content type + taxonomy vocabulary + entity references + feeds importers + viewsThe elements/entities necessary to produce a Leaflet map on the RC site are as follows:  NODES of the “landmark” content type. The landmark node holds the geofield data for each place on the map. Its field configuration is quite simple: you can give the place a name (“landmarkTitleField”), a description (“Description”), and latitude and longitude coordinates (“Location”).          Vitally, the landmark field can also accept two entity reference fields: the “Place Anchor Tag” and the “Parent Resource.” The latter is rather self-explanatory: the parent resource field should hold the main parent page (TOC/index page) for the edition/volume the map belongs to. The “Place Anchor Tag” field will hold the landmark node’s equivalent taxonomy term.        TERMS belonging to the “places” taxonomy vocabulary. For each “landmark” location, a taxonomy term of the same name will be imported alongside the landmark title and other fields, into the “Place Anchor Tag” field. This is an entity reference field that links the landmark node to the place’s taxonomy term. This same term can be referenced by any other content on the site, usually by a “Places mentioned on this page” field on an “Editions article” node.  FEEDS are used to auto-populate all these fields. As described in the Feeds Importer technical documentation and the Content Import production documentation, the feeds importers can be configured to parse (via XPath) XML documents and retrieve data. RC uses feeds importers to populate all the fields mentioned above from TEI files. For all the importer logics that go into building a complex mapping ecosystem in Drupal, see the configuration of the “Landmark Importer” and the “Place Taxonomy Importer” at Structure / Feed Types.          For the importer used to populate the terms on an “Editions article” content type, also see, e.g., the “Southey Letters Importer.”        ENTITY REFERENCES tie everything together. The “Place Anchor Tag” entity reference field on the “landmark” node and the “places mentioned” entity reference field on the “Editions article” node allow each term in the “Places” vocabulary to generate a list of every entity reference across the site that points to this particular term. Drupal’s Taxonomy system does this automaticaly; if you click on a term, it will list its appearances everywhere on the site. This functionality can be leveraged through views.  VIEWS are used to present all the data on Leaflet’s mapping interface. By choosing to output a view’s query as a “Leaflet Map” format and pulling in the relevant geolocation fields, you can generate a Leaflet map.Leaflet mapping walkthroughOnce you understand the content logics outlined above, the steps required to build a Leaflet map should make sense.Import content / geolocation data into the “landmark” content type.  All “place” entries for a given project should be provided in a single XML (TEI) file, usually called places.xml or similar. This file normally will contain a series of hierarchically parallel XML tags that provide various datapoints about the place, a place name and lat/long coordinates at minimum. Usually you’ll see a description and ID (xml:id) as well.  Import taxonomy terms. Navigate to Content / Feeds and edit the Place Taxonomy Importer. Upload your XML file and run the import.          This importer extracts the “ID” name for each place and turns it into a taxonomy term (the term will automatically be created upon import). This taxonomy term “logs” every time the term appears in any entity reference field across the site and can display all references to each location.      If the import fails, it probably means that your XML file doesn’t conform to the conventions outlined in our TEI guidelines. You have two options: modify the XML via find-and-replace queries, or edit the importer’s parsing configuration. The latter is usually far less time consuming. See the Feeds documentation and XPath tips in the RC Languages Guide for how to do so. Make sure you write down the previous configuration and return the feed to its defaults once you’re done.        Change the parent resource for the place node import. Next, import the actual content for each place. Navigate to Structure / Feed types and edit the Landmark Importer. In the “Tamper” tab, edit the plugin value assigned to the “Placeholder -&gt; Parent Resource: target_id” mapping (at the bottom of the page, click “edit” next to the “Set value or default value” plugin). Change the value to the node ID or exact name of the parent volume and save the feed type. (To find the node ID, simply navigate to the edition’s TOC page and hover your mouse over the “edit” tab; the node ID number will appear in the URL at the bottom left corner of the browser.)  Import place nodes. Finally, navigate back to Content / Feeds and edit the Landmark Importer to upload the same places.xml file you just used to import the taxonomy terms. Run the importer. This creates and populates the actual place nodes, including the place name, description, taxonomy entity reference, and, vitally, each place’s lat/long coordinates.Build the map as a view.  Navigate to Structure / Views and create a new view. Give the view a meaningful name.  Under “View settings,” set it to show Content of type Landmark.  Under “Page settings,” check “Create a page” (to set the display to “page” instead of “block”). Set the page title as appropriate and give it a relative path inside its parent volume (e.g., /editions/southey_letters/places-map).  Click “Save and edit.” This will take you to the proper views interface.  The first item in the “Fields” section should be “Content: Location”. If necessary, remove an element and then add the “Content: Location” field by searching for it. Probably you’ll want to pull in the place title as well; add the field “Content: Title” and check “Link to the content” from the options (when you click on the field name).  Add a filter to the view: “Parent resource is equal to [node ID].” You’ll need to provide the 6-digit node id for your map’s parent resource; see the importation guide just above for how to find it.  In the “Format” section, click the “Settings” option next to “Fields.” Check the box next to “Content: Location” to set it as an inline field.  Save the view. You should see the Leaflet map populate in the “Preview” section, and the link created by the view should work. Congrats!Advanced optionsMap Layers: Navigate to Structure / Leaflet Layers there is an option for map layers. If your project requires (often historical) map overlays over the standard Leaflet map, you create them here. To import a map layer for use by Leaflet, you’ll first need to convert the scanned image of the map  preferably a high-res IIIF-compatible image file  into XYZ map tiles. There are several online services that will do this for you; see, e.g., Allmaps. Once you have folders of XYZ tiles, you’ll upload them to the SFTP and then point the Leaflet map tile configuration to that file location as a relative URL (/sites/default/files/…). The best way to figure this out will be to examine the configuration of map layers that already exist on the site; for an example of a Leaflet map with layer overlays, see the Guide to the Lakes map.Map Bundles: To include specific map overlays in a final Drupal map (view), a map bundle must be made. Under Structure / Leaflet layers / Map bundles, you can create a bundle which lets you select which maps you want to include and which you want to be enabled/disabled by default. To enable a bundle on a specific map (or to enable a single layer, if that’s all you need), edit the view responsible for outputting the map and click “Settings” next to “Leaflet Map” under the “Format” section. From this dialog, select the bundle you just created from the “Leaflet Map Tiles Layer” field. You should now see the “Layers” tooltip in the top-right of the resulting Leaflet map; hopefully all layers you put into the bundle show up correctly! (If they don’t, try a different XYZ map tile creator and re-create the layers.)"
     
   } ,
  
   {
     
        "title"    : "Drupal Overview",
        "category" : "",
        "tags"     : "",
        "url"      : "/docs/drupal-overview/",
        "date"     : "",
        "content"  : "The RC site runs on a content management system (CMS) called Drupal, which is an open-source framework that allows for expanded functionality and adaptability through “modules.” This makes for a very powerful but extremely complex (and often nonintuitive) platform that can adapt to RC’s various DH initiatives and needs to store and leverage metadata across site sections and content types. Drupal supports a large number of large-scale government, education, and industry websites, including NASA, Tesla, GE, Whole Foods, Harvard University, lots of ski resorts, and, yes, the University of Colorado Boulder (though this site is wholly unrelated to the RC site).This section of the technical documentation will walk you through performing “front-end” web development tasks in the Drupal CMS (as opposed to the “back-end” development tasks covered in the next section). These tasks support and shape the site’s content and determine its appearance and usability. The following pages will cover: accessing and using the site’s admin UI, basic navigation and content editing, a rundown of Drupal entities and data handling, a tutorial on constructing database queries using Views, configuring content imports, changing the site’s appearance and behaviors, and performing performance and maintenance tasks.CMS login and adminTechnical Editors in training will be provided with a username and password to access the backend of the site. Log into the site at this link. You should bookmark this page in your browser so you can easily return to it.It’s worth noting that Drupal has a fairly robust “user permissions” system, but the site does not at present offer a public login option (for adding comments to content, etc.). If you receive a site login, then, you’ll be given either administrator privileges, which gives you complete control over all aspects of the CMS, or editor privileges, which will allow you to edit content pages. All RC staff engaging in dev work will be given full admin access and should be able to perform any of the tasks outlined here.Upon login as an admin user, you’ll see a new menu banner across the top of each page; this is Drupal’s administrative menu, which gives you control over nearly every aspect of the site. Once you’re logged in with administrator or editor priveleges, you’ll also see contextual links and in-page menus to edit content. The function and use of these menus is covered in depth on the Navigation &amp; Basic Editing page.Drupal core, modules, &amp; update logicsA Drupal installation has two major code components: Drupal core and contributed modules. Drupal core versions are released by the official Drupal organization (Drupal.org) with three types of releases, major, minor, and patch. Major core releases only happen every few years; as of this writing, Drupal 10 was just released (December 2022). Minor releases contain significant new features or additions and happen a few times each year. Patch releases contain bug fixes, security patches, and minor enhancements and are much more frequent, at least monthly. Drupal core releases always have three numbers: e.g., 9.5.2. The numbers reflect the major.minor.patch version of the release.  If you’re responsible for updating and maintaining the Drupal installation, it’s a good idea to monitor the Drupal core release cycle and the current releases for Drupal core.Drupal modules, which extend the site’s functionality in various ways, are a bit more complicated since each module is maintained by a separate development team rather than by a centralized organization. Most popular Drupal modules are well-maintained and updated regularly. Some modules, however, may only be updated sporadically, meaning they may not maintain compatibility with the most recent Drupal release(s), and they may even, on occasion, be abandoned by their developers. For this reason, it’s important not to install any Drupal module that (a) does not have a strong justification to improve the site’s functionality, and (b) does not already have a wide user base at the time of adoption. Each contributed module will have its own page on drupal.org with details on its version number, compatibility, user base, documentation, and so on. Drupal.org’s main contributed module page can be useful to find new modules, but in performing site maintenance it’s generally easier simply to perform a web search for “Drupal module [name].”Thus the Drupal ecosystem is in constant motion. As an open-source project (on of the largest in the world), all elements of Drupal are developed and maintained by a dispersed community of coders and web devs. Much of this development is sponsored by Drupal agencies and organizations that depend on Drupal’s continual development, but a decent proportion (almost 20%) of contributions to the Drupal project come from volunteers. (Incidentally, the #1 organizational contributor to Drupal development is Acquia, the company that hosts RC’s Drupal installation. For more on the state of Drupal development and the diversity of its dev community as of 2021, see this post by Dries Buytaert, one of Drupal’s founding architects.)For all the above reasons, a Drupal installation must be regularly updated even as the dependencies among its various components must be respected. For example, even if a new major version of Drupal (Drupal 10) has been released, it is highly likely that the site requires modules that have not yet been updated to be compatible with Drupal 10. In this case, an attempted upgrade to Drupal 10 would likely break the site.Luckily, the Drupal dev community has unanimously adopted a dependency manager called Composer that keeps track of all this for you and, generally, won’t let an update/upgrade happen unless every component of the Drupal install can satisfy its requirements/dependencies. Composer is a command line tool that runs via simple text commands in a terminal interface, so its use is covered in the “back-end”/Acquia section of this documentation: Updating Drupal via Composer.The relational database: A note on Drupal’s content strategyAll web browsers require a web server (Apache) to serve a site’s page code in HTML. This is, for example, why RC can’t simply put TEI (XML) code on the web: browsers don’t know how to read it, so we transform documents (as related above) into HTML to get them onto the web. This HTML is imported into Drupal nodes via the site’s feeds importers (a functionality enabled by three feeds modules).But Drupal doesn’t “keep” this HTML as content in a traditional sense; it does not, in other words, maintain an HTML file from which the page gets served. Instead, Drupal places all site content into its relational (MySQL) database, then uses this database to create each of the pages its serves (back into HTML). This primacy of the database in driving content management is what enables Drupal’s powerful Views functionality, which can perform complex database queries and thus basically “remix” and re-present any content that exists in the site’s database. This is also why you won’t find any of RC’s site content (other than media) in Drupal’s file system (SFTP): it’s all in the database.  Drupal’s extensive use of its relational database means that the database can get quite large, especially on a site with 25+ years of content. See the Database Management page for instructions on accessing and purging the database."
     
   } ,
  
   {
     
        "title"    : "Drupal Views",
        "category" : "",
        "tags"     : "",
        "url"      : "/docs/drupal-views/",
        "date"     : "",
        "content"  : "The Drupal CMS’s internal logic means that the MySQL database holds pretty much all text-based site content (as outlined in the Drupal Overview that opened this section). The codebase provides the scaffold, the filebase holds images and other files that can’t go in the database, and the database holds text content, metadata, site configurations, user data, and everything else. This setup means that a database query tool that can sift, sort, present, and re-present content from the database is an incredibly powerful tool. This is Drupal’s core *Views function.Views, most simply, allow you to manipulate the fields in Drupal’s (MySQL) database to display and combine content in functional, novel, interesting ways. Everything that has preceded this page in the Drupal tech documentation will be prerequisite to understanding and manipulating Views; if you haven’t read these preceding pages, you should do so now (start here).The anatomy of a viewYou can see all views on the Drupal site by navigating (in the admin menus) to Structure / Views. Some views are user-created, while others  notably, those that control admin menus, like “Content”  ship with Drupal core. You can create new views or edit existing ones from this page. You can also edit a view that exists (as a block or a page) anywhere on the site by clicking on the contextual icon.  If an element on the site is generated by a View, its contextual “pen” icon, when clicked, will show “Edit view.”When you edit (or create) a view, you’ll find yourself looking at Drupal’s Views builder interface. Let’s quickly tour each of the elements of this interface.  Note: If you create a new view, a sort of “view builder wizard” will get you started, but you can change all the configurations it automatically sets up when you actually get to the Views interface proper. The options on the new view wizard likely won’t make much sense until you read the guide below.DisplaysEach view can have a number of displays. Each display sets a separate output for the view; this can allow you to, for example, create a view that outputs a different display for nodes of a specific content type based on filtering by a tag; see, e.g., the “Lab Pop Culture Teasers” view, which has different displays based on the genre of a piece of media (Film, Literature, Television, etc.).Drupal gives you several display options when you create a new view or click to add a new display to an existing view: attachment, block, embed, entity reference, feed, or page. Luckily, the RC really only uses two of these: block display and page display.These displays do exactly what you’d expect: the “block” display puts the output of the view’s database query as a block (an element that can be added to a node / page), while the “page” display uses the output of the view to create an entire page and allows you to set its path. These two display options result in different settings options, as covered below.  Note: In principle, you could build a new view for the RC site that leverages the functionality of the attachment display, which essentially just creates a new output that “attaches” to the view’s main output (block or page) and displays some variation on the view alongside/above/below it. You could also create a complex view that leverages the entity reference display; for an idea of how this might work, see this documentation from Drupal. You’ll never, based on the Drupal build, use the embed or feed types on the RC site.**IMPORTANT!** If your view has multiple displays, any edit you make to a display (block or page) will either be applied to ALL displays, or ONLY to the current display. Language that describes any action you’re applying will appear beside the “Apply” button on any settings page: Apply (all displays) will apply this change to ALL displays, while Apply (this display) will create an override for the current display, taking it “out of sync” with the other displays in the view. To create an override on the current display or apply changes to all displays, click the “For” dropdown menu at the top of a settings page, which will show you the relevant options.TitleThe field allows you to give the view a title, which can be configured to display (in the case, for example, where a view will be an entire page) as the title field on a block or page.FormatThis sets the Format of the view’s output. You can use the query’s resulting data fields to create an unformatted list (most common), a table, a grid, a Leaflet map. Since the RC site has the “Views Bootstrap” module installed, the output format list also includes bootstrap elements (for more on Bootstrap components, see the Bootstrap documentation). To switch the output format, click the format name (e.g., “unformatted list”); to alter the output configuration, click “settings.”Depending on which output format you choose, you’ll be faced with more options, often to decide how the view will construct rows and/or columns from the result of the view’s query. This gets too complicated to provide a complete walkthrough; just do your best &amp; experiment and you’ll eventually get the output you want. If you’re just creating a view with the “unformatted list” output option, you can proceed without changing any of the defaults; usually you won’t need to change anything for this format.The screenshot above shows settings that populate if you select the “Bootstrap Grid” format for output, which is significantly more involved than the standard “unformatted list” format. Note that for some output formats, a Show variable will appear. Almost always you’ll want to show “fields,” but in rare cases you may want to show an entire content type.FieldsThis section is where you set which fields the view will “pull in” to its display; it can’t “see” anything that isn’t specified in this field section. For this reason, it’s a common technique to configure the field as “exclude from display,” which suppresses the visibility of the field while “holding on” to its data for use (often via “custom text” or the “rewrite results” option).To set a field, click “Add” and then search for the field you’re looking for. (If in doubt about what a field’s actual name is, simply navigate to Structure / Content types / “Manage fields.”) Note that you can specify anything here that is a Drupal field, including everything from essay abstracts, body text, etc., to image fields, author names and bios, taxonomy terms, and so on. You can point to as many fields in this section as you want, though you’ll want to ensure they are a coherent group of fields that can respond in a meaningful way to the filters you’ll set in the following section.If a field is not “hidden” by the “exclude from display” option, it will display in the view output in the order listed. You can easily rearrange the order that the fields are pulled / displayed in by clicking the down arrow beside “Add” and selecting “Rearrange.”  A powerful tool at your disposal in the Fields section is the “Global: Custom Text” field (see screenshot below), which can be configured to display pretty much anything you want using a combination of HTML and Drupal’s PHP-based “replacement patterns.” In short, any field you’ve “pulled into” the view will be given a replacement pattern that can be used in the blank text box the custom text field presents you with (e.g., “). This can allow you to sculpt the resulting block or page with custom HTML, even pulling files/images (from the file system) into the output that aren’t in the logic of the view itself. This functionality is used extensively throughout the site; any time you’re wondering how something is made, it’s a good idea to look for this “custom text” field inside the relevant view.Filter CriteriaOften you don’t want the view to pull in every field of a given name across the entire site (e.g., you want essay titles, but not all titles). Here’s where you can filter your results.To set a filter, simply click “Add” and, again, search for how you’d like to filter the field results. Common criteria are “content type,” the status of the “published” field, “has taxonomy terms,” and other descriptive elements that might set your desired content apart from the rest of the content on the site. Some filters will require additional options that must be configured via “Settings,” if this link appears. If you’re feeling lost on how to filter your results, look at some existing views to get a feel for how they’re accomplishing this work.Even more so than with fields, the order of your filter criteria matters; the order of the criteria will determine the order of the filtering, and this order can change the results dramatically. You can rearrange the criteria order by clicking the arrow beside “Add” and selecting “Rearrange.”Sort CriteriaIf no sort criteria are present, the view will present the fields resulting from your query in the order they’re listed in the config. It’s often desirable, however, to impose a sorting order on the results.To add a sorting criteria, click “Add” and search for your preferred sorting method. Often this will be alphabetical, by publication date (ascending or descending), by the index page order field, or similar.As before, you can add as many of these criteria as you want, and the order matters.Block / Page SettingsIn the middle column of the views interface, you’ll see either “Block Settings” or “Page Settings,” depending on which display output you’ve selected. Most of these settings are identical and self-explanatory, but brief descriptions of important options follow.Block: includes the options “Block name” (doesn’t matter), “Block category” (should usually be “Lists (Views)”), and “Access” (if set, usually to “View Published Content”).Page: includes the options “Path” (allows you to set, via relative link [e.g., /editions/page], the resulting page’s URL alias), “Menu” (don’t set), and “Access” (same as above).Either display’s setting allows to configure the following four options:  Header: add a configurable header to the main view’s content, often via “Global: Text area”  Footer: add a configurable footer to the main view’s content, often via “Global: Text area”  No Results Behavior: tells the view what to do if its query doesn’t produce any results. This can be useful when you’ve created a view whose filters are “exposed” to visitors; like the header and footer, this behavior can be configured via text field / HTML.  Pager: determines how much of the page or block the view covers (“full” vs “mini”), and how many items will fit on a single page. If the view overflows a single page, Drupal will automatically provide “Next” buttons to advance to the view’s next page.AdvancedAs advertised, things get a bit more complicated in this section. If you’re not after anything too complicated, you might not need to change any of the “Advanced” settings. But sooner or later, you’re likely to run up against a view that leverages these powerful tools.Here’s a brief overview of each of these advanced options, with external resources.  Relationships: this function only works on fields which are tied to another entity via Drupal’s entity reference system. Via configuring a relationship, you can pull in data that is tied to the content type / fields specified by the view but is of a different content type.          For example, RC has different content types for Index Pages (volume parent resources) and essays. To auto-generate a TOC on each Index Page, we set up a relationship based on the “field_ref_parent” content, which sets the common parent volume for all essays that belong together.      See this documentation for a walkthrough of a simplified views relationship use case.        Contextual Filters: this function provides an advanced filter based on the URL or other attributes of the content in question; you can use the filter to include or, vitally, to exclude certain content from a view. In the gallery, for example, we might not want all thumbnails of images to display in all cases, and can filter out the image being presented on the main page from also being presented as a fingernail image on a side panel (block).          This is a very complicated feature that we don’t use much, though you may encounter it on the site. For a simple use case, see this documentation.        Exposed Form: this function does what it says; it exposes the view query’s sorting mechanism to be edited by site users. Note that this option does not generate an exposed filter for visitors to use: it merely creates an additional block output called “Exposed form: [view-name]” that can be called in a page layout via Layout Builder.  Use AJAX: AJAX (Asynchronous JavaScript And XML) allows web pages to update “behind the scenes,” without requiring an HTTP(S) reload of the page. Currently the RC site has no views using AJAX in production, but a use case for using it would be serving a view inside a Colorbox pop-up (using NG_lightbox); such a view would probably need to have this box checked. Before you take on such a project, however, be aware that there’s not much documentation out there on making this functionality work in Drupal 9+.  Use aggregation: if enabled, this function enables a “Aggregation settings” link for each field and filter enabled in the view. These new settings allow you to tap into MySQL’s aggregate functions, including GROUP, SUM, MIN, MAX, AVG, and so on. Not being a particularly stats-heavy site, any use of db aggregation on the RC is likely to be used to group result fields based on a unique characteristic (entity ID or similar) in order to remove redundant results (often a “large” view will pull a field multiple times, and this ensures each field only appears once in the resulting output). A good example of aggregation use on the RC site is the “Gallery-explore-all-images” view. (Unfortunately, going much deeper requires a deep understanding of MySQL logics, which is a pretty deep dive.)  Query settings: this advanced feature gives you access to finer-grained controls for the query itself. If you run into the duplication problem described in “aggregation,” the “Distinct” option in these settings is an easy first try for a fix. The “Contextual filters OR” option is enabled by a module and enables the “OR” logic operator when dealing with contextual filters. Probably you’ll never need to use anything else on this page.  CSS class: specify a CSS class to apply to the entire view output. Note that the RC site manages all CSS classes through the Asset Injector module, so you shouldn’t need to use this function.Using ViewsFor all their complexity, actually using views on the site is fairly simple:  Page: A view created as a “page” display can simply be linked to, as is the case for several admin pages generated via views as well as the standalone “Romanticism &amp; Pop Culture” genre pages.  Block: A view that outputs as a “block” display, on the other hand, can be added as a block to any new or existing page on the site using the Layout Builder. (For more info on the Layout Builder, see the preceding documentation.)"
     
   } ,
  
   {
     
        "title"    : "Jekyll Site Extended Features",
        "category" : "",
        "tags"     : "",
        "url"      : "/docs/extend-features/",
        "date"     : "",
        "content"  : "ThemeSASSJS SearchMenus"
     
   } ,
  
   {
     
        "title"    : "File Management",
        "category" : "",
        "tags"     : "",
        "url"      : "/docs/file-management/",
        "date"     : "",
        "content"  : "The requirements of RC’s production processes and technical needs dictate that we must use several strategies/locations to share, store, serve, archive, and collaborate on files. This is a brief overview of the various systems we use to manage files–and how to access them.Institutional (Shared) Google DriveRC’s “production sync” drive is a shared institutional Google Drive provided by CU Boulder. While the institution’s agreement with Google recently dramatically reduced the available storage in this drive, it continues to be our main file management system for production materials.All pre-production files, upon receipt from the volume editors, are kept in the appropriate folder of this drive (Editions, etc.); this includes Word documents, images, and any other materials necessary for production. We have also, to date, kept an archive of submitted materials on the drive and will continue to do so, space allowing.The shared drive also provides a secure location to store documentation that cannot be public (that contains, for example, personal email addresses and the like).Access to the drive must be provided by a current assistant editor. The best way to access the drive is through Google’s Drive for desktop app, which is part of the recommended setup for RC machines.GitHubGitHub stores code files in repositories (“repos”), which are essentially file systems hosted by GitHub that can sync, track, and branch projects. (For more on git and how to use it, see our Git Guide). RC has three repositories on GitHub: (1) our TEI repo and archive (“RC-TEI”); (2) our XSLT repo and archive (“XSLT-templates”); and (3) the GitHub Pages repo for this site (“romanticcircles.github.io”). A brief description of each of these repos follows.  As noted in the Git Use Overview, proper use of git’s fetch / pull / push commands is essential to using any of these repos (particularly the practice of pulling changes from the remote repo before making any local changes of your own). Review all git documentation in the Git Guide before attempting to make and push changes to these remotes.—TEI repoOnce production begins, all XML files are moved to the RC-TEI repo. This repo acts as (1) a collaborative codebase for creating RC’s TEI files, and (2) a publicly accessible TEI archive of all content published on the RC site. From a production perspective, Git’s versioning functionality is especially useful when multiple coders are working on a single edition or volume at the same time.—XSLT repoAs detailed in the XSLT documentation, RC’s XSLT template files are an interconnected set of XSL files that provide instructions on how to turn TEI into HTML, enabling the content to be presented in web browsers. The XSLT repo holds both (1) current XSLT files used in the production process (the html folder holds final production XSLTs, while the html_PROOFS folder contains transforms for local proofing); and (2) an archive of previous generations of XSLT templates.—Documentation Site (GitHub Pages repo)RC’s final GitHub repo is the codebase for this static site, RC’s documentation site, which is a GitHub Pages site running on Jekyll, a static site generator. GitHub uses the repo to serve this site on the web. For more info, see the Jekyll + GitHub Pages Guide section of the technical documentation.(S)FTP (Secure File Transfer Protocol)The RC site is hosted through Acquia Cloud Platform and its server array, which provides a secure file transfer protocol (SFTP) for making quick changes to the site’s (non-code) file system. The FTP is where RC tech editors upload all imported content to the site, including HTML files and media. The “secure” qualifier means that the FTP cannot be accessed with a simple password but only through a secure shell (SSH) connection, involving a public and private key pair. See the SFTP + File System Guide for instructions on how to use the FTP."
     
   } ,
  
   {
     
        "title"    : "Preparing Files for Copyediting",
        "category" : "",
        "tags"     : "",
        "url"      : "/docs/file-prep/",
        "date"     : "",
        "content"  : "Receiving and sorting filesRC technical editors generally receive entire volumes of material at once; a Praxis volume, for instance, will usually contain 6–8 essays, including an introduction by the volume editor(s), and will come via Slack (or e-mail) as a zip file. A complete volume submission will also contain three more elements: (1) a document containing all contributor bios; (2) a document containing abstracts for all essays, including the introduction; and (3) an “About this Volume” file, containing a brief description of the volume as a whole.Upon receipt of the volume submission, you should check that all files are present, can be opened, and are usable (i.e., not corrupted, etc.). You should also skim each essay’s abstract and scroll through the documents to ensure no undisclosed technical requests are present. If anything is missing or needs attention, or if you have any questions/concerns about technical matters before you begin, contact the volume editor(s) directly and request materials and/or information.File prepThe following initial steps are intended to clean up the document to speed up and simplify the copyediting process, and they also have the added benefit of ensuring the conversion process from Word doc to XML is as artifact-free as possible. When you begin work on a volume, please perform the following steps, in order, for each essay.In general, when there are minor formatting/layout issues that prevent a manuscript from conforming to the house style, you may “silently” correct those changes (i.e., without the “Track Changes” function on). Any changes beyond those in this document, however, need to be “tracked” for author review and approval. Pay close attention to what does and does not need to be tracked in the instructions that follow. Note that, at this stage, you’re not (yet) reading the manuscript. If you notice any major issues during this initial review, flag those in a comment for attention later, during copyediting. If you will not be the one copyediting the document, address your comments to the copyeditor, who will read the comments during their review of the manuscript.  Inside the relevant production volume’s folder, create two new folders called “original essays” and “copyedits” (if they don’t already exist). Move all original essays into the appropriate folder. Then open and rename each manuscript file along the convention “CE_Author_volume,” resaving this version in the “copyedits” folder. You will work only on these “CE” files, leaving the originals untouched (you may need to reference these originals at some point, so save them).  Ensure “Track Changes” is off: for now, you don’t want to record every tiny formatting change you make.  Perform a “find and replace” for double spaces in the doc and replace with single spaces; it may be necessary to repeat this function several times until no double spaces remain.  Remove excessive spacing between paragraphs, around subheads, etc.  Ensure the document is double-spaced throughout with standard 1” margins. If block quotes and/or poetry excerpts are indented via tabs, restore left margin and then restore indents by changing the margin indent (using either the “increase indent” shortcut or the ruler).  Convert all footnotes to endnotes (from the top menu, select Insert / Footnote… / Convert… / Convert all footnotes to endnotes).  Examine the document to ensure there aren’t any strange formatting conventions: remove any instances of changing font sizes, types, or colors, highlights, stray marks, existing comments (if it seems appropriate to remove them), etc. Use your judgment; if in doubt about something, query the author.          Turn on “show all characters” (the paragraph symbol in the Word toolbar), and remove as much extraneous formatting as possible from the file, including different fonts and font sizes, centering of heads and/or excerpts, colors, highlighting, any remaining Track Changes elements or comments, extraneous bolding, etc. In general, the simpler the formatting of the source essay, the easier its conversion to TEI will be.        If there are any images in the document, save them to the “media” folder within the volume (create it if it doesn’t exist). Ensure all images appear in such a way that the text is readable (i.e., no strange wrapping or layout issues exist), and that each image is designated as a “figure” and has a caption. If not, leave a comment for the author to provide caption text. (For more on image/figure conventions, see TEI guidelines.)  Perform a “find and replace” in Word to fix common dash errors, including double hyphen for em dash, en dash for em dash, hyphen for en dash, and extra spaces around dashes. (See CMOS for specifics on dash use. No dash should be surrounded by spaces; always remove space, except in direct quotes.)  Now it’s time to turn “Track Changes” on. You’ll want to record everything you change from here on for the author’s review.  Run Word’s spell check feature to identify and fix any obvious errors in spelling/construction. Be sure not to change anything contained in quotation marks; always query the author in these cases.  Examine Works Cited section: ensure it bears the heading “Bibliography” (not “Works Cited,” “Works Consulted,” etc.), and that the entries appear to conform to CMOS citation style, per RC house style. If something seems wildly off here, contact an assistant or general editor.  Clean up the Works Cited. To perform the first 3 items below, you should turn your Track Changes function back off, but make sure it’s on for the rest.          Fix spacing in works cited: ensure that hanging indents aren’t “tabbed” or spaced, but accomplished using the indent markers on Word’s ruler. (To format the WC correctly, format all entries as left-aligned, then use MS Word’s Ruler [View / Ruler] to create the hanging indent. *N.B.: If you need to fix this, make sure “Track Changes” is off so it doesn’t make a mess!)      Replace all duplicate names with three em dashes: “———.” (This also can be done without Track Changes on.)      Ensure that all titles appear in headline-style capitalization (not sentence-style; see CMOS for conventions/rules). If any don’t, you can “silently” enforce this capitalization both in the WC and in the body of the essay, but make sure to be consistent (perform a search to ensure you find all instances to change).      Check that all entries appear in alphabetical order. If they don’t, simply rearrange.      Take a minute to read through all authors’ names, titles, and dates. If something seems off, you should perform a web search to confirm that details are correct. If they’re not, fix them (and, if appropriate, leave a comment asking author to double-check this info).      All works listed in the WC must actually be cited in the essay. Perform a search of each author/work listed to ensure that each work in the WC is cited in the essay. If not, leave a comment alerting the copyeditor/asking the author to either cite the work or remove it.      Be sure all links that appear in the WC are functioning. If not, leave a comment.      If the text is an electronic source, then a hyperlink should be provided. If there is not one, request a link in a comment.      Replace any “paywall” sites with a general access page (replace, for example, a “University Login” JSTOR page with a JSTOR stable page). You may link to an Internet Archive/Wayback Machine page, if necessary. If you edit the link—or can’t find a suitable replacement—leave a comment.        Once you are sure you have everything you need, send the volume editor(s) an e-mail to confirm receipt of all materials and to provide an estimated delivery date for your copyedits of the volume’s essays, which the editor will distribute to their contributors. (Generally this will be 2–5 weeks, depending on the length of the volume.)Once you’ve finished these steps, the manuscript is ready for a full copyedit—with a head start."
     
   } ,
  
   {
     
        "title"    : "Font Awesome Icon List",
        "category" : "",
        "tags"     : "",
        "url"      : "/docs/font-awesome/",
        "date"     : "",
        "content"  : "Include these icons in your site like so:1&lt;i class="fa fa-NAME"&gt;&lt;/i&gt;For example,1&lt;i class="fa fa-envelope"&gt;&lt;/i&gt;render this:  500px address-book address-book-o address-card address-card-o adjust adn align-center align-justify align-left align-right amazon ambulance american-sign-language-interpreting anchor android angellist angle-double-down angle-double-left angle-double-right angle-double-up angle-down angle-left angle-right angle-up apple archive area-chart arrow-circle-down arrow-circle-left arrow-circle-o-down arrow-circle-o-left arrow-circle-o-right arrow-circle-o-up arrow-circle-right arrow-circle-up arrow-down arrow-left arrow-right arrow-up arrows arrows-alt arrows-h arrows-v assistive-listening-systems asterisk at audio-description backward balance-scale ban bandcamp bar-chart barcode bars bath battery-empty battery-full battery-half battery-quarter battery-three-quarters bed beer behance behance-square bell bell-o bell-slash bell-slash-o bicycle binoculars birthday-cake bitbucket bitbucket-square black-tie blind bluetooth bluetooth-b bold bolt bomb book bookmark bookmark-o braille briefcase btc bug building building-o bullhorn bullseye bus buysellads calculator calendar calendar-check-o calendar-minus-o calendar-o calendar-plus-o calendar-times-o camera camera-retro car caret-down caret-left caret-right caret-square-o-down caret-square-o-left caret-square-o-right caret-square-o-up caret-up cart-arrow-down cart-plus cc cc-amex cc-diners-club cc-discover cc-jcb cc-mastercard cc-paypal cc-stripe cc-visa certificate chain-broken check check-circle check-circle-o check-square check-square-o chevron-circle-down chevron-circle-left chevron-circle-right chevron-circle-up chevron-down chevron-left chevron-right chevron-up child chrome circle circle-o circle-o-notch circle-thin clipboard clock-o clone cloud cloud-download cloud-upload code code-fork codepen codiepie coffee cog cogs columns comment comment-o commenting commenting-o comments comments-o compass compress connectdevelop contao copyright creative-commons credit-card credit-card-alt crop crosshairs css3 cube cubes cutlery dashcube database deaf delicious desktop deviantart diamond digg dot-circle-o download dribbble dropbox drupal edge eercast eject ellipsis-h ellipsis-v empire envelope envelope-o envelope-open envelope-open-o envelope-square envira eraser etsy eur exchange exclamation exclamation-circle exclamation-triangle expand expeditedssl external-link external-link-square eye eye-slash eyedropper facebook facebook-official facebook-square fast-backward fast-forward fax female fighter-jet file file-archive-o file-audio-o file-code-o file-excel-o file-image-o file-o file-pdf-o file-powerpoint-o file-text file-text-o file-video-o file-word-o files-o film filter fire fire-extinguisher firefox first-order flag flag-checkered flag-o flask flickr floppy-o folder folder-o folder-open folder-open-o font font-awesome fonticons fort-awesome forumbee forward foursquare free-code-camp frown-o futbol-o gamepad gavel gbp genderless get-pocket gg gg-circle gift git git-square github github-alt github-square gitlab glass glide glide-g globe google google-plus google-plus-official google-plus-square google-wallet graduation-cap gratipay grav h-square hacker-news hand-lizard-o hand-o-down hand-o-left hand-o-right hand-o-up hand-paper-o hand-peace-o hand-pointer-o hand-rock-o hand-scissors-o hand-spock-o handshake-o hashtag hdd-o header headphones heart heart-o heartbeat history home hospital-o hourglass hourglass-end hourglass-half hourglass-o hourglass-start houzz html5 i-cursor id-badge id-card id-card-o ils imdb inbox indent industry info info-circle inr instagram internet-explorer ioxhost italic joomla jpy jsfiddle key keyboard-o krw language laptop lastfm lastfm-square leaf leanpub lemon-o level-down level-up life-ring lightbulb-o line-chart link linkedin linkedin-square linode linux list list-alt list-ol list-ul location-arrow lock long-arrow-down long-arrow-left long-arrow-right long-arrow-up low-vision magic magnet male map map-marker map-o map-pin map-signs mars mars-double mars-stroke mars-stroke-h mars-stroke-v maxcdn meanpath medium medkit meetup meh-o mercury microchip microphone microphone-slash minus minus-circle minus-square minus-square-o mixcloud mobile modx money moon-o motorcycle mouse-pointer music neuter newspaper-o object-group object-ungroup odnoklassniki odnoklassniki-square opencart openid opera optin-monster outdent pagelines paint-brush paper-plane paper-plane-o paperclip paragraph pause pause-circle pause-circle-o paw paypal pencil pencil-square pencil-square-o percent phone phone-square picture-o pie-chart pied-piper pied-piper-alt pied-piper-pp pinterest pinterest-p pinterest-square plane play play-circle play-circle-o plug plus plus-circle plus-square plus-square-o podcast power-off print product-hunt puzzle-piece qq qrcode question question-circle question-circle-o quora quote-left quote-right random ravelry rebel recycle reddit reddit-alien reddit-square refresh registered renren repeat reply reply-all retweet road rocket rss rss-square rub safari scissors scribd search search-minus search-plus sellsy server share share-alt share-alt-square share-square share-square-o shield ship shirtsinbulk shopping-bag shopping-basket shopping-cart shower sign-in sign-language sign-out signal simplybuilt sitemap skyatlas skype slack sliders slideshare smile-o snapchat snapchat-ghost snapchat-square snowflake-o sort sort-alpha-asc sort-alpha-desc sort-amount-asc sort-amount-desc sort-asc sort-desc sort-numeric-asc sort-numeric-desc soundcloud space-shuttle spinner spoon spotify square square-o stack-exchange stack-overflow star star-half star-half-o star-o steam steam-square step-backward step-forward stethoscope sticky-note sticky-note-o stop stop-circle stop-circle-o street-view strikethrough stumbleupon stumbleupon-circle subscript subway suitcase sun-o superpowers superscript table tablet tachometer tag tags tasks taxi telegram television tencent-weibo terminal text-height text-width th th-large th-list themeisle thermometer-empty thermometer-full thermometer-half thermometer-quarter thermometer-three-quarters thumb-tack thumbs-down thumbs-o-down thumbs-o-up thumbs-up ticket times times-circle times-circle-o tint toggle-off toggle-on trademark train transgender transgender-alt trash trash-o tree trello tripadvisor trophy truck try tty tumblr tumblr-square twitch twitter twitter-square umbrella underline undo universal-access university unlock unlock-alt upload usb usd user user-circle user-circle-o user-md user-o user-plus user-secret user-times users venus venus-double venus-mars viacoin viadeo viadeo-square video-camera vimeo vimeo-square vine vk volume-control-phone volume-down volume-off volume-up weibo weixin whatsapp wheelchair wheelchair-alt wifi wikipedia-w window-close window-close-o window-maximize window-minimize window-restore windows wordpress wpbeginner wpexplorer wpforms wrench xing xing-square y-combinator yahoo yelp yoast youtube youtube-play youtube-square"
     
   } ,
  
   {
     
        "title"    : "Uploading Files (SFTP + File System)",
        "category" : "",
        "tags"     : "",
        "url"      : "/docs/ftp-upload/",
        "date"     : "",
        "content"  : "The Secure File Transfer Protocol (SFTP) is a standard connection protocol used to transfer files between a remote server and a local client (your machine). An FTP client is a software application that enables navigation of the server’s remote file system using a familiar, user-friendly UI; it allows you to access, write, and delete server-side files exactly as you would on your own hard drive (using Finder or File Explorer).Note that you’ll need a SSH key pair that’s been validated on the Acquia server before you can access the site’s file system. If you need it, here’s a walk-through for generating an SSH key and uploading it to Acquia Cloud Platform.SFTP &amp; AcquiaAcquia allows connections to all three environments using a third-party FTP client. This allows access to all files stored on the server, including production files, Drupal installation and configuration files, and the code repository itself. Management, updates, and maintenance of the codebase, MySQL databases, and Drupal installation are best accomplished using the tools described above, except in the case of a major Drupal migration or reinstallation. But setting up the FTP client for file access is vital to the production and publishing process for RC volumes, including uploading metadata information (TEI corpus files), HTML documents, image and multimedia files, etc., to the server. Production files are uploaded directly to the prod environment (and then, as noted above, the filebase will periodically be propagated down to the dev environment if current content is vital to dev work).Cyberduck setup and FTP navigationMany free FTP clients exist, but we’ve decided to use Cyberduck, which is free and easy to use.To open an FTP connection to the server, open Cyberduck and click “Open Connection.” Under the type of connection dropdown list, select “SFTP (SSH File Transfer Protocol).” Choose a nickname for the connection, point the “SSH Private Key” dropdown to your id_rsa file, then fill out the server field, port number, and username as reflected in this screenshot:Note that the SSH key serves as your password, so this field remains blank.Click “Connect,” and you should see the site’s file system populate.Uploading and linking contentThe file structure of the site can be a bit difficult to navigate at first. Most production volume files will need to be placed into a directory under the following path:  romanticcircles/prod/sites/default/files/imported/[site section]Each site section folder contains a list of folders, one for each volume published within that section.  Tip: The file system is not automatically organized by type, which can make navigation difficult. To change this, first view the files as a list (View / as list), then add a sorting column for file type to your list by selecting View / Columns / Kind. Now click the sorting arrow on “Kind” in the table head to organize the directories by type as you open them so that you can easily see the folders in each subdirectory.Uploading files to the server is as simple as dragging them from your hard drive into a location in the FTP, just as you’d do on your local hard drive. There are generally two types of files you’ll upload to the FTP during the production process:  HTML files to be parsed by the Drupal’s feeds modules; and  images or other media.For an overview of the former process, see the previous section, Drupal Feeds Importers; HTML files should be placed in the “feeds” folder at the path provided above (sites/default/files).For media and other inline files, the file path must exactly reflect each relevant link—to a .jpg image, for instance—given in a page’s HTML. Thus if a Praxis essay contains images, its image paths will be something like romanticcircles/prod/sites/default/files/imported/praxis/[volume-name]/images/[img.jpg]. Simply right-click inside the volume folder and create the required “images” folder, then drag each image from the RC shared Google Drive into this new folder in the FTP."
     
   } ,
  
   {
     
        "title"    : "Using Git—An Overview",
        "category" : "",
        "tags"     : "",
        "url"      : "/docs/git-guide/",
        "date"     : "",
        "content"  : "As you begin working with git, it will be helpful to understand the basics of what git does behind the scenes as well as a list of basic git commands. Most basically, git is a bit of software that can live inside any of the folders on your computer to make sure they stay synchronized with your team members’ folders anywhere in the world. This is, as you’d imagine, incredibly helpful when you’re working on a complex site or application with a bunch of other people. After working through this guide, you should be able to perform a basic git workflow as well as troubleshoot common problems.  Always remember: if you run into anything that looks scary or throws back an error message, Google it! Someone on StackExchange, or even Reddit, has the solution to your problem (or, as has been the case for me far too many times, a way out of a stupid situation you’ve put yourself in).This guide assumes you’ve already cloned one of RC’s repos and have the ability to pull to and push from it. For a walk-through of cloning repos and validating your credentials to push changes, see the Installing Git and Cloning Repos section.Git localA folder tracked by git  i.e., a git repo  on your computer will look like any other folder on your system. But it contains a hidden .git/ folder that logs the entire history of changes made to the repo. This is a three-tiered process, and escalating between these tiers requires the git commands add and commit. Let’s take a look at this useful diagram by Roger Dudler:The Working Directory holds your actual files  this is essentially your root project folder and its contents. The Staging Area (or Index) is a scaffold that git builds when you begin adding files and making changes to your source code. And finally, the git HEAD is a reference “snapshot” that points to the tip of your local repo (or, more accurately, the tip of whichever git branch you’re on). If you commit your changes to git, this moves the HEAD up to the present moment, meaning you’re “up to date” with all local changes.Note the arrows with “add” and “commit” in the above diagram; these are the git commands that first stage your changes (add) and then commit those changes, which means moving your HEAD “snapshot” up to reflect the current state of your working directory. See below for how to execute these commands via the command line and/or git GUI (graphical user interface) software like GitHub Desktop.Commit messagesEvery commit to your repo will require a “commit message.” This message can be entered via the command line, or if you’re using a git interface you’ll be able to enter a commit message in the specified field.The mantra about commits is to commit early and commit often. Your messages should be brief, informative, and legible to everyone on the project. For more on how to write a good commit message, check out this post.Git local + remoteThe final conceptual tool you’ll need to use git is syncing your local changes to and from the remote origin, or central repo. The relevant commands when checking for and syncing changes with the remote are fetch, pull, and push.To understand the local &lt;–&gt; remote git workflow, consider this image, which presents a more complete (and more complicated) git workflow, incorporating the remote repo into our imagined workflow:Note how this image rehearses the clone, add, and commit commands covered in the previous subsection, and presents them as taking place inside the user’s local machine. Since this is a shared project repository, however, there are other contributors working on these files too: in addition to local changes, we must consider changes to the central repo (remote).THIS PART IS IMPORTANTAny time you begin working in a git repo to which other collaborators are making changes, it is vital that you pull in all changes that have been made to the remote to your local repo before you start editing files. This is what the fetch and pull commands are for: fetch pings the remote and downloads new commits and files from the remote repository without changing anything in the state of your local repo; pull, on the other hand, downloads all remote content for the active branch and merges it into your local repo, completely bringing your local files up to date with the remote origin.The best practice when opening a git project is to run a fetch to see if any changes have been made to the remote. If they have, you should pull these into your local repo to ensure everything is synced up before you begin making changes.The flip-side of starting work on a shared repo with a pull is to push all changes to the remote after making any substantial changes, and always before closing the project for the day. Push is, of course, the opposite of pull, pushing and merging any new commits to your local repo into the remote. The workflow here is add (stage files/changes), commit (bring the HEAD of your local repo up to the present), and then push (send and merge your commit[s] to the remote origin).  Note: Git workflows can get much more complex, and this workflow does not (for example) apply to projects with multiple branches. Under normal circumstances (i.e., you’re not undertaking major updates or testing), work on all RC repos can and should remain on the “main” (or “master”) branch. For more on git branching (for intermediate to advanced users), see git documentation and Atlassian’s helpful tutorial.Error messagesAt some point in using git, you’ll likely encounter an error message, which will result in git refusing to execute your command. This is a good thing: git is smart and won’t let you overwrite changes either to your local repo or your remote unless you force it to. As with other RC matters, any time you feel unsure or out of your depth with git, it’s best to contact an RC assistant editor. This is especially true if you get a git conflict message (which, because of RC’s workflow, should only happen if you and another contributor make different changes to the same part of the same file). Minor errors, however, particularly with your local repo, can often be solved via a simple web search  git is used very widely among developers, so there’s no lack of help from the online community.Using GitThe following sections will walk you through basic use of git once you’ve installed and configured it.Git ToolsThere are a host of “git helper” apps that will allow you to clone repositories, perform git commands, and commit and push them back to origin with an elegant graphical interface. Here are the ones that work well with both of RC’s git hosts and that we recommend:  GitHub Desktop: the simplest way to access and clone GitHub repos (you simply log into GitHub via the app) that also plays well with Acquia  GitKraken: an extremely powerful git GUI that matches GitHub Desktop’s ease of use, but prettier. If you’re a student, you can get it for free by signing up for the GitHub Student Developer Pack.  GitLens: an extension for Visual Studio Code (recommended for RC assistant editors) that adds extensive git functionality to VS Code. Also free with the GitHub Student Developer Pack.With any of these tools, you’ll be able to achieve the git workflow described above with simple button clicks. It’s worth noting that in GitLens, the “git push” and “git pull” commands are managed via a single “Sync” function (wherein you cannot, for example, pull from the remote before you’ve committed and pushed your changes). If you’re interested in using git with the command line, see the next section.Git commandsUsing git via the command line (terminal) is surprisingly easy and satisfying. While, as noted above, git usage can get significantly more powerful and advanced than what this guide can delve into, the following commands should allow you to do everything you need to with git via the command line (and maybe get out of a few tight spots as well).  NOTE: When using the command line, it’s always possible that text output will place you in an instance of the visual text editor (vim). You can always exit vim with the q key, but if you hit something else and get “stuck,” the keystrokes to exit are esc and then :q.  $ git clone &lt;repo url&gt;: a command used to clone a remote repo to your local machine; it will place the repo as a new folder inside the directory you run it from. Note that you’ll need a repo url (can be found in Acquia Cloud or GitHub) for this to work.  $ git status: displays the state of your local staging area (index) and working directory. You’ll see which files are untracked (haven’t been added via git add), which changes are unstaged and ready to be committed, and which changes are committed locally and ready to be pushed to origin.  $ git fetch: executes a fetch from the origin without affecting the local repo.  $ git pull: executes a fetch from the origin and merges its changes with local repo (updates it to match the remote).          In certain cases, git pull can throw an error if you’ve added work to your local branch before executing a pull (which is why “pulling” at the beginning of a work session is so important). The pull command is essentially a git fetch + git merge to combine the most recent remote changes with your local branch. If these two “branches” (local and remote) are too different, the command won’t execute. You may be prompted to pass the –ff-only flag to the pull command: $ git pull --ff-only. This is the safest way to deal with this situation, as it will only execute the fetch + merge if it can “fast-forward” your local branch non-destructively (see the entries for git merge and git rebase, below). If your local branch can’t be fast-forwarded, it’s usually fine to use the “–rebase” flag: $ git pull --rebase, but try not to make a habit of it.        $ git add: used to add files to be tracked by git. With this command, untracked files enter the index and become unstaged files.          This command requires that you specify options via a “flag,” namely what to add (or “track”). You can specify an individual file, an entire directory, or a global option that simply adds anything untracked in the project folder. Here are those options: $ git add &lt;file&gt;, $ git add &lt;directory&gt;, or, to add all files in the current folder, use $ git add ..      To add all (new) files in the entire repo, use $ git add -A. This is an immensely useful option.        $ git commit: used to commit local changes to the local repo prior to pushing them to the origin. Commit stages unstaged files, preparing them for push, but note that commit does not stage untracked files, which must be tracked using $ git add. Every individual commit requires a message to accompany it that summarizes the content of the commit.          Like git add, $ git commit requires flags (or, at minimum, a commit message). To ensure that all new files are tracked, it’s always a good idea to include the “-a” flag, and the “-m” flag allows you to type a message inside the command itself. Here’s an example: $ git commit -a -m 'added git commands to site documentation'        $ git push origin &lt;branch&gt;: pushes all commits to the remote origin. Note that if you’re working in a repo with a single origin and a single branch (‘main’ or ‘master’), the simple command $ git push will suffice.More advanced commands &amp; undo options (use with caution!):  $ git fetch --all: fetches all remotes.  $ git branch: without any options or flags, shows local branches available for checkout; the current branch will be highlighted with an asterisk beside it. To create and switch to a new branch, use the command $ git branch &lt;new-branch-name&gt;. Let’s say you want a branch called “test”: $ git branch test.          After you create a new branch, it’s important that you set git up to track it once you’ve pushed it back to the origin (essentially “syncing” local and remote versions of the branch). The easiest way to do this is to use the “-u” flag (or “–set-upstream”), specifying both the remote and the new branch’s name. For any RC repo, this will look like $ git push -u origin test. (Luckily, git is smart!–if you forget to specify your upstream [origin] branch, the system will prompt you to do so. You can also go back anytime and set a branch’s upstream using $ git branch -u origin/test.)      To view all available branches in the repo (i.e., including those a teammate may have created and pushed to the remote), use $ git branch -a. Locally available branches will appear in white, which remote branches will be given in red with their full path (e.g., remotes/origin/test).      To checkout and work on a remote branch, first check it out from the remote: $ git checkout origin/test. To use it locally, simply check it out now as if it were a local branch: $ git checkout test. You should get a message saying “Branch test set up to track remote branch test from origin.” You’re all set. (It’s also possible to do this with a single command, if you know you want the branch locally: $ git checkout --track origin/test.)        $ git checkout &lt;branch&gt;: lets you switch between local or remote branches; view available local branches with $ git branch, remotes with $ git branch -a. See also the subpoints under “git branch,” just above.  $ git stash: this command “stashes,” or saves, all the uncommitted changes you’ve made to a repo and sets them aside. This can be super useful if you’re not ready to commit and/or push changes for something you’ve been working on, but simply want to set those changes aside and work on something else. To reapply your stashed changes, simply issue the command $ git stash pop. (If you’ve created new files that are untracked, they won’t automatically stash; use the flag -u to do so.)  $ git log: shows the project history in the form of all commits that have been made. This can be useful if you need to revert the repo to the state of a previous commit since it shows you the hash (number) of all commits. After you run this command, use spacebar to advance through the history, and you’ll need to type q to exit the output. Use the “–oneline” flag to condense this history to easily see commit hash numbers: $ git log --oneline.  $ git diff: without options this command shows any uncommitted changes since the last commit. Exit with q. To compare two different branches, use $ git diff &lt;branch1&gt;..&lt;branch2&gt;.  $ git merge &lt;branch-to-merge&gt;: merges the named branch with the current branch. If the branch histories are too divergent, or have conflicting changes, the merge will fail and will have to be reconciled. To abort a failed merge, use $ git merge --abort. (For more on merge conflicts, see this guide.)          Merges are non-destructive: they don’t delete any files, and they don’t change either branch’s git history. It’s a simple incorporation of one branch into the other.      NOTE: Ensure that you’ve checked out the branch you want to merge a feature branch into, usually the “master” or “main” branch. This can be a bit scary the first few times you execute a merge, but just remember that you’re running the merge from the branch you want to update (with, e.g., a new feature).        $ git rebase: this command is related to git merge, but it destructively combines branches, creating a clean linear history. You should avoid using it in any RC repo; use merge instead. (Note that this command is related to but distinct from the “–rebase” flag that will occasionally be needed with a pull command—though, as noted above, always try the “–ff-only” flag first.)  $ git clean: removes and scrubs changes from all untracked files (that haven’t been tracked via “git add”). This command essentially scrubs your history and returns you to the last commit. Use with tag -n to perform a “dry run” and see which files would be scrubbed. To actually run the command, you’ll need to add the -f (force) flag since this deletion cannot be undone: $ git clean -f.  $ git revert &lt;#&gt;: this is a powerful “undo” option that undoes changes from a specific (recent) commit. Most often you’ll want to use $ git revert HEAD, which will invert changes from most recent commit, though git can find an older commit and remove only its changes as well. Use “git log” to find a specific commit number to target.  $ git reset: this powerful command moves the HEAD and branch refs to a specific commit, essentially allowing you to “rewind” the history and start over from a specific commit. Usually used with the flag --hard to scrub all changes and history back to a previous commit. Without pointing to a commit hash or file, it resets to the most recent commit. This is a destructive command that can lead to changes that cannot be undone; read this documentation in full before you use it.          Use $ git reset --hard as often as you need! It will erase everything you’ve done since the last commit and return your local repo to that state. This can be quite useful.      If you’d like to learn more about git, Atlassian has a fantastic in-depth tutorial that expands on this guide &amp; digs into some more advanced functions."
     
   } ,
  
   {
     
        "title"    : "Installing Git and Cloning Repos",
        "category" : "",
        "tags"     : "",
        "url"      : "/docs/git-install-clone/",
        "date"     : "",
        "content"  : "This brief guide will get you up and running with git: installing the software and cloning your first repository. In your work with RC, you should never need to create a new repo; in git language, you’ll simply be cloning (which in practice is a lot like “downloading”) RC’s existing repos, along with their associated files, to your computer so you can collaborate on various RC projects.The easy way: GitHub DesktopIf you’re an RC individual contributor, intern, TEI encoder, etc., your best option for collaborating with RC staff via git will likely be GitHub Desktop. If you’re a technical/assistant editor, you’ll likely need a slightly more robust setup (particularly if you’ll be updating the main site’s Drupal installation and/or maintaining this documentation site).  More robust git UI integrations are available, such as SourceTree and GitKraken, but they lend themselves to more complex workflows than you’ll be undertaking as an individual contributor. If you’re feeling ambitious and want a prettier git UI experience, feel free to experiment (you can install both in addition to GitHub Desktop).GitHub Desktop is easy and intuitive to use, particularly if you know some git basics. Before you perform any major git actions, particularly a “push,” please read the git documentation in this section first, particularly the Intro to Git and the RC Git Guide.After you install the software, you’ll simply need to use the app to log in to your GitHub account (you should create an account if you don’t have one). You can clone any of RC’s public repos (see descriptions) to your local machine without any special access, but in order to push changes back to a repo, you’ll need to be a member of RC’s GitHub organization. RC staff will provide access when you join the team. See below for instructions on how to clone a repo.Manually installing and configuring gitIf you’re an RC technical/assistant editor and will be managing all four of RC’s repos, you’ll also be dealing with git in the command line. The good news is that GitHub Desktop automatically installs all the tools you need to do so. For everyday tasks, you can use GitHub Desktop, and simply run git from the command line (likely in the terminal instance of a text editor like VS Code). But it’s still nice to know how to install and configure git manually, and odds are you’ll have to do so at some point (particularly if you decide to run Windows Subsystem for Linux, or WSL).  On MacOS: first install homebrew using the command line (in your terminal app), then simply run the command $ brew install git to install git. (Click here for git org’s instructions.)  On Windows: download the most recent git package and install it.  On Linux / WSL: from the root directory of your Linux distribution, run the command $ sudo apt-get install git. If you’re running Linux in Windows via WSL, it’s a good idea to install the git Windows package as well to share credentials across the machine (even so, you will likely need to repeat the $ git config commands below for the Linux environment.)You can now use git from your terminal with the command $ git. Let’s take a moment to set up your profile.Every time you commit changes to a git repo, they’re stamped with your user info, which you’ll need to supply by entering the following two commands in your terminal window:123$ git config --global user.name "John Doe"[The shell will not respond, but the user name has been written to the git config file]$ git config --global user.email johndoe@example.comIf you haven’t supplied your GitHub credentials through GitHub Desktop, you may be asked to provide them upon trying to pull or push a repo. In order to store your username and password so that you don’t have to type them every time, you can run the command $ git config --global credential.helper store.  If GitHub refuses to validate your access using your GitHub username and password, you may need to generate a “personal access token” that will replace your password in validating to the GitHub servers. Simply navigate to the Settings section of your GitHub user account, then select “&lt;&gt; Developer Settings” (at bottom left). Generate a “classic” token, and set its expiration date based your expected tenure with RC. Copy the token and paste it into your terminal in place of your password when prompted to authenticate to GitHub. (Make sure you’ve enabled git’s credential helper via the above command so that your machine saves the token.)That’s it! You’re all set up to use git.Cloning RC’s git repositoriesIt’s important to remember that the most recent version of all files from the source (remote) repository will be copied to your local hard drive during the cloning process. We recommend creating a dedicated folder in an easy-to-access location on your machine called “RC-GIT” or similar to hold all the repos you’ll be cloning, each in its own folder (most prefer to create the “RC-GIT” folder either on their desktop or at the root of their user or documents directory).Public repos (hosted on GitHub)You can easily use GitHub Desktop to clone any public RC repo (those hosted by GitHub): simply click “Add / Clone a Repository” or, from the top menu, select “File / Clone Repository.” You’ll then be presented with the option to clone any of the RC organization’s GitHub repos to any local path you choose. Simply point the cloning process to the “RC-GIT” folder you created.To manually clone a public GitHub repository, simply right-click on the “RC-GIT” folder you’ve just created and select “New Terminal at Folder” (or, in Windows 11, “Open in Terminal”). Navigate to RC’s GitHub organization page and click on the repo you want to clone. From the repo’s page, click the green “&lt;&gt; Code” button and copy the https clone address. In your terminal instance at ~/RC-GIT$, simply type the command git clone [pasted address]. This will create a new folder for the repo, copy all its files, and create a new (hidden) .git folder to track the repo. You should now, if your credentials are set up correctly in GitHub Desktop and/or gitconfig, be able to pull and push from the remote.(Note that you can easily use the terminal for the whole process: simply open a terminal instance and type $ cd ~/Desktop, then $ mkdir RC-GIT, then $ git clone &lt;git-url&gt;.)Private repo (hosted on Acquia)In order to clone, push, and pull the code of the RC site itself, you’ll need access to the backend of Acquia, RC’s managed hosting service. While you can use GitHub Desktop or similar to clone this Acquia repo, it tends to be a lot simpler to simply use the command line.Before you can clone the site’s repo(s), you’ll need to have the ability to SSH into the server using a public/private key pair. The process of generating a local key and uploading it to the Acquia server is covered in the [SSH section of the Acquia server guide].Once you have a valid SSH key, open a terminal instance from your “RC-GIT” folder. Log in to Acquia Cloud Platform and navigate to the environment whose code you’d like to clone (almost always the dev environment). Once you’ve clicked on “Dev,” you should see a Git URL and an SSH URL. Copy the Git URL, just as above, into your terminal instance at ~/RC-GIT$: git clone [URL from Acquia]. If you set a passphrase on your SSH key, you’ll be prompted for it, and the site repo should clone itself locally."
     
   } ,
  
   {
     
   } ,
  
   {
     
        "title"    : "Welcome to the RC Handbook",
        "category" : "",
        "tags"     : "",
        "url"      : "/docs/home/",
        "date"     : "",
        "content"  : "About Romantic CirclesSite history and overviewRomantic Circles romantic-circles.org is a scholarly website devoted to the study of Romantic-period literature and culture, often approached through the lens of the present. The site was one of the first digital humanities platforms on the web to focus on literature and literary study. It was launched in late 1996 at the University of Maryland and has operated continuously now for 25 years, generating almost a million site visits each year from all over the world. The University of Colorado Boulder took over as publisher in 2018, with funding for two English PhDs to assume Site Manager and Technical Editor duties.This handbook is intended to be a living document. It was drafted by CU Boulder’s first technical editors, T. J. McLemore and Cayla Eagon, and revised and expanded by Jessica Tebo. Its aim is to pass institutional knowledge and RC’s often complex technical processes to future editors, managers, and interns to expedite the training process and ensure smooth transitioning and uninterrupted operation of the site."
     
   } ,
  
   {
     
        "title"    : "Installing Jekyll + Dependencies",
        "category" : "",
        "tags"     : "",
        "url"      : "/docs/install-jekyll/",
        "date"     : "",
        "content"  : "Go for it.Installing JekyllHombrewXcode Command Line Tools (MacOS)BundlerRuby, via chruby / rbenvWith a special focus on breaking free from system ruby.Jekyllnvm, node, npm (optional)Updating Jekyll"
     
   } ,
  
   {
     
        "title"    : "Jekyll + GitHub Pages Guide",
        "category" : "",
        "tags"     : "",
        "url"      : "/docs/jekyll-github/",
        "date"     : "",
        "content"  : "IntroductionThis documentation is written in Markdown, then transformed to HTML by Jekyll, a Ruby-based static site generator. This site HTML is served by GitHub Pages from a simple git repo hosted on GitHub. Learning to edit and maintain this static site is fairly straightforward, and the site itself is a highly stable, simple, elegant solution to providing, preserving, and sharing the processes and institutional knowledge of one of longest running digital humanities initiatives in literary studies.An indispensable tool for managing the Jekyll site and authoring/editing its content is a robust text editor; Visual Studio Code is our editor of choice, with its built-in file explorer, text editor, git functionality, terminal with shell integrations, and high degree of customizability. It also can be configured to run a Jekyll installation + server on either MacOS or Windows.The following guide will outline the steps to install Jekyll; outline how the site’s logics work to generate a fully functional site from a few simple pages; explain several add-ons to the basic Jekyll site such as theming, search, and menus; and provide a brief tutorial on how to update and maintain the site. This section concludes with a “Markdown Cheat Sheet” for use in editing and authoring new content in the Markdown language.PrerequisitesA bit of preparation before you dive into Jekyll site dev will make the process far smoother, less frustrating, and more enjoyable.  Read the preceding Git Guide in its entirety and familiarize yourself with basic git operations from the command line;  Attain some familiarity, likely in working with on RC site itself, with basic principles of HTML markup and CSS stylesheets in web design. (Numerous tutorials also exist; see, e.g., W3Schools, which provides approachable documentation for all things digital.)  Familiarize yourself with what the Markdown markup language is all about and its basic syntax and operation (all of which is quite simple, which is the point): see Matt Cone’s Markdown Guide. Consider taking a peek at the extended syntax guide on this site as well.  If you’re an RC assistant editor and you haven’t done so already, install all recommended software on the RC Laptop Setup Guide, which lives on the RC shared Google drive (RC Production Sync / Assistant Editor Resources). This will allow you to skip several steps in the documentation that follows.Ok—let’s dig in."
     
   } ,
  
   {
     
        "title"    : "Jekyll Site Logics (Structure)",
        "category" : "",
        "tags"     : "",
        "url"      : "/docs/jekyll-site-logic/",
        "date"     : "",
        "content"  : "yml &amp; so forth.This template uses bootstrap-sass along with Bootwatch themes.You can change the theme or write your custom one by overwriting bootstrap sass variables for a different color set, font options, etc."
     
   } ,
  
   {
     
        "title"    : "LAMP Stack  Drupal&#39;s Web Infrastructure",
        "category" : "",
        "tags"     : "",
        "url"      : "/docs/lamp-stack/",
        "date"     : "",
        "content"  : "go."
     
   } ,
  
   {
     
   } ,
  
   {
     
        "title"    : "Image and Media Sourcing Guide",
        "category" : "",
        "tags"     : "",
        "url"      : "/docs/media-sourcing/",
        "date"     : "",
        "content"  : "Resolution / size / licensing."
     
   } ,
  
   {
     
        "title"    : "Admin Menus, Nav, &amp; Basic Editing",
        "category" : "",
        "tags"     : "",
        "url"      : "/docs/nav-editing/",
        "date"     : "",
        "content"  : "This page provides a basic guide to navigating the various menus of the Drupal admin UI, to Drupal’s quick edit (“contextual”) links, and to the node editing pages used to create and modify content.The frontend admin UI toolbar will appear once you’ve logged into Drupal as an admin user (@ romantic-circles.org/login).It consists of the following menus:Top-bar itemsManage: Expands or collapses the main admin toolbar.Shortcuts: Shows various shortcuts to commonly visited pages (such as “All content”). Can be customized (via “Edit Shortcuts” link at right).[User account]: Your username and avatar; edit your profile or logout.Edit: This button, at the far right, will reveal any quick/contextual links that exist on the current page. Can be useful to expose editable content.ContentThis section will link you to Drupal’s “all content” page, which displays, by default, all site content (nodes) from newest to oldest. Use the provided filters and search bar to sort or find content. The “Action” dropdown can perform bulk operations on selected content (most often, deleting it).Let’s look at the other tabs to manage content on this page.Comments: The site doesn’t allow comments, so there’s nothing here.Feeds: This tab manages your active feeds importers. Clicking a feed name or “Import” from the dropdown at right will give you the option to re-import content using the same importer settings, whereas “Edit” will allow you to change the importer’s setting to, say, re-use the Praxis HTML importer to import a new volume without having to create a new importer. See the Drupal Content Import page for instructions on how to import content; see the Feeds Importers page later in this section on creating or editing the importers themselves.Files: Contains all files that have been brought into the Drupal site via the feeds or content importers, including media imported via the content editing UI. The page can be useful if you want to see which files aren’t being used, but there’s not much else to do here.Media: A page to import and display media content; while this functionality is rarely used on the site, it provides an easy way to assign alt text and a URL alias to media files.StructureStructural elements tell Drupal what to do with content and data: how to label and organize it, how to display it, how to sort it and retrieve it, how to put several nodes together on a single page, and so on. This menu contains several of the site’s most important tools, including Content Types, Feed Types, Taxonomy, and Views.Block Layout: This menu controls the placement of blocks within your Drupal site theme and provides several options to configure them. To see where each of these “block regions” exists within the current theme, click the “Demonstrate block regions” link. You shouldn’t have to use this page unless you want to change how these blocks appear (i.e., in the case of a site overhaul).Comment types: Not used.Contact forms: Create and manage various contact forms that can be used on the site. An example of a future use of such a contact form would be a submissions form for content or even whole volumes (which could be uploaded directly to the site’s file system [FTP]). You can “call” any created contact form at the base URL + /contact/[machine_name] (find the form’s machine name baside the “Label” field when you click on its “Edit” tab).Content types: This is where you can edit and create new content types. As you’ll see from the list on this page, the major content types more or less correspond to the publication logics of the RC site itself: Editions, Praxis, etc. As noted in the previous section, each node in Drupal must be assigned a content type, which determines what fields (kinds of data) that node can take. From Structure/Content types, you can add, remove, and edit (“Manage”) the fields native to each content type.Display modes: This menu can be used to configure custom display modes for forms and views. There’s probably not a use case for digging into this functionality, as the defaults are fine.Feed types: Create and edit RC’s feeds importers. These importers are complicated and important enough that we’ve dedicated a whole page to explaining their creation and use: Feeds Importers. It’s important to note, for now, that the feed types created on this page dictate the creation of new feeds importers in admin/content/feed (see “Content,” above).Media types: Configure how Drupal handles uploaded media files (an embedded external video, for instance). Note that the core media module can extract certain kinds of metadata from media sources, if desired (this functionality isn’t currently configured on the RC site).Menus: This page enables configuration of Drupal menus, including the main navigation bar at the top of the site (which can be edited under “Main Navigation”) and also the Administration menu whose elements we’re exploring.Taxonomy: All tagging vocabularies for site content are managed here. The main tags for articles are contained in the “Tags” vocabulary (click “List terms” to see all tags). Special tags used in RC Editions, such as People and Places, are managed here as well. The remaining vocabularies belong to RC Galleries entries (Genre, Medium, etc.).Views: Perhaps the most important component of the Drupal CMS, and as such, they get their own tutorial page: Drupal Views Tutorial. A view is a method of dynamic page assembly that uses a series of logical sorting mechanisms to pull nodes or even single fields from the relational database and display them together in a single page layout. Views are used, for example, to generate the content on most of RC’s main pages (such as Editions, Praxis) by pulling together and presenting nodes with the desired metadata attributes (such as content type, publication date, etc.).AppearanceThis menu controls the site’s theme and its settings. From here you can edit the site’s color scheme and various options, including Bootstrap functionality. Unless you need to change the site’s theme or you’re troubleshooting global Bootstrap issues, you shouldn’t need this section. Note that two default themes are set on the site at any given time: a user-facing “front-end” theme (DXPR), and a separate theme for the admin pages (Claro).ExtendThe Extend admin section allows you to view, enable, and configure Drupal’s core modules (those that “ship” with a standard Drupal install) and any contributed (3rd party) modules you’ve installed to the site. Many of the configurations available to modules on this page will appear elsewhere on the site—namely, on the “Configuration” admin page—especially if that module’s function affects Drupal appearance, settings, or behavior (see, in this regard, the Google Analytics and Colorbox modules). Other modules need to be configured from this page (e.g., Geofield / Leaflet), but you shouldn’t need to do this unless you’re experiencing issues with a specific module.Any involved Drupal site will incorporate a large number of modules, and going over the function of each is beyond the scope of the present documentation. The best way to familiarize yourself with what any particular module does is to search the web for it; each will have its own page on the Drupal.org site. For more on modules, see the Drupal Overview.From the Extend page, you can also Install a module by checking the box beside it and clicking the “Install” button at bottom. A better term for this process would perhaps be enable, since any module you “Install” from the Drupal UI is actually already in the codebase. You must “require” any new module in the Drupal codebase using Composer before “installing” it in the Drupal UI. Similarly, you should never use the “Uninstall” tab in the Drupal UI: only use Composer to remove modules from your codebase. For more on installing, updating, and deleting modules, see Using Composer to Manage Drupal.  IMPORTANT: If you do not use Composer to install, uninstall, and update Drupal modules (and core), various dependencies in the site code could be lost, resulting in an unstable site; further, if modules are not installed/removed using Composer, it may become impossible to update/upgrade to future versions of Drupal without manual intervention in the code.ConfigurationThe configuration menu is where Drupal aggregates most of its global settings (other than the appearance of the CMS itself, which has its own admin section). Some of these settings have been covered elsewhere in this guide and will be skipped; for those that remain, here’s a summary of each of the menu sections and the use of each settings page:System: Configure site defaults and behaviors, such as the home page, site name, etc., on the Basic Site Settings page; the Cron page can be used to set up Cron jobs, or scripts that execute on a regular time schedule to automate certain site tasks (such as clearing the cache, etc.).Content Authoring: The Text formats and editors page allows customization of Drupal’s text input fields, also known as WYSIWYG (“what you see is what you get”) editors; in Drupal 10, CKEditor5 is the standard WYSIWYG text editor. From the “Configure” option for each type of input (Basic HTML, Full HTML, etc.), you can control the editor’s behaviors.Layout builder styles is enabled by the contributed module of the same name. It allows you to create CSS classes that can be applied to any block from the Layout Builder (accessed via the “Layout” option on any page with a layout set). See the [Drupal Components] page for more info.Development: Most of the settings here are self-explanatory or unused; importantly, though, Performance is where you can manually clear the site cache and it is recommended that you activate Maintenance mode before running the update.php script (see below) in a production environment.Finally, Asset Injector is a module that enables simple editing of all CSS and JS on the site; this page configures it. Note that each “injector” can be given its own conditions, meaning an injector, and all the CSS classes it contains, will only apply to the content types you specify.Media: This menu section controls media styles, behavior, and file storage, and most pages are self-explanatory. Colorbox settings adjust the behavior of the Colorbox module, which is reponsible for the site’s pop-up window functionality. NG Lightbox is necessary to enable the node pop-ups within Editions (i.e., when a link can be clicked to generate a pop-up of a separate page); this function will only work on the paths specified on this config page.Web Services: The Google Analytics page allows configuration of the analytics module; most importantly, this is where you can find the “Web Property ID,” which is the ID added to all RC pages that allows them to be indexed and searched by Google.PeopleFrom this section, you can manage and add users to the site itself. From the page’s tabs—Permissions, Roles, and Role Settings—it’s a fairly straightforward process to create and manage the available user roles and to specify what those roles can do on the site (permissions). It’s equally straightforward, from the “List” tab, to add a new user, which you’ll need to do any time RC onboards someone who needs access to Drupal’s admin UI.  Note that when adding a new user, you’ll need to assign them a username and password; they can easily change the latter once they log in for the first time. Always remember to check the “Notify user of new account” box.ReportsThis menu could be useful, in theory, once the site is running smoothly and it’s time to sand down the rough edges; you can see the top errors experienced by users, error logs, and even what the site’s most commonly searched phrases are. Lists of all fields used on the site and all plugins used in views are also available, which could prove useful in the case of a site audit.For now, though, the two pages you’ll use monthly are the site’s Status report and its Available updates. The former provides a useful site overview: the version of Drupal core the site is running, the PHP version (set by Acquia, per environment), the Database version (updated by settings.php), and any warnings related to the Drupal install (such as deprecations, available updates, and security risks). Available updates simply pings Drupal.org to see if any updates are available for Drupal core and all of your modules. Check for available updates at least once a month; once you’ve updated the site using Composer (using this guide), check the both pages to ensure your update has succeeded and that the correct version numbers are showing up in the Drupal UI.HelpWell, as you might expect, this menu is not super helpful, but it does provide a list of all the modules the site is running with links to cursory (“readme”) documentation for each.The database update UI: update.phpThe last necessary element of Drupal’s admin UI isn’t linked anywhere on the site: a tool to update the site’s database. All Drupal documentation you’ll find will recommend that you perform this update any time you update Drupal core or any of its modules. Instructions on execcuting a database update with this tool are covered in the Drupal UI Maintenance documentation."
     
   } ,
  
   {
     
        "title"    : "Production &amp; Publication Schedules",
        "category" : "",
        "tags"     : "",
        "url"      : "/docs/prod-schedules/",
        "date"     : "",
        "content"  : "We’ll eventually publish things again. Update as appropriate.Production by SectionThe RC editorial staff is currently working to regularize production schedules for recurring publications on the site. Currently, the yearly production schedule that RC editors and staff can expect looks something like the following:  Editions: 1–2 editions per year  Praxis: 2–3 volumes per year, one of which is a special  Pedagogies: occasional resource updates, plus annual contest- Galleries: 1–2 exhibits per year, mostly managed by section editor(s)  Unbound: issues published quarterly (Winter, Spring, Summer, Autumn)  Reviews &amp; Resources: regular rolling updates, mostly managed by section editors  RC Lab: variable frequency, by proposalEach published volume of essays involves a specific process according to its section, as outlined through the rest of this section of the documentation. In general, each volume is managed by a specific site manager/technical editor and carried through the entire production process in consultation with the general editors, the section editors, and the volume editor(s)."
     
   } ,
  
   {
     
        "title"    : "Publishing &amp; Advertising",
        "category" : "",
        "tags"     : "",
        "url"      : "/docs/pub-ad/",
        "date"     : "",
        "content"  : "Final Volume PublicationAfter all steps contained in the “Digital Publication Guide” documentation are complete, it’s time to publish the volume.Recall from the volume proofing process that you “unpublished” the volume’s parent resource / TOC page (Drupal content type: “Praxis Publication” or “Editions Publication”). Simply navigate to this main page, click the “Edit” contexutal tab up top, and check the “Published” box at the bottom of the page.This action will “activate” the TOC page in the database, and this enables the site’s front page slider view (that displays our newest volumes) and the relevant site section view (the Praxis or Editions page) to “find” and display the volume. After publishing, check both of these locations to ensure the views have done their work.Shortly after publishing the volume, you should send a congratulatory email to the volume editor(s) announcing their volume is published and providing a link to the TOC page for them to share with their contributors, colleagues, etc. You should carbon-copy the relevant section editor(s) as well as the general editors on this message.Marketing / listserv copyRC tech/assistant editors distribute marketing copy to the major listservs in Romanticism and via social media after the publication of new volumes/editions. Normally this copy is derived from the volume abstract, provided by the volume (or occasionally section) editors and adapted to the medium in question (Twitter, e-mail for listserv, etc.). For Twitter, you should also attach the volume’s banner image to the post and “tag” any contributors with Twitter accounts. Editors have often “threaded” such announcements on Twitter to make sure all relevant copy can be included in an announcement. To get a feel for how these releases should look, peruse RC’s prior announcements on Twitter.The current info needed to facilitate this distribution is provided/maintained in a private Google doc in the production sync drive, available here. If you need permission to access this file, contact a current RC technical/assistant editor.Past RC editors have found it useful to join the NASSR and BARS mailing lists in order to see when the announcements go out; if several days have passed without an announcement, it’s absolutely appropriate to reach out to remind the listserv managers (who are volunteers!)."
     
   } ,
  
   {
     
        "title"    : "Digital Publishing Overview",
        "category" : "",
        "tags"     : "",
        "url"      : "/docs/pub-overview/",
        "date"     : "",
        "content"  : "RC’s various publishing initiatives, as peer-reviewed and/or public-facing professional publications, are rigorously edited, more or less exactly as material published by an academic journal or a university press would be. RC assistant/technical editors and individual contributors are responsible for the preparation, copyediting, coding, proofing, and publishing stages of this process, as well as author and public-facing (marketing) communication. The first stages of the process, including article/volume solicitation, vetting, peer review, and content editing, are managed by the general editors and section editors and will not be covered in this documentation.  This page provides an overview of the entire publication process. Specific instructions to perform each phase of production described below is the task of the Production Documentation section of this site.Document preparationBefore diving into the editing and coding stages of the process, some simple document cleanup and preparation can be a big timesaver. In general, this preparation involves removing all extraneous formatting, comments, headers and footers, track changes artifacts, double spaces, font changes, highlights, page numbers, internal links, etc. Completing this cleanup before the copyediting stage, and again before the coding phase, will greatly simplify TEI conversion and coding. See the copyediting and TEI guides in the Production Documentation section for specific instructions.CopyeditingCopyediting is the task of correcting an article or manuscript as the first step in the production process. Once a manuscript (volume, article, edition, etc.) is accepted for publication at Romantic Circles, the relevant section editor will gather all necessary documents and forward them to the RC assistant editors, who will place them in the shared RC production drive for copyediting.Specific instructions and guidelines for copyediting can be found in the Copyediting Guide section of this documentation.Author communicationGenerally RC assistant editors will correspond directly with both the section editor(s) and volume/edition editor(s) of a given project throughout publication process. Occasionally it is appropriate or necessary to communicate with a specific author as well, though it’s always best to let these questions pass through the volume editor  let them initiate contact and forward any questions along, and CC them in future communication. When communication passes through a single point of contact, the whole process tends to go more smoothly and miscommunication is more easily avoided.The nature of this communication will vary somewhat across sections of RC. When producing whole volumes of work  for RC Praxis, Editions, or Pedagogies  assistant editors will normally send five “formal” or boilerplate messages to the volume editor throughout the process:  an introduction and statement that work has begun on the volume, with an estimated completion and return date for copyedits;  an e-mail returning all copyedits to the volume editor to distribute for contributor review, with instructions;  a confirmation that all copyedit reviews have been received, processed, and that the TEI encoding process has begun, with estimated date of completion;  a message sharing a link to the proofs of the volume, to be distributed to contributors, with requested timeline for completion and volume publication; and  a congratulatory e-mail sharing the news that the volume has been published and announcements have gone out. During a normal production process, however, it is normal for unexpected issues to crop up, and in these cases it’s common for volume editors and tech editors to be in touch several times a week.Individual contributors may be asked by the assistant editors to communicate with volume/section editors and/or individual contributors regarding the production process. In these cases, initial contact will be facilitated by an assistant editor.Several boilerplate templates to use in author communication are provided in the RC production drive.TEI EncodingThe Text Encoding Initiative (TEI) is an XML-based markup language specifically designed for coding textual metadata into documents in the digital humanities. The initiative is also an active consortium of scholars and coders that develop, update, and maintain the code’s guidelines and standards. The TEI encoding process results in a machine-readable text from which metadata can be extracted, viewed, leveraged, scraped, etc. To display text on the web, however, texts must also be rendered in a different markup language, HTML. We achieve this with custom template files (XSLT) that transform the TEI code into browser-readable HTML. The metadata-bearing TEI files are uploaded separately to the content management system (Drupal), which scrapes them to populate metadata fields to Drupal fields/taxonomies. For more on TEI, see the initiative’s site. More information on RC’s TEI encoding process, including instructions, are in our TEI Guide.Once the TEI markup is completed, these files are transformed (via RC’s XSLT templates) to HTML. The XML and HTML are scraped for metadata and the content is uploaded to the site via Drupal importers. Any linked media files are uploaded to the site’s file system via FTP.Currently RC encodes essays and texts in TEI for all sections of the site containing original scholarship: Editions, Praxis, and Pedagogies. All text for the remaining site sections is entered directly into Drupal as HTML (via the WYSIWYG editor).Visual DesignAssistant editors are responsible for creating volume banners and thumbnail icons for Praxis, Pedagogies Commons, Editions, Unbound, and Scholarly Resources. See RC’s Image Guidelines for specific guidelines for creating these images.ProofingProofing is the final step before final publication of an RC volume/edition. Because the proofing stage occurs after all documents have been TEI encoded, transformed into HTML, and imported to the production site, RC tech staff cannot accommodate substantive changes to a text at this stage. However, it is common that typos, transformation errors, artifacts, or other errors pop up during the coding and transformation process. A proofs link is distributed to the general editors, the section editor(s), and the volume editor(s), who will then provide this link to all contributors for review. In general, we ask for a quick turnaround here, usually between one and two weeks, and ask the volume editor to collect all errata in a single document.After these errata are corrected and the tech editors receive a go-ahead from the general editors, the volume/edition can be published.PublishingOnce the proofs are approved, the volume is set for publication.Marketing copyAfter publication, RC assistant editors distribute marketing copy to the major Romanticism listservs and via social media."
     
   } ,
  
   {
     
        "title"    : "Guide to Author Comments &amp; Queries",
        "category" : "",
        "tags"     : "",
        "url"      : "/docs/query-guide/",
        "date"     : "",
        "content"  : "As noted in the preceding c/e docs, in cases where a fix is clear and simple, you can simply enforce a change; if there’s any doubt about the author’s intended meaning or the adequacy of a simple fix, it’s best to leave a comment in the margin to point the author’s attention to the edit for review (usually a simple “OK?” works best).In more complex or nuanced cases, you’ll need to provide more substantial comments to justify your edits, explain the issue you see in the text, ask for clarification, and/or suggest a specific rephrasing or rewrite. This can be difficult at first since you are, of course, writing directly to established scholars in the field to explain the flaws in their essays. It’s useful to keep the following insights and principles in mind as you craft your comments:  Be confident; you are the expert. Many, if not most, of the scholars whose writing you’re editing have less experience in editing, especially copyediting, than you do. Follow RC House Style, the style manuals, and your own eye/intuition, and ask confidently for what the essay needs. Never apologize.  Be courteous. Temper your confidence with politeness. Words like “consider,” “please,” “note,” “seems,” etc., can go a long way in softening the message you need to convey. You’ll find that sometimes scholars are (surprisingly) bad, sloppy writers. Be patient. Stay kind.  Be specific. If you point out a vague issue or merely ask for a rewrite of a sentence without providing specific guidance, most authors will simply ignore your comment. Instead, provide as much specific guidance as you can, including but not limited to:          citing specific CMOS sections;      providing specific grammatical markers (e.g., “the pronoun has no clear antecedent; please resupply the noun or clarify in some way”);      providing specific rewrite suggestions in your comments;      linking online examples, especially for fact checks or citation errors; etc.        Be efficient. Keep your comments as short as possible while still being as specific as you can. The more long-winded your comments get, the less likely authors will be to take them seriously.  Be personable. Think about and intentionally cultivate your copyediting “voice.” Walk the line between being overly formal/sterile and too familiar. Ideally you’ll come off as a knowledgeable expert in English grammar, publishing conventions, style guidelines, and academic writing who communicates with enviable lucidity and laser-like precision—and someone whose name each author will remember.  Know that you’re appreciated. 99 times out of 100, the authors whose prose you’re cleaning up will be extremely grateful. If you do this enough, you’ll get messages from authors thanking you for your work. Be meticulous and unsparing, knowing that your careful eye is necessary—and that at the end of the day, you’re making these scholars look good.Achieving the right balance between unsparing technocrat and friendly reader takes a lot of practice. As you wade into copyediting your first few volumes, you might find the following comment templates useful toward this end (they’re pulled from actual essays copyedited by RC staff). Adapt and use them.  “OK?” // “Consider __.” // “Revise as appropriate.” // “Please __ to ensure __.”  “Per CMOS __, I’ve enforced ____.”  “Note that this sentence/phrase [is/does/implies] ___. Consider rephrasing for clarity.”  “___ does not have an entry in the Works Cited; please provide a full citation to this work.” // “____ is not cited in the text. Please cite or remove from WC list.”  “Consider recasting to avoid passive voice. E.g., ‘____.’”  “Revision OK? To ensure readers can/don’t ___.”  “Serial comma enforced; correct (i.e., all items on this list are parallel)?”  “Please provide [a parenthetical citation at the end of this sentence].”  “A quick search turned up __. Strongly consider incorporating/changing/etc. ___ to account for ____.”  “Readers may __. Consider recasting the sentence for clarity; e.g., ‘__.’”  “This edit seems to me to ____. OK? Or revise as appropriate.”  “To my eye, this phrase/sentence/paragraph would be more effective if ___. Consider __.”  “Ideally this [word/phrase/paragraph/idea] would __. Revise to __, or let me know __.”  “Consider clarifying this thought; it’s unclear how ___.”  “RC House Style calls for __, but this is an unusual case. I recommend __, but what’s vital is maintaining consistency in usage. Also consider that ___. At the end of the day, this one’s up to you; let me know what you want to go with.”  “Interesting. I wonder if you’ve also considered ____, which might add nuance to your argument. Here’s [link]. Revise, if appropriate.”  “Other contributors to this volume have __. Consider revising to ____.”  “Elsewhere on the RC site we have an edition of this text. OK to add a link?”  “Note that MLA/CMOS citation logic requires all sources listed here [in WC] to be cited within the text; see below for entries that can be removed. Alternately, two ideas: (1) you could create endnotes within the essay to point readers to these auxiliary works, in which case the WC entries could remain as-is; or (2) RC house style will accommodate a separate “Works Consulted” list, which could be created to contain these works (though I’ll note that this option might have limited utility here).”And so on. It may also be helpful to review the copyedits of previous volumes, which can be found in the “_COMPLETED” folder of the Production Sync drive."
     
   } ,
  
   {
     
        "title"    : "Revision Checklist for Contributors",
        "category" : "",
        "tags"     : "",
        "url"      : "/docs/rc-contributor-checklist/",
        "date"     : "",
        "content"  : "Before sending off the final version of your work to your volume/edition editor, please review the following checklist and correct any of these common errors.For more detailed inquiries, please refer to the RC House Style document. The following recommendations generally defer to the Chicago Manual of Style, 17th edition.General Requirements  Revise to meet word count limits for essay and abstract:*5,000 words max for essays*150 words max for abstracts.  Test all hyperlinks.  Select appropriate tags from the Tag Options for RC Contributors document.  Provide or update author bio.Document Layout  12-point, Times New Roman Font  Double-spaced  MS Word-linked endnotes, instead of footnotes  I-inch margins  1-inch indentation block quotations (for quotes approximately over 100 words in length)  *Prose should be double-spaces and verse single-spaced. See CMOS 13.10  for additional guidance.  *Avoid ending paragraphs in block quotations.  *If your quotation contains more than one line from the poem use forward slashes (/) between each line of the poem. For line breaks that occur between stanzas, use a double forward slash (//).Bibliography, Notes, and URLs  When possible, use DOIs instead of html links (see CMOS 14.8).  Check that all URLs are direct (permalinks), short, and unbroken (see CMOS 14.9).  In any citation, include http or https in the URL address.  Basic formatting/elements will differ slightly between bibliographic endnotes vs. entries:  *Books (end-notes): *AuthorFirst Last, Title (Location: Publisher, year), pages.  *Books (bibliography): *AuthorLast, First. Title. Location: Publisher, date.  *Journal (endnotes): *AuthorFirst Last, “Title,” Journal Title, no. # (Month Year): pages.  *Journal (bibliography): *AuthorLast, First. “Title.” Journal, no. # (Month Year): pages.  When repeating bibliographic information in an endnote, contributors should use the following convention:  *Shortened notes: *AuthorLast, Title, Location (could be chapter, volume, pages, or URL information).Number Formatting  Spell out whole numbers from one through nine and any number beginning a sentence (CMOS 9.3).  Spell out centuries and hyphenate when used adjectivally: mid-eighteenth century, twentieth century, twenty-first-century politics (CMOS 7.85).  Abbreviate all number ranges (typically page number references) by including in the second number only the changed part of the first (e.g., 234–5, 25000–1). Use an en dash, not a hyphen.Punctuation  Remove spaces around em dashes  (—)  Replace all double hyphens with the em dash character (—). Appropriate em dash usage: grammatical asides, interpolations, and interrupted speech.  Add spaces within initials (M. C. Escher)  In the bibliography, use three em-dashes when multiple works are cited by the same author (———).  Add Oxford commas (serial commas).  Use periods and all caps on C.E. and B.C.E.; in M.A., M.F.A., J.D., and Ph.D.; in U.S. / U.K. when used adjectivally.  Do not use a period in a sentence that ends with a question mark or exclamation point, even if that question mark or exclamation point is part of the title of a work (CMOS 6.124).  No need for ellipses at the beginning or end of a quotation unless the quoted sentence is deliberately incomplete (CMOS 13.50).  For three-dot ellipses, there should be internal spaces before, after, and internally. In a four-dot ellipsis, the first acts as a period at the end of a sentence—that period should be right up against the text.  No ampersands should be used in running text or titles, only in direct quotation/facsimile.  Check punctuation within quotations:  *Periods and commas precede closing quotation marks.  *Colons and semicolons follow closing quotation marks.  *Question marks and exclamation points following closing quotation marks (unless they belong within the quoted material).Usage and Writing Style  Americanize British spellings (except in direct quotations and titles; e.g., A Defence of Poetry).  Upon first mention of works, put the date of publication in parentheses after the title. See CMOS 14.142 for missing dates, date ranges, etc.  Avoid the unnecessary use of scare quotes and and italics.Images / Illustrations / Artwork  Images are high-res (with a minimum width or height of 1500 pixels) in either .jpg or TIFF file formats.  Provide captions for all visual mediums.  Label multiple visuals using the following convention:*Figure #: Caption.  Use end punctuation only 1) if the caption is a complete sentence or 2) if one or more complete sentences follow the caption.  Check that all images are either fair use or that permissions have been obtained."
     
   } ,
  
   {
     
        "title"    : "RC Git Guide",
        "category" : "",
        "tags"     : "",
        "url"      : "/docs/rc-git/",
        "date"     : "",
        "content"  : "Romantic Circles uses git to track and synchronize the code and files in all its projects. If you’ll be working on any of our coding or web initiatives, you’ll need a quick crash course on what git is and how to use it. This document should give you everything you need to get started with git; for installation instructions, skip to the “Installing Git” document in this section.RC’s public repos at GitHub can be found at https://github.com/romanticcircles. The repo for the RC site code itself (in distinct dev, stage, and prod environments) is managed by Acquia’s servers and is not publicly accessible. For more on how to access and use Acquia’s git servers, see the Acquia Guide in this documentation.About git + RC’s git repositoriesGit is a version control system (VCS) used to track and log the history of changes made to source code (essentially a file system and its individual files) shared among many collaborators. It is a distributed VCS, meaning all files and code are stored locally on the computers of all individual contributors, with only the changes to these files being stored on a centralized remote server, which git refers to as the remote origin (or just origin). All changes are stored in what git calls a repository, or repo, which lives in a (hidden) folder called /.git at the root of your project folder. RC uses two git hosting services as remotes to centrally track its code: (1) GitHub and (2) Acquia Cloud Platform. RC’s site code, its XSLT templates and TEI files, and its associated project files are divided among four repositories (in parentheses, the remote host and repo name):  Source code for romantic-circles.org (Acquia Cloud Platform: romanticcircles)  XSLT templates (GitHub: XSLT-templates)  TEI archives (GitHub: rc-tei)  The code for this documentation site (GitHub: romanticcircles.github.io)RC’s GitHub repos are public, meaning they can be viewed and cloned by any public user (though to push changes back to the origin requires organizational membership). The main site code, located on Acquia’s git server, requires access to the Acquia Cloud Platform and SSH public key authentication for access. See the Acquia Cloud Platform section for more info.For more about git, read more about the software and its community development at https://git-scm.com/.Connecting to RC’s git repositoriesWhen you join the RC team  for however long!  the assistant editors will provide your GitHub account (which you’ll need to create in advance at this page) with access to the Romantic Circles organization on GitHub. The git url used to clone any public repo can be found by clicking on the green “Code” button within that repo; RC’s public repos can be cloned (by anyone) at https://github.com/romanticcircles.As noted, anyone can clone a public GitHub repo, but in order to push to an RC repo you’ll need elevated privileges. Begin by cloning one of RC’s public repos to an easy-to-access place on your computer (our RC machines have a desktop folder called “RC-GIT” into which we clone all our repos). A guide to doing so is provided in the next section, Installing Git and Cloning Repos."
     
   } ,
  
   {
     
        "title"    : "RC House Style",
        "category" : "",
        "tags"     : "",
        "url"      : "/docs/rc-house-style/",
        "date"     : "",
        "content"  : "Rev. 9/2022In general, Romantic Circles follows the Chicago Manual of Style (17th edition). All citations should follow CMOS’s “notes and bibliography style” (as opposed to the author-date variety): “If the bibliography includes all works cited in the notes, the notes need not duplicate the source information in full because readers can consult the bibliography for publication details and other information. In works with no bibliography or only a selected list, full details must be given in a note at first mention of any work cited; subsequent citations need only include a short form” (CMOS 14.19).FORMATTINGlayout  Standardize layouts to aid in the encoding process (this applies to all essays, not just those getting TEI-ed) with the following checklist:          12-point, Times New Roman font      Double-space throughout      Use MS Word–linked endnotes, rather than footnotes      1-inch margins      Indent block quotes and verse 1 in from left; prose should be double spaced, while verse should be single spaced      Remove section breaks and other invisible marks in Word (hint: use the “show/hide” button that looks like a paragraph symbol)      Use roman numerals for any numbered headings      All essays should be under 5,000 words and all abstracts should be under 150 words.      quotations  Make sure that block quotes and verse are surrounded by paragraph text;          i.e., if you can avoid it, don’t end a paragraph in a block quote.        If your quotation contains more than one line from the poem use forward slashes (/) between each line of the poem.          For line breaks that occur between stanzas, use a double forward slash (//).        If emphasis exists in a quotation, a note is needed only if the emphasis was added by the author.          “Emphasis added” (not “emphasis mine,” etc.) is the correct phrase, and it should follow the source and page number in the parenthetical citation, preceded by a semicolon.      E.g., “(Smith 80; emphasis added).”      Evaluate context and author’s writing style if no note is provided; if in doubt, query author whether an “emphasis added” note is needed.        Single/double quotation marks from British quotations may be changed as appropriate: for example, single quotation marks used in a block quotation of British text may be changed to double quotation marks.          British spellings in quotations should not be changed.        All quotations should be grammatically incorporated with the text;          no “disembodied” quotes without introduction or explication should exist in the essay.        Per CMOS, the initial letter in a quotation can be changed from lowercase to uppercase, or vice versa, depending on context, without the need for brackets necessary.          Two rules of thumb here: (1) When grammatically remote from rest of sentence, usually caps will be used; and (2) When a quotation or block quote forms a complete sentence following a colon, capitalize initial letter.        For in-text parenthetical citations occurring within another parenthetical, use brackets.          Example: “Despite Rousseau’s attempts to settle passion into its place, passion’s prewriting in the business of survival and articulation becomes, in Rousseau’s anthropological scheme, inverted (articulation as subdivision of sound and meaning, understanding and reason, that is “the opening and closure of a cleft” [Johnson 128], according to Derrida, or the making of a judgment).”      See also CMOS 6.97 and 6.101.        Use the standard American method of punctuation around quotation marks, following CMOS 6.9–10:          “Periods and commas precede closing quotation marks, whether double or single,” but “colons and semicolons—unlike periods and commas—follow closing quotation marks; question marks and exclamation points following closing quotation marks unless they belong within the quoted matter.”      capitalization  Enforce headline-style capitalization across all titles and heads (excepting foreign titles; follow CMOS 11.6).  Capitalize “Romanticism” and all its variants, except when “romantic” refers to, e.g., “a romantic date.”          Occasionally authors will have theoretical or pedagogical reasons for maintaining the lower-case; in these situations, authors should provide a footnote at the first instance contextualizing the reasons for this decision.        Regarding capitalization of ethnic groups by color, RC style is to defer to the preference of individual authors and editors.          An author’s preferred usage should, of course, be consistently enforced throughout an essay.        Capitalize cultural regions of the world (West, East, Western mores, Eastern philosophy, etc.); follow CMOS 8.46.  For capitalization of disciplines, courses, awards, etc., follow CMOS 8.82–86 (lowercase subjects, capitalize specific course names).  Other miscellaneous conventions:          Roman Republic, Roman Empire, but republic, empire, American republic, etc.      The Left or the Right, but leftist, left wing, etc.      number formatting  Spell out whole numbers from one through nine and any number beginning a sentence (CMOS 9.3).  Spell out centuries and hyphenate per CMOS 7.85 when used adjectivally: mid-eighteenth century, twentieth century, twenty-first century, twenty-first-century politics.  Spell out ordinal numbers under 101 in running text (“one hundredth” but “101st”).  Abbreviate all number ranges (typically page number references) by including in the second number only the changed part of the first (e.g., 234–5, 25000–1).          Use an en dash, not a hyphen.        Treat inclusive dates as follows:          187–189 B.C.E.      1920–1929 (from 1920 to 1929 or between 1920 and 1929)      1950s and 1960s (not 1950s and 60s; not ’50s and ’60s)      PUNCTUATIONspaces  One space between sentences, one space after colon and semicolon. The copyeditor should perform a global search and replace all double spaces with single spaces.  Spaces around and within ellipse (text . . . text)  No spaces around em dash (—)  Spaces within initials (M. C. Escher)dashes  Use em dash for grammatical asides, interpolations, and interrupted speech.  The em dash is not a double hyphen but a unique character (—).  In the bibliography, the three em dash is used when multiple works are cited by the same author (———).  The en dash is used in numbers or dates (see CMOS 9.60) and in some compound adjectives (see CMOS 6.78–81).apostrophes  For possessives of words/names ending in “s” or “z,” follow CMOS 7.15–28.          E.g., Williams’s, Decartes’s, Euripides’s; but the Williamses’ dog, at the Browns’ place.        Ensure the apostrophe’s tail is “pointing” in the correct direction.commas  Use serial commas (Oxford comma) for lists (e.g., metaphor, analogy, and place)  Do not use a comma before “Jr.”periods  Use periods and all caps on C.E. and B.C.E.;          use periods with lowercase on a.m. and p.m.        Use periods in M.A., M.F.A., J.D., and Ph.D.  Use periods in U.S. / U.K. when used adjectivally;          as nouns, spell out (i.e., United States, United Kingdom).        Do not use a period in a sentence that ends with a question mark or exclamation point, even if that question mark or exclamation point is part of the title of a work          e.g., I came across David Damrosch’s book What Is World Literature?.      See CMOS 6.124.      hyphens  For hyphenation of compounds and prefixes, see CMOS 7.85. Close up all prefixes unless some confusion would result.          Exceptions: repeated vowel, compound noun, or repeated prefix; if in doubt, refer to Merriam-Webster.) For specific cases and exceptions, see the formatting guide below.        Use the format “mixed government,” but “mixed-government theory” (hyphenate adjectival phrases before but not after the noun they modify)  Use the no-hyphen format for both noun and adjective phrases.          “African American,” “Asian American,” etc.,      colons  Following CMOS, it is not RC style to capitalize the word following a colon, unless the colon introduces two or more sentences or begins a quote (see CMOS 6.61).  After short introductory phrases, RC prefers that a comma instead of a colon be used.          Example: “He said, ‘I quit.’” (Not “He said: ‘I quit.’”)      ellipses  Ellipses are not needed at the beginning or end of a quotation unless the quoted sentence is deliberately incomplete (CMOS 13.50).  Three- and four-dot ellipses are both acceptable if they are used correctly in context (see CMOS 13.51–54).  For three-dot ellipses, there should be internal spaces before, after, and internally.          In a four-dot ellipsis, the first acts as a period at the end of a sentence—that period should be right up against the text.      ampersand  No ampersands should be used in running text or titles, only in direct quotation/facsimile.  Even in notes, use the form “etc.,” not “&amp;c.”USAGE &amp; WRITING STYLE  Generally avoid sentence fragments, though their occasional use for effect is permissible.  Avoid comma splices. The material after a coordinating conjunction should only take a comma before the “and,” “but,” “for,” “nor,” “or,” “yet,” or “so” if it is an independent clause.          Never use commas around a conjunctive adverb (i.e., however, furthermore, therefore, thus, moreover); the correct form is: “I never said that; however, I could have.”        In general, use a comma after a dependent clause;          e.g., “When I proofread some essays for RC, I noticed many people not using commas when they should have.”      If the sentence or opening clause is very short, the comma is not always necessary.        Americanize British spellings (except in direct quotations and titles;          e.g., A Defence of Poetry).        Use full names upon first mention of a source for primary authors and when people/titles are mentioned directly in the main text.  Upon first mention of works, provide a work’s full title and put the date of publication in parentheses after the title, unless already given in the text proper.          When the date is approximate, use a question mark after the best guess of the date.      When the date is unknown, use (date unknown).      When there are multiple editions, defer to the first edition unless another edition is specified in the Works Cited.      If published serially, use a range.        All references to other works should employ present-tense verbs unless the use of past tense informs the argument          (i.e., in general, “Smith concedes,” not “Smith conceded”).        Avoid unnecessary use of the passive voice.  Avoid splitting infinitives, except for sense (and in some cases a split is nearly impossible to avoid, as in “I expect citations to Smith’s article to more than double this year.”)  RC discourages overuse of italics for emphasis when such use does not alter the sense of a phrase/sentence or is not needed for selective vocal emphasis. In general, an author’s prose itself should supply intended emphasis in most cases.  Similarly, scare quotes should not be used unless an author is using a word or phrase in an unusual, novel, or ironic sense.  When a word or term is not used functionally but is referred to as itself (as in defining a term), use italics on first occurrence and roman thereafter.  Follow CMOS 5.72 on the use of “a” or “an” before a vowel:          go by sound (“a historical treatise”; “an hour ago”; “a eulogy”        The Latin abbreviations e.g. (“for example”) and i.e. (“that is”) should not be used in running text;          when used parenthetically and in notes, the abbreviations are always followed by a comma (“i.e., Shelley likely never said the phrase in question”).        For a list of proper preposition use with specific nouns, verbs, and adjectives, see CMOS 5.191          (e.g., “dissimilar to” not “dissimilar from”).        Follow the Glossary of Problematic Words and Phrases provided at CMOS 5.220 in conjunction with Merriam-Webster’s Online for all other questions of proper word usage          e.g., between vs. among vs. amid; compelled vs. impelled; ensure vs. insure; etc.      FIGURES &amp; MULTIMEDIAimages / illustrations / artwork  Any visual medium contained in an article—all images, illustrations, artwork, etc. must contain a caption.          This is both to provide context for readers and to make the site more accessible to those with visual disabilities.        If more than one figure of any type is contained in an article, the images should be numbered, as appropriate, and all textual references should correspond to these numbers (Figure 1, Figure 2, etc.).  The format should be:          Figure 1: Caption      Spell out “Figure”      Use arabic numerals      The caption should be written with sentence style capitalization, no bold or italics.      Use end punctuation only 1) if the caption is a complete sentence or 2) if one or more complete sentences follow the caption.        All images should be high-res (with a minimum width or height of 1500 pixels) in either .jpg or TIFF file formats.fair use of multimedia  All images should either be designated “fair use” (see the Creative Commons site for more information), or permissions need to be obtained.          Please provide your editor with all image permissions.        Check with the RC general editors if questions or issues arise regarding fair use policies.BIBLIOGRAPHY, QUOTATIONS, AND NOTESin-text citations using endnotes  No citations in abstracts (following CMOS 1.93).          If found, query author on removal/rewriting to avoid.        When a note combines a citation with commentary, the source comes first. A period usually separates the citation from the commentary.          E.g., (1. Shakespeare, Julius Caesar, act 3, sc. 1. Caesar’s claim of constancy should be taken with a grain of salt.)        It is not permissible for authors to insert endnotes at the end of titles or headings in the text.  For sources that are repeatedly cited, create an appropriate abbreviation for the source that is introduced in the first endnote.          E.g., 1. François Furet, The Passing of an Illusion: The Idea of Communism in the Twentieth Century, trans. Deborah Furet (Chicago: University of Chicago Press, 1999), 368 (hereafter cited in text as PI).      in-text citations for poetry using endnotes  RC discourages the citing of line numbers from short poems in the running text;          if such numbering is important/relevant, follow CMOS 14.156 in avoiding “l.” and “ll.” (use “line” or “lines” instead) and cite the line numbers parenthetically.        Three or more lines of verse should be set off as a blockquote.          Per CMOS, within each piece or stanza, the indentation pattern of the original should be reproduced (but indents should be distinguished from runover lines; see 13.27).        Do not cite any line numbers if: a) the poem is shorter than a few pages (100 lines) or b) they’re not numbered in the original.conventions for the bibliography and endnote citations  See the CMOS’s Citation Quick Guide for more complete information.  Cite all scholarly articles as print sources unless the article’s original pagination is unavailable.  Do not list database retrieval information unless no page numbers are provided;          in this case, attempt to locate print facsimile (PDF) through your library’s databases.        When citing multi-volume works, always provide the name of the overall work in addition to any individual volume names.  When possible, use DOIs instead of html links (see CMOS 14.8).  Check that all URLs are direct (permalinks), short, and unbroken (see CMOS 14.9).  Include all https:// when citing URLs.publisher information in citations  Only one publisher per book edition should be used in the bibliography;          if book is a joint imprint, use the first press listed, consult online sources to determine which to use, and/or choose the publisher most relevant to the essay.        Do not include  “The,” “Inc.” or “&amp; Co.,” etc., in publishers’ names.          “Books” is typically retained.      “Press” and “Publisher” can be omitted if it contextually makes sense.      The word University should be abbreviated to Univ.      citation-related abbreviations  Do not use “ibid” (meaning “in the same place already mentioned”) or “op. cit” in the endnotes or bibliography.          Instead, simply use a shortened or even an abbreviated citation.        Do not use “passim,” “ff,” or “f” in conjunction with page numbers.          Query author to provide inclusive page numbers or a comma-delineated list of specific pages.—————————————————————————————————————      SPELLING / FORMATTING GUIDE  3D  alt-right  Anglo-American; Anglo-centric  antifeminist, antihero; but anti-Jacobin, anti–French Revolution  a priori (no italics)  autobiographical, autoethnographic  best seller / best-selling novel  bystander  caretaking / care-tend  classical theory / classical scholar / Classics  co-create/co-creative  ecocriticism; ecomodern; ecomedia / but eco-queer (familiar forms closed, novel forms open)  email  extranational, extrarational; but extra-ambiguous  frisson  geo-tracking  Global South  hard-pressed (to)  humanness; humanlike  interdependence  internet; the net  joy-killing (as adj.)  killjoy  life-form  New Criticism  nongovernmental, nonpoetic, nonfiction, nonnegotiable, but non-Western  Orientalism, Orientalist  pathbreaking  poststructuralism, postmodernism, posthumanism, postwar, etc.  pre-publication  president, presidential, the presidency; Washington, the first president; but President Washington, Mr. President  pro-life, pro-choice  quasi-professional, quasi-autobiographical (hypenated as adj. unless closed in MW)  reread, rereading, redomesticate, reedit  but re-evaluate  Revolutionary (only if in reference to American or French Revolutions)  sociopolitical; but socio-ecological  structuralist, structuralism  T-shirt  techno-rational, techno-optimist  ultraconservative, ultrasophisticated  U.S. (used only as adjective or in notes/parentheses), U.K.  Washington, D.C.  world-shaking, world-destroying (before or after n., per MW)  World Wide Web; the web; website  worshipping, worshipped, worshipper"
     
   } ,
  
   {
     
        "title"    : "Guide to RC&#39;s Coding and Markup Languages",
        "category" : "",
        "tags"     : "",
        "url"      : "/docs/rc-languages/",
        "date"     : "",
        "content"  : "Oh my."
     
   } ,
  
   {
     
        "title"    : "RC Position Descriptions",
        "category" : "",
        "tags"     : "",
        "url"      : "/docs/rc-position-descriptions/",
        "date"     : "",
        "content"  : "RC Tech Positions OverviewAssistant Editor / Project ManagerRC assistant editors / project managers are PhD students/candidates at the University of Colorado Boulder on half-time Research Assistant appointment. Currently CU English funds two assistant editors on rotating terms. These positions report directly to the general editors of Romantic Circles and are responsible for:  day-to-day operation of the site, including developing and monitoring the site’s content and features, code, databases, file system, server infrastructure, and appearance;  regular site updates and maintenance, including updates to Drupal core and modules, Composer dependencies, PHP, databases, SSL and security protocols, etc.;  coordination of RC initiatives and publications, including regular communication with the general editors, section editors, and contributors;  managing RC’s PR and social media presence and marketing/distribution initiatives;  project management of teams of computer science capstone students and individual contributors, as appropriate;  facilitating and implementing all stages of the digital publication process for RC Praxis, Editions, Unbound, and Pedagogies volumes, including copy editing, TEI encoding, layout and design, proofing, and publication;  researching and implementing best practices for DH and leveraging metadata;  training and management of RC individual contributors and future assistant editors at CU, including maintenance of this documentation;  and other duties to be assigned by the general editors.Individual ContributorsTo keep up with technical and production schedules and demands, RC increasingly encourages volume and section editors to secure funding from granting bodies and/or home institutions to fund the copyediting and/or TEI endcoding of new RC volumes, especially in the case of lengthy editions. These contributors will be trained initially by the current assistant editors and will, ideally, use this documentation site as a resource in completing their editing and coding duties. Depending on RC’s needs, individual contributors may be asked to perform other duties, including author communication, proofing, etc.General WorkflowDistributing workflow and loadThere is, and likely will continue to be, an ever-present tension between RC production aspirations and the various editors’ hoped-for production schedules, on the one hand, and site maintenance, innovation, new initiatives, DH best practices, and  perhaps most importantly  staff training, on the other. On some level, RC’s student assistantships and internships are intended to provide a DH learning sandbox for early career scholars to find a sure footing in the field, but these needs and desires must, of course, be weighed against promises made by the general/section editors and the time-sensitive considerations of tenure cases depending on RC volumes being published, etc.At CU, there will be a senior assistant editor and a junior assistant editor, the distinction between them simply consisting of time working on the project. In general, the senior assistant editor will focus on the site’s backend stability, code, and updates, while the junior editor facilitates editor communication and production logistics. This breakdown, however, is entirely dependent on the skills and interests of individual assistant editors, and should be continuously reassessed and renegotiated.File/code management systemsRC’s tech staff uses two separate services to store, distribute, and synchronize files: Google Drive (images, original text files) and GitHub (TEI files). Individual Contributors will code and sync their TEI files using git, as described in the RC Git Guide."
     
   } ,
  
   {
     
        "title"    : "RC Tagging Options",
        "category" : "",
        "tags"     : "",
        "url"      : "/docs/rc-tagging/",
        "date"     : "",
        "content"  : "Why we have a tagging systemRC’s tagging system is intended to enhance visitors’ experience by increasing the site’s searchability. By connecting a variety of resources together, with a single tag, viewers will see “suggested content,” and might be compelled to take their research in an unintended direction. We have chosen to limit the number of tags available in order to increase the number of essays/resources linked together by a tag. Because of this limit, you might not find a tag that perfectly matches the topic of your research,but you can dramatically increase the number of views your work receives by having your work linked, via the tags, to other resources on the site.Please select 4-6 tags from the following list that are generally relevant to the topic of your research. Then send these tags to the editor of your volume/edition.Tags Listed Alphabetically  abolition  activism  adaptation  aesthetics  affect  africa  agency  aging  agriculture  allegory  ambiguity  america  animals  animism  antarctica  anthropocene  antiquarianism  apocalypse  appropriation  archive  asia  assemblage  astronomy  atheism  australia  author  autobiography  autonomy  ballad  beauty  bible  bibliography  bibliomania  bibliotherapy  biography  biopolitics  birds  black atlantic  bluestocking  body  borders  botany  boundaries  buddhism  byromania  canon  capitalism  caribbean  caricature  cartoon  catholicism  celebrity  charity  childhood  children’s literature  china  chivalry  christianity  chronology  circulation  class  climate change  close reading  clouds  code switching  collaboration  colonialism  comedy  communism  community  comparative literature  conscious  constellation  consumerism  contemporary culture  contemporary poetry  continental  copyright  correspondence  cosmopolitanism  creolization  crimean war  critical theory  culture  cyberpunk  death  decolonization  deconstruction  democracy  desire  diaspora  digital humanities  disability  disaster  disease  domesticity  drama  dream  drugs  duality  east asia  east india company  ecology  ecosystems  editing  elegy  embodiment  empire  empiricism  enclosure  enlightenment  entanglement  eugenics  eastern europe  europe  environment  environmentalism  epistemology  epistolary  ethics  evolution  existentialism  experience  exploration  fanfiction  fantasy  fascism  fashion  fear  feeling  feminism  film  food  fragment  freedom  freemasonry  french revolution  gender  gender roles  genocide  genre  german romanticism  global  gothic  grammar  haitian revolution  hinduism  hispanosphere  historicism  historiography  history  homoeroticism  homosexuality  horror  human rights  humanism  humanities  hybridity  iconoclasm  iconology  idealism  identity  ideology  imagination  immortality  imperialism  incest  india  individualism  industrial revolution  innocence  interdisciplinary  intersectionality  ireland  islam  italy  jacobins  jamaica  japan  jewish authors  journal-keeping  journalism  justice  kabbalah  labor  lake district  landscape  language  latin america  law  liberty  literary criticism  love  lyric  machine  magic lantern  manners  mapping  manuscripts  maroons  marriage  marxism  masculinity  masochism  materialism  media  medicine  melodrama  memory  mexico  middle ages  middle class  middle east  mobility  modernity  monarchy  morality  mountaineering  movement  multimedia  museum  music  mythology  napoleonic wars  nationalism  natural history  nature  negative capability  network  new criticism  new historicism  new materialism  new media  new zealand  norway  novel  obi  ode  orality  orientalism  orthodoxy  pandemic  panorama  paradox  passion  performance  periodical  periodization  perspective  peterloo  phenomenology  philology  philosophy  photography  phrenology  picture theory  picturesque  place  plague  play  poetics  politics  popular culture  pornography  postcolonial  post-romantic  poverty  presentism  print culture  propaganda  prophecy  prosody  protestantism  protestant reformation  psychoanalysis  psychology  public  publishing  queer studies  race  radicalism  reader response  realism  reception studies  reform  religion  remediation  reproduction  republicanism  resistance  reviews  revision  revolution  rhetoric  rhythm  romance  rome  ruins  rural  russia  satire  science  science fiction  scotland  sculpture  secularism  sensation  sensibility  sentimentality  sexuality  silence  skepticism  sky  slave narrative  slavery  social media  sociology  sound  south america  spatiality  spectacle  spirituality  study abroad  subjectivity  sublime  sympathy  taste  teaching  technology  temporality  textuality  theater  theology  theory  thing theory  topography  tourism  tragedy  transatlantic studies  transcultural  translation  transnational  transgender studies  trauma  travel  uncanny  urban  utilitarianism  utopia  vampires  video games  violence  vision  visual art  vitalism  vodoo  walking  war  wedding  west indies  women writers  working class"
     
   } ,
  
   {
     
        "title"    : "RC TEI Header",
        "category" : "",
        "tags"     : "",
        "url"      : "/docs/rc-tei-header/",
        "date"     : "",
        "content"  : "Use this header to replace everything enclosed in the &lt;teiHeader&gt; tag in the file generated by TEIGarage. This code can be adapted for content in any of RC’s main content sections (Editions, Praxis, and Pedagogy Commons). Specific instructions are provided in comment blocks (green text).123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217&lt;teiHeader&gt;  &lt;fileDesc&gt;    &lt;titleStmt&gt;&lt;!--  CHANGE TITLE, AUTHOR NAME, AND EDITOR NAME(S)  --&gt;      &lt;title type="main"&gt;TITLE OF VOLUME/EDITION&lt;/title&gt;      &lt;title type="subordinate"&gt;VOLUME TAG/SUBTITLE&lt;/title&gt; &lt;!-- Subtitle will change based on site section; for Editions, "A Romantic Circles Electronic Edition" for Praxis, "A Romantic Circles Praxis Volume" for Pedagogies, "A Romantic Circles Pedagogies Commons Volume" --&gt;      &lt;title level="a"&gt;ESSAY TITLE&lt;/title&gt;&lt;!-- If author is a primary (historical) author --&gt;        &lt;author role="primary"&gt;          &lt;name&gt;ROMANTIC-ERA AUTHOR&lt;/name&gt;        &lt;/author&gt;&lt;!-- Remove the above if not historical author --&gt;&lt;!-- If author is a contemporary critic (secondary) --&gt;        &lt;author role="secondary"&gt;          &lt;name&gt;ESSAY AUTHOR&lt;/name&gt;        &lt;/author&gt;&lt;!-- Remove the above if not contemporary author --&gt;        &lt;editor role="editor"&gt;VOLUME/EDITION EDITOR(S)&lt;/editor&gt; &lt;!-- Repeat the above line in the case of multiple editors --&gt;&lt;!-- If external funding was used in production, include the following section --&gt;        &lt;funder&gt;NAME OF FUNDING BODY&lt;/funder&gt;          &lt;principal&gt;PRINCIPAL NAMED INVESTIGATOR(S) ON GRANT&lt;/principal&gt;          &lt;respStmt&gt;            &lt;resp&gt;TEI Encoding&lt;/resp&gt;            &lt;name&gt;EXTERNAL CODER&lt;/name&gt;          &lt;/respStmt&gt;  &lt;!-- Remove above "funder" section if not relevant --&gt;                    &lt;sponsor&gt;Romantic Circles&lt;/sponsor&gt;          &lt;respStmt&gt;            &lt;resp&gt;General Editor&lt;/resp&gt;            &lt;name&gt;Paul Youngquist&lt;/name&gt;          &lt;/respStmt&gt;          &lt;respStmt&gt;            &lt;resp&gt;General Editor&lt;/resp&gt;            &lt;name&gt;Orrin N. C. Wang&lt;/name&gt;          &lt;/respStmt&gt;&lt;!-- In the following, keep only the relevant section editor(s) --&gt;          &lt;respStmt&gt;            &lt;resp&gt;Praxis Editor&lt;/resp&gt;            &lt;name&gt;Brian McGrath&lt;/name&gt;          &lt;/respStmt&gt;          &lt;respStmt&gt;            &lt;resp&gt;Electronic Editions Editor&lt;/resp&gt;            &lt;name&gt;Michelle Speitz&lt;/name&gt;          &lt;/respStmt&gt;          &lt;respStmt&gt;            &lt;resp&gt;Pedagogies Commons Editor&lt;/resp&gt;            &lt;name&gt;Kirstyn Leuner&lt;/name&gt;          &lt;/respStmt&gt;          &lt;respStmt&gt;            &lt;resp&gt;Pedagogies Commons Editor&lt;/resp&gt;            &lt;name&gt;Andrew Burkett&lt;/name&gt;          &lt;/respStmt&gt;&lt;!-- Choose section editor from above --&gt;          &lt;respStmt&gt;            &lt;resp&gt;Assistant Editor&lt;/resp&gt;            &lt;name&gt;Jessica Tebo&lt;/name&gt;          &lt;/respStmt&gt;          &lt;respStmt&gt;            &lt;resp&gt;Assistant Editor&lt;/resp&gt;            &lt;name&gt;T. J. McLemore&lt;/name&gt;          &lt;/respStmt&gt;    &lt;/titleStmt&gt;    &lt;editionStmt&gt;&lt;!-- CHANGE DATE RIGHT BEFORE PUBLICATION --&gt;      &lt;edition&gt;&lt;date&gt;YYYY-MM-DD&lt;/date&gt;&lt;/edition&gt;    &lt;/editionStmt&gt;    &lt;publicationStmt&gt;      &lt;publisher&gt;Romantic Circles, https://romantic-circles.org,       University of Colorado Boulder&lt;/publisher&gt;      &lt;pubPlace&gt;Boulder, CO&lt;/pubPlace&gt;        &lt;availability status="free"&gt;          &lt;p&gt;Material from the Romantic Circles Website may not be downloaded,           reproduced or disseminated in any manner without authorization unless           it is for purposes of criticism, comment, news reporting, teaching,           and/or classroom use as provided by the Copyright Act of 1976, as           amended.&lt;/p&gt;          &lt;p&gt;Unless otherwise noted, all Pages and Resources mounted on Romantic           Circles are copyrighted by the author/editor and may be shared only in           accordance with the Fair Use provisions of U.S. copyright law. Except           as expressly permitted by this statement, redistribution or republication           in any medium requires express prior written consent from the author(s)/          editor(s) and advance notification of Romantic Circles. Any requests           for authorization should be forwarded to Romantic Circles:&lt;/p&gt;          &lt;address&gt;            &lt;addrLine&gt;Romantic Circles&lt;/addrLine&gt;            &lt;addrLine&gt;c/o Professor Paul Youngquist&lt;/addrLine&gt;            &lt;addrLine&gt;Department of English&lt;/addrLine&gt;            &lt;addrLine&gt;University of Colorado Boulder&lt;/addrLine&gt;            &lt;addrLine&gt;Boulder, CO 80309&lt;/addrLine&gt;            &lt;addrLine&gt;paul.youngquist@colorado.edu&lt;/addrLine&gt;          &lt;/address&gt;          &lt;p&gt;By their use of these texts and images, users agree to the following           conditions:             &lt;list&gt;              &lt;item&gt;These texts and images may not be used for any commercial               purpose without prior written permission from Romantic Circles.&lt;/item&gt;              &lt;item&gt;These texts and images may not be re-distributed in any               forms other than their current ones.&lt;/item&gt;            &lt;/list&gt;&lt;/p&gt;          &lt;p&gt;Users are not permitted to download these texts and images in order           to mount them on their own servers. It is not in our interest or that           of our users to have uncontrolled subsets of our holdings available           elsewhere on the Internet. We make corrections and additions to our           edited resources on a continual basis, and we want the most current text           to be the only one generally available to all Internet users. Institutions           can, of course, make a link to the copies at Romantic Circles, subject           to our conditions of use.&lt;/p&gt;        &lt;/availability&gt;&lt;!-- CHANGE IDNO; ENSURE THAT THE "EDITION" LINE EXACTLY MATCHES THE FILE NAME --&gt;        &lt;idno type="edition"&gt;SECTION.YEAR.VOL-ABBREV.AUTHORLAST&lt;/idno&gt;        &lt;idno type="resource"&gt;VOL-ABBREV [same as above]&lt;/idno&gt;    &lt;/publicationStmt&gt;    &lt;sourceDesc&gt;      &lt;biblStruct&gt;        &lt;analytic&gt;&lt;!-- CHANGE TITLE AND PTR // if this is a book-length unit, level="m" --&gt;          &lt;title level="a" type="main"&gt;SECTION TITLE&lt;/title&gt;            &lt;ptr target="SECTION/VOL-ABBREV/SECTION.YEAR.VOL-ABBREV.AUTHORLAST.html"/&gt;        &lt;/analytic&gt;&lt;!-- CHANGE TITLES --&gt;        &lt;monogr&gt;          &lt;title level="m"&gt;FULL TITLE OF EDITION&lt;/title&gt;          &lt;title level="s"&gt;SECTION&lt;/title&gt;          &lt;imprint&gt;            &lt;publisher&gt;Romantic Circles, https://romantic-circles.org,             University of Colorado Boulder&lt;/publisher&gt;            &lt;pubPlace&gt;Boulder, CO&lt;/pubPlace&gt;&lt;!-- CHANGE DATE RIGHT BEFORE PUBLICATION --&gt;            &lt;date when="YYYY-MM-DD"&gt;MONTH DAY, YEAR&lt;/date&gt;          &lt;/imprint&gt;        &lt;/monogr&gt;      &lt;/biblStruct&gt;    &lt;/sourceDesc&gt;  &lt;/fileDesc&gt;  &lt;encodingDesc&gt;    &lt;editorialDecl&gt;      &lt;quotation&gt;        &lt;p&gt;All quotation marks and apostrophes have been changed:         " to &amp;#8220; or &amp;#8221;, and ' to &amp;#8216; and &amp;#8217;.&lt;/p&gt;      &lt;/quotation&gt;      &lt;hyphenation eol="none"&gt;        &lt;p&gt;Any dashes occurring in line breaks have been removed         except in the case of diplomatic transcriptions.&lt;/p&gt;        &lt;p&gt;Because of web browser variability, all hyphens         have been typed on the U.S. keyboard&lt;/p&gt;        &lt;p&gt;Em dashes have been rendered as &amp;#8212;&lt;/p&gt;        &lt;p&gt;En dashes have been rendered as &amp;#8211;&lt;/p&gt;      &lt;/hyphenation&gt;      &lt;normalization method="markup"&gt;        &lt;p&gt;Spelling has not been regularized.&lt;/p&gt;        &lt;p&gt;Writing in other hands appearing on these manuscripts         has been indicated as such, the content recorded in brackets.&lt;/p&gt;      &lt;/normalization&gt;      &lt;normalization&gt;        &lt;p&gt;&amp;amp; has been used for the ampersand sign.&lt;/p&gt;        &lt;p&gt;&amp;#35; has been used for #, the pound sign&lt;/p&gt;        &lt;p&gt;All other characters, those with accents, non-breaking spaces,         etc., have been encoded in HTML entity decimals.&lt;/p&gt;      &lt;/normalization&gt;    &lt;/editorialDecl&gt;    &lt;tagsDecl&gt;      &lt;rendition xml:id="indent1" scheme="css"&gt;margin-left: 1em;&lt;/rendition&gt;      &lt;rendition xml:id="indent2" scheme="css"&gt;margin-left: 1.5em;&lt;/rendition&gt;      &lt;rendition xml:id="indent3" scheme="css"&gt;margin-left: 2em;&lt;/rendition&gt;      &lt;rendition xml:id="indent4" scheme="css"&gt;margin-left: 2.5em;&lt;/rendition&gt;      &lt;rendition xml:id="indent5" scheme="css"&gt;margin-left: 3em;&lt;/rendition&gt;      &lt;rendition xml:id="indent6" scheme="css"&gt;margin-left: 3.5em;&lt;/rendition&gt;      &lt;rendition xml:id="indent7" scheme="css"&gt;margin-left: 4em;&lt;/rendition&gt;      &lt;rendition xml:id="indent8" scheme="css"&gt;margin-left: 4.5em;&lt;/rendition&gt;      &lt;rendition xml:id="indent9" scheme="css"&gt;margin-left: 5em;&lt;/rendition&gt;      &lt;rendition xml:id="indent10" scheme="css"&gt;margin-left: 5.5em;&lt;/rendition&gt;      &lt;rendition xml:id="center" scheme="css"&gt;text-align: center;&lt;/rendition&gt;      &lt;rendition xml:id="left" scheme="css"&gt;text-align: left;&lt;/rendition&gt;      &lt;rendition xml:id="right" scheme="css"&gt;text-align: right;&lt;/rendition&gt;      &lt;rendition xml:id="small" scheme="css"&gt;font-size: 12pt;&lt;/rendition&gt;      &lt;rendition xml:id="large" scheme="css"&gt;font-size: 16pt;&lt;/rendition&gt;      &lt;rendition xml:id="largest" scheme="css"&gt;font-size: 18pt;&lt;/rendition&gt;      &lt;rendition xml:id="smallest" scheme="css"&gt;font-size: 10pt;&lt;/rendition&gt;      &lt;rendition xml:id="titlem" scheme="css"&gt;font-style: italic;&lt;/rendition&gt;      &lt;rendition xml:id="titlej" scheme="css"&gt;font-style: italic;&lt;/rendition&gt;      &lt;rendition xml:id="figure" scheme="css"&gt;text-align: center;         font-size: 12pt;&lt;/rendition&gt;      &lt;rendition xml:id="sup" scheme="css"&gt;vertical-align: super;&lt;/rendition&gt;      &lt;rendition xml:id="sub" scheme="css"&gt;vertical-align: sub;&lt;/rendition&gt;    &lt;/tagsDecl&gt;  &lt;/encodingDesc&gt;  &lt;profileDesc&gt;    &lt;textClass&gt;      &lt;catRef scheme="#genre" target="#Paratext"/&gt;      &lt;catRef scheme="#dcType" target="#Typescript"/&gt;      &lt;catRef scheme="#discipline" target="#Literature"/&gt;&lt;!-- ADD IN 4-6 KEYWORDS --&gt;      &lt;keywords scheme="http://www.romantic-circles.org/#tags"&gt;        &lt;term subtype="tags"&gt;KEYWORD&lt;/term&gt;        &lt;term subtype="tags"&gt;KEYWORD&lt;/term&gt;        &lt;term subtype="tags"&gt;KEYWORD&lt;/term&gt;        &lt;term subtype="tags"&gt;KEYWORD&lt;/term&gt;      &lt;/keywords&gt;    &lt;/textClass&gt;  &lt;/profileDesc&gt;  &lt;revisionDesc&gt;    &lt;change&gt;&lt;!--  PUT YOUR NAME HERE. AND CHANGE THE DATE RIGHT BEFORE PUBLICATION  --&gt;      &lt;name&gt;YOUR NAME&lt;/name&gt;      &lt;date&gt;YYYY-MM-DD&lt;/date&gt;      &lt;list&gt;        &lt;item&gt;TEI encoding the text&lt;/item&gt;      &lt;/list&gt;    &lt;/change&gt;  &lt;/revisionDesc&gt;&lt;/teiHeader&gt;"
     
   } ,
  
   {
     
        "title"    : "RC TEI Style",
        "category" : "",
        "tags"     : "",
        "url"      : "/docs/rc-tei-style/",
        "date"     : "",
        "content"  : "Tags for organizing textDivsThe &lt;div&gt; tag acts as a “wrapper” to contain various types of content. Most top-level organizational elements/sections of the document within the &lt;body&gt; tag will take the &lt;div type=""&gt; tag. The types used by RC include:  &lt;div type="essay"&gt; — (surrounds the entire text of an essay, including the works Cited [see below])  &lt;div type="citation"&gt; — (wraps the works cited section)  &lt;div type="section"&gt; — (used to define and separate distinct sections of documents, such as journal entries; used in conjunction with &lt;head&gt; tags [see below], this is how we create subheadings)  &lt;div type="letter"&gt; — (used to denote epistolary content)  &lt;div type="poetry"&gt; — (using this tag triggers a line counting mechanism in the XSLT transformation to HTML)  &lt;div type="epigraph"&gt; — (for epigraphs; must contain nested &lt;quote&gt; and, when appropriate, &lt;lg&gt; tags, as defined below)  &lt;div type="paratext"&gt; — (a file like “about,” “abstracts,” or “chronology” would take this tag)Milestones - to provide a visual marker to separate div sections, use a milestone tag: &lt;lb/&gt;&lt;milestone unit="TYPE OF DIV JUST CLOSED, EX: "paratext"/&gt;&lt;lb/&gt;HeadingsAll document titles and section headings should be enclosed in &lt;head&gt;&lt;/head&gt; tags. These can occur only after &lt;div&gt; tags. The &lt;head&gt; tags will print to the screen differently depending on what &lt;div&gt; tags the correspond to-On rare occasions, you might need to use the tag &lt;head type="subhead"&gt;&lt;/head&gt;. This typically occurs when a contributor has divided their document into multiple sections with subsections.      Following the &lt;head&gt;&lt;/head&gt; tag in most essays/introductions, you will need to include a &lt;byline&gt;&lt;/byline&gt; tag that contains both a &lt;docAuthor&gt;NAME&lt;/docAuthor&gt; tag and then an &lt;affiliation&gt;UNIVERSITY NAME&lt;/affiliation&gt; tag.        With journal entries, enclose the date tag within the heading tag. See the letters section for the conventions for the date tag.  ParagraphsThis tag should always nest within a &lt;div&gt; tag; encloses all paragraph text and denotes paragraph breaks.  &lt;p&gt;Paragraph&lt;/p&gt;Line BreakThis tag enforces a blank line in the resulting HTML. Note that &lt;lb/&gt; is self-closing, so no end tag is needed. In other words, a line break tag can stand on its own. In some formatting instances, though, you might need to begin and end a line break tag (e.g. when using the milestone tag)  &lt;lb/&gt;ListsWe most often see lists following the &lt;div type="paratext"&gt; tag. You will want to use the &lt;list&gt;&lt;/list&gt; tag with the type specified as either “ordered” (for numbered lists) or “unordered” (no numbers or bullet points will appear)Within the &lt;list&gt; tag, all items will be individually enclosed within the tag &lt;item&gt;&lt;/item&gt;.-Example:&lt;div type="paratext"&gt;&lt;list type="unordered"&gt;&lt;item&gt;A. Cheese&lt;/item&gt;&lt;item&gt;B. Pepperoni&lt;/item&gt;&lt;item&gt;C. Sauce&lt;/item&gt;&lt;/list&gt;&lt;/div&gt;Note that I have added in alphabetical headings into the text part of the tag. By using the “unordered” type, we can more easily adapt lists to fit the needs of whatever we are working onBlockquotes&lt;quote&gt; tags are used to set a long quote off from the surrounding text:12345&lt;quote&gt;A band of cruel ruffians and assassins, reeking with [her sentinel’s] blood, rushed into the chamber of the queen, and pierced with a hundred strokes of bayonets and poniards the bed, from whence this persecuted woman had but just time to fly almost naked, and, through ways unknown to the murderers, had escaped to seek refuge at the feet of a king and husband, not secure of his own life for a moment (Burke 71).&lt;/quote&gt;  Don’t close the enclosing &lt;p&gt; tag after the quote unless the paragraph actually ends with the block quote (which is rare).Poetry / VerseA series of nested tags can be used to create and number verse (when nested inside a &lt;div type="poetry"&gt; tag):  &lt;lg type="stanza"&gt; is used for each stanza unit  &lt;l&gt;for each line&lt;/l&gt; for each individual line of verse within the &lt;lg&gt; tags  For lines of poetry quoted within paragraphs, use &lt;quote&gt;&lt;lg type="stanza"&gt; followed by individual lines within &lt;l&gt; tags. If the paragraph doesn’t end before the quoted verse, don’t close the &lt;p&gt; tag until the paragraph actually ends.An example of a poem/stanza in TEI:123456789101112&lt;div type="poetry"&gt;  &lt;lg type="stanza"&gt;    &lt;l&gt;&lt;emph&gt;Her care&lt;/emph&gt;&amp;#8212;’twas a sweet one, I think&amp;#8212;&lt;/l&gt;    &lt;l&gt;Was to tend on her mother, and spin,&lt;/l&gt;    &lt;l&gt;And to foster the willows that drink&lt;/l&gt;    &lt;l&gt;Of the dews from old Cam’s sedgy brim.&lt;/l&gt;    &lt;l&gt;&lt;emph&gt;Her ambition&lt;/emph&gt;&amp;#8212;smile not, ye proud group;&lt;/l&gt;    &lt;l&gt;For industry stood at her wheel,&lt;/l&gt;    &lt;l&gt;And bade her to nourish the hope,&lt;/l&gt;    &lt;l&gt;That the osiers, she rais’d, she might peel.&lt;/l&gt;  &lt;/lg&gt;&lt;/div&gt;&gt;Stylistic and Editorial TagsStyling document elements in TEIThe following TEI tags will result in HTML tags that produce the described formatting. Note that the &lt;hi&gt; tag simply marks a word or phrase as graphically distinct from the surrounding text; it does not specify reasons for this distinction. For this reason, it may often be desirable to use the following rend attributes with tags that supply a specific editorial / textual rationale for the resulting formatting (see below). This is particularly true with editorial formatting practices commonly used to signal insertions (superscript / carets) and deletions (strikethrough).            Style      TEI Attribute                  Italics      &lt;hi rend="italic"&gt;example&lt;/hi&gt;              Bold      &lt;hi rend="bold"&gt;example&lt;/hi&gt;              Underline      &lt;hi rend="underline"&gt;example&lt;/hi&gt;              Strikethrough      &lt;hi rend="strike"&gt;example&lt;/hi&gt;              Small caps      &lt;hi rend="smcap"&gt;example&lt;/hi&gt;              Superscript      &lt;hi rend=”sup”&gt;example&lt;/hi&gt;              Subscript      &lt;hi rend="sub"&gt;example&lt;/hi&gt;              Overline      &lt;hi rend="overbar"&gt;example&lt;/hi&gt;              Expanded text      &lt;hi rend="expanded"&gt;example&lt;/hi&gt;              Centered element      &lt;hi rend="center"&gt;example&lt;/hi&gt;              Change font (gothic)      &lt;hi rend="gothic"&gt;example&lt;/hi&gt;              Change font (cursive)      &lt;hi rend="cursive"&gt;example&lt;/hi&gt;      Rendition formatting: TEI also allows the “rendition” formatting attribute on most tags, which can be used to apply common CSS classes to the targeted tag during transformation to HTML. The usable TEI “renditions” are declared in the document’s TEI header and can be used via the simple attribute &lt;tag rendition="#declared-name"&gt;. RC commonly uses rendition attributes to achieve specific formatting within document sections, particularly to simulate old title pages and the like.Note that, depending on editorial/authorial metadata considerations (as discussed in the following section), there may be myriad ways to code a specific style attribute onto text. Often an encoder must use their best judgment as to the most appropriate tag to pair with an an attribute.Editorial style tags  Emphasis: &lt;emph&gt;example&lt;/emph&gt;          Note: In RC’s transforms, the &lt;emph&gt; tag automatically produces italicized text (HTML: &lt;em&gt;) and does not require a rend attribute.        Deleted (crossed-out) text: &lt;del&gt;example&lt;/del&gt;          For the tag to render strikethrough text on the site: &lt;del rend="strike"&gt;        Additions (caret): &lt;add&gt;example&lt;/add&gt;          For the tag to rend superscript or subscript text on the site: &lt;add rend="sup"/"sub"&gt;        Illegible text: the &lt;gap&gt; and &lt;unclear&gt; tags indicate points where material has been omitted in a transcription, whether for editorial reasons described in the TEI header, as part of sampling practice, or because the material is illegible, invisible, or inaudible.          The &lt;gap&gt; tag should include the “reason” attribute to explain why text is unavailable; e.g., &lt;gap reason=”illegible”&gt;example&lt;/gap&gt;      Other acceptable “reasons” include: “damaged” or “lost”        Handwriting: the &lt;hand&gt; tag is used to signal the person(s) responsible for writing the document, and is used in the TEI header. To mark a shift of hand, whether it be a new scribe or a new instrument (i.e., a shift to pencil from pen), the &lt;handShift&gt; tag is used in the running text.          If &lt;hand&gt; is used in the TEI header, it can contain the attributes “scribe” ane “ink.” E.g., &lt;hand scribe="Dorothy Wordsworth" ink="pen"&gt;.      The &lt;handShift&gt; tag in running text will parallel the use of &lt;hand&gt; but contain the attributes “new” (to signal the new scribe) and “ink.” E.g., &lt;handShift new="Bob Villa" ink="pencil"&gt;.      To change the color of the font use the &lt;span change="COLOR"&gt;&lt;/span&gt;      Note: These tags (with the exception of &lt;emph&gt;) merely encode metadata without any visible output in the resulting HTML. Any of the preceding tags can accept a “rend” or “rendition” attribute if needed to achieve the necessary formatting in the output.TitlesThe different levels of title tags correspond with the type of resource being cited, and will format the output text accordingly (i.e., with italics or quotation marks):  &lt;title level="m"&gt;: for all monographs, books, etc.  &lt;title level="j”&gt;: for all journal / periodical titles  &lt;title level="a"&gt;: for the titles of essays, articles; anything that would typically take quotation marks.  &lt;title level="s"&gt;: for series  &lt;title level="u"&gt;: unpublished worksSpecial CharactersThe following special characters should be supplied via their HTML 5.0 numeric/named character references (NCRs) or in the TEI, as declared in the header:  Em dash: &amp;#8212;  En dash: &amp;#8211;  Ampersand: &amp;amp;  Double curly quotes: &amp;#8220; (open) / &amp;#8221; (close)  Single curly quotes: &amp;#8216; (open) / &amp;#8217; (close)  Pound sign: &amp;#35;  Greater than (&gt;): &amp;gt; / Less than (&lt;): &amp;lt;Many curly quotes will be added automatically via the transforms (to titles, for instance), though NCRs will need to be supplied in the case of quotations within the text. The most effective method for applying the em and en dash codes, assuming a copy editor has done a consistent job of correctly supplying these glyphs in Word, is to perform a search-and-replace function using Oxygen. (On Mac, the relevant keyboard shortcuts are: en dash = option + [hyphen] &amp; em dash = option + shift + [hyphen].)It is possible to add any unicode character to the TEI via this method of numeric reference; you can find an exhaustive list of characters at this resource.Annotations/NotesAll notes should occur inline with the main body of the text (even though they will appear at the end of the text when published).  &lt;note place="foot" resp="editors"&gt;All quotations from Coleridge's poetic and dramatic works are taken from Mays's edition, unless otherwise indicated.&lt;/note&gt;  If the note is an original (period) author’s note as opposed to a contemporary editor’s note, use resp="author".  Note: With RC’s new XSLT transforms, this code will trigger a double-printing of the note in the output HTML. When imported to the site, this results in a “popup” note on mouseover; if the HTML file is viewed in a local web browser, however, this double-printing will look like a mistake.LettersLetters take a special set of enclosed tags inside the top-level &lt;div type="letter"&gt;, as follows:12345678910111213141516&lt;opener&gt;  &lt;dateline&gt;    &lt;address&gt;      &lt;placeName&gt;        &lt;ref target="places.html#DukeStBath"&gt;Bath.&lt;/ref&gt;      &lt;/placeName&gt;    &lt;/address&gt;    &lt;date when="1791-12-10"&gt;Saturday. December 10 1791.&lt;/date&gt;  &lt;/dateline&gt;  &lt;salute&gt;Dear Collins&lt;/salute&gt;&lt;/opener&gt;&lt;!-- Text of the letter goes here inside &lt;p&gt; tags --&gt;&lt;closer&gt;    &lt;salute&gt;Sincerely&lt;/salute&gt;    &lt;signed&gt;DW&lt;/signed&gt;&lt;/closer&gt;  &lt;date when=”YEAR-MONTH-DATE&gt;Record the date here as it appears in original letter&lt;/date&gt;  Often you will need to use rendition attributes to suggest the original indentation of the text. These rendition attributes can be found in the TEI header. E.g., &lt;salute rendition="#indent6"&gt;  Also see below for the protocol for place/people references.Tags for People/PlacesThese tags will ultimately be hyperlinked to the People and Places Indexes:  Places: &lt;ref target="NAME-OF-PLACE-FILE.html#NAME-AS-IT-APPEARS-IN-PLACE-FILE"&gt;NAME-AS-IT-APPEARS-IN-ORIG-DOC&lt;/ref&gt;          Ex: &lt;ref target="places.html#Woolwich"&gt;Woolwich,&lt;/ref&gt;        People: &lt;ref target="NAME-OF-PERSONOGRAPHY-FILE.html#NAME-AS-IT-APPEARS-IN-BIO-FILE"&gt;NAME-AS-IT-APPEARS-IN-ORIG-DOC&lt;/ref&gt;          Ex: &lt;ref target="people.html#BloomfieldMaryAnn"&gt;wife&lt;/ref&gt;      Images and Figures  Images: label images and thumbnails as follows (for file “picture”): picture.png / pictureThumb.png. With the “Thumb” suffix, the transforms will automatically create links to the larger image file without the suffix.  Any graphical representation inside a running text is considered to be a “figure” and will be counted as such.  For figure divs, use &lt;figure&gt;, but for inline images, use only &lt;graphic url=”” rend=”inline”&gt;. Here’s an example of a full figure div, which should be used whenever a title (head) and/or description is needed:12345&lt;figure&gt;  &lt;graphic url="relative-path/to/emblem1Thumb.png" width=”400px” rend="inline"/&gt;    &lt;head&gt;Emblemi d'Amore&lt;/head&gt;    &lt;figDesc&gt;Figure 1: A pair of naked winged cupids, each holding a flaming torch, in a rural setting.&lt;/figDesc&gt; &lt;/figure&gt;  The &lt;head&gt; tag inside the figure tag is optional; use only if the figure has a title in addition to a description.  The &lt;figDesc&gt; tag will contain the image caption / description, and should start with a declaration of the figure number within the document (as above).  Note that the width attribute can be used to control the appearance of the image on the resulting HTML page. In relatively rare cases, the “height” attribute can also be used.As hinted above, in (rare) cases where only an image is to be inserted without accompanying text, the &lt;graphic&gt; tag can be used alone.Miscellaneous TagsForeign languages:  &lt;foreign xml:lang="xx"&gt;Fêtes publiques&lt;/foreign&gt;          Replace “xx” above with the appropriate (usually) 2-letter HTML ISO language code.        Epigraphs: use &lt;div type="epigraph"&gt;&lt;quote&gt;“What Fools These Mortals Be!”&lt;/quote&gt;&lt;/div&gt;          Include the &lt;quote&gt; tags within the epigraph tags.        Page Breaks: &lt;pb/&gt; (note that this tag is self-closing)Citations/Bibliograpy:  Use the tag &lt;div type="citation"&gt; to enclose the entire bibliography.  If the bibliography has a specific title, enclose the title using the &lt;head&gt; tags.  Each individual entry should be enclosed within the &lt;bibl&gt; tags.  Follow standard bibliographic formatting, except all titles must be enclosed within the &lt;title level="m"&gt;TITLE&lt;/title&gt; tags.External Links:  Use the tag &lt;ref target="html link"&gt;TEXT THAT APPEARS ON THE SITE&lt;/ref&gt;  Be sure to check the integrity of all links before embedding them in your code  Example: &lt;ref target="https://archive.org/details/BBC_A_Film_By_Bowie_Cracked_Actor_1975"&gt;Cracked Actor&lt;/ref&gt;Anchors and Internal Links — some volumes and editions will require internal linking among different texts in the volume, or between sections within a single document.  The &lt;anchor&gt; tag is the specific line in the TEI to be linked to; it will contain an xml:id attribute that can be placed elsewhere in the document to link back to this line.  The familiar &lt;ref&gt; tag can target the stated xml:id within the anchor to link to it. Here’s what both tags will look like in the TEI:123&lt;anchor xml:id="section1"&gt;&lt;!-- Any amount of intervening text --&gt;&lt;ref target="#section1"&gt;  This method also works between documents. Use a relative link to the appropriate HTML file, followed by the #xml:id:          &lt;ref target="/editions/guide_lakes/editions.2020.guide_lakes.introduction.html#section1"&gt;      "
     
   } ,
  
   {
     
   } ,
  
   {
     
        "title"    : "Acquia Server Management",
        "category" : "",
        "tags"     : "",
        "url"      : "/docs/server-mgmt/",
        "date"     : "",
        "content"  : "go."
     
   } ,
  
   {
     
        "title"    : "RC Site Sections",
        "category" : "",
        "tags"     : "",
        "url"      : "/docs/site-sections/",
        "date"     : "",
        "content"  : "Site structureOver the years Romantic Circles has grown into a fairly sprawling enterprise, which is both an asset and a liability. From its inception, the site has been an ambitious space of collaboration, academic experimentation, and niche DH projects. However, the amount and diversity of content on the site proves increasingly challenging for a small part-time staff to manage and maintain. The site structure is currently under examination, and it’s possible that RC might consolidate/archive a couple of these sections or their content in the coming years.Currently, RC has nine main sections, all of which can be seen on site main navigation bar:  Electronic Editions is an archive of Romantic-era texts curated and edited by esteemed scholars of Romanticism. Editions are labors of original archival work and scholarship uniquely suited to an online environment, and generally are available nowhere else. They are, as a general rule, the most complex, technically demanding, and extensive publications on the RC site. As an example of the potential of RC Editions as a DH project, see any of the six parts of The Collected Letters of Robert Southey on the site.  The Praxis Series is a collection of peer-reviewed, edited volumes of literary criticism. You can think of each Praxis volume as a hybrid between a special edition of a literary journal and an edited collection of scholarly essays. RC Praxis has an ISSN, recognizing it as an online “continuing resource.”  RC Pedagogies offers resources for teachers of Romantic studies at the secondary and collegiate level. The section’s main publication is the “Pedagogies Commons,” a peer-reviewed journal devoted to teaching Romanticism. RC Pedagogies also collects online syllabi for courses in Romanticism, hosts occasional “Pedagogies Hangouts” video chats about teaching Romanticism, and conducts an annual Pedagogy Contest co-sponsored by NASSR (North American Society for the Study of Romanticism).  RC Unbound, conceived as “a sheaf of fugitive posts on urgent issues and events,” is a new RC publication as of 2020 that aims to respond to current events with clarity, approachability, and timeliness, and without citations. Unbound is published quarterly, and each issue consists of 3-4 short essays on a theme.  RC Gallery is a collection of Romantic-era images and an investigation of romantic visualities. Each gallery exhibit is a series of curated images with extensive metadata and commentary. As of this writing, RC Galleries is in the midst of a redesign.  Scholarly Resources collects research tools and scholarship-adjacent materials, including bibliographies, indexes and concordances, chronologies, engagement with adaptations and afterlives of Romantic-era texts, and other miscellaneous resources.  Reviews and Receptions publishes short reviews of contemporary scholarship and monographs in the field of Romanticism, a compendium of pop culture’s engagement with Romanticism, and curated booklists on current topics in the field. Reviews and Receptions also hosts live Book Chats, featuring videos of scholars conversing on various topics, debates, and developments in the field.  RC Audio hosts a collection of audio files including interviews, readings, and lectures. This section also includes Poets on Poets, which contains recordings of practicing poets from around the world reading a Romantic-period poem.  “About RC” contains a brief history and description of the site, the current advisory board, an archive listing and linking to discontinued RC sections and initiatives, an index of contributors, submission and permissions info, staff info, and contact information.RC Editions, Praxis, and Pedagogies Commons volumes are peer reviewed. The peer review process is managed by the section editors and, depending on the section and material, involves external review by 1–3 scholars in the relevant field (often RC board members). Materials for RC Unbound and Reviews are solicited by the General Editors or section editors and undergo review (often involving substantive editing) by those editors.All published textual materials in RC Editions, Praxis, Pedagogies Commons, and Galleries are encoded to preserve metadata and formatting using TEI (XML) or JSON, then transformed to HTML for publication on the site. See below for more information about and instructions for encoding textual materials. RC Unbound, Reviews, Scholarly Resources, and Audio pages are generally prepared and presented as simple HTML.As of this writing, the most active sections of the site are Praxis, Pedagogies, Unbound, Editions, and Reviews, all of which publish at least once a year."
     
   } ,
  
   {
     
        "title"    : "SSH Keys &amp; Remote Server Access",
        "category" : "",
        "tags"     : "",
        "url"      : "/docs/ssh-keys/",
        "date"     : "",
        "content"  : "Many operations that interface with the site’s server, including working in an environment’s git repo and accessing the SFTP, require a Secure Shell (SSH) connection to Acquia’s servers via the Cloud Platform Service. This page walks you through generating an SSH and deploying it to the Cloud Platform in order to access the site’s server directly from your local machine.Generating a new SSH key      Make sure you don’t already have a stored SSH key. Open a terminal instance (on Windows, PowerShell) and change into the default local SSH directory (/Users/[your.user]/.ssh):    1 cd ~/.ssh        (If this directory doesn’t exist, simply move on to the next step.)    Now show all files in this directory: ls -a. If you see a file named “id_rsa.pub” or “id_rsa,” you already have a stored key. If you want to attempt to reuse it for Acquia SSH access, skip to the following section (Deploying the SSH key to Acquia Cloud). If you’d like to back this key up instead (for future use, if it was created to connect to another server), you can move it to a backup folder via something like the following: mkdir backup, then mv id_rsa* backup.        From the same directory (or, if no .ssh folder exists, from the top of your user directory), use the SSH-keygen tool to create a 4096-bit key:    1 ssh-keygen -b 4096        You should see a message similar to this:    12 Generating public/private rsa key pair. Enter file in which to save the key (/users/[your-user-name]/.ssh/id_rsa):         Simply hit “Return” to accept the default key location. If it doesn’t already exist, the “.ssh” folder will be created in your user root directory (as a hidden folder).        When prompted, enter and repeat a passphrase for use with your SSH key. If you have sole and secure access to your machine, you can simply hit “Return” to use a blank passkey. Here’s what the completion of this interaction should look like:    123456789101112131415161718 Enter passphrase (empty for no passphrase):  Enter same passphrase again:  Your identification has been saved in /users/your-user-name/.ssh/id_rsa. Your public key has been saved in /users/your-user-name/.ssh/id_rsa.pub. The key fingerprint is: SHA256:gTVWKbn41z6123456789LC4abcdefghijklmnopqrstuvwxy [youruser@PC-name] The key's randomart image is: +--[RSA 4096]--+ |==+.    +o..     | |.oE.   +o..      | |    . ...o       | |     .o...       | |     oo+S  .     | |  + ..B = . .    | |.+.+.oo+ * o .   | |o++.o+  . + +    | |B+ o.    .   .   | +----[SHA256]-----+         There’s no need to record the fingerprint or randomart, but make sure you save your passphrase, if you made one. You’ll need to enter it each time you connect locally to the remote server, and there’s no way to recover the passphrase.        That’s it. In the following section, we’ll add your key to the Acquia Cloud Platform.  Deploying your SSH key to the Acquia Cloud PlatformNow that we’ve generated a local SSH key, it’s ready to be deployed on the remote server (Acquia).      From your .ssh directory (/Users/[your.user]/.ssh)—which you can easily navigate to with $ cd ~/.ssh—run the following terminal command (in Mac OS):    1 pbcopy &lt; ~/.ssh/id_rsa.pub        This command copies the contents of your id_rsa.pub file to your clipboard.          In Windows, you’ll need to manually copy the contents of the id_rsa.pub file to your clipboard by opening the file using a text editor (such as Notepad, etc.). Note that to see the file in File Explorer, you’ll need to show hidden files, as discussed at the beginning of this tutorial. Copy the contents of the id_rsa.pub file, making sure not to add any extra spaces or characters. Note: Windows will want to recognize the file as a “MS Publisher” file, but it is a simple text file and will not open in that app. Use Notepad or another text editor.        You can also use a shell text editor such as vim (Linux/Mac OS), nano (Mac/Windows), or similar; simple “copy to clipboard” scripts also exist for Windows (clip) and Linux (xclip), but these tools require some configuration.        Log into the Acquia Cloud Platform and click on your user icon at the top right of the page, then select “Account Settings.” Next, select “SSH Keys” from the left navbar.        In the “SSH Key Name” field, give your key a name for use in Acquia; this can be anything, but at minimum you should include your name/initials and the machine it’s on (e.g., tjm_PC-Dec22). This will help you and/or RC staff identify the key in the future to determine which keys are active and which ones can be deleted.        Paste the contents of your clipboard, containing the entire string of characters from the generated RSA key, into the “Public Key” field. (This will begin with ssh-rsa and end with your user and machine info.) Make sure no extra spaces are present. Click “Add Key.” If this works, you’re done!    Note: It will take a few minutes for the key to propagate to the server and become active. Wait a few minutes, then try to SSH into the server, as discussed in the following section.Connecting to the Acquia server via SSHOnce your key is deployed to Acquia Cloud Platform, you’re ready to connect to the server from your local machine via SSH. The process is quite simple:      Log into Acquia Cloud Platform and navigate to whichever environment (Dev / Stage / Prod) you’d like to connect to. Under “Environment Details,” you’ll see both a Git URL and an SSH URL. Copy the SSH URL to your clipboard.        Open a new terminal instance. From your root (or any) directory, type ssh, a space, and then paste the SSH URL from the desired Acquia environment. You’ll be prompted for the SSH passphrase you created above, and then you’ll be connected to the web server (Linux). The command prompt will change from your local username to something like romanticcircles@srv-7801:~$.  Be careful! From this command prompt, you have (near) complete control of the site’s server configuration files and code. Don’t proceed further unless you know what you’re doing!  Note: As discussed elsewhere in this guide, Acquia does not by default make the site’s web (or docroot) folder visible on the live server. To edit the site’s code directly via SSH, you must enable “Live Development Mode” under the blue Actions dropdown menu within an environment. For more on Acquia’s Live Development Mode see this documentation."
     
   } ,
  
   {
     
        "title"    : "RC Tech Stack &amp; Software",
        "category" : "",
        "tags"     : "",
        "url"      : "/docs/tech-stack/",
        "date"     : "",
        "content"  : "Dev Tech StackDevelopment of the RC site requires four linked elements, each controlled by a different web UI (user interface) or local application. In general, tools used to develop the site appearance and user experience are known as frontend, while those used to make changes to the server, databases, and Drupal installation are backend. We use these elements in concert to design, build, update, secure, back up, and restore the site, as well as to host files and databases, commit code changes, change the site’s design or appearance, and test new ideas and initiatives. The four main dev elements are:  Content management system (Drupal)  frontend          Languages / tools: HTML, CSS, JavaScript, Drupal modules        Server management and development platform (Acquia Cloud Platform)  backend (managed)          Languages / tools: PHP, SSH (shell), Cloud IDE        Site Database (MySQL)  backend          Languages / tools: SQL, MySQL, phpMyAdmin        Codebase repository (Acquia/Git)  frontend/backend          Languages / tools: PHP, Git shell, Git GUI        Filebase management (FTP)  backend          Tools: SSH, FTP client      The RC dev “stack” consists most simply in the layers of this background infrastructure. These layers can be represented as follows, which each successive layer of the tech stack requires the preceding elements for functionality:Virtual Server (Acquia) | Linux OS (runs Aquia virtual server)  Apache Web Server (runs on Linux)  Git codebase / PHP (the programming language Drupal is built on)  MySQL Database (managed by Acquia)   Filebase (FTP)  Drupal site (with admin UI @ RC login).The basic stack for a Drupal install is called a “[L]AMP stack”: Linux / Apache / MySQL / PHP. This section will describe the preceding elements in the terms you need to manage and develop the frontend and backend of RC’s Drupal installation, including configuring the relevant software. For detailed instructions on how to control and/or use the tools described in this section, see the following section on task documentation.DH Publication “Stack”An additional component of RC’s content workflow is what could be called our publication “stack.” Since we publish text-based content on the web, the frontend component of this stack is HTML with CSS formatting and added interaction functionality via JavaScript. Beneath these familiar web components, however, lies the foundation of our textual encoding and preservation standard, TEI (Text Encoding Initative) markup, which is a flavor of XML markup. In order to render encoded TEI documents in HTML, we run transformation scenarios from XSLT (eXtensive Stylesheet Language Transformations) templates. So this publication stack is something of an onion, comprised of the following layers (front to back):  Drupal WYSIWYG (What You See Is What You Get) text editor, GUI  HTML (often in the text editor as “full HTML”)  CSS on Drupal via “Asset Injector” module  Filebase access (FTP) for HTML / media import  XSLT templates to transform TEI to HTML  TEI encoded documents (individual essays, future “pages”)  Original Word text documentsFor specifics on the publication process and how these elements work together, see the DH Publishing Guide in the Production Documentation section of this site.SoftwareWhile it is possible to accomplish many of RC’s necessary development and publishing tasks using a wide range of software options, we have preferred applications to accomplish most tasks, and these choices are reflected in much of this documentation. Here’s a list, with brief descriptions and links:  Drupal 9  RC’s content management system; allows both core and contributed modules, which extend Drupal’s functionality in various ways (mapping, XPath imports, other integrations)  Acquia Cloud Platform (requires account)  a web UI for our servers (managed host) that allows management of development, staging, and production environments; Apache server configuration; database management, backup, and restoration; team and credential management; site Git; PHP versioning; etc.          Acquia Cloud IDE  an integrated development environment (LAMP) stack that runs entirely in the cloud for non-environment development and experimentation (dev sandbox)        Composer  a PHP dependency manager that enables simple dependency-based updates for the Drupal application and all its components  phpMyAdmin  administration tool for MySQL database (per environment)  Acquia Cloud IDE  an integrated development environment hosted on Acquia Cloud Platform that can deploy database and code to dev environment (Replaced Acquia Dev Desktop in 2021)  Homebrew (Mac or Linux only)  a shell-based package installer (used to install Apple Xcode tools, Composer, git, Ruby, PHP, Nano, etc.)  Visual Studio Code  excellent customizable text editor with integrated terminal for working with the site (project) code. Add a git GUI with the GitLens integration  Atom  a simple customizable text editor for editing single files (checking HTML, editing Markdown)  GitKraken  powerful git GUI (requires GitHub Student/Faculty Developer Pack for free use). A simpler alternative is GitHub Desktop.  CyberDuck  (S)FTP client with SSH integration; also can connect to AWS S3 buckets &amp; popular cloud storage services (Google Drive, Dropbox)  Oxygen XML Editor  an XML (&amp; XSL) editor with integrated customizable TEI validation schema; executes transformation scenarios from XML —&gt; XSLT —&gt; HTMLDeveloping this GitHub Pages site requires installing a few additional tools:  Jekyll  a static site generator that builds pages from Markdown files using Liquid templating, YAML config files, along with some simple HTML and CSS/SCSS and deploys them to GitHub Pages.  Bundler  a Ruby dependency manager installed with Jekyll via the instructions linked above  Ruby  as a Ruby gem, Jekyll requires an updated version of Ruby to run (don’t use the outdated Ruby version that ships with Mac OS). For simple use, perform a Homebrew installation. For frequent use and testing, consider installing using a version manager like chruby or asdfFor more on using these tools to develop the site, see the Production Documentation section of this site."
     
   } ,
  
   {
     
        "title"    : "RC Text Encoding Initiative (TEI) Guidelines",
        "category" : "",
        "tags"     : "",
        "url"      : "/docs/tei-guidelines/",
        "date"     : "",
        "content"  : "About TEI / XMLThis docmentation lays out guidelines for correct and consistent coding of TEI documents for publication on the Romantic Circles site. The Text Encoding Initative TEI is a consortium of digital humanists dedicated to creating and maintaining a single flexible set of guidelines for marking up documents to capture textual metadata. TEI is a “flavor” of XML, or eXtensible Markup Language, which itself is a kind of lingua franca for representing information digitally.While markup is possible in any text editor (e.g., Atom, Visual Studio Code, Kate) RC prefers OxygenXML Editor for its validation and transformation capabilities. If you don’t have a copy of this software, contact your supervisor (academic subscriptions are now available for $5/month, which includes software upgrades).TEI Tagging and Document StructureAll TEI documents share an overall structure of hierarchically nested tags that more or less intuitively reflect the form of the document itself. Since it is derived from XML, TEI tags are descriptive semantic strings enclosed in angle brackets, usually (except in the case of self-closing tags) enclosing the content they describe, as in HTML. As a simple example, a name in the text could be tagged in TEI as follows: &lt;name&gt;Mary Wollstonecraft&lt;/name&gt;.Every TEI document shares the same hierarchical tagging logic. The entire document must be enclosed by the &lt;TEI&gt; tag, within which come main document or metadata enclosures like &lt;teiHeader&gt;, &lt;text&gt;, or &lt;teiCorpus&gt;. Structural elements within the text itself, such as &lt;front&gt; (abstract), &lt;body&gt;, &lt;head&gt; (headings), and different &lt;div&gt; sections (such as the bibliography), are enclosed within the overarching &lt;text&gt; tag.Here’s a three-level example of a standard TEI document using RC’s schema:123456789101112131415161718192021222324&lt;TEI xmlns="http://www.tei-c.org/ns/1.0"&gt;  &lt;teiHeader&gt;     &lt;fileDesc&gt;        &lt;!-- [...] --&gt;     &lt;/fileDesc&gt;     &lt;encodingDesc&gt;        &lt;!-- [...] --&gt;     &lt;/encodingDesc&gt;     &lt;profileDesc&gt;        &lt;!-- [...] --&gt;     &lt;/profileDesc&gt;     &lt;revisionDesc&gt;        &lt;!-- [...] --&gt;     &lt;/revisionDesc&gt;  &lt;/teiHeader&gt;  &lt;text&gt;    &lt;front&gt;        &lt;!-- [...] --&gt;    &lt;/front&gt;    &lt;body&gt;        &lt;!-- [...] --&gt;    &lt;/body&gt;   &lt;/text&gt; &lt;/TEI&gt;As you can see, the hierarchical levels implicit in the structure of the code are marked visually via the indentation of lines (which OxygenXML can format for you automatically after OxGarage conversion). The &lt;teiHeader&gt;, for example, contains 4 parallel sections that encode metadata about the document: file description, encoding description, profile description, and revision description. More on these metadata categories in the pages that follow."
     
   } ,
  
   {
     
        "title"    : "TEI Coding Walkthrough",
        "category" : "",
        "tags"     : "",
        "url"      : "/docs/tei-walkthrough/",
        "date"     : "",
        "content"  : "This page is an overview of the TEI encoding process intended for beginners or as a refresher after some time away.SoftwareTo get started and participate in RC’s TEI workflow, you’ll need access to a few software applications:  OxygenXML Editor. While markup is possible in any text editor (e.g., Atom, Visual Studio Code, Kate) RC prefers OxygenXML for its validation and transformation capabilities. If you don’t have a copy of this software, contact your supervisor.  TEIGarage. This is a free online tool that converts standard text document formats to and from TEI (XML).  Google Drive Desktop (recommended). RC uses an institutional Google Drive (hosted through the University of Colorado Boulder) to host its production filesystem. You’ll receive access to this drive, which is where you’ll access the original Word files for the edition/volume, images and media, and any other relevant files not tracked by git.  Git. For instructions on how to install and use git, see the provided git guide.  GitHub. You’ll need a GitHub account to gain access to the Romantic Circles organization so that you can pull and push to our TEI repository.  A Git GUI client (recommended). If you’ll be working on site code, we recommend Visual Studio Code with GitLens integration; if you’re simply encoding TEI, we recommend GitHub Desktop. If you’re comfortable running git from the command line, this is also an option.If you’ll be completing the production process  i.e., transforming the TEI to HTML and publishing it as content on the RC site  make sure you read the instructions on publishing material, which can be found in the Digital Publishing Guide later in this documentation, in its entirety before you begin.Generating TEI DocumentsBefore a text file  usually a MS Word document  can be imported into OxygenXML to be edited, it must be converted into XML. While not strictly necessary (all coding could, of course, be done by hand), this step jump-starts the encoding process.The TEI consortium provides a tool called TEIGarage that converts files into different formats, automatically generating simple markup in the resulting files, when possible.To convert a document:  Go to https://teigarage.tei-c.org/.  Click “Documents,” then select the appropriate conversion: from “Microsoft Word (.docx)” to “TEI P5 XML Document.”  Simply upload your file at the prompt and your browser will download the converted XML file (in some browsers, a download prompt might pop up).  Save each file to the volume folder in your local rc-git folder within the rc-tei folder and rename it according to the RC convention (“section.year.volumename.docname.xml”).  Push your changes using the  GitHub desktop application (or via a terminal instance).The conversion process is far from perfect, but it will get you started by creating the basic document structure and consistently inserting (often wrong) tags that can be quickly corrected using OxygenXML’s search-and-replace function.Pushing your new XML files to the rc-tei repo  NOTE: If this is your first time coding TEI files for RC, you’ll also need to clone the rc-tei repository, which is hosted on GitHub, to your local machine. A full guide to using git is available inside this documentation, which will walk you through the process of cloning and using the repo. We suggest you familiarize yourself with all pages of the provided git documentation before using git to track and manage RC repositories.After you’ve converted all .docx files to .xml, these new TEI files need to be prepared for production. To do so, follow these steps, in order:  Create a new folder on your local machine (e.g., on your desktop) and give it a name that will serve as the shorthand path to the volume or edition. (For example, a volume called “Keats and Pop Culture” might become “popkeats.”) For certain editions with complicated internal linking or a large number of XML files, RC staff may elect to use subfolders to organize the content. If in doubt, contact one of the assistant editors.  Place all the newly generated TEI files (with .xml extensions) in this folder (and subfolders, if appropriate).  Rename all files according to RC naming conventions: section.year.volume.author(s).xml. Thus an essay by Olivia Loksing Moy in a Praxis volume called “Latin American Afterlives” published in 2020 will become praxis.2020.latinam.moy.xml.  Open your local rc-tei git repository in GitHub Desktop or VS Code (simply open the rc-tei folder). Alternately, open a terminal instance and cd into your the rc-tei directory (from here, it’s always a good idea to $ ls -a and ensure the folder contains the .git folder).  In GitHub Desktop, click “Fetch Origin” and then, if appropriate, “Pull Origin.” If in doubt about this process, or if you get a git conflict message, reach out to an assistant/technical editor. (From a terminal instance: from the repo’s root directory, type $ git fetch --all to see if any changes have been made to the remote repo since you pulled your local copy of it. If changes are present, pull them into your local repo with $ git pull --all.)  Once your local repo is synced to the origin (on GitHub), place the new folder containing the XML files into the repo’s appropriate folder (e.g., Praxis, Editions).  Commit your changes in git (in GitHub Desktop, write a commit message in the Summary field and click Commit to Master). Now push your local changes (added files) to the remote origin (in GitHub Desktop, click Push Origin).You’re synced to the repo, which tracks and “backs up” your work, and the files are ready for TEI encoding.Getting Started in OxygenXMLYou’re (finally!) ready to open a TEI file in Oxygen XML Editor. Simply click on the first of the XML files in your new repo; it should open in Oxygen. (If the file opens in another application, simply right-click the file and open it with OxygenXML.) When the file opens, you’ll likely see a jumbled wall of XML code and text. Don’t despair.Now we’ll just take a few easy steps to prepare the file for editing:  Select the entire document with Command + A (or, on PC, Control + A) and simply click the Format and Indent icon on the top toolbar (it looks like a paragraph with indentations). This should format the document and make it look much more approachable.  Find the &lt;teiHeader&gt; tag, which should now be in the second line of code. Note that Oxygen adds a line beside the line numbers at right that shows you where a selected tag ends (in this case, you may need to scroll down to find the end tag, &lt;/teiHeader&gt;). Delete everything enclosed inside the teiHeader tag and replace it with RC’s TEI header template.  Now replace the specific metadata inside the header; simply follow the instructions provided in the commented-out lines (in green).  Once the header is done, you’re ready to move on to the document proper. Instructions for coding textual elements can be found on the RC TEI Style page.  Once you’re familiar with the TEI encoding process and various tags, it’s a good idea to scan each document’s code for frequently occurring tags (often slightly “off” due to TEIGarage’s imperfect conversion) and correct and/or standardize them using the search-and-replace function.  OxygenXML has a powerful search-and-replace function that can work within a single file or even across an entire project/directory. Using this tool can greatly speed up the TEI encoding process, as you can easily perform “replace all” searches on common tags and/or mistakes. A classic example is title levels: a &lt;title level="m"&gt; replacement across the document will usually speed things up quite a bit (though be careful not to replace “a” and “j” level titles with the “m” tag)."
     
   } ,
  
   {
     
        "title"    : "Test",
        "category" : "",
        "tags"     : "",
        "url"      : "/docs/test/",
        "date"     : "",
        "content"  : "Does this even work?"
     
   } ,
  
   {
     
        "title"    : "Themes",
        "category" : "",
        "tags"     : "",
        "url"      : "/docs/themes/",
        "date"     : "",
        "content"  : "By default, this website uses paper theme, but you can change it to another bootwatch theme by settingbootwatch variable in _config.yml file.(Don’t forget to restart Jekyll if you are running locally because the configuration is not re-read upon change.)                                        Cerulean        A calm blue sky                                                    Cosmo        An ode to Metro                                                    Cyborg        Jet black and electric blue                                                    Darkly        Flatly in night mode                                                    Flatly        Flat and modern                                                    Journal        Crisp like a new sheet of paper                                                    Lumen        Light and shadow                                                    Paper        Material is the metaphor                                                    Readable        Optimized for legibility                                                    Sandstone        A touch of warmth                                                    Simplex        Mini and minimalist                                                    Slate        Shades of gunmetal gray                                                    Solar        A spin on Solarized                                                    Spacelab        Silvery and sleek                                                    Superhero        The brave and the blue                                                    United        Ubuntu orange and unique font                                                    Yeti        A friendly foundation            "
     
   } ,
  
   {
     
        "title"    : "Creating the TOC and Author Pages",
        "category" : "",
        "tags"     : "",
        "url"      : "/docs/toc-creation/",
        "date"     : "",
        "content"  : "Creating the volume table of contents (TOC) is a good place to start the publication process; its existence assures that, if anything is wrong, you’ll discover it sooner rather than later. This is also a good time to create RC author pages for any contributors or historical authors that don’t already have pages at RC.Basic TOC / index pageCreating a simple TOC is fairly simple on the new RC site since it involves no coding; a Drupal view identifies, through the “parent resource” field, all the essays that belong to a given TOC page and presents them there.Here are the steps to create a simple TOC (also known as an “index” or “parent resource”) page:  Navigate to the “Content” tab of the Drupal admin menu.  Click the blue “+ Add Content” button and choose the relevant “Publication” content type. E.g., for a Praxis volume, you’ll choose “Praxis Publication.”  Immediately scroll to the bottom of the “Edit” page that appears and un-check the “Published” box to unpublish the TOC page. This will prevent it from populating on the front page and main content page views.  Fill in the rest of the required metadata on this page:          Provide the Volume’s title; its editors and/or historical author, as appropriate; its technical editor (you); its date published on RC; the volume metadata tags provided by the volume editors; and, for an edition, the original publication date.      Upload the volume’s banner image. (You’ll need to create one, if you haven’t already; see the Media Sourcing for more info.)      If you’re letting Drupal auto-generate the TOC, leave the “body” field blank.      The “description” field provides a brief volume description that sits beneath the volume banner image and above the individual essay links. Use the volume abstract provided by the volume editors, preferably no more than ~100 words; edit it for length and clarity, if needed.      Finally, manually enforce the correct URL alias for the TOC page (at the top right). For consistency, this alias should exactly reflect the directory structure of the FTP; it will always be something like /editions/frankenstein.        Save the page. If essay links will be autogenerated, you’re done; as you begin importing the essays themselves, they should begin populating on the TOC.  If the items in the TOC need to appear in a specific order (which is usually the case), simply specify this order in the “Index Page Order” field on each essay.Creating and updating author bio pagesMany of the contributors to a new production volume or edition are likely to already have author pages on the site, but some likely will not. In rare cases, this may be true of historical (primary) authors as well. Let’s begin with this important distinction; on the RC site:  Contemporary authors (critics) are called “Contributors,” while  Historical authors (Romantic poetcs, etc.) are called “Primary Authors.”These are represented by two different Drupal content types (Structure / Content types).Upon receipt of a volume, the volume editor(s) should include current bios for all contributors (if this isn’t the case, reach out to the editors for all bios). There are two possibilities here: you’ll either create new contributor pages or updating existing ones.  If a contributor already has a bio on the site, you should replace it with the new one. The easiest way to do so is to use the site’s search function; if an author’s page appears, simply click the contextual “Edit” link and paste in the new bio.  If a contributor doesn’t have an RC page, create one. Simply navigate to Drupal’s “Content” menu, click “+Add Content,” then select “Contributor” and populate all available fields.To create a page for a new “primary” (historical) author, simply follow the steps above but select “Primary Author” as the content type. For new primary authors, reach out to volume editors to see if they’d like to write a bio. If not, source a bio from open-source online content. Also upload an image of the historical author that is available in the public domain.Custom TOC / index pageFor more complex editions, it becomes necessary to bypass the view that auto-generates the TOC. This will be true for any volume that has multiple hierarchies of content organization or different types of content that need to be separated.Custom TOC page creation requires manual coding of the HTML to present the page. For the sake of clarity, RC editors have installed Bootstrap functionality, which provides CSS classes for easy formatting of page entities such as accordion menus, tables, and the like.Before proceeding with a custom TOC, you’ll need to create a new TOC page as described above but alter its layout so that it no longer contains the view that autogenerates TOC titles. This process requires familiarity with Drupal’s Layout Builder function; see the Layout Builder section of the Drupal Components page in the Technical Documentation before continuing.From the page view, click “Layout” (or, from the “Edit” view, just select the “Layout” tab). Ensure that the dialog says that “You are editing the layout for this [Section] Publication content item” and not the template for all content items.  NOTE: Always check to ensure you’re changing the correct layout: editing the template for all items of a specific content type can be extremely useful, but it can dramatically change the appearance of an entire content type. Edit layouts with intention and care!As shown in the screenshot, find the “views” block called “Editions-toc” (or, for a Praxis volume, “Praxis-toc”). Click the pen icon on the right of the grid and select “Remove block.” Save the layout, and you’ll find that the volume “pieces” will no longer auto-generate on the TOC page.Feel free to get creative with the encoding of the TOC, always prioritizing the usability of any layout you decide on. For reference, here’s the code for a particularly complicated TOC which can be employed as a template; this HTML produces the TOC for the Collected Writings of Robert Bloomfield edition.  This custom TOC liberally employs Bootstrap components, which are discussed in the Drupal Assets documentation. Available Bootstrap components, styles, and plugins, as well as documentation on how to use them, can be found on the Bootstrap site.123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375&lt;HTML&gt;  &lt;div id="IndexContent"&gt;    &lt;h1 class="indent0"&gt;Contents&lt;/h1&gt;    &amp;nbsp;    &lt;h4&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.about.html" title="About This Edition"&gt;About This Edition&lt;/a&gt;&lt;/h4&gt;    &lt;div aria-multiselectable="true" class="panel-group" id="accordion" role="tablist"&gt;      &lt;div class="panel panel-default"&gt;        &lt;div class="panel-heading" id="headingOne" role="tab"&gt;          &lt;h4 class="panel-title"&gt;&lt;a aria-controls="collapseOne" aria-expanded="false" data-parent="#accordion" data-toggle="collapse" href="#collapseOne" role="button"&gt;Introductory Materials&lt;/a&gt;&lt;/h4&gt;        &lt;/div&gt;        &lt;div aria-labelledby="headingOne" class="panel-collapse collapse in" id="collapseOne" role="tabpanel"&gt;          &lt;div class="panel-body"&gt;&lt;a class="link_ref" href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.2Prelims.html#prelim-preface" title="Preface"&gt;Preface&lt;/a&gt;&lt;/div&gt;          &lt;div class="panel-body"&gt;&lt;a class="link_ref" href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.2Prelims.html#prelim-chrono" title="Chronology of Bloomfield’s Life"&gt;Chronology of Bloomfield’s Life&lt;/a&gt;&lt;/div&gt;          &lt;div class="panel-body"&gt;&lt;a class="link_ref" href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.2Prelims.html#prelim-reading" title="Further Reading"&gt;Further Reading&lt;/a&gt;&lt;/div&gt;          &lt;div class="panel-body"&gt;&lt;a class="link_ref" href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.2Prelims.html#prelim-note" title="A Note on the Text"&gt;A Note on the Text&lt;/a&gt;&lt;/div&gt;        &lt;/div&gt;      &lt;/div&gt;    &lt;/div&gt;    &lt;h2&gt;Individual Poems&lt;/h2&gt;    &lt;table class="table"&gt;      &lt;thead&gt;        &lt;tr&gt;          &lt;th scope="col" style="width:10%"&gt;Year&lt;/th&gt;          &lt;th scope="col"&gt;Title&lt;/th&gt;        &lt;/tr&gt;      &lt;/thead&gt;      &lt;tbody&gt;        &lt;tr&gt;          &lt;th scope="row"&gt;1786&lt;/th&gt;          &lt;td&gt;&lt;h4&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.3VillageGirl.html" title="‘A Village Girl’ (1786)"&gt;‘A Village Girl’&lt;/a&gt;&lt;/h4&gt;&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;          &lt;th scope="row"&gt;1786&lt;/th&gt;          &lt;td&gt;&lt;h4&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.4HarvestScene.html" title="‘An Harvest Scene’ (1786)"&gt;‘An Harvest Scene’&lt;/a&gt;&lt;/h4&gt;&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;          &lt;th scope="row"&gt;1786&lt;/th&gt;          &lt;td&gt;&lt;h4&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.5SoldiersReturn.html" title="‘The Soldier’s Return’ (1786)"&gt;‘The Soldier’s Return’&lt;/a&gt;&lt;/h4&gt;&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;          &lt;th scope="row"&gt;1789&lt;/th&gt;          &lt;td&gt;&lt;h4&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.6Elegy.html" title="‘Elegy’ (1789)"&gt;‘Elegy’&lt;/a&gt;&lt;/h4&gt;&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;          &lt;th scope="row"&gt;1791&lt;/th&gt;          &lt;td&gt;&lt;h4&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.7LaunchBoyne.html" title="‘On Seeing the Launch of the Boyne’ (1791)"&gt;‘On Seeing the Launch of the Boyne’&lt;/a&gt;&lt;/h4&gt;&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;          &lt;th scope="row"&gt;1800&lt;/th&gt;          &lt;td&gt;&lt;h4&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.9ToHisMother.html" title="‘To His Mother, with a Copy of The Farmer’s Boy’ (1800)"&gt;‘To His Mother, with a Copy of &lt;em&gt;The Farmer’s Boy&lt;/em&gt;’&lt;/a&gt;&lt;/h4&gt;&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;          &lt;th scope="row"&gt;1800&lt;/th&gt;          &lt;td&gt;&lt;h4&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.10NeighbourlyResolution.html" title="‘A Neighbourly Resolution’ (1800)"&gt;‘A Neighbourly Resolution’&lt;/a&gt;&lt;/h4&gt;&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;          &lt;th scope="row"&gt;1800/1&lt;/th&gt;          &lt;td&gt;&lt;h4&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.12GeneralLoyd.html" title="‘To General Loyd. The Humble Petition of the Old Elms at the West End of Woolwich Barracks’ (1800/1)"&gt;‘To General Loyd. The Humble Petition of the Old Elms at the West End of Woolwich Barracks’&lt;/a&gt;&lt;/h4&gt;&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;          &lt;th scope="row"&gt;1801&lt;/th&gt;          &lt;td&gt;&lt;h4&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.13HighlandDrover.html" title="‘Song for a Highland Drover, returning from England’ (1801)"&gt;‘Song for a Highland Drover, returning from England’&lt;/a&gt;&lt;/h4&gt;&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;          &lt;th scope="row"&gt;1801/2&lt;/th&gt;          &lt;td&gt;&lt;h4&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.14EmmasKid.html" title="‘Emma’s Kid’ (1801/2)"&gt;‘Emma’s Kid’&lt;/a&gt;&lt;/h4&gt;&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;          &lt;th scope="row"&gt;1801/2&lt;/th&gt;          &lt;td&gt;&lt;h4&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.16MarysEveningSigh.html" title="‘Mary’s Evening Sigh’ (1801/2)"&gt;‘Mary’s Evening Sigh’&lt;/a&gt;&lt;/h4&gt;&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;          &lt;th scope="row"&gt;1803&lt;/th&gt;          &lt;td&gt;&lt;h4&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.17SongDrJenner.html" title="‘Song, Sung By Mr. Bloomfield at the Anniversary of Doctor Jenner’s Birth-Day, 1803’"&gt;‘Song, Sung By Mr. Bloomfield at the Anniversary of Doctor Jenner’s Birth-Day, 1803’&lt;/a&gt;&lt;/h4&gt;&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;          &lt;th scope="row"&gt;1804&lt;/th&gt;          &lt;td&gt;&lt;h4&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.19ToHisWife.html" title="‘To His Wife’ (1804)"&gt;‘To His Wife’&lt;/a&gt;&lt;/h4&gt;&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;          &lt;th scope="row"&gt;1805&lt;/th&gt;          &lt;td&gt;&lt;h4&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.20FirstViewofSea.html" title="‘A First View of the Sea’ (1805)"&gt;‘A First View of the Sea’&lt;/a&gt;&lt;/h4&gt;&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;          &lt;th scope="row"&gt;1806&lt;/th&gt;          &lt;td&gt;&lt;h4&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.22ToASpindle.html" title="‘To a Spindle’ (1806)"&gt;‘To a Spindle’&lt;/a&gt;&lt;/h4&gt;&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;          &lt;th scope="row"&gt;1806&lt;/th&gt;          &lt;td&gt;&lt;h4&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.23AddressBritishChannel.html" title="‘Address to the British Channel’ (1806)"&gt;‘Address to the British Channel’&lt;/a&gt;&lt;/h4&gt;&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;          &lt;th scope="row"&gt;1807&lt;/th&gt;          &lt;td&gt;&lt;h4&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.24ButchersHorse.html" title="‘The Butcher’s Horse and the Bees: a Village Tragedy’ (1807)"&gt;‘The Butcher’s Horse and the Bees: a Village Tragedy’&lt;/a&gt;&lt;/h4&gt;&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;          &lt;th scope="row"&gt;1807&lt;/th&gt;          &lt;td&gt;&lt;h4&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.25NewsFromWorthing.html" title="‘News from Worthing, in a Letter from a Beast of Burden to her Brother Jack’ (1807)"&gt;‘News from Worthing, in a Letter from a Beast of Burden to her Brother Jack’&lt;/a&gt;&lt;/h4&gt;&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;          &lt;th scope="row"&gt;1808&lt;/th&gt;          &lt;td&gt;&lt;h4&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.27FiveMonths.html" title="‘Five Months I Will Getting She Married’ (1808)"&gt;‘Five Months I Will Getting She Married’&lt;/a&gt;&lt;/h4&gt;&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;          &lt;th scope="row"&gt;&lt;em&gt;c.&lt;/em&gt;1809/10&lt;/th&gt;          &lt;td&gt;&lt;h4&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.28SentMrSharp.html" title="‘Sent to Mr. Sharp as an Apology for Not Dining With Him’ (c. 1809/10)"&gt;‘Sent to Mr. Sharp as an Apology for Not Dining With Him’&lt;/a&gt;&lt;/h4&gt;&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;          &lt;th scope="row"&gt;1811&lt;/th&gt;          &lt;td&gt;&lt;h4&gt;&lt;a href="editions/wye/" title="The Banks Of Wye (1811)"&gt;&lt;em&gt;The Banks Of Wye&lt;/em&gt;&lt;/a&gt;&lt;/h4&gt;&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;          &lt;th scope="row"&gt;1811&lt;/th&gt;          &lt;td&gt;&lt;h4&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.30WordsJamesHook.html" title="Words for James Hook, Guida Di Musica (1811)"&gt;Words for James Hook, &lt;em&gt;Guida Di Musica&lt;/em&gt;&lt;/a&gt;&lt;/h4&gt;&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;          &lt;th scope="row"&gt;&lt;em&gt;c.&lt;/em&gt;1812&lt;/th&gt;          &lt;td&gt;&lt;h4&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.31SongManMoon.html" title="Song [‘The man in the moon look’d down one night’] (c. 1812)"&gt;Song [‘The man in the moon look’d down one night’]&lt;/a&gt;&lt;/h4&gt;&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;          &lt;th scope="row"&gt;1824&lt;/th&gt;          &lt;td&gt;&lt;h4&gt;&lt;a href="/editions/bloomfield_letters/HTML/anecdotes.html" title="Anecdotes and Observations, Reflections and Critical Remarks"&gt;&lt;em&gt;Anecdotes and Observations, Reflections and Critical Remarks&lt;/em&gt;&lt;/a&gt;, from &lt;em&gt;The Remains of Robert Bloomfield&lt;/em&gt;&lt;/h4&gt;&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;          &lt;th scope="row"&gt;—&lt;/th&gt;          &lt;td&gt;&lt;h4&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.39AuthorsEpitaph.html" title="[The Author’s Epitaph]"&gt;[The Author’s Epitaph]&lt;/a&gt;&lt;/h4&gt;&lt;/td&gt;        &lt;/tr&gt;      &lt;/tbody&gt;    &lt;/table&gt;&lt;h2&gt;Full Works&lt;/h2&gt;  &lt;p&gt;&lt;small&gt;  (click to expand)&lt;/small&gt;&lt;/p&gt;    &lt;div aria-multiselectable="true" class="panel-group" id="accordion" role="tablist"&gt;      &lt;div class="panel panel-default"&gt;        &lt;div class="panel-heading" id="headingTwo" role="tab"&gt;        &lt;h4 class="panel-title"&gt;&lt;a aria-controls="collapseTwo" aria-expanded="false" class="collapsed" data-parent="#accordion" data-toggle="collapse" href="#collapseTwo" role="button"&gt;&lt;em&gt;The Farmer’s Boy&lt;/em&gt; (1800)&lt;/a&gt;&lt;/h4&gt;        &lt;/div&gt;        &lt;div aria-labelledby="headingTwo" class="panel-collapse collapse" id="collapseTwo" role="tabpanel"&gt;        &lt;div class="panel-body"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.8FarmersBoyPt1.html" title="Editorial Introduction"&gt;Editorial Introduction&lt;/a&gt;&lt;/div&gt;        &lt;div class="panel-body"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.8FarmersBoyPt1.html#farmers-editions" title="Editions of The Farmer’s Boy"&gt;Editions of &lt;em&gt;The Farmer’s Boy&lt;/em&gt;&lt;/a&gt;&lt;/div&gt;        &lt;div class="panel-body"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.8FarmersBoyPt2.html" title="Prefaces and Appendices"&gt;Prefaces and Appendices&lt;/a&gt;&lt;/div&gt;        &lt;div class="panel-body"&gt;          &lt;ul class="list-group"&gt;            &lt;li class="list-group-item"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.8FarmersBoyPt3.html" title="Spring"&gt;Spring&lt;/a&gt;&lt;/li&gt;            &lt;li class="list-group-item"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.8FarmersBoyPt4.html" title="Summer"&gt;Summer&lt;/a&gt;&lt;/li&gt;            &lt;li class="list-group-item"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.8FarmersBoyPt5.html" title="Autumn"&gt;Autumn&lt;/a&gt;&lt;/li&gt;            &lt;li class="list-group-item"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.8FarmersBoyPt6.html" title="Winter"&gt;Winter&lt;/a&gt;&lt;/li&gt;          &lt;/ul&gt;        &lt;/div&gt;        &lt;/div&gt;      &lt;/div&gt;    &lt;/div&gt;    &lt;div aria-multiselectable="true" class="panel-group" id="accordion" role="tablist"&gt;      &lt;div class="panel panel-default"&gt;        &lt;div class="panel-heading" id="headingThree" role="tab"&gt;          &lt;h4 class="panel-title"&gt;&lt;a aria-controls="collapseThree" aria-expanded="false" class="collapsed" data-parent="#accordion" data-toggle="collapse" href="#collapseThree" role="button"&gt;&lt;em&gt;To Immagination&lt;/em&gt; (1800)&lt;/a&gt;&lt;/h4&gt;        &lt;/div&gt;        &lt;div aria-labelledby="headingThree" class="panel-collapse collapse" id="collapseThree" role="tabpanel"&gt;          &lt;div class="panel-body"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.11ToImmagination.html" title="Editorial Introduction"&gt;Editorial Introduction&lt;/a&gt;&lt;/div&gt;          &lt;div class="panel-body"&gt;            &lt;ul class="list-group"&gt;            &lt;li class="list-group-item"&gt;&lt;a href="/editions/bloomfield_letters/HTML/imagination.html" title="Poem"&gt;Poem&lt;/a&gt;&lt;/li&gt;          &lt;/ul&gt;          &lt;/div&gt;        &lt;/div&gt;      &lt;/div&gt;    &lt;/div&gt;    &lt;div aria-multiselectable="true" class="panel-group" id="accordion" role="tablist"&gt;      &lt;div class="panel panel-default"&gt;        &lt;div class="panel-heading" id="headingFour" role="tab"&gt;        &lt;h4 class="panel-title"&gt;&lt;a aria-controls="collapseFour" aria-expanded="false" class="collapsed" data-parent="#accordion" data-toggle="collapse" href="#collapseFour" role="button"&gt;&lt;em&gt;Rural Tales, Ballads and Songs&lt;/em&gt; (1802)&lt;/a&gt;&lt;/h4&gt;        &lt;/div&gt;        &lt;div aria-labelledby="headingFour" class="panel-collapse collapse" id="collapseFour" role="tabpanel"&gt;        &lt;div class="panel-body"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.15RuralTalesPt1.html#rural-intro" title="Editorial Introduction"&gt;Editorial Introduction&lt;/a&gt;&lt;/div&gt;        &lt;div class="panel-body"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.15RuralTalesPt1.html#rural-editions" title="Editions of Rural Tales"&gt;Editions of &lt;em&gt;Rural Tales&lt;/em&gt;&lt;/a&gt;&lt;/div&gt;        &lt;div class="panel-body"&gt;          &lt;ul class="list-group"&gt;            &lt;li class="list-group-item"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.15RuralTalesPt1.html#rural-preface" title="Preface (1802)"&gt;Preface (1802)&lt;/a&gt;&lt;/li&gt;            &lt;li class="list-group-item"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.15RuralTalesPt1.html#rural-peace" title="Peace"&gt;Peace&lt;/a&gt;&lt;/li&gt;            &lt;li class="list-group-item"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.8FarmersBoyPt5.html" title="Autumn"&gt;Autumn&lt;/a&gt;&lt;/li&gt;            &lt;li class="list-group-item"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.8FarmersBoyPt6.html" title="Winter"&gt;Winter&lt;/a&gt;&lt;/li&gt;            &lt;li class="list-group-item"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.15RuralTalesPt1.html#rural-preface2" title="Preface to Poems [Stereotype], Volume II"&gt;Preface to Poems [Stereotype], Volume II&lt;/a&gt;&lt;/li&gt;            &lt;li class="list-group-item"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.15RuralTalesPt2.html" title="Richard and Kate; or, Fair-Day: a Suffolk Ballad"&gt;Richard and Kate; or, Fair-Day: a Suffolk Ballad&lt;/a&gt;&lt;/li&gt;            &lt;li class="list-group-item"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.15RuralTalesPt3.html" title="Walter and Jane: or, the Poor Blacksmith: a Country Tale"&gt;Walter and Jane: or, the Poor Blacksmith: a Country Tale&lt;/a&gt;&lt;/li&gt;            &lt;li class="list-group-item"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.15RuralTalesPt4.html" title="The Miller’s Maid: a Tale"&gt;The Miller’s Maid: a Tale&lt;/a&gt;&lt;/li&gt;            &lt;li class="list-group-item"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.15RuralTalesPt5.html" title="The Widow to her Hour Glass: a Tale"&gt;The Widow to her Hour Glass: a Tale&lt;/a&gt;&lt;/li&gt;            &lt;li class="list-group-item"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.15RuralTalesPt6.html" title="Market-Night: a Ballad"&gt;Market-Night: a Ballad&lt;/a&gt;&lt;/li&gt;            &lt;li class="list-group-item"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.15RuralTalesPt7.html" title="The Fakenham Ghost: a Ballad"&gt;The Fakenham Ghost: a Ballad&lt;/a&gt;&lt;/li&gt;            &lt;li class="list-group-item"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.15RuralTalesPt8.html" title="The French Mariner: a Ballad"&gt;The French Mariner: a Ballad&lt;/a&gt;&lt;/li&gt;            &lt;li class="list-group-item"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.15RuralTalesPt9.html" title="Dolly: a Ballad"&gt;Dolly: a Ballad&lt;/a&gt;&lt;/li&gt;            &lt;li class="list-group-item"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.15RuralTalesPt10.html" title="Lines, Occasioned by a Visit to Whittlebury Forest, Northamptonshire, in August 1800"&gt;Lines, Occasioned by a Visit to Whittlebury Forest, Northamptonshire, in August 1800&lt;/a&gt;&lt;/li&gt;            &lt;li class="list-group-item"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.15RuralTalesPt11.html" title="Song for a Highland Drover Returning from England"&gt;Song for a Highland Drover Returning from England&lt;/a&gt;&lt;/li&gt;            &lt;li class="list-group-item"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.15RuralTalesPt12.html" title="A Word to Two Young Ladies"&gt;A Word to Two Young Ladies&lt;/a&gt;&lt;/li&gt;            &lt;li class="list-group-item"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.15RuralTalesPt14.html" title="Nancy: a Song"&gt;Nancy: a Song&lt;/a&gt;&lt;/li&gt;            &lt;li class="list-group-item"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.15RuralTalesPt15.html" title="Rosy Hannah: a Song"&gt;Rosy Hannah: a Song&lt;/a&gt;&lt;/li&gt;            &lt;li class="list-group-item"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.15RuralTalesPt16.html" title="Song: The Shepherd and his Dog Rover"&gt;Song: The Shepherd and his Dog Rover&lt;/a&gt;&lt;/li&gt;            &lt;li class="list-group-item"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.15RuralTalesPt17.html" title="Hunting Song"&gt;Hunting Song&lt;/a&gt;&lt;/li&gt;            &lt;li class="list-group-item"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.15RuralTalesPt18.html" title="Lucy: a Song"&gt;Lucy: a Song&lt;/a&gt;&lt;/li&gt;            &lt;li class="list-group-item"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.15RuralTalesPt19.html" title="Winter Song"&gt;Winter Song&lt;/a&gt;&lt;/li&gt;          &lt;/ul&gt;        &lt;/div&gt;        &lt;/div&gt;      &lt;/div&gt;    &lt;/div&gt;    &lt;div aria-multiselectable="true" class="panel-group" id="accordion" role="tablist"&gt;      &lt;div class="panel panel-default"&gt;        &lt;div class="panel-heading" id="headingFive" role="tab"&gt;          &lt;h4 class="panel-title"&gt;&lt;a aria-controls="collapseFive" aria-expanded="false" class="collapsed" data-parent="#accordion" data-toggle="collapse" href="#collapseFive" role="button"&gt;&lt;em&gt;Good Tidings; or, News from the Farm&lt;/em&gt; (1804)&lt;/a&gt;&lt;/h4&gt;        &lt;/div&gt;        &lt;div aria-labelledby="headingFive" class="panel-collapse collapse" id="collapseFive" role="tabpanel"&gt;          &lt;div class="panel-body"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.18GoodTidingsPt1.html" title="Editorial Introduction"&gt;Editorial Introduction&lt;/a&gt;&lt;/div&gt;          &lt;div class="panel-body"&gt;            &lt;ul class="list-group"&gt;            &lt;li class="list-group-item"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.18GoodTidingsPt2.html" title="[poem]"&gt;Poem&lt;/a&gt;&lt;/li&gt;          &lt;/ul&gt;          &lt;/div&gt;        &lt;/div&gt;      &lt;/div&gt;    &lt;/div&gt;  &lt;div aria-multiselectable="true" class="panel-group" id="accordion" role="tablist"&gt;    &lt;div class="panel panel-default"&gt;      &lt;div class="panel-heading" id="headingSix" role="tab"&gt;      &lt;h4 class="panel-title"&gt;&lt;a aria-controls="collapseSix" aria-expanded="false" class="collapsed" data-parent="#accordion" data-toggle="collapse" href="#collapseSix" role="button"&gt;&lt;em&gt;Wild Flowers; or, Pastoral and Local Poetry&lt;/em&gt; (1806)&lt;/a&gt;&lt;/h4&gt;      &lt;/div&gt;      &lt;div aria-labelledby="headingSix" class="panel-collapse collapse" id="collapseSix" role="tabpanel"&gt;      &lt;div class="panel-body"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.21WildFlowersPt1.html#wildflowers-intro" title="Editorial Introduction"&gt;Editorial Introduction&lt;/a&gt;&lt;/div&gt;      &lt;div class="panel-body"&gt;        &lt;ul class="list-group"&gt;          &lt;li class="list-group-item"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.21WildFlowersPt2.html" title="Abner and the Widow Jones: a Familiar Ballad"&gt;Abner and the Widow Jones: a Familiar Ballad&lt;/a&gt;&lt;/li&gt;          &lt;li class="list-group-item"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.21WildFlowersPt3.html" title="To My Old Oak Table"&gt;To My Old Oak Table&lt;/a&gt;&lt;/li&gt;          &lt;li class="list-group-item"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.21WildFlowersPt4.html" title="The Horkey: a Provincial Ballad"&gt;The Horkey: a Provincial Ballad&lt;/a&gt;&lt;/li&gt;          &lt;li class="list-group-item"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.21WildFlowersPt5.html" title="The Broken Crutch: a Tale"&gt;The Broken Crutch: a Tale&lt;/a&gt;&lt;/li&gt;          &lt;li class="list-group-item"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.21WildFlowersPt6.html" title="Shooter’s Hill"&gt;Shooter’s Hill&lt;/a&gt;&lt;/li&gt;          &lt;li class="list-group-item"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.21WildFlowersPt7.html" title="A Visit to Ranelagh"&gt;A Visit to Ranelagh&lt;/a&gt;&lt;/li&gt;          &lt;li class="list-group-item"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.21WildFlowersPt8.html" title="Love of the Country: Written at Clare-Hall, Herts. June 1804"&gt;Love of the Country: Written at Clare-Hall, Herts. June 1804&lt;/a&gt;&lt;/li&gt;          &lt;li class="list-group-item"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.21WildFlowersPt9.html" title="The Woodland Hallo"&gt;The Woodland Hallo&lt;/a&gt;&lt;/li&gt;          &lt;li class="list-group-item"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.21WildFlowersPt10.html" title="Barnham Water"&gt;Barnham Water&lt;/a&gt;&lt;/li&gt;          &lt;li class="list-group-item"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.21WildFlowersPt11.html" title="Mary’s Evening Sigh"&gt;Mary’s Evening Sigh&lt;/a&gt;&lt;/li&gt;        &lt;/ul&gt;      &lt;/div&gt;      &lt;/div&gt;    &lt;/div&gt;  &lt;/div&gt;  &lt;div aria-multiselectable="true" class="panel-group" id="accordion" role="tablist"&gt;    &lt;div class="panel panel-default"&gt;      &lt;div class="panel-heading" id="headingSeven" role="tab"&gt;        &lt;h4 class="panel-title"&gt;&lt;a aria-controls="collapseSeven" aria-expanded="false" class="collapsed" data-parent="#accordion" data-toggle="collapse" href="#collapseSeven" role="button"&gt;&lt;em&gt;Nature’s Music&lt;/em&gt; (1808)&lt;/a&gt;&lt;/h4&gt;      &lt;/div&gt;      &lt;div aria-labelledby="headingSeven" class="panel-collapse collapse" id="collapseSeven" role="tabpanel"&gt;        &lt;div class="panel-body"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.26NaturesMusicPt1.html" title="Editorial Introduction"&gt;Editorial Introduction&lt;/a&gt;&lt;/div&gt;        &lt;div class="panel-body"&gt;          &lt;ul class="list-group"&gt;          &lt;li class="list-group-item"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.26NaturesMusicPt2.html" title="[text]"&gt;Text&lt;/a&gt;&lt;/li&gt;        &lt;/ul&gt;        &lt;/div&gt;      &lt;/div&gt;    &lt;/div&gt;  &lt;/div&gt;  &lt;div aria-multiselectable="true" class="panel-group" id="accordion" role="tablist"&gt;    &lt;div class="panel panel-default"&gt;      &lt;div class="panel-heading" id="headingEight" role="tab"&gt;        &lt;h4 class="panel-title"&gt;&lt;a aria-controls="collapseEight" aria-expanded="false" class="collapsed" data-parent="#accordion" data-toggle="collapse" href="#collapseEight" role="button"&gt;&lt;em&gt;The History of Little Davy’s New Hat&lt;/em&gt; (1815)&lt;/a&gt;&lt;/h4&gt;      &lt;/div&gt;      &lt;div aria-labelledby="headingEight" class="panel-collapse collapse" id="collapseEight" role="tabpanel"&gt;        &lt;div class="panel-body"&gt;&lt;a class="link_ref" href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.32LittleDavysHat.html#davyshatintro" title="Editorial Introduction"&gt;Editorial Introduction&lt;/a&gt;&lt;/div&gt;        &lt;div class="panel-body"&gt;          &lt;ul class="list-group"&gt;          &lt;li class="list-group-item"&gt;&lt;a class="link_ref" href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.32LittleDavysHat.html#davyshatpreface" title="[text]"&gt;Text&lt;/a&gt;&lt;/li&gt;        &lt;/ul&gt;        &lt;/div&gt;      &lt;/div&gt;    &lt;/div&gt;  &lt;/div&gt;  &lt;div aria-multiselectable="true" class="panel-group" id="accordion" role="tablist"&gt;    &lt;div class="panel panel-default"&gt;      &lt;div class="panel-heading" id="headingNine" role="tab"&gt;      &lt;h4 class="panel-title"&gt;&lt;a aria-controls="collapseNine" aria-expanded="false" class="collapsed" data-parent="#accordion" data-toggle="collapse" href="#collapseNine" role="button"&gt;&lt;em&gt;May-Day with the Muses&lt;/em&gt; (1822)&lt;/a&gt;&lt;/h4&gt;      &lt;/div&gt;      &lt;div aria-labelledby="headingNine" class="panel-collapse collapse" id="collapseNine" role="tabpanel"&gt;      &lt;div class="panel-body"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.33MayDayPt1.html" title="Editorial Introduction"&gt;Editorial Introduction&lt;/a&gt;&lt;/div&gt;      &lt;div class="panel-body"&gt;        &lt;ul class="list-group"&gt;          &lt;li class="list-group-item"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.33MayDayPt2.html" title="The Invitation"&gt;The Invitation&lt;/a&gt;&lt;/li&gt;          &lt;li class="list-group-item"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.33MayDayPt3.html" title="The Drunken Father"&gt;The Drunken Father&lt;/a&gt;&lt;/li&gt;          &lt;li class="list-group-item"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.33MayDayPt4.html" title="The Forester"&gt;The Forester&lt;/a&gt;&lt;/li&gt;          &lt;li class="list-group-item"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.33MayDayPt5.html" title="The Shepherd’s Dream: Or, Fairies’ Masquerade"&gt;The Shepherd’s Dream: Or, Fairies’ Masquerade&lt;/a&gt;&lt;/li&gt;          &lt;li class="list-group-item"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.33MayDayPt6.html" title="The Soldier’s Home"&gt;The Soldier’s Home&lt;/a&gt;&lt;/li&gt;          &lt;li class="list-group-item"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.33MayDayPt7.html" title="Rosamond’s Song of Hope"&gt;Rosamond’s Song of Hope&lt;/a&gt;&lt;/li&gt;          &lt;li class="list-group-item"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.33MayDayPt8.html" title="Alfred and Jennet"&gt;Alfred and Jennet&lt;/a&gt;&lt;/li&gt;        &lt;/ul&gt;      &lt;/div&gt;      &lt;/div&gt;    &lt;/div&gt;  &lt;/div&gt;  &lt;div aria-multiselectable="true" class="panel-group" id="accordion" role="tablist"&gt;    &lt;div class="panel panel-default"&gt;      &lt;div class="panel-heading" id="headingTen" role="tab"&gt;        &lt;h4 class="panel-title"&gt;&lt;a aria-controls="collapseTen" aria-expanded="false" class="collapsed" data-parent="#accordion" data-toggle="collapse" href="#collapseTen" role="button"&gt;&lt;em&gt;Hazelwood-Hall&lt;/em&gt; (1823)&lt;/a&gt;&lt;/h4&gt;      &lt;/div&gt;      &lt;div aria-labelledby="headingTen" class="panel-collapse collapse" id="collapseTen" role="tabpanel"&gt;        &lt;div class="panel-body"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.35HazelwoodHall.html#hazelwoodintro" title="Editorial Introduction"&gt;Editorial Introduction&lt;/a&gt;&lt;/div&gt;        &lt;div class="panel-body"&gt;          &lt;ul class="list-group"&gt;          &lt;li class="list-group-item"&gt;&lt;a class="link_ref" href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.35HazelwoodHall.html#hazelwoodtext" title="[text]"&gt;Text&lt;/a&gt;&lt;/li&gt;        &lt;/ul&gt;        &lt;/div&gt;      &lt;/div&gt;    &lt;/div&gt;  &lt;/div&gt;  &lt;div aria-multiselectable="true" class="panel-group" id="accordion" role="tablist"&gt;    &lt;div class="panel panel-default"&gt;      &lt;div class="panel-heading" id="headingEleven" role="tab"&gt;      &lt;h4 class="panel-title"&gt;&lt;a aria-controls="collapseEleven" aria-expanded="false" class="collapsed" data-parent="#accordion" data-toggle="collapse" href="#collapseEleven" role="button"&gt;Poems from &lt;em&gt;The Remains of Robert Bloomfield&lt;/em&gt; (1824)&lt;/a&gt;&lt;/h4&gt;      &lt;/div&gt;      &lt;div aria-labelledby="headingEleven" class="panel-collapse collapse" id="collapseEleven" role="tabpanel"&gt;      &lt;div class="panel-body"&gt;&lt;a class="link_ref" href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.36RemainsContents.html" title="Editorial Introduction and Contents"&gt;Editorial Introduction and Contents&lt;/a&gt;&lt;/div&gt;      &lt;div class="panel-body"&gt;        &lt;ul class="list-group"&gt;          &lt;li class="list-group-item"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.36RemainsPt1.html" title="Kentish Mary: A Ballad"&gt;Kentish Mary: A Ballad&lt;/a&gt;&lt;/li&gt;          &lt;li class="list-group-item"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.36RemainsPt2.html" title="The Dawning of Day: A Hunting Song"&gt;The Dawning of Day: A Hunting Song&lt;/a&gt;&lt;/li&gt;          &lt;li class="list-group-item"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.36RemainsPt3.html" title="On Repairing a Miniature Bust of Buonaparte for Mrs Palmer"&gt;On Repairing a Miniature Bust of Buonaparte for Mrs Palmer&lt;/a&gt;&lt;/li&gt;          &lt;li class="list-group-item"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.36RemainsPt4.html" title="The Maid of Dunstable"&gt;The Maid of Dunstable&lt;/a&gt;&lt;/li&gt;          &lt;li class="list-group-item"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.36RemainsPt5.html" title="Sonnet: To Fifteen Gnats seen Dancing in the Sun-beams on Jan. 3"&gt;Sonnet: To Fifteen Gnats seen Dancing in the Sun-beams on Jan. 3&lt;/a&gt;&lt;/li&gt;          &lt;li class="list-group-item"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.36RemainsPt6.html" title="Good Nature"&gt;Good Nature&lt;/a&gt;&lt;/li&gt;          &lt;li class="list-group-item"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.36RemainsPt7.html" title="Hob’s Epitaph"&gt;Hob’s Epitaph&lt;/a&gt;&lt;/li&gt;          &lt;li class="list-group-item"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.36RemainsPt8.html" title="The Soldier's Return"&gt;The Soldier's Return&lt;/a&gt;&lt;/li&gt;          &lt;li class="list-group-item"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.36RemainsPt9.html" title="Happiness of Gleaners"&gt;Happiness of Gleaners&lt;/a&gt;&lt;/li&gt;          &lt;li class="list-group-item"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.36RemainsPt10.html" title="Charity"&gt;Charity&lt;/a&gt;&lt;/li&gt;          &lt;li class="list-group-item"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.36RemainsPt11.html" title="The Flowers of the Mead"&gt;The Flowers of the Mead&lt;/a&gt;&lt;/li&gt;          &lt;li class="list-group-item"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.36RemainsPt12.html" title="Fragment (‘‘Twas when the abbey rear’d its spires’)"&gt;Fragment (‘‘Twas when the abbey rear’d its spires’)&lt;/a&gt;&lt;/li&gt;          &lt;li class="list-group-item"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.36RemainsPt13.html" title="‘Wine, beauty smiles, and social mirth’"&gt;‘Wine, beauty smiles, and social mirth’&lt;/a&gt;&lt;/li&gt;          &lt;li class="list-group-item"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.36RemainsPt14.html" title="Epitaph for a Young Lady"&gt;Epitaph for a Young Lady&lt;/a&gt;&lt;/li&gt;          &lt;li class="list-group-item"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.36RemainsPt15.html" title="Aeolus"&gt;Aeolus&lt;/a&gt;&lt;/li&gt;          &lt;li class="list-group-item"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.36RemainsPt16.html" title="Irish News"&gt;Irish News&lt;/a&gt;&lt;/li&gt;          &lt;li class="list-group-item"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.36RemainsPt17.html" title="Yield thee to Pleasure, Old Care"&gt;Yield thee to Pleasure, Old Care&lt;/a&gt;&lt;/li&gt;          &lt;li class="list-group-item"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.36RemainsPt18.html" title="Song: Norah"&gt;Song: Norah&lt;/a&gt;&lt;/li&gt;          &lt;li class="list-group-item"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.36RemainsPt19.html" title="Sent to a Lady who was Going to a Ball"&gt;Sent to a Lady who was Going to a Ball&lt;/a&gt;&lt;/li&gt;          &lt;li class="list-group-item"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.36RemainsPt20.html" title="On the Death of his Infant Son Robert"&gt;On the Death of his Infant Son Robert&lt;/a&gt;&lt;/li&gt;        &lt;/ul&gt;      &lt;/div&gt;      &lt;/div&gt;    &lt;/div&gt;  &lt;/div&gt;  &lt;div aria-multiselectable="true" class="panel-group" id="accordion" role="tablist"&gt;    &lt;div class="panel panel-default"&gt;      &lt;div class="panel-heading" id="headingTwelve" role="tab"&gt;        &lt;h4 class="panel-title"&gt;&lt;a aria-controls="collapseTwelve" aria-expanded="false" class="collapsed" data-parent="#accordion" data-toggle="collapse" href="#collapseTwelve" role="button"&gt;&lt;em&gt;The Bird and Insects’ Post Office&lt;/em&gt;, from &lt;em&gt;The Remains of Robert Bloomfield&lt;/em&gt; (1824)&lt;/a&gt;&lt;/h4&gt;      &lt;/div&gt;      &lt;div aria-labelledby="headingTwelve" class="panel-collapse collapse" id="collapseTwelve" role="tabpanel"&gt;        &lt;div class="panel-body"&gt;&lt;a href="/editions/bloomfield_poems/editions.2019.bloomfield_poems.37BirdsInsects.html" title="Editorial Introduction"&gt;Editorial Introduction&lt;/a&gt;&lt;/div&gt;        &lt;div class="panel-body"&gt;          &lt;ul class="list-group"&gt;          &lt;li class="list-group-item"&gt;&lt;a class="link_ref" href="editions/bloomfield_letters/HTML/birdsinsects.html" title="[text]"&gt;Text&lt;/a&gt;&lt;/li&gt;        &lt;/ul&gt;        &lt;/div&gt;      &lt;/div&gt;    &lt;/div&gt;  &lt;/div&gt;  &lt;/div&gt;&lt;/HTML&gt;"
     
   } ,
  
   {
     
        "title"    : "Digital Proofing Guide",
        "category" : "",
        "tags"     : "",
        "url"      : "/docs/vol-proofing/",
        "date"     : "",
        "content"  : "Proofing is the final step before final publication of an RC volume/edition. Because the proofing stage occurs after all documents have been TEI encoded, transformed into HTML, and imported to the production site, RC tech staff cannot (and should not) accommodate substantive changes to a text at this stage. However, it is common that typos, transformation errors, artifacts, or other errors pop up during the coding, transformation, and import process. Proofs are distributed to the volume editor(s), who will then provide a link to all contributors for review. Also CC the general editors and the section editor(s) on all proofs correspondence so they have the opportunity to review the volume as well. In general, we ask for a quick turnaround here, usually between one and two weeks, and ask the volume editor to collect and return all errata in a single document.Proofing Praxis / Pedagogies volumesFor Praxis volumes, which generally contain the work of between 6 and 8 individual authors, it’s easiest simply to provide a link to each individual essay in your email to the volume editor(s). (Recall that the TOC isn’t published, so it cannot be accessed by any site visitor who isn’t logged into Drupal’s admin UI.)In your email to the volume editor(s), graciously thank them again for the privilege to work with them and their contributors. Then set the parameters of the proofing process:  Remind them to remind their contributors that NO substantive or content changes are possible at this stage. These proofs are the equivalent of book galleys; it’s not possible to re-set the text at the proofs stage.  Contributors should look for any and all errata that might have slipped through the copyedit and/or been produced by the coding/transformation/import process. Occasionally artifacts will appear in the HTML and need to be manually removed.  Contributors should test ALL hyperlinks in their essay(s), including both links that point to outside sites and links internal to their content or the volume. Any incorrect or broken links should be noted.  Contributors should also ensure that all media/images are displaying as intended on the site. If not, they should describe the issue in detail.  At this stage, if you don’t have an abstract for every essay, a description (abstract) of the volume as a whole, metadata tags for each essay and the whole volume, and a bio for each individual contributor, make a point to ask for these items with some urgency.  As noted above, you should ask the volume editor(s) to turn all of this around in 2-3 weeks, ideally, and to return all errata to you in a single (Word) document, as an attachment.After these errata are corrected and the tech editors receive a go-ahead from the general editors, the volume/edition can be published.Proofing EditionsEditions can be a lot more involved than Praxis volumes. This often means the TOC and volume navigation are of equal importance to the content itself. For this reason, in the case of a large, convoluted Edition, it’s best to create a Drupal user login for each editor of the Edition. (To create a new user, go to People / +Add User; also see the Drupal nav guide.) Assign them the “Content Editor” role, which will allow them to view unpublished pages.Simply follow the parameters outlined above in communicating with the Edition editor(s); in the case of a large edition, however, more turnaround time for proofing may be required. Use your best judgment and, if appropriate, simply communicate with the editors of the edition to feel out their preferences."
     
   } ,
  
   {
     
        "title"    : "XSLT —&gt; TEI to HTML &amp; Corpus Transformations",
        "category" : "",
        "tags"     : "",
        "url"      : "/docs/xslt-trans/",
        "date"     : "",
        "content"  : "Once all files in a production volume are fully encoded in TEI and each file’s TEI validates in Oxygen, it’s time to convert these completed XML files to HTML so that they can be presented on the web. You’ll continue to use OxygenXML for this process.  NOTE: The following guide assumes that you’re working from a local clone of RC’s TEI repository on GitHub. If for some reason you’re not coding from inside the RC-TEI repo, you should clone it using the steps in the Git Guide and move all your TEI files into the current production volume’s folder.About the transformation processTo convert a completed TEI document to HTML for web presentation, a transformation scenario must be set up and executed. The process uses a series of XSL (eXtensible Stylesheet Language) files that contain (1) stylesheet instructions that express what RC’s XML (TEI) code means, and (2) transformation (XSLT) templates that tell Oxygen how to turn XML markup into valid HTML. RC’s original XSLT templates were created by Laura Mandell in 2011; with the rebuild of the RC site in Drupal 10 in 2022/23, T. J. McLemore adapted new XSL(T) stylesheets and templates based on these original files but altered for compatibility with the Saxon processor (after the deprecation of the Xalan processor). Both versions of RC’s XSL(T) files were adapted from the TEI consortium’s default stylesheets. Historically the adapted templates have met nearly all of RC’s needs, but from time to time a specific transformation may require slight editing of the XSL(T) files. The XSLTs can be found in RC’s XSL(T) GitHub repo.  NOTE: As of 2023, the RC production process will use two distinct (but nearly identical) sets of XSLT template files: one for purposes of HTML proofing (“html_PROOFS” folder) and one for final publication, to create HTML for import to the Drupal site (“html” folder). Both sets of templates can be found in RC’s XSLT repo. The only difference between them is the “proofs” XSLTs produce documents with clean notes, while the “publication” XSLTs output extra HTML that enables the “hover” functionality on the RC site; the latter transforms output the text of each note twice in the HTML, making the resulting documents unsuitable for non-Drupal proofing purposes.For more information about how XSL(T) works and resources to navigate RC’s XSLT templates, see the Languages Overview contained in the Technical Documentation.Setting up a transformation scenarioTo set up a transformation scenario in OxygenXML, you’ll first need to create a “parts” file. This file essentially points to all the XML documents you will be transforming to HTML, and it should be in the same working directory as your TEI files inside your local TEI repo. All parts files have an identical structure, so you can simply adapt one from any previous volume in RC’s TEI repo; each volume will have a single parts file, which will be named “[volume]Parts.xml.” Open one of these files and rename / save it into the same folder as the volume’s TEI files.To use the parts file, open it in OxygenXML and simply change the part code in each line to contain all the filenames of your TEI files (e.g., &lt;part code="praxis.2020.popkeats.rejack.xml"/&gt;). Here’s what this looks like:Next you must configure the transformation scenario. With the parts file open, click on the wrench-and-play-symbol icon in the toolbar (“Configure Transformation Scenario”). Click “New —&gt; XML transformation with XSLT” to create a new scenario. Give the new scenario a name; consider giving it a generic name (e.g., “Parts-2-HTML”) since Oxygen will save it for later reuse. Leave the XML URL field as “${currentFileURL}.” Beside the XSL URL field, click the file folder icon and navigate to your local “XSLT-templates” repo, then html / html.xsl. Select this file and click OK. Under the Transformer dropdown menu, select “Saxon-PE x.x.x.x” (the most up-to-date version available in your Oxygen installation should be fine). Click OK to save the scenario.  NOTE: To perform a transformation to produce files for HTML-only proofing, simply create a “proofs” scenario (e.g., “Parts-2-proofs-HTML”) and point it to the “html_PROOFS” repo folder instead: html_PROOFS / html.xsl.To perform the transformation, simply select the “Parts-2-HTML” scenario from the “Configure Transformation Scenario” dialog (the wrench symbol on the toolbar) and then click “Apply Associated (1).” If it executes successfully, you’ll see a “Transformation Successful” message and a green light on the bottom bar. Navigate to the volume directory in your TEI repo and look in the folder containing all the TEI files; for each TEI file, you should now see an HTML file that has been created by the transformation process.Open each HTML file to ensure the transformation has successfully rendered the text. Note that this local HTML file is NOT a perfect look at what the document’s appearance on the web will be, but these files can be used to evaluate and troubleshoot your TEI code. Simply edit your TEI files and repeat the transformation process until everything looks as it should.  If Oxygen validates the TEI and seems to complete the transformation but the resulting HTML files are blank or somehow corrupted, an error is present (likely a “rendition” command in the TEI for which no instructions are present in the XSLTs). Check the error log in Oxygen and/or review any unusual markup you’ve used in the document. Sometimes figuring out what’s wrong requires a bit of experimentation; just keep tinkering with the TEI (and transforming only one file at a time, if need be) until it works.TEI corpus and metadata XSL transformationThe final transformation necessary before you can upload a volume’s documents to the site is to create a TEI corpus file. This is the file that will import the volume’s metadata to the site; it is essentially a single XML document that merges the content of all the volume’s TEI. Once uploaded, it will create nodes for each essay’s abstract; link each author, contributor, and/or editor to their existing node (bio) on the RC site; populate the metadata tags for each essay; and carry any other encoded metadata into the site’s taxonomy system.To create the corpus file, simply repeat the steps in the preceding section required to configure an XSLT to HTML transformation, but this time name the new scenario something else (e.g., “CORPUS”). Navigate to the html directory, as above, but select the “mergetoCorpus.xsl” file in the XSL URL field.When you run the transformation, a new frame will appear at the bottom of the screen; it should contain many thousands of lines of code, as the transformation has merged the entire volume’s XML markup into a single file. Create a new XML file, copy-and-paste the corpus transformation output into that file, and save it in the same folder as the other TEI files as “[volume]Corpus.xml.”Once you have generated an HTML file for each essay and a parts file for the volume, everything’s all set to begin importing content into the Drupal site."
     
   } ,
  
   {
     
   } ,
  
   {
     
   } ,
  
   {
     
        "title"    : "v1.0.3 Short Fuse",
        "category" : "",
        "tags"     : "",
        "url"      : "/assets/js/fuzzysearch/CHANGELOG.html",
        "date"     : "",
        "content"  : "v1.0.3 Short Fuse  Improved circuit-breaker when needle and haystack length are equalv1.0.2 Vodka Tonic  Slightly updated circuit-breaker that tests for equal length first  Doubled method performance (see jsperf tests)v1.0.1 Circuit Breaker  Introduced a circuit-breaker where queries longer than the searched string will return false  Introduced a circuit-breaker where queries identical to the searched string will return true  Introduced a circuit-breaker where text containing the entire query will return truev1.0.0 IPO  Initial Public Release"
     
   } ,
  
   {
     
        "title"    : "fuzzysearch",
        "category" : "",
        "tags"     : "",
        "url"      : "/assets/js/fuzzysearch/",
        "date"     : "",
        "content"  : "fuzzysearch  Tiny and blazing-fast fuzzy search in JavaScriptFuzzy searching allows for flexibly matching a string with partial input, useful for filtering data very quickly based on lightweight user input.DemoTo see fuzzysearch in action, head over to bevacqua.github.io/horsey, which is a demo of an autocomplete component that uses fuzzysearch to filter out results based on user input.InstallFrom npm1npm install --save fuzzysearchfuzzysearch(needle, haystack)Returns true if needle matches haystack using a fuzzy-searching algorithm. Note that this program doesn’t implement levenshtein distance, but rather a simplified version where there’s no approximation. The method will return true only if each character in the needle can be found in the haystack and occurs after the preceding character.1234567fuzzysearch('twl', 'cartwheel') // &lt;- truefuzzysearch('cart', 'cartwheel') // &lt;- truefuzzysearch('cw', 'cartwheel') // &lt;- truefuzzysearch('ee', 'cartwheel') // &lt;- truefuzzysearch('art', 'cartwheel') // &lt;- truefuzzysearch('eeel', 'cartwheel') // &lt;- falsefuzzysearch('dog', 'cartwheel') // &lt;- falseAn exciting application for this kind of algorithm is to filter options from an autocomplete menu, check out horsey for an example on how that might look like.But! RegExps…!LicenseMIT"
     
   } ,
  
   {
     
        "title"    : "Simple-Jekyll-Search",
        "category" : "",
        "tags"     : "",
        "url"      : "/assets/js/simple-jekyll-search/",
        "date"     : "",
        "content"  : "# [Simple-Jekyll-Search](https://www.npmjs.com/package/simple-jekyll-search)[![Build Status](https://img.shields.io/travis/christian-fei/Simple-Jekyll-Search/master.svg?)](https://travis-ci.org/christian-fei/Simple-Jekyll-Search)[![dependencies Status](https://img.shields.io/david/christian-fei/Simple-Jekyll-Search.svg)](https://david-dm.org/christian-fei/Simple-Jekyll-Search)[![devDependencies Status](https://img.shields.io/david/dev/christian-fei/Simple-Jekyll-Search.svg)](https://david-dm.org/christian-fei/Simple-Jekyll-Search?type=dev)A JavaScript library to add search functionality to any Jekyll blog.## Use caseYou have a blog, built with Jekyll, and want a **lightweight search functionality** on your blog, purely client-side?*No server configurations or databases to maintain*.Just **5 minutes** to have a **fully working searchable blog**.---## Installation### npm```shnpm install simple-jekyll-search```## Getting started### Create `search.json`Place the following code in a file called `search.json` in the **root** of your Jekyll blog. (You can also get a copy [from here](/example/search.json))This file will be used as a small data source to perform the searches on the client side:```yaml---layout: none---[  {% for post in site.posts %}    {      "title"    : "{{ post.title | escape }}",      "category" : "{{ post.category }}",      "tags"     : "{{ post.tags | join: ', ' }}",      "url"      : "{{ site.baseurl }}{{ post.url }}",      "date"     : "{{ post.date }}"    } {% unless forloop.last %},{% endunless %}  {% endfor %}]```## Preparing the plugin### Add DOM elementsSimpleJekyllSearch needs two `DOM` elements to work:- a search input field- a result container to display the results#### Give me the codeHere is the code you can use with the default configuration:You need to place the following code within the layout where you want the search to appear. (See the configuration section below to customize it)For example in  **_layouts/default.html**:```html```## UsageCustomize SimpleJekyllSearch by passing in your configuration options:```jsvar sjs = SimpleJekyllSearch({  searchInput: document.getElementById('search-input'),  resultsContainer: document.getElementById('results-container'),  json: '/search.json'})```### returns { search }A new instance of SimpleJekyllSearch returns an object, with the only property `search`.`search` is a function used to simulate a user input and display the matching results. E.g.:```jsvar sjs = SimpleJekyllSearch({ ...options })sjs.search('Hello')```💡 it can be used to filter posts by tags or categories!## OptionsHere is a list of the available options, usage questions, troubleshooting & guides.### searchInput (Element) [required]The input element on which the plugin should listen for keyboard event and trigger the searching and rendering for articles.### resultsContainer (Element) [required]The container element in which the search results should be rendered in. Typically a ``.### json (String|JSON) [required]You can either pass in an URL to the `search.json` file, or the results in form of JSON directly, to save one round trip to get the data.### searchResultTemplate (String) [optional]The template of a single rendered search result.The templating syntax is very simple: You just enclose the properties you want to replace with curly braces.E.g.The template```jsvar sjs = SimpleJekyllSearch({  searchInput: document.getElementById('search-input'),  resultsContainer: document.getElementById('results-container'),  json: '/search.json',  searchResultTemplate: '{title}'})```will render to the following```htmlWelcome to Jekyll!```If the `search.json` contains this data```json[    {      "title"    : "Welcome to Jekyll!",      "category" : "",      "tags"     : "",      "url"      : "/jekyll/update/2014/11/01/welcome-to-jekyll.html",      "date"     : "2014-11-01 21:07:22 +0100"    }]```### templateMiddleware (Function) [optional]A function that will be called whenever a match in the template is found.It gets passed the current property name, property value, and the template.If the function returns a non-undefined value, it gets replaced in the template.This can be potentially useful for manipulating URLs etc.Example:```jsSimpleJekyllSearch({  ...  templateMiddleware: function(prop, value, template) {    if (prop === 'bar') {      return value.replace(/^\//, '')    }  }  ...})```See the [tests](https://github.com/christian-fei/Simple-Jekyll-Search/blob/master/tests/Templater.test.js) for an in-depth code example### sortMiddleware (Function) [optional]A function that will be used to sort the filtered results.It can be used for example to group the sections together.Example:```jsSimpleJekyllSearch({  ...  sortMiddleware: function(a, b) {    var astr = String(a.section) + "-" + String(a.caption);    var bstr = String(b.section) + "-" + String(b.caption);    return astr.localeCompare(bstr)  }  ...})```### noResultsText (String) [optional]The HTML that will be shown if the query didn't match anything.### limit (Number) [optional]You can limit the number of posts rendered on the page.### fuzzy (Boolean) [optional]Enable fuzzy search to allow less restrictive matching.### exclude (Array) [optional]Pass in a list of terms you want to exclude (terms will be matched against a regex, so URLs, words are allowed).### success (Function) [optional]A function called once the data has been loaded.### debounceTime (Number) [optional]Limit how many times the search function can be executed over the given time window. This is especially useful to improve the user experience when searching over a large dataset (either with rare terms or because the number of posts to display is large). If no `debounceTime` (milliseconds) is provided a search will be triggered on each keystroke.---## If search isn't working due to invalid JSON- There is a filter plugin in the _plugins folder which should remove most characters that cause invalid JSON. To use it, add the simple_search_filter.rb file to your _plugins folder, and use `remove_chars` as a filter.For example: in search.json, replace```json"content": "{{ page.content | strip_html | strip_newlines }}"```with```json"content": "{{ page.content | strip_html | strip_newlines | remove_chars | escape }}"```If this doesn't work when using Github pages you can try `jsonify` to make sure the content is json compatible:```js"content": {{ page.content | jsonify }}```**Note: you don't need to use quotes `"` in this since `jsonify` automatically inserts them.**## Enabling full-text searchReplace `search.json` with the following code:```yaml---layout: none---[  {% for post in site.posts %}    {      "title"    : "{{ post.title | escape }}",      "category" : "{{ post.category }}",      "tags"     : "{{ post.tags | join: ', ' }}",      "url"      : "{{ site.baseurl }}{{ post.url }}",      "date"     : "{{ post.date }}",      "content"  : "{{ post.content | strip_html | strip_newlines }}"    } {% unless forloop.last %},{% endunless %}  {% endfor %}  ,  {% for page in site.pages %}   {     {% if page.title != nil %}        "title"    : "{{ page.title | escape }}",        "category" : "{{ page.category }}",        "tags"     : "{{ page.tags | join: ', ' }}",        "url"      : "{{ site.baseurl }}{{ page.url }}",        "date"     : "{{ page.date }}",        "content"  : "{{ page.content | strip_html | strip_newlines }}"     {% endif %}   } {% unless forloop.last %},{% endunless %}  {% endfor %}]```## Development- `npm install`- `npm test`#### Acceptance tests```bashcd example; jekyll serve# in another tabnpm run cypress -- run```## ContributorsThanks to all [contributors](https://github.com/christian-fei/Simple-Jekyll-Search/graphs/contributors) over the years! You are the best :)> [@daviddarnes](https://github.com/daviddarnes)[@XhmikosR](https://github.com/XhmikosR)[@PeterDaveHello](https://github.com/PeterDaveHello)[@mikeybeck](https://github.com/mikeybeck)[@egladman](https://github.com/egladman)[@midzer](https://github.com/midzer)[@eduardoboucas](https://github.com/eduardoboucas)[@kremalicious](https://github.com/kremalicious)[@tibotiber](https://github.com/tibotiber)and many others!## Stargazers over time[![Stargazers over time](https://starchart.cc/christian-fei/Simple-Jekyll-Search.svg)](https://starchart.cc/christian-fei/Simple-Jekyll-Search)"
     
   } ,
  
   {
     
   } ,
  
   {
     
   } ,
  
   {
     
   } 
  
]

Development

  • npm install
  • npm test

Acceptance tests

1
2
3
4
5
cd example; jekyll serve

# in another tab

npm run cypress -- run

Contributors

Thanks to all contributors over the years! You are the best :)

@daviddarnes @XhmikosR @PeterDaveHello @mikeybeck @egladman @midzer @eduardoboucas @kremalicious @tibotiber and many others!

Stargazers over time

Stargazers over time