first commit
38
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
@ -0,0 +1,38 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: Create a report to help us improve
|
||||
title: ''
|
||||
labels: ''
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Describe the bug**
|
||||
A clear and concise description of what the bug is.
|
||||
|
||||
**To Reproduce**
|
||||
Steps to reproduce the behavior:
|
||||
1. Go to '...'
|
||||
2. Click on '....'
|
||||
3. Scroll down to '....'
|
||||
4. See error
|
||||
|
||||
**Expected behavior**
|
||||
A clear and concise description of what you expected to happen.
|
||||
|
||||
**Screenshots**
|
||||
If applicable, add screenshots to help explain your problem.
|
||||
|
||||
**Desktop (please complete the following information):**
|
||||
- OS: [e.g. iOS]
|
||||
- Browser [e.g. chrome, safari]
|
||||
- Version [e.g. 22]
|
||||
|
||||
**Smartphone (please complete the following information):**
|
||||
- Device: [e.g. iPhone6]
|
||||
- OS: [e.g. iOS8.1]
|
||||
- Browser [e.g. stock browser, safari]
|
||||
- Version [e.g. 22]
|
||||
|
||||
**Additional context**
|
||||
Add any other context about the problem here.
|
20
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
@ -0,0 +1,20 @@
|
||||
---
|
||||
name: Feature request
|
||||
about: Suggest an idea for this project
|
||||
title: ''
|
||||
labels: ''
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Is your feature request related to a problem? Please describe.**
|
||||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
||||
|
||||
**Describe the solution you'd like**
|
||||
A clear and concise description of what you want to happen.
|
||||
|
||||
**Describe alternatives you've considered**
|
||||
A clear and concise description of any alternative solutions or features you've considered.
|
||||
|
||||
**Additional context**
|
||||
Add any other context or screenshots about the feature request here.
|
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
exampleSite/public/
|
||||
resources/
|
22
LICENSE
Normal file
@ -0,0 +1,22 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2017 Heydon Pickering
|
||||
Copyright (c) 2019 Zachary Betz
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
3
README.md
Normal file
@ -0,0 +1,3 @@
|
||||
# Infidel Cupper
|
||||
|
||||
This is infidel's fork version of hugo [Cupper](https://github.com/zwbetz-gh/cupper-hugo-theme) theme
|
6
archetypes/default.md
Normal file
@ -0,0 +1,6 @@
|
||||
---
|
||||
title: "{{ replace .Name "-" " " | title }}"
|
||||
date: {{ .Date }}
|
||||
tags: []
|
||||
---
|
||||
|
8
assets/css/search.css
Normal file
@ -0,0 +1,8 @@
|
||||
#search {
|
||||
height: 50px;
|
||||
width: 100%;
|
||||
padding: 8px;
|
||||
border: 2px solid;
|
||||
line-height: 1.6;
|
||||
font-size: 1.25rem;
|
||||
}
|
1039
assets/css/template-styles.css
Normal file
21
assets/js/search.js
Normal file
@ -0,0 +1,21 @@
|
||||
(function () {
|
||||
function onEvent() {
|
||||
var filter = search.value.toUpperCase();
|
||||
var list = document.getElementById("list");
|
||||
var listItems = list.getElementsByTagName("li");
|
||||
for (i = 0; i < listItems.length; i++) {
|
||||
var item = listItems[i];
|
||||
var text = item.innerText.toUpperCase();
|
||||
if (text.indexOf(filter) > -1) {
|
||||
item.style.display = "";
|
||||
} else {
|
||||
item.style.display = "none";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var search = document.getElementById("search");
|
||||
if (search) {
|
||||
search.addEventListener("keyup", onEvent);
|
||||
}
|
||||
})();
|
162
assets/js/template-dom-scripts.js
Normal file
@ -0,0 +1,162 @@
|
||||
/* Expandable sections */
|
||||
(function () {
|
||||
function toggle (button, target) {
|
||||
var expanded = button.getAttribute('aria-expanded') === 'true';
|
||||
button.setAttribute('aria-expanded', !expanded);
|
||||
target.hidden = !target.hidden;
|
||||
}
|
||||
|
||||
var expanders = document.querySelectorAll('[data-expands]');
|
||||
|
||||
Array.prototype.forEach.call(expanders, function (expander) {
|
||||
var target = document.getElementById(expander.getAttribute('data-expands'));
|
||||
|
||||
expander.addEventListener('click', function () {
|
||||
toggle(expander, target);
|
||||
})
|
||||
})
|
||||
}());
|
||||
|
||||
/* Menu button */
|
||||
(function () {
|
||||
var button = document.getElementById('menu-button');
|
||||
if (button) {
|
||||
var menu = document.getElementById('patterns-list');
|
||||
button.addEventListener('click', function() {
|
||||
var expanded = this.getAttribute('aria-expanded') === 'true';
|
||||
this.setAttribute('aria-expanded', !expanded);
|
||||
})
|
||||
}
|
||||
}());
|
||||
|
||||
/* Persist navigation scroll point */
|
||||
(function () {
|
||||
window.onbeforeunload = function () {
|
||||
var patternsNav = document.getElementById('patterns-nav');
|
||||
if (patternsNav) {
|
||||
var scrollPoint = patternsNav.scrollTop;
|
||||
localStorage.setItem('scrollPoint', scrollPoint);
|
||||
}
|
||||
}
|
||||
|
||||
window.addEventListener('DOMContentLoaded', function () {
|
||||
if (document.getElementById('patterns-nav')) {
|
||||
if (window.location.href.indexOf('patterns/') !== -1) {
|
||||
document.getElementById('patterns-nav').scrollTop = parseInt(localStorage.getItem('scrollPoint'));
|
||||
} else {
|
||||
document.getElementById('patterns-nav').scrollTop = 0;
|
||||
}
|
||||
}
|
||||
})
|
||||
}());
|
||||
|
||||
{{ if not .Site.Params.hideHeaderLinks }}
|
||||
/* Add "link here" links to <h2> headings */
|
||||
(function () {
|
||||
var headings = document.querySelectorAll('h2, h3, h4, h5, h6');
|
||||
|
||||
Array.prototype.forEach.call(headings, function (heading) {
|
||||
var id = heading.getAttribute('id');
|
||||
|
||||
if (id) {
|
||||
var newHeading = heading.cloneNode(true);
|
||||
newHeading.setAttribute('tabindex', '-1');
|
||||
|
||||
var container = document.createElement('div');
|
||||
container.setAttribute('class', 'h2-container');
|
||||
container.appendChild(newHeading);
|
||||
|
||||
heading.parentNode.insertBefore(container, heading);
|
||||
|
||||
var link = document.createElement('a');
|
||||
link.setAttribute('href', '#' + id);
|
||||
link.innerHTML = '<svg aria-hidden="true" class="link-icon" viewBox="0 0 50 50" focusable="false"> <use xlink:href="#link"></use> </svg>';
|
||||
|
||||
container.appendChild(link);
|
||||
|
||||
heading.parentNode.removeChild(heading);
|
||||
}
|
||||
})
|
||||
}());
|
||||
{{ end }}
|
||||
|
||||
/* Enable scrolling by keyboard of code samples */
|
||||
(function () {
|
||||
var codeBlocks = document.querySelectorAll('pre, .code-annotated');
|
||||
|
||||
Array.prototype.forEach.call(codeBlocks, function (block) {
|
||||
if (block.querySelector('code')) {
|
||||
block.setAttribute('role', 'region');
|
||||
block.setAttribute('aria-label', 'code sample');
|
||||
if (block.scrollWidth > block.clientWidth) {
|
||||
block.setAttribute('tabindex', '0');
|
||||
}
|
||||
}
|
||||
});
|
||||
}());
|
||||
|
||||
/* Switch and persist theme */
|
||||
(function () {
|
||||
var checkbox = document.getElementById('themer');
|
||||
|
||||
function persistTheme(val) {
|
||||
localStorage.setItem('darkTheme', val);
|
||||
}
|
||||
|
||||
function applyDarkTheme() {
|
||||
var darkTheme = document.getElementById('darkTheme');
|
||||
darkTheme.disabled = false;
|
||||
}
|
||||
|
||||
function clearDarkTheme() {
|
||||
var darkTheme = document.getElementById('darkTheme');
|
||||
darkTheme.disabled = true;
|
||||
}
|
||||
|
||||
function defaultDarkTheme() {
|
||||
{{- with .Site.Params.defaultDarkTheme }}
|
||||
if (localStorage.getItem('darkTheme') == null) {
|
||||
persistTheme('true');
|
||||
checkbox.checked = true;
|
||||
}
|
||||
{{- else }}
|
||||
if (localStorage.getItem('darkTheme') == null) {
|
||||
persistTheme('false');
|
||||
checkbox.checked = false;
|
||||
}
|
||||
{{ end }}
|
||||
}
|
||||
|
||||
checkbox.addEventListener('change', function () {
|
||||
defaultDarkTheme();
|
||||
if (this.checked) {
|
||||
applyDarkTheme();
|
||||
persistTheme('true');
|
||||
} else {
|
||||
clearDarkTheme();
|
||||
persistTheme('false');
|
||||
}
|
||||
});
|
||||
|
||||
function showTheme() {
|
||||
if (localStorage.getItem('darkTheme') === 'true') {
|
||||
applyDarkTheme();
|
||||
checkbox.checked = true;
|
||||
} else {
|
||||
clearDarkTheme();
|
||||
checkbox.checked = false;
|
||||
}
|
||||
}
|
||||
|
||||
function showContent() {
|
||||
document.body.style.visibility = 'visible';
|
||||
document.body.style.opacity = 1;
|
||||
}
|
||||
|
||||
window.addEventListener('DOMContentLoaded', function () {
|
||||
defaultDarkTheme();
|
||||
showTheme();
|
||||
showContent();
|
||||
});
|
||||
|
||||
}());
|
149
data/principles.json
Normal file
@ -0,0 +1,149 @@
|
||||
{
|
||||
"title": "Inclusive Design Principles",
|
||||
"description": "<p>These Inclusive Design Principles are about putting people first. It's about designing for the needs of people with permanent, temporary, situational, or changing disabilities — all of us really.</p><p>They are intended to give anyone involved in the design and development of websites and applications - designers, user experience professionals, developers, product owners, idea makers, innovators, artists and thinkers - a broad approach to inclusive design.</p><p>For more background, read about the <a href=\"https://www.paciellogroup.com/blog/2017/06/inclusive-design-principles/\">Inclusive Design Principles</a> on the TPG blog.</p>",
|
||||
"authors": [
|
||||
"Léonie Watson",
|
||||
"Henny Swan",
|
||||
"Ian Pouncey",
|
||||
"Heydon Pickering"
|
||||
],
|
||||
"principles": [
|
||||
{
|
||||
"title": "Provide comparable experience",
|
||||
"strapline": "Ensure your interface provides a comparable experience for all so people can accomplish tasks in a way that suits their needs without undermining the quality of the content.",
|
||||
"description": "Whether out of circumstance, choice, or context people are diverse. As people use different approaches and tools to read and operate interfaces, what the interface offers each user should be comparable in value, quality, and efficiency.",
|
||||
"examples": [
|
||||
{
|
||||
"title": "Content for alternatives",
|
||||
"description": "Having a basic alternative, whether it's alt text, a transcript, audio description, or sign language, makes the content accessible but to be equivalent it needs to capture the essence of the original."
|
||||
},
|
||||
{
|
||||
"title": "Ergonomic features",
|
||||
"description": "Providing synchronized closed captions makes your video accessible. But making them customizable, color coded, and repositionable provides a more comparable experience."
|
||||
},
|
||||
{
|
||||
"title": "Notifications",
|
||||
"description": "Notifications that appear in an interface are visually obvious but require proactive discovery by screen reader users. A comparable experience for blind users, can be achieved by using a live region. The notification then requires no explicit action on the part of the user."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Consider situation",
|
||||
"strapline": "People use your interface in different situations. Make sure your interface delivers a valuable experience to people regardless of their circumstances.",
|
||||
"description": "People are first time users, established users, users at work, users at home, users on the move, and users under pressure. All of these situations can have an impact. For those who already find interaction challenging, such as those with disabilities, this impact may make usage particularly difficult.",
|
||||
"examples": [
|
||||
{
|
||||
"title": "Colour contrast",
|
||||
"description": "When using an interface outdoors, good contrast lessens the impact of bright sunshine."
|
||||
},
|
||||
{
|
||||
"title": "Context sensitive help",
|
||||
"description": "Users may need help when they first encounter a complex form or interaction. This help may become redundant, even distracting, as a user becomes more familiar with the form or interaction. Context sensitive help provides the user with choice as to when they access help and better control over the page."
|
||||
},
|
||||
{
|
||||
"title": "Captions on the go",
|
||||
"description": "You're aware that the video content you are providing will be consumed on mobile devices, which may be in public spaces where people might prefer to consume the content without being antisocial. For smaller viewports, sound is switched off and captions activated by default."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Be consistent",
|
||||
"strapline": "Use familiar conventions and apply them consistently.",
|
||||
"description": "Familiar interfaces borrow from well-established patterns. These should be used consistently within the interface to reinforce their meaning and purpose. This should be applied to functionality, behavior, editorial, and presentation. You should say the same things in the same way and users should be able to do the same things in the same way.",
|
||||
"examples": [
|
||||
{
|
||||
"title": "Consistent design patterns",
|
||||
"description": "Use consistent web and platform design patterns to help build familiarity and understanding."
|
||||
},
|
||||
{
|
||||
"title": "Consistent editorial",
|
||||
"description": "Use plain language consistently across platforms including editorial that is relied on by screen reader users such as text alternatives, headings, labels for buttons and so on. Keeping editorial style consistent is also important e.g. making sure the top of the article always has a clearly marked summary paragraph, making sure bullets always start with a bolded definition."
|
||||
},
|
||||
{
|
||||
"title": "Consistent page architecture",
|
||||
"description": "Use consistent page architecture across templates to help people scan and navigate key content."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Give control",
|
||||
"strapline": "Ensure people are in control. People should be able to access and interact with content in their preferred way.",
|
||||
"description": "Do not suppress or disable the ability to change standard browser and platform settings such as orientation, font size, zoom, and contrast. In addition, avoid content changes that have not been initiated by the user unless there is a way to control it.",
|
||||
"examples": [
|
||||
{
|
||||
"title": "Scrolling control",
|
||||
"description": "'Infinite scrolling' can be problematic, especially for users navigating by keyboard because they can't get past the stream of refreshing content. Give the option to turn off this feature and replace it with a 'load more' button."
|
||||
},
|
||||
{
|
||||
"title": "Make it stop",
|
||||
"description": "Some users find that animations or parallax scrolling cause nausea, and others find them plain distracting. Where they play automatically, they should at least be easy to stop, by providing prominent playback controls."
|
||||
},
|
||||
{
|
||||
"title": "Allow zoom",
|
||||
"description": "There are many reasons why a user may want to operate the pinch-to-zoom gesture on their touch device. Make sure it is not suppressed, and that the content does not get obscured when it is put to use."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Offer choice",
|
||||
"strapline": "Consider providing different ways for people to complete tasks, especially those that are complex or non standard.",
|
||||
"description": "There is often more than one way to complete a task. You cannot assume what someone's preferred way might be. By providing alternatives for layout and task completion, you offer people choices that suit them and their circumstances at the time.",
|
||||
"examples": [
|
||||
{
|
||||
"title" : "Multiple ways to complete an action",
|
||||
"description": "Where appropriate, provide multiple ways to complete an action. On mobile swipe to delete an item can be supported together with an edit button that allows you to select items then delete. An example of this is in iOS mail."
|
||||
},
|
||||
{
|
||||
"title": "Layout",
|
||||
"description": "Where there are long lists of content consider offering a grid or list layout option. This supports people who may want larger images on screen or smaller rows."
|
||||
},
|
||||
{
|
||||
"title": "Accessible alternatives",
|
||||
"description": "Alternative ways of presenting data, such as data tables for info graphics, should be available to all users, as an option rather than a hidden link just for screen reader users. Accessible alternatives can benefit not just a specific target group but all users as long as we offer the choice."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Prioritise content",
|
||||
"strapline": "Help users focus on core tasks, features, and information by prioritising them within the content and layout.",
|
||||
"description": "Interfaces can be difficult to understand when core features are not clearly exposed and prioritised. A site or application may provide lots of information and functionality, but people should be able to focus on one thing at a time. Identify the core purpose of the interface, and then the content and features needed to fulfill that purpose.",
|
||||
"examples": [
|
||||
{
|
||||
"title": "Keep task focused",
|
||||
"description": "Progressively reveal features and content when needed, not all in one go."
|
||||
},
|
||||
{
|
||||
"title": "Prioritising tasks",
|
||||
"description": "An email application is principally for writing and reading email. The 'compose' button is, therefore, present on all screens, and early in the focus order. The inbox is prioritised over other lists of email, such as 'sent' and 'spam' messages. Less used features such as tagging or organizing email into folders appear later in the focus order, as they will generally only be used when the primary task of reading the email is complete."
|
||||
},
|
||||
{
|
||||
"title": "Prioritising content",
|
||||
"description": "The primary content on a news article page is the story, therefore it should come before other content, both visually and in the source order. Related content, such as similar articles, should follow it, and unrelated content after that."
|
||||
},
|
||||
{
|
||||
"title": "Prioritising editorial",
|
||||
"description": "Editorial for links, headings and buttons should use plain language and put the primary text first. This applies to both visible and hidden text. This makes the text easy to scan both visually and audibly for screen reader users. Plain language also benefits non native speakers and is easier to translate."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Add value",
|
||||
"strapline": "Consider the value of features and how they improve the experience for different users.",
|
||||
"description": "Features should add value to the user experience by providing efficient and diverse ways to find and interact with content. Consider device features such as voice, geolocation, camera and vibration API's, and how integration with connected devices or a second screen could provide choice.",
|
||||
"examples": [
|
||||
{
|
||||
"title": "Integration with connected devices or second screen",
|
||||
"description": "Using voice interfaces to control multimedia, search for content, output from music or TV adds value for people who struggle to use other interfaces."
|
||||
},
|
||||
{
|
||||
"title": "Integration with platform APIs",
|
||||
"description": "Enhance functionality using platform features. The vibration API makes notifications more usable by deaf and hard of hearing people while the geolocation API makes it easier for people with mobility impairments to use location based services."
|
||||
},
|
||||
{
|
||||
"title": "Make task completion easier",
|
||||
"description": "Add a 'Show password' button to input fields so users can verify they have correctly inputted text, or add touch identification for password protected areas."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
1427
data/wcag.json
Normal file
88
exampleSite/config.yaml
Normal file
@ -0,0 +1,88 @@
|
||||
baseURL: https://example.com
|
||||
languageCode: en-us
|
||||
defaultContentLanguage: en
|
||||
title: Cupper
|
||||
theme: cupper-hugo-theme
|
||||
googleAnalytics: UA-123456789-1
|
||||
disqusShortname: yourdiscussshortname
|
||||
enableGitInfo: true
|
||||
|
||||
taxonomies:
|
||||
tag: tags
|
||||
|
||||
permalinks:
|
||||
post: /:filename/
|
||||
|
||||
imaging:
|
||||
quality: 99
|
||||
|
||||
params:
|
||||
description: An accessibility-friendly Hugo theme, ported from the [original Cupper](https://github.com/ThePacielloGroup/cupper) project.
|
||||
homeMetaContent: An accessibility-friendly Hugo theme, ported from the original Cupper project.
|
||||
footer: Made with [Hugo](https://gohugo.io/). Themed by [Cupper](https://github.com/zwbetz-gh/cupper-hugo-theme). Deployed to [Netlify](https://www.netlify.com/).
|
||||
# For more date formats see https://gohugo.io/functions/format/
|
||||
dateFormat: Jan 2, 2006
|
||||
codePenUser: someUser
|
||||
katex: true
|
||||
hideHeaderLinks: false
|
||||
search: true
|
||||
showThemeSwitcher: true
|
||||
defaultDarkTheme: false
|
||||
moveFooterToHeader: false
|
||||
# navTitleText: Cupper Theme
|
||||
logoAlt: An alternative text description of the logo
|
||||
customCss:
|
||||
- css/custom_01.css
|
||||
- css/custom_02.css
|
||||
customJs:
|
||||
- js/custom_01.js
|
||||
- js/custom_02.js
|
||||
|
||||
menu:
|
||||
nav:
|
||||
- name: Home
|
||||
url: /
|
||||
weight: 1
|
||||
- name: Blog
|
||||
url: /post/
|
||||
weight: 2
|
||||
- name: Tags
|
||||
url: /tags/
|
||||
weight: 3
|
||||
- name: About
|
||||
url: /about/
|
||||
weight: 4
|
||||
- name: RSS
|
||||
url: /index.xml
|
||||
weight: 5
|
||||
|
||||
markup:
|
||||
defaultMarkdownHandler: goldmark
|
||||
goldmark:
|
||||
extensions:
|
||||
definitionList: true
|
||||
footnote: true
|
||||
linkify: true
|
||||
strikethrough: true
|
||||
table: true
|
||||
taskList: true
|
||||
typographer: true
|
||||
parser:
|
||||
attribute: true
|
||||
autoHeadingID: true
|
||||
renderer:
|
||||
hardWraps: false
|
||||
unsafe: true
|
||||
xHTML: false
|
||||
highlight:
|
||||
codeFences: false
|
||||
hl_Lines: ""
|
||||
lineNoStart: 1
|
||||
lineNos: false
|
||||
lineNumbersInTable: true
|
||||
noClasses: true
|
||||
style: monokai
|
||||
tabWidth: 4
|
||||
tableOfContents:
|
||||
endLevel: 6
|
||||
startLevel: 2
|
14
exampleSite/content/_index.md
Normal file
@ -0,0 +1,14 @@
|
||||
---
|
||||
date: "2017-06-26T18:27:58+01:00"
|
||||
title: "Home"
|
||||
---
|
||||
|
||||
Welcome to **Cupper**: An accessibility-friendly Hugo theme, ported from the [original Cupper](https://github.com/ThePacielloGroup/cupper) project. Here are some of its features:
|
||||
|
||||
{{< ticks >}}
|
||||
* Screen reader and keyboard accessible
|
||||
* Responsive
|
||||
* Numerous shortcodes
|
||||
* Toggleable dark theme
|
||||
* Toggleable table of contents per blog post
|
||||
{{< /ticks >}}
|
16
exampleSite/content/about.md
Normal file
@ -0,0 +1,16 @@
|
||||
---
|
||||
date: "2014-04-09"
|
||||
title: "About"
|
||||
---
|
||||
|
||||
Hugo is the **world’s fastest framework for building websites**. It is written in Go.
|
||||
|
||||
It makes use of a variety of open source projects including:
|
||||
|
||||
* https://github.com/russross/blackfriday
|
||||
* https://github.com/alecthomas/chroma
|
||||
* https://github.com/muesli/smartcrop
|
||||
* https://github.com/spf13/cobra
|
||||
* https://github.com/spf13/viper
|
||||
|
||||
Learn more and contribute on [GitHub](https://github.com/gohugoio).
|
3
exampleSite/content/post/_index.md
Normal file
@ -0,0 +1,3 @@
|
||||
---
|
||||
title: Blog
|
||||
---
|
13
exampleSite/content/post/cmd-test.md
Normal file
@ -0,0 +1,13 @@
|
||||
---
|
||||
title: "cmd Test"
|
||||
date: 2020-08-04T21:05:05-05:00
|
||||
tags: [issue]
|
||||
---
|
||||
|
||||
Testing out GitHub issue https://github.com/zwbetz-gh/cupper-hugo-theme/issues/42
|
||||
|
||||
{{< cmd >}}
|
||||
Line 1
|
||||
Line 2
|
||||
Line 3
|
||||
{{</ cmd >}}
|
1144
exampleSite/content/post/creating-a-new-theme.md
Normal file
246
exampleSite/content/post/cupper-shortcodes/index.md
Normal file
@ -0,0 +1,246 @@
|
||||
---
|
||||
title: "Cupper Shortcodes"
|
||||
date: 2019-02-12T23:39:06-06:00
|
||||
tags: [hugo, shortcodes]
|
||||
toc: true
|
||||
---
|
||||
|
||||
## blockquote
|
||||
|
||||
```
|
||||
{{</* blockquote author="Carl Jung" */>}}
|
||||
Even a happy life cannot be without a measure of darkness, and the word happy would lose its meaning if it were not balanced by sadness. It is far better to take things as they come along with patience and equanimity.
|
||||
{{</* /blockquote */>}}
|
||||
```
|
||||
|
||||
{{< blockquote author="Carl Jung" >}}
|
||||
Even a happy life cannot be without a measure of darkness, and the word happy would lose its meaning if it were not balanced by sadness. It is far better to take things as they come along with patience and equanimity.
|
||||
{{< /blockquote >}}
|
||||
|
||||
## note
|
||||
|
||||
```
|
||||
{{</* note */>}}
|
||||
This is a note! It's something the reader may like to know about but is supplementary to the main content. Use notes when something may be interesting but not critical. You can also *include* **markdown** stuffs like `code`.
|
||||
{{</* /note */>}}
|
||||
```
|
||||
|
||||
{{< note >}}
|
||||
This is a note! It's something the reader may like to know about but is supplementary to the main content. Use notes when something may be interesting but not critical. You can also *include* **markdown** stuffs like `code`.
|
||||
{{< /note >}}
|
||||
|
||||
## warning note
|
||||
|
||||
```
|
||||
{{</* warning */>}}
|
||||
This is a warning! It's about something the reader should be careful to do or to avoid doing. Use warnings when something could go wrong. You can also *include* **markdown** stuffs like `code`.
|
||||
{{</* /warning */>}}
|
||||
```
|
||||
|
||||
{{< warning >}}
|
||||
This is a warning! It's about something the reader should be careful to do or to avoid doing. Use warnings when something could go wrong. You can also *include* **markdown** stuffs like `code`.
|
||||
{{< /warning >}}
|
||||
|
||||
## cmd
|
||||
|
||||
```
|
||||
{{</* cmd */>}}
|
||||
hugo server --gc
|
||||
{{</* /cmd */>}}
|
||||
```
|
||||
|
||||
{{< cmd >}}
|
||||
hugo server --gc
|
||||
{{< /cmd >}}
|
||||
|
||||
## code
|
||||
|
||||
```
|
||||
{{</* code numbered="true" */>}}
|
||||
<div [[[role="dialog"]]] [[[aria-labelledby="dialog-heading"]]]>
|
||||
<button [[[aria-label="close"]]]>x</button>
|
||||
<h2 [[[id="dialog-heading"]]]>Confirmation</h2>
|
||||
<p>Press Okay to confirm or Cancel</p>
|
||||
<button>Okay</button>
|
||||
<button>Cancel</button>
|
||||
</div>
|
||||
{{</* /code */>}}
|
||||
|
||||
1. The dialog is only announced as a dialog if it takes the `dialog` ARIA role
|
||||
2. The `aria-labelledby` relationship attribute makes the element carrying the `id` it points to its label
|
||||
3. The close button uses `aria-label` to provide the text label "close", overriding the text content
|
||||
4. The heading is used as the dialog's label. The `aria-labelledby` attribute points to its `id`
|
||||
```
|
||||
|
||||
{{< code numbered="true" >}}
|
||||
<div [[[role="dialog"]]] [[[aria-labelledby="dialog-heading"]]]>
|
||||
<button [[[aria-label="close"]]]>x</button>
|
||||
<h2 [[[id="dialog-heading"]]]>Confirmation</h2>
|
||||
<p>Press Okay to confirm or Cancel</p>
|
||||
<button>Okay</button>
|
||||
<button>Cancel</button>
|
||||
</div>
|
||||
{{< /code >}}
|
||||
|
||||
1. The dialog is only announced as a dialog if it takes the `dialog` ARIA role
|
||||
2. The `aria-labelledby` relationship attribute makes the element carrying the `id` it points to its label
|
||||
3. The close button uses `aria-label` to provide the text label "close", overriding the text content
|
||||
4. The heading is used as the dialog's label. The `aria-labelledby` attribute points to its `id`
|
||||
|
||||
## syntax highlighting
|
||||
|
||||
To get syntax highlighting for your code, use markdown code fences, then specify the language:
|
||||
|
||||
````
|
||||
```html
|
||||
<div role="dialog" aria-labelledby="dialog-heading">
|
||||
<button aria-label="close">x</button>
|
||||
<h2 id="dialog-heading">Confirmation</h2>
|
||||
<p>Press Okay to confirm or Cancel</p>
|
||||
<button>Okay</button>
|
||||
<button>Cancel</button>
|
||||
</div>
|
||||
```
|
||||
````
|
||||
|
||||
```html
|
||||
<div role="dialog" aria-labelledby="dialog-heading">
|
||||
<button aria-label="close">x</button>
|
||||
<h2 id="dialog-heading">Confirmation</h2>
|
||||
<p>Press Okay to confirm or Cancel</p>
|
||||
<button>Okay</button>
|
||||
<button>Cancel</button>
|
||||
</div>
|
||||
```
|
||||
|
||||
## codePen
|
||||
|
||||
```
|
||||
{{</* codePen VpVNKW */>}}
|
||||
```
|
||||
|
||||
{{< codePen VpVNKW >}}
|
||||
|
||||
## colors
|
||||
|
||||
```
|
||||
{{</* colors "#111111, #cccccc, #ffffff" */>}}
|
||||
```
|
||||
|
||||
{{< colors "#111111, #cccccc, #ffffff" >}}
|
||||
|
||||
## expandable
|
||||
|
||||
```
|
||||
{{</* expandable label="A section of dummy text" level="2" */>}}
|
||||
Here is some markdown including [a link](https://twitter.com/heydonworks). Donec erat est, feugiat a est sed, aliquet pharetra ipsum. Vivamus in arcu leo. Praesent feugiat, purus a molestie ultrices, libero massa iaculis ante, sit amet accumsan leo eros vel ligula.
|
||||
{{</* /expandable */>}}
|
||||
```
|
||||
|
||||
{{< expandable label="A section of dummy text" level="2" >}}
|
||||
Here is some markdown including [a link](https://twitter.com/heydonworks). Donec erat est, feugiat a est sed, aliquet pharetra ipsum. Vivamus in arcu leo. Praesent feugiat, purus a molestie ultrices, libero massa iaculis ante, sit amet accumsan leo eros vel ligula.
|
||||
{{< /expandable >}}
|
||||
|
||||
## fileTree
|
||||
|
||||
```
|
||||
{{</* fileTree */>}}
|
||||
* Level 1 folder
|
||||
* Level 2 file
|
||||
* Level 2 folder
|
||||
* Level 3 file
|
||||
* Level 3 folder
|
||||
* Level 4 file
|
||||
* Level 3 folder
|
||||
* Level 4 file
|
||||
* Level 4 file
|
||||
* Level 3 file
|
||||
* Level 2 folder
|
||||
* Level 3 file
|
||||
* Level 3 file
|
||||
* Level 3 file
|
||||
* Level 2 file
|
||||
* Level 1 file
|
||||
{{</* /fileTree */>}}
|
||||
```
|
||||
|
||||
{{< fileTree >}}
|
||||
* Level 1 folder
|
||||
* Level 2 file
|
||||
* Level 2 folder
|
||||
* Level 3 file
|
||||
* Level 3 folder
|
||||
* Level 4 file
|
||||
* Level 3 folder
|
||||
* Level 4 file
|
||||
* Level 4 file
|
||||
* Level 3 file
|
||||
* Level 2 folder
|
||||
* Level 3 file
|
||||
* Level 3 file
|
||||
* Level 3 file
|
||||
* Level 2 file
|
||||
* Level 1 file
|
||||
{{< /fileTree >}}
|
||||
|
||||
## ticks
|
||||
|
||||
```
|
||||
{{</* ticks */>}}
|
||||
* Selling point one
|
||||
* Selling point two
|
||||
* Selling point three
|
||||
{{</* /ticks */>}}
|
||||
```
|
||||
|
||||
{{< ticks >}}
|
||||
* Selling point one
|
||||
* Selling point two
|
||||
* Selling point three
|
||||
{{< /ticks >}}
|
||||
|
||||
## figureCupper
|
||||
|
||||
```
|
||||
{{</* figureCupper
|
||||
img="sun.jpg"
|
||||
caption="The Sun is the star at the center of the Solar System. It is a nearly perfect sphere of hot plasma, with internal convective motion that generates a magnetic field via a dynamo process. It is by far the most important source of energy for life on Earth. [Credits](https://images.nasa.gov/details-GSFC_20171208_Archive_e000393.html)."
|
||||
command="Resize"
|
||||
options="700x" */>}}
|
||||
```
|
||||
|
||||
{{< figureCupper
|
||||
img="sun.jpg"
|
||||
caption="The Sun is the star at the center of the Solar System. It is a nearly perfect sphere of hot plasma, with internal convective motion that generates a magnetic field via a dynamo process. It is by far the most important source of energy for life on Earth. [Credits](https://images.nasa.gov/details-GSFC_20171208_Archive_e000393.html)."
|
||||
command="Resize"
|
||||
options="700x" >}}
|
||||
|
||||
## principles
|
||||
|
||||
See the [full principles list](https://github.com/zwbetz-gh/cupper-hugo-theme/blob/master/data/principles.json).
|
||||
|
||||
```
|
||||
{{</* principles include="Add value, Be consistent" descriptions="true" */>}}
|
||||
```
|
||||
|
||||
{{< principles include="Add value, Be consistent" descriptions="true" >}}
|
||||
|
||||
## wcag
|
||||
|
||||
See the [full wcag list](https://github.com/zwbetz-gh/cupper-hugo-theme/blob/master/data/wcag.json).
|
||||
|
||||
```
|
||||
{{</* wcag include="1.2.1, 1.3.1, 4.1.2" */>}}
|
||||
```
|
||||
|
||||
{{< wcag include="1.2.1, 1.3.1, 4.1.2" >}}
|
||||
|
||||
## tested
|
||||
|
||||
See the [full browser list](https://github.com/zwbetz-gh/cupper-hugo-theme/tree/master/static/images).
|
||||
|
||||
```
|
||||
{{</* tested using="Firefox + JAWS, Chrome, Safari iOS + Voiceover, Edge" */>}}
|
||||
```
|
||||
|
||||
{{< tested using="Firefox + JAWS, Chrome, Safari iOS + Voiceover, Edge" >}}
|
BIN
exampleSite/content/post/cupper-shortcodes/sun.jpg
Normal file
After Width: | Height: | Size: 3.0 MiB |
146
exampleSite/content/post/cupper-typography.md
Normal file
@ -0,0 +1,146 @@
|
||||
---
|
||||
title: "Cupper Typography"
|
||||
date: 2019-02-14T15:36:09-06:00
|
||||
tags: [hugo, markdown]
|
||||
toc: true
|
||||
---
|
||||
|
||||
## Headings
|
||||
|
||||
```
|
||||
## Heading 2
|
||||
### Heading 3
|
||||
#### Heading 4
|
||||
##### Heading 5
|
||||
###### Heading 6
|
||||
```
|
||||
|
||||
## Heading 2
|
||||
### Heading 3
|
||||
#### Heading 4
|
||||
##### Heading 5
|
||||
###### Heading 6
|
||||
|
||||
## Text
|
||||
|
||||
```
|
||||
*This text will be italic*
|
||||
_This will also be italic_
|
||||
|
||||
**This text will be bold**
|
||||
__This will also be bold__
|
||||
|
||||
_You **can** combine them_
|
||||
```
|
||||
|
||||
*This text will be italic*
|
||||
|
||||
_This will also be italic_
|
||||
|
||||
**This text will be bold**
|
||||
|
||||
__This will also be bold__
|
||||
|
||||
_You **can** combine them_
|
||||
|
||||
## Lists
|
||||
|
||||
### Unordered
|
||||
|
||||
```
|
||||
* Item 1
|
||||
* Item 2
|
||||
* Item 2a
|
||||
* Item 2b
|
||||
```
|
||||
|
||||
* Item 1
|
||||
* Item 2
|
||||
* Item 2a
|
||||
* Item 2b
|
||||
|
||||
### Ordered
|
||||
|
||||
```
|
||||
1. Item 1
|
||||
1. Item 2
|
||||
1. Item 3
|
||||
1. Item 3a
|
||||
1. Item 3b
|
||||
```
|
||||
|
||||
1. Item 1
|
||||
1. Item 2
|
||||
1. Item 3
|
||||
1. Item 3a
|
||||
1. Item 3b
|
||||
|
||||
## Links
|
||||
|
||||
```
|
||||
https://cupper-hugo-theme.netlify.com/
|
||||
|
||||
[Cupper hugo theme](https://cupper-hugo-theme.netlify.com/)
|
||||
```
|
||||
|
||||
https://cupper-hugo-theme.netlify.com/
|
||||
|
||||
[Cupper hugo theme](https://cupper-hugo-theme.netlify.com/)
|
||||
|
||||
## Blockquotes
|
||||
|
||||
```
|
||||
As Kanye West said:
|
||||
|
||||
> We're living the future so
|
||||
> the present is our past.
|
||||
```
|
||||
|
||||
As Kanye West said:
|
||||
|
||||
> We're living the future so
|
||||
> the present is our past.
|
||||
|
||||
## Tables
|
||||
|
||||
```
|
||||
| Animal | Sounds |
|
||||
|---------|--------|
|
||||
| Cat | Meow |
|
||||
| Dog | Woof |
|
||||
| Cricket | Chirp |
|
||||
```
|
||||
|
||||
| Animal | Sounds |
|
||||
|---------|--------|
|
||||
| Cat | Meow |
|
||||
| Dog | Woof |
|
||||
| Cricket | Chirp |
|
||||
|
||||
## Inline code
|
||||
|
||||
```
|
||||
This `<html>` tag is inline code.
|
||||
```
|
||||
|
||||
This `<html>` tag is inline code.
|
||||
|
||||
## Block code
|
||||
|
||||
````
|
||||
This
|
||||
|
||||
```
|
||||
<html>
|
||||
```
|
||||
|
||||
tag is block code.
|
||||
````
|
||||
|
||||
This
|
||||
|
||||
```
|
||||
<html>
|
||||
```
|
||||
|
||||
tag is block code.
|
333
exampleSite/content/post/goisforlovers.md
Normal file
@ -0,0 +1,333 @@
|
||||
---
|
||||
date: "2014-04-02"
|
||||
tags: ["go", "templates", "hugo"]
|
||||
title: "(Hu)go Template Primer"
|
||||
toc: true
|
||||
---
|
||||
|
||||
Hugo uses the excellent [Go][] [html/template][gohtmltemplate] library for
|
||||
its template engine. It is an extremely lightweight engine that provides a very
|
||||
small amount of logic. In our experience that it is just the right amount of
|
||||
logic to be able to create a good static website. If you have used other
|
||||
template systems from different languages or frameworks you will find a lot of
|
||||
similarities in Go templates.
|
||||
|
||||
This document is a brief primer on using Go templates. The [Go docs][gohtmltemplate]
|
||||
provide more details.
|
||||
|
||||
## Introduction to Go Templates
|
||||
|
||||
Go templates provide an extremely simple template language. It adheres to the
|
||||
belief that only the most basic of logic belongs in the template or view layer.
|
||||
One consequence of this simplicity is that Go templates parse very quickly.
|
||||
|
||||
A unique characteristic of Go templates is they are content aware. Variables and
|
||||
content will be sanitized depending on the context of where they are used. More
|
||||
details can be found in the [Go docs][gohtmltemplate].
|
||||
|
||||
## Basic Syntax
|
||||
|
||||
Golang templates are HTML files with the addition of variables and
|
||||
functions.
|
||||
|
||||
**Go variables and functions are accessible within {{ }}**
|
||||
|
||||
Accessing a predefined variable "foo":
|
||||
|
||||
{{ foo }}
|
||||
|
||||
**Parameters are separated using spaces**
|
||||
|
||||
Calling the add function with input of 1, 2:
|
||||
|
||||
{{ add 1 2 }}
|
||||
|
||||
**Methods and fields are accessed via dot notation**
|
||||
|
||||
Accessing the Page Parameter "bar"
|
||||
|
||||
{{ .Params.bar }}
|
||||
|
||||
**Parentheses can be used to group items together**
|
||||
|
||||
{{ if or (isset .Params "alt") (isset .Params "caption") }} Caption {{ end }}
|
||||
|
||||
|
||||
## Variables
|
||||
|
||||
Each Go template has a struct (object) made available to it. In hugo each
|
||||
template is passed either a page or a node struct depending on which type of
|
||||
page you are rendering. More details are available on the
|
||||
[variables](/layout/variables) page.
|
||||
|
||||
A variable is accessed by referencing the variable name.
|
||||
|
||||
<title>{{ .Title }}</title>
|
||||
|
||||
Variables can also be defined and referenced.
|
||||
|
||||
{{ $address := "123 Main St."}}
|
||||
{{ $address }}
|
||||
|
||||
|
||||
## Functions
|
||||
|
||||
Go template ship with a few functions which provide basic functionality. The Go
|
||||
template system also provides a mechanism for applications to extend the
|
||||
available functions with their own. [Hugo template
|
||||
functions](/layout/functions) provide some additional functionality we believe
|
||||
are useful for building websites. Functions are called by using their name
|
||||
followed by the required parameters separated by spaces. Template
|
||||
functions cannot be added without recompiling hugo.
|
||||
|
||||
**Example:**
|
||||
|
||||
{{ add 1 2 }}
|
||||
|
||||
## Includes
|
||||
|
||||
When including another template you will pass to it the data it will be
|
||||
able to access. To pass along the current context please remember to
|
||||
include a trailing dot. The templates location will always be starting at
|
||||
the /layout/ directory within Hugo.
|
||||
|
||||
**Example:**
|
||||
|
||||
{{ template "chrome/header.html" . }}
|
||||
|
||||
|
||||
## Logic
|
||||
|
||||
Go templates provide the most basic iteration and conditional logic.
|
||||
|
||||
### Iteration
|
||||
|
||||
Just like in Go, the Go templates make heavy use of range to iterate over
|
||||
a map, array or slice. The following are different examples of how to use
|
||||
range.
|
||||
|
||||
**Example 1: Using Context**
|
||||
|
||||
{{ range array }}
|
||||
{{ . }}
|
||||
{{ end }}
|
||||
|
||||
**Example 2: Declaring value variable name**
|
||||
|
||||
{{range $element := array}}
|
||||
{{ $element }}
|
||||
{{ end }}
|
||||
|
||||
**Example 2: Declaring key and value variable name**
|
||||
|
||||
{{range $index, $element := array}}
|
||||
{{ $index }}
|
||||
{{ $element }}
|
||||
{{ end }}
|
||||
|
||||
### Conditionals
|
||||
|
||||
If, else, with, or, & and provide the framework for handling conditional
|
||||
logic in Go Templates. Like range, each statement is closed with `end`.
|
||||
|
||||
|
||||
Go Templates treat the following values as false:
|
||||
|
||||
* false
|
||||
* 0
|
||||
* any array, slice, map, or string of length zero
|
||||
|
||||
**Example 1: If**
|
||||
|
||||
{{ if isset .Params "title" }}<h4>{{ index .Params "title" }}</h4>{{ end }}
|
||||
|
||||
**Example 2: If -> Else**
|
||||
|
||||
{{ if isset .Params "alt" }}
|
||||
{{ index .Params "alt" }}
|
||||
{{else}}
|
||||
{{ index .Params "caption" }}
|
||||
{{ end }}
|
||||
|
||||
**Example 3: And & Or**
|
||||
|
||||
{{ if and (or (isset .Params "title") (isset .Params "caption")) (isset .Params "attr")}}
|
||||
|
||||
**Example 4: With**
|
||||
|
||||
An alternative way of writing "if" and then referencing the same value
|
||||
is to use "with" instead. With rebinds the context `.` within its scope,
|
||||
and skips the block if the variable is absent.
|
||||
|
||||
The first example above could be simplified as:
|
||||
|
||||
{{ with .Params.title }}<h4>{{ . }}</h4>{{ end }}
|
||||
|
||||
**Example 5: If -> Else If**
|
||||
|
||||
{{ if isset .Params "alt" }}
|
||||
{{ index .Params "alt" }}
|
||||
{{ else if isset .Params "caption" }}
|
||||
{{ index .Params "caption" }}
|
||||
{{ end }}
|
||||
|
||||
## Pipes
|
||||
|
||||
One of the most powerful components of Go templates is the ability to
|
||||
stack actions one after another. This is done by using pipes. Borrowed
|
||||
from unix pipes, the concept is simple, each pipeline's output becomes the
|
||||
input of the following pipe.
|
||||
|
||||
Because of the very simple syntax of Go templates, the pipe is essential
|
||||
to being able to chain together function calls. One limitation of the
|
||||
pipes is that they only can work with a single value and that value
|
||||
becomes the last parameter of the next pipeline.
|
||||
|
||||
A few simple examples should help convey how to use the pipe.
|
||||
|
||||
**Example 1 :**
|
||||
|
||||
{{ if eq 1 1 }} Same {{ end }}
|
||||
|
||||
is the same as
|
||||
|
||||
{{ eq 1 1 | if }} Same {{ end }}
|
||||
|
||||
It does look odd to place the if at the end, but it does provide a good
|
||||
illustration of how to use the pipes.
|
||||
|
||||
**Example 2 :**
|
||||
|
||||
{{ index .Params "disqus_url" | html }}
|
||||
|
||||
Access the page parameter called "disqus_url" and escape the HTML.
|
||||
|
||||
**Example 3 :**
|
||||
|
||||
{{ if or (or (isset .Params "title") (isset .Params "caption")) (isset .Params "attr")}}
|
||||
Stuff Here
|
||||
{{ end }}
|
||||
|
||||
Could be rewritten as
|
||||
|
||||
{{ isset .Params "caption" | or isset .Params "title" | or isset .Params "attr" | if }}
|
||||
Stuff Here
|
||||
{{ end }}
|
||||
|
||||
|
||||
## Context (aka. the dot)
|
||||
|
||||
The most easily overlooked concept to understand about Go templates is that {{ . }}
|
||||
always refers to the current context. In the top level of your template this
|
||||
will be the data set made available to it. Inside of a iteration it will have
|
||||
the value of the current item. When inside of a loop the context has changed. .
|
||||
will no longer refer to the data available to the entire page. If you need to
|
||||
access this from within the loop you will likely want to set it to a variable
|
||||
instead of depending on the context.
|
||||
|
||||
**Example:**
|
||||
|
||||
{{ $title := .Site.Title }}
|
||||
{{ range .Params.tags }}
|
||||
<li> <a href="{{ $baseurl }}/tags/{{ . | urlize }}">{{ . }}</a> - {{ $title }} </li>
|
||||
{{ end }}
|
||||
|
||||
Notice how once we have entered the loop the value of {{ . }} has changed. We
|
||||
have defined a variable outside of the loop so we have access to it from within
|
||||
the loop.
|
||||
|
||||
## Hugo Parameters
|
||||
|
||||
Hugo provides the option of passing values to the template language
|
||||
through the site configuration (for sitewide values), or through the meta
|
||||
data of each specific piece of content. You can define any values of any
|
||||
type (supported by your front matter/config format) and use them however
|
||||
you want to inside of your templates.
|
||||
|
||||
|
||||
## Using Content (page) Parameters
|
||||
|
||||
In each piece of content you can provide variables to be used by the
|
||||
templates. This happens in the [front matter](/content/front-matter).
|
||||
|
||||
An example of this is used in this documentation site. Most of the pages
|
||||
benefit from having the table of contents provided. Sometimes the TOC just
|
||||
doesn't make a lot of sense. We've defined a variable in our front matter
|
||||
of some pages to turn off the TOC from being displayed.
|
||||
|
||||
Here is the example front matter:
|
||||
|
||||
```
|
||||
---
|
||||
title: "Permalinks"
|
||||
date: "2013-11-18"
|
||||
aliases:
|
||||
- "/doc/permalinks/"
|
||||
groups: ["extras"]
|
||||
groups_weight: 30
|
||||
notoc: true
|
||||
---
|
||||
```
|
||||
|
||||
Here is the corresponding code inside of the template:
|
||||
|
||||
{{ if not .Params.notoc }}
|
||||
<div id="toc" class="well col-md-4 col-sm-6">
|
||||
{{ .TableOfContents }}
|
||||
</div>
|
||||
{{ end }}
|
||||
|
||||
|
||||
|
||||
## Using Site (config) Parameters
|
||||
In your top-level configuration file (eg, `config.yaml`) you can define site
|
||||
parameters, which are values which will be available to you in chrome.
|
||||
|
||||
For instance, you might declare:
|
||||
|
||||
```yaml
|
||||
params:
|
||||
CopyrightHTML: "Copyright © 2013 John Doe. All Rights Reserved."
|
||||
TwitterUser: "spf13"
|
||||
SidebarRecentLimit: 5
|
||||
```
|
||||
|
||||
Within a footer layout, you might then declare a `<footer>` which is only
|
||||
provided if the `CopyrightHTML` parameter is provided, and if it is given,
|
||||
you would declare it to be HTML-safe, so that the HTML entity is not escaped
|
||||
again. This would let you easily update just your top-level config file each
|
||||
January 1st, instead of hunting through your templates.
|
||||
|
||||
```
|
||||
{{if .Site.Params.CopyrightHTML}}<footer>
|
||||
<div class="text-center">{{.Site.Params.CopyrightHTML | safeHtml}}</div>
|
||||
</footer>{{end}}
|
||||
```
|
||||
|
||||
An alternative way of writing the "if" and then referencing the same value
|
||||
is to use "with" instead. With rebinds the context `.` within its scope,
|
||||
and skips the block if the variable is absent:
|
||||
|
||||
```
|
||||
{{with .Site.Params.TwitterUser}}<span class="twitter">
|
||||
<a href="https://twitter.com/{{.}}" rel="author">
|
||||
<img src="/images/twitter.png" width="48" height="48" title="Twitter: {{.}}"
|
||||
alt="Twitter"></a>
|
||||
</span>{{end}}
|
||||
```
|
||||
|
||||
Finally, if you want to pull "magic constants" out of your layouts, you can do
|
||||
so, such as in this example:
|
||||
|
||||
```
|
||||
<nav class="recent">
|
||||
<h1>Recent Posts</h1>
|
||||
<ul>{{range first .Site.Params.SidebarRecentLimit .Site.Recent}}
|
||||
<li><a href="{{.RelPermalink}}">{{.Title}}</a></li>
|
||||
{{end}}</ul>
|
||||
</nav>
|
||||
```
|
||||
|
||||
|
||||
[go]: https://golang.org/
|
||||
[gohtmltemplate]: https://golang.org/pkg/html/template/
|
79
exampleSite/content/post/hugoisforlovers.md
Normal file
@ -0,0 +1,79 @@
|
||||
---
|
||||
date: "2014-04-02"
|
||||
tags: ["hugo", "git", "fun"]
|
||||
title: "Getting Started with Hugo"
|
||||
toc: true
|
||||
---
|
||||
|
||||
## Step 1. Install Hugo
|
||||
|
||||
Go to [Hugo releases](https://github.com/spf13/hugo/releases) and download the
|
||||
appropriate version for your OS and architecture.
|
||||
|
||||
Save it somewhere specific as we will be using it in the next step.
|
||||
|
||||
More complete instructions are available at [Install Hugo](https://gohugo.io/getting-started/installing/)
|
||||
|
||||
## Step 2. Build the Docs
|
||||
|
||||
Hugo has its own example site which happens to also be the documentation site
|
||||
you are reading right now.
|
||||
|
||||
Follow the following steps:
|
||||
|
||||
1. Clone the [Hugo repository](http://github.com/spf13/hugo)
|
||||
2. Go into the repo
|
||||
3. Run hugo in server mode and build the docs
|
||||
4. Open your browser to http://localhost:1313
|
||||
|
||||
Corresponding pseudo commands:
|
||||
|
||||
git clone https://github.com/spf13/hugo
|
||||
cd hugo
|
||||
/path/to/where/you/installed/hugo server --source=./docs
|
||||
> 29 pages created
|
||||
> 0 tags index created
|
||||
> in 27 ms
|
||||
> Web Server is available at http://localhost:1313
|
||||
> Press ctrl+c to stop
|
||||
|
||||
Once you've gotten here, follow along the rest of this page on your local build.
|
||||
|
||||
## Step 3. Change the docs site
|
||||
|
||||
Stop the Hugo process by hitting Ctrl+C.
|
||||
|
||||
Now we are going to run hugo again, but this time with hugo in watch mode.
|
||||
|
||||
/path/to/hugo/from/step/1/hugo server --source=./docs --watch
|
||||
> 29 pages created
|
||||
> 0 tags index created
|
||||
> in 27 ms
|
||||
> Web Server is available at http://localhost:1313
|
||||
> Watching for changes in /Users/spf13/Code/hugo/docs/content
|
||||
> Press ctrl+c to stop
|
||||
|
||||
|
||||
Open your [favorite editor](http://vim.spf13.com) and change one of the source
|
||||
content pages. How about changing this very file to *fix the typo*. How about changing this very file to *fix the typo*.
|
||||
|
||||
Content files are found in `docs/content/`. Unless otherwise specified, files
|
||||
are located at the same relative location as the url, in our case
|
||||
`docs/content/overview/quickstart.md`.
|
||||
|
||||
Change and save this file.. Notice what happened in your terminal.
|
||||
|
||||
> Change detected, rebuilding site
|
||||
|
||||
> 29 pages created
|
||||
> 0 tags index created
|
||||
> in 26 ms
|
||||
|
||||
Refresh the browser and observe that the typo is now fixed.
|
||||
|
||||
Notice how quick that was. Try to refresh the site before it's finished building. I double dare you.
|
||||
Having nearly instant feedback enables you to have your creativity flow without waiting for long builds.
|
||||
|
||||
## Step 4. Have fun
|
||||
|
||||
The best way to learn something is to play with it.
|
29
exampleSite/content/post/katex-math-typesetting/index.md
Normal file
@ -0,0 +1,29 @@
|
||||
---
|
||||
title: "Katex Math Typesetting"
|
||||
date: 2019-03-28
|
||||
tags: [katex, math, typesetting, hugo]
|
||||
---
|
||||
|
||||
Enable Katex in the config file by setting the `katex` param to `true`. This will import the necessary Katex CSS/JS.
|
||||
|
||||
**Note:** Use the online reference of [supported TeX functions](https://katex.org/docs/supported.html).
|
||||
|
||||
Some math:
|
||||
|
||||
```
|
||||
$$ \varphi = \dfrac{1+\sqrt5}{2}= 1.6180339887… $$
|
||||
```
|
||||
|
||||
$$ \varphi = \dfrac{1+\sqrt5}{2}= 1.6180339887… $$
|
||||
|
||||
More math:
|
||||
|
||||
```
|
||||
$$
|
||||
\varphi = 1+\frac{1} {1+\frac{1} {1+\frac{1} {1+\cdots} } }
|
||||
$$
|
||||
```
|
||||
|
||||
$$
|
||||
\varphi = 1+\frac{1} {1+\frac{1} {1+\frac{1} {1+\cdots} } }
|
||||
$$
|
160
exampleSite/content/post/migrate-from-jekyll.md
Normal file
@ -0,0 +1,160 @@
|
||||
---
|
||||
date: "2014-03-10"
|
||||
draft: false
|
||||
lastmod: "2014-03-10"
|
||||
publishdate: "2014-03-10"
|
||||
tags:
|
||||
- hugo
|
||||
- jekyll
|
||||
- migration
|
||||
- git
|
||||
- templates
|
||||
title: Migrate to Hugo from Jekyll
|
||||
toc: true
|
||||
---
|
||||
|
||||
## Move static content to `static`
|
||||
Jekyll has a rule that any directory not starting with `_` will be copied as-is to the `_site` output. Hugo keeps all static content under `static`. You should therefore move it all there.
|
||||
With Jekyll, something that looked like
|
||||
|
||||
▾ <root>/
|
||||
▾ images/
|
||||
logo.png
|
||||
|
||||
should become
|
||||
|
||||
▾ <root>/
|
||||
▾ static/
|
||||
▾ images/
|
||||
logo.png
|
||||
|
||||
Additionally, you'll want any files that should reside at the root (such as `CNAME`) to be moved to `static`.
|
||||
|
||||
## Create your Hugo configuration file
|
||||
Hugo can read your configuration as JSON, YAML or TOML. Hugo supports parameters custom configuration too. Refer to the [Hugo configuration documentation](/overview/configuration/) for details.
|
||||
|
||||
## Set your configuration publish folder to `_site`
|
||||
The default is for Jekyll to publish to `_site` and for Hugo to publish to `public`. If, like me, you have [`_site` mapped to a git submodule on the `gh-pages` branch](http://blog.blindgaenger.net/generate_github_pages_in_a_submodule.html), you'll want to do one of two alternatives:
|
||||
|
||||
1. Change your submodule to point to map `gh-pages` to public instead of `_site` (recommended).
|
||||
|
||||
git submodule deinit _site
|
||||
git rm _site
|
||||
git submodule add -b gh-pages git@github.com:your-username/your-repo.git public
|
||||
|
||||
2. Or, change the Hugo configuration to use `_site` instead of `public`.
|
||||
|
||||
{
|
||||
..
|
||||
"publishdir": "_site",
|
||||
..
|
||||
}
|
||||
|
||||
## Convert Jekyll templates to Hugo templates
|
||||
That's the bulk of the work right here. The documentation is your friend. You should refer to [Jekyll's template documentation](http://jekyllrb.com/docs/templates/) if you need to refresh your memory on how you built your blog and [Hugo's template](/layout/templates/) to learn Hugo's way.
|
||||
|
||||
As a single reference data point, converting my templates for [heyitsalex.net](http://heyitsalex.net/) took me no more than a few hours.
|
||||
|
||||
## Convert Jekyll plugins to Hugo shortcodes
|
||||
Jekyll has [plugins](http://jekyllrb.com/docs/plugins/); Hugo has [shortcodes](/doc/shortcodes/). It's fairly trivial to do a port.
|
||||
|
||||
### Implementation
|
||||
As an example, I was using a custom [`image_tag`](https://github.com/alexandre-normand/alexandre-normand/blob/74bb12036a71334fdb7dba84e073382fc06908ec/_plugins/image_tag.rb) plugin to generate figures with caption when running Jekyll. As I read about shortcodes, I found Hugo had a nice built-in shortcode that does exactly the same thing.
|
||||
|
||||
Jekyll's plugin:
|
||||
|
||||
module Jekyll
|
||||
class ImageTag < Liquid::Tag
|
||||
@url = nil
|
||||
@caption = nil
|
||||
@class = nil
|
||||
@link = nil
|
||||
// Patterns
|
||||
IMAGE_URL_WITH_CLASS_AND_CAPTION =
|
||||
IMAGE_URL_WITH_CLASS_AND_CAPTION_AND_LINK = /(\w+)(\s+)((https?:\/\/|\/)(\S+))(\s+)"(.*?)"(\s+)->((https?:\/\/|\/)(\S+))(\s*)/i
|
||||
IMAGE_URL_WITH_CAPTION = /((https?:\/\/|\/)(\S+))(\s+)"(.*?)"/i
|
||||
IMAGE_URL_WITH_CLASS = /(\w+)(\s+)((https?:\/\/|\/)(\S+))/i
|
||||
IMAGE_URL = /((https?:\/\/|\/)(\S+))/i
|
||||
def initialize(tag_name, markup, tokens)
|
||||
super
|
||||
if markup =~ IMAGE_URL_WITH_CLASS_AND_CAPTION_AND_LINK
|
||||
@class = $1
|
||||
@url = $3
|
||||
@caption = $7
|
||||
@link = $9
|
||||
elsif markup =~ IMAGE_URL_WITH_CLASS_AND_CAPTION
|
||||
@class = $1
|
||||
@url = $3
|
||||
@caption = $7
|
||||
elsif markup =~ IMAGE_URL_WITH_CAPTION
|
||||
@url = $1
|
||||
@caption = $5
|
||||
elsif markup =~ IMAGE_URL_WITH_CLASS
|
||||
@class = $1
|
||||
@url = $3
|
||||
elsif markup =~ IMAGE_URL
|
||||
@url = $1
|
||||
end
|
||||
end
|
||||
def render(context)
|
||||
if @class
|
||||
source = "<figure class='#{@class}'>"
|
||||
else
|
||||
source = "<figure>"
|
||||
end
|
||||
if @link
|
||||
source += "<a href=\"#{@link}\">"
|
||||
end
|
||||
source += "<img src=\"#{@url}\">"
|
||||
if @link
|
||||
source += "</a>"
|
||||
end
|
||||
source += "<figcaption>#{@caption}</figcaption>" if @caption
|
||||
source += "</figure>"
|
||||
source
|
||||
end
|
||||
end
|
||||
end
|
||||
Liquid::Template.register_tag('image', Jekyll::ImageTag)
|
||||
|
||||
is written as this Hugo shortcode:
|
||||
|
||||
<!-- image -->
|
||||
<figure {{ with .Get "class" }}class="{{.}}"{{ end }}>
|
||||
{{ with .Get "link"}}<a href="{{.}}">{{ end }}
|
||||
<img src="{{ .Get "src" }}" {{ if or (.Get "alt") (.Get "caption") }}alt="{{ with .Get "alt"}}{{.}}{{else}}{{ .Get "caption" }}{{ end }}"{{ end }} />
|
||||
{{ if .Get "link"}}</a>{{ end }}
|
||||
{{ if or (or (.Get "title") (.Get "caption")) (.Get "attr")}}
|
||||
<figcaption>{{ if isset .Params "title" }}
|
||||
{{ .Get "title" }}{{ end }}
|
||||
{{ if or (.Get "caption") (.Get "attr")}}<p>
|
||||
{{ .Get "caption" }}
|
||||
{{ with .Get "attrlink"}}<a href="{{.}}"> {{ end }}
|
||||
{{ .Get "attr" }}
|
||||
{{ if .Get "attrlink"}}</a> {{ end }}
|
||||
</p> {{ end }}
|
||||
</figcaption>
|
||||
{{ end }}
|
||||
</figure>
|
||||
<!-- image -->
|
||||
|
||||
### Usage
|
||||
I simply changed:
|
||||
|
||||
{% image full http://farm5.staticflickr.com/4136/4829260124_57712e570a_o_d.jpg "One of my favorite touristy-type photos. I secretly waited for the good light while we were "having fun" and took this. Only regret: a stupid pole in the top-left corner of the frame I had to clumsily get rid of at post-processing." ->http://www.flickr.com/photos/alexnormand/4829260124/in/set-72157624547713078/ %}
|
||||
|
||||
to this (this example uses a slightly extended version named `fig`, different than the built-in `figure`):
|
||||
|
||||
{{</* fig class="full" src="http://farm5.staticflickr.com/4136/4829260124_57712e570a_o_d.jpg" title="One of my favorite touristy-type photos. I secretly waited for the good light while we were having fun and took this. Only regret: a stupid pole in the top-left corner of the frame I had to clumsily get rid of at post-processing." link="http://www.flickr.com/photos/alexnormand/4829260124/in/set-72157624547713078/" */>}}
|
||||
|
||||
As a bonus, the shortcode named parameters are, arguably, more readable.
|
||||
|
||||
## Finishing touches
|
||||
### Fix content
|
||||
Depending on the amount of customization that was done with each post with Jekyll, this step will require more or less effort. There are no hard and fast rules here except that `hugo server --watch` is your friend. Test your changes and fix errors as needed.
|
||||
|
||||
### Clean up
|
||||
You'll want to remove the Jekyll configuration at this point. If you have anything else that isn't used, delete it.
|
||||
|
||||
## A practical example in a diff
|
||||
[Hey, it's Alex](http://heyitsalex.net/) was migrated in less than a _father-with-kids day_ from Jekyll to Hugo. You can see all the changes (and screw-ups) by looking at this [diff](https://github.com/alexandre-normand/alexandre-normand/compare/869d69435bd2665c3fbf5b5c78d4c22759d7613a...b7f6605b1265e83b4b81495423294208cc74d610).
|
19
exampleSite/content/post/multiple-expandable-test.md
Normal file
@ -0,0 +1,19 @@
|
||||
---
|
||||
title: "Multiple Expandable Test"
|
||||
date: 2020-06-17T22:01:14-05:00
|
||||
tags: [issue]
|
||||
---
|
||||
|
||||
Testing out GitHub issue https://github.com/zwbetz-gh/cupper-hugo-theme/issues/36 -- Multiple expandable shortcodes do not work if they have the same inner text.
|
||||
|
||||
{{< expandable label="expandable 1" level="2" >}}
|
||||
Same inner text.
|
||||
{{< /expandable >}}
|
||||
|
||||
{{< expandable label="expandable 2" level="2" >}}
|
||||
Same inner text.
|
||||
{{< /expandable >}}
|
||||
|
||||
{{< expandable label="expandable 3" level="2" >}}
|
||||
Different inner text.
|
||||
{{< /expandable >}}
|
BIN
exampleSite/content/post/nasa-images/earth.jpg
Normal file
After Width: | Height: | Size: 506 KiB |
25
exampleSite/content/post/nasa-images/index.md
Normal file
@ -0,0 +1,25 @@
|
||||
---
|
||||
title: "NASA Images"
|
||||
date: 2018-12-27T20:46:49-06:00
|
||||
tags: ["nasa"]
|
||||
---
|
||||
|
||||
The below images are from the [NASA Image and Video Library](https://images.nasa.gov/) -- indulge yourself, revel in their beauty.
|
||||
|
||||
{{< figureCupper
|
||||
img="sun.jpg"
|
||||
caption="The Sun is the star at the center of the Solar System. It is a nearly perfect sphere of hot plasma, with internal convective motion that generates a magnetic field via a dynamo process. It is by far the most important source of energy for life on Earth. [Credits](https://images.nasa.gov/details-GSFC_20171208_Archive_e000393.html)."
|
||||
command="Resize"
|
||||
options="700x" >}}
|
||||
|
||||
{{< figureCupper
|
||||
img="moon.jpg"
|
||||
caption="The Moon is an astronomical body that orbits planet Earth and is Earth's only permanent natural satellite. It is the fifth-largest natural satellite in the Solar System, and the largest among planetary satellites relative to the size of the planet that it orbits (its primary). The Moon is after Jupiter's satellite Io the second-densest satellite in the Solar System among those whose densities are known. [Credits](https://images.nasa.gov/details-GSFC_20171208_Archive_e001861.html)."
|
||||
command="Resize"
|
||||
options="700x" >}}
|
||||
|
||||
{{< figureCupper
|
||||
img="earth.jpg"
|
||||
caption="Earth is the third planet from the Sun and the only astronomical object known to harbor life. According to radiometric dating and other sources of evidence, Earth formed over 4.5 billion years ago. Earth's gravity interacts with other objects in space, especially the Sun and the Moon, Earth's only natural satellite. Earth revolves around the Sun in 365.26 days, a period known as an Earth year. During this time, Earth rotates about its axis about 366.26 times. [Credits](https://images.nasa.gov/details-PIA18033.html)."
|
||||
command="Resize"
|
||||
options="700x" >}}
|
BIN
exampleSite/content/post/nasa-images/moon.jpg
Normal file
After Width: | Height: | Size: 372 KiB |
BIN
exampleSite/content/post/nasa-images/sun.jpg
Normal file
After Width: | Height: | Size: 3.0 MiB |
49
exampleSite/content/post/quotes-by-carl-jung.md
Normal file
@ -0,0 +1,49 @@
|
||||
---
|
||||
title: "Quotes by Carl Jung"
|
||||
date: 2018-12-26T00:29:41-06:00
|
||||
tags: ["quotes"]
|
||||
---
|
||||
|
||||
{{< blockquote author="Carl Jung" >}}
|
||||
Even a happy life cannot be without a measure of darkness, and the word happy would lose its meaning if it were not balanced by sadness. It is far better to take things as they come along with patience and equanimity.
|
||||
{{< /blockquote >}}
|
||||
|
||||
{{< blockquote author="Carl Jung" >}}
|
||||
The least of things with a meaning is worth more in life than the greatest of things without it.
|
||||
{{< /blockquote >}}
|
||||
|
||||
{{< blockquote author="Carl Jung" >}}
|
||||
Who looks outside, dreams; who looks inside, awakes.
|
||||
{{< /blockquote >}}
|
||||
|
||||
{{< blockquote author="Carl Jung" >}}
|
||||
Everything that irritates us about others can lead us to an understanding of ourselves.
|
||||
{{< /blockquote >}}
|
||||
|
||||
{{< blockquote author="Carl Jung" >}}
|
||||
Knowing your own darkness is the best method for dealing with the darknesses of other people.
|
||||
{{< /blockquote >}}
|
||||
|
||||
{{< blockquote author="Carl Jung" >}}
|
||||
The meeting of two personalities is like the contact of two chemical substances: if there is any reaction, both are transformed.
|
||||
{{< /blockquote >}}
|
||||
|
||||
{{< blockquote author="Carl Jung" >}}
|
||||
There is no coming to consciousness without pain.
|
||||
{{< /blockquote >}}
|
||||
|
||||
{{< blockquote author="Carl Jung" >}}
|
||||
As far as we can discern, the sole purpose of human existence is to kindle a light of meaning in the darkness of mere being.
|
||||
{{< /blockquote >}}
|
||||
|
||||
{{< blockquote author="Carl Jung" >}}
|
||||
We cannot change anything until we accept it. Condemnation does not liberate, it oppresses.
|
||||
{{< /blockquote >}}
|
||||
|
||||
{{< blockquote author="Carl Jung" >}}
|
||||
In all chaos there is a cosmos, in all disorder a secret order.
|
||||
{{< /blockquote >}}
|
||||
|
||||
{{< blockquote author="Carl Jung" >}}
|
||||
Show me a sane man and I will cure him for you.
|
||||
{{< /blockquote >}}
|
9
exampleSite/content/post/special-character-test.md
Normal file
@ -0,0 +1,9 @@
|
||||
---
|
||||
title: "Special Character Test"
|
||||
date: 2019-09-10T20:26:08-05:00
|
||||
tags: [issue]
|
||||
---
|
||||
|
||||
Testing out GitHub issue https://github.com/zwbetz-gh/cupper-hugo-theme/issues/16
|
||||
|
||||
Cette phrase prononcée par Greta Thunberg
|
3
exampleSite/static/css/custom_01.css
Normal file
@ -0,0 +1,3 @@
|
||||
.your-custom-class-01 {
|
||||
display: block;
|
||||
}
|
3
exampleSite/static/css/custom_02.css
Normal file
@ -0,0 +1,3 @@
|
||||
.your-custom-class-02 {
|
||||
display: block;
|
||||
}
|
3
exampleSite/static/js/custom_01.js
Normal file
@ -0,0 +1,3 @@
|
||||
const yourCustomFunction01 = (message) => {
|
||||
console.log(message);
|
||||
};
|
3
exampleSite/static/js/custom_02.js
Normal file
@ -0,0 +1,3 @@
|
||||
const yourCustomFunction02 = (message) => {
|
||||
console.log(message);
|
||||
};
|
28
i18n/en.yaml
Normal file
@ -0,0 +1,28 @@
|
||||
- id: skip_to_content
|
||||
translation: skip to content
|
||||
- id: nav_main_navigation
|
||||
translation: Main navigation
|
||||
- id: nav_button_menu
|
||||
translation: Menu
|
||||
- id: discuss_show_comments_button
|
||||
translation: Show comments
|
||||
- id: discuss_comments_disabled
|
||||
translation: Disqus comments are disabled.
|
||||
- id: discuss_js_disabled
|
||||
translation: Enable JavaScript to view Disqus comments.
|
||||
- id: dark_theme
|
||||
translation: "dark theme:"
|
||||
- id: table_of_contents
|
||||
translation: Table of Contents
|
||||
- id: publish_date
|
||||
translation: "Publish date:"
|
||||
- id: last_updated
|
||||
translation: "Last updated:"
|
||||
- id: tags
|
||||
translation: "Tags:"
|
||||
- id: aria_label_tags
|
||||
translation: tags
|
||||
- id: search_placeholder
|
||||
translation: Search by title...
|
||||
- id: search_aria_label
|
||||
translation: Search by title
|
BIN
images/screenshot.png
Normal file
After Width: | Height: | Size: 134 KiB |
BIN
images/tn.png
Normal file
After Width: | Height: | Size: 65 KiB |
0
layouts/404.html
Normal file
23
layouts/_default/baseof.html
Normal file
@ -0,0 +1,23 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="{{ .Site.Language.Lang }}">
|
||||
{{ partial "head.html" . }}
|
||||
<body>
|
||||
<a href="#main">{{ T "skip_to_content" }}</a>
|
||||
{{ partial "noscript.html" . }}
|
||||
{{ partial "svg.html" . }}
|
||||
<div class="wrapper">
|
||||
{{ partial "header.html" . }}
|
||||
<div class="main-and-footer">
|
||||
<div>
|
||||
{{ block "main" . }}{{ end }}
|
||||
{{ if ne .Site.Params.moveFooterToHeader true }}
|
||||
{{ partial "footer.html" . }}
|
||||
{{ end }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{ partial "script.html" . }}
|
||||
{{ partial "katex.html" . }}
|
||||
{{ partial "google-analytics-async.html" . }}
|
||||
</body>
|
||||
</html>
|
32
layouts/_default/list.html
Normal file
@ -0,0 +1,32 @@
|
||||
{{ define "main" }}
|
||||
<main id="main">
|
||||
<h1>{{ .Title }}</h1>
|
||||
{{ if site.Params.search }}
|
||||
<input
|
||||
id="search"
|
||||
type="text"
|
||||
placeholder="{{ T "search_placeholder" }}"
|
||||
aria-label="{{ T "search_aria_label" }}"
|
||||
/>
|
||||
{{ end }}
|
||||
<ul class="patterns-list" id="list">
|
||||
{{ range .Pages.ByPublishDate.Reverse }}
|
||||
<li>
|
||||
<h2>
|
||||
<a href="{{ .RelPermalink }}">
|
||||
<svg
|
||||
class="bookmark"
|
||||
aria-hidden="true"
|
||||
viewBox="0 0 40 50"
|
||||
focusable="false"
|
||||
>
|
||||
<use xlink:href="#bookmark"></use>
|
||||
</svg>
|
||||
{{ .Title }}
|
||||
</a>
|
||||
</h2>
|
||||
</li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
</main>
|
||||
{{ end }}
|
6
layouts/_default/single.html
Normal file
@ -0,0 +1,6 @@
|
||||
{{ define "main" }}
|
||||
<main id="main">
|
||||
<h1>{{ .Title }}</h1>
|
||||
{{ .Content }}
|
||||
</main>
|
||||
{{ end }}
|
19
layouts/_default/terms.html
Normal file
@ -0,0 +1,19 @@
|
||||
{{ define "main" }}
|
||||
<main id="main">
|
||||
<h1>{{ .Title }}</h1>
|
||||
<ul class="patterns-list">
|
||||
{{ range .Data.Terms.Alphabetical }}
|
||||
<li>
|
||||
<h2>
|
||||
<a href="{{ .Page.RelPermalink }}">
|
||||
<svg class="tag-icon" aria-hidden="true" viewBox="0 0 177.16535 177.16535" focusable="false">
|
||||
<use xlink:href="#tag"></use>
|
||||
</svg>
|
||||
{{ printf "(%d) %s" .Count .Page.Title }}
|
||||
</a>
|
||||
</h2>
|
||||
</li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
</main>
|
||||
{{ end }}
|
6
layouts/index.html
Normal file
@ -0,0 +1,6 @@
|
||||
{{ define "main" }}
|
||||
<main id="main">
|
||||
<h1>{{ .Title }}</h1>
|
||||
{{ .Content }}
|
||||
</main>
|
||||
{{ end }}
|
6
layouts/partials/disqus-js-common.js
Normal file
@ -0,0 +1,6 @@
|
||||
// Remove button
|
||||
var disqusButton = document.getElementById('disqus-button');
|
||||
disqusButton.parentNode.removeChild(disqusButton);
|
||||
// Un-hide comments
|
||||
var disqusComments = document.getElementById('disqus-comments');
|
||||
disqusComments.style.display = 'block';
|
10
layouts/partials/disqus-js-main.js
Normal file
@ -0,0 +1,10 @@
|
||||
// Config
|
||||
var disqus_config = function () {
|
||||
};
|
||||
// Build and append comments
|
||||
var d = document;
|
||||
var s = d.createElement('script');
|
||||
s.async = true;
|
||||
s.src = '//' + "{{ . }}" + '.disqus.com/embed.js';
|
||||
s.setAttribute('data-timestamp', + new Date());
|
||||
(d.head || d.body).appendChild(s);
|
27
layouts/partials/disqus.html
Normal file
@ -0,0 +1,27 @@
|
||||
<div id="disqus-container">
|
||||
{{ with .Site.DisqusShortname }}
|
||||
<button id="disqus-button" onclick="showComments()">{{ T "discuss_show_comments_button" }}</button>
|
||||
<div id="disqus-comments">
|
||||
{{ $isDummyName := eq . "yourdiscussshortname" }}
|
||||
{{ $isServer := $.Site.IsServer }}
|
||||
{{ if or $isDummyName $isServer }}
|
||||
<p><em>{{ T "discuss_comments_disabled" }}</em></p>
|
||||
<script type="application/javascript">
|
||||
function showComments() {
|
||||
{{ partial "disqus-js-common.js" . | safeJS }}
|
||||
}
|
||||
</script>
|
||||
{{ else }}
|
||||
<div id="disqus_thread">
|
||||
</div>
|
||||
<script type="application/javascript">
|
||||
function showComments() {
|
||||
{{ partial "disqus-js-main.js" . | safeJS }}
|
||||
{{ partial "disqus-js-common.js" . | safeJS }}
|
||||
}
|
||||
</script>
|
||||
{{ end }}
|
||||
<noscript>{{ T "discuss_js_disabled" }}</noscript>
|
||||
</div>
|
||||
{{ end }}
|
||||
</div>
|
14
layouts/partials/footer.html
Normal file
@ -0,0 +1,14 @@
|
||||
<footer role="contentinfo">
|
||||
<div
|
||||
{{ if eq .Site.Params.showThemeSwitcher false }}style="display: none;"{{ end }}
|
||||
>
|
||||
<label for="themer">
|
||||
{{ T "dark_theme" }} <input type="checkbox" id="themer" class="vh">
|
||||
<!-- Shows "on" or "off" -->
|
||||
<span aria-hidden="true"></span>
|
||||
</label>
|
||||
</div>
|
||||
{{ with .Site.Params.footer }}
|
||||
{{ . | markdownify }}
|
||||
{{ end }}
|
||||
</footer>
|
10
layouts/partials/google-analytics-async.html
Normal file
@ -0,0 +1,10 @@
|
||||
{{ if not .Site.IsServer }}
|
||||
{{ with .Site.GoogleAnalytics }}
|
||||
<script>
|
||||
window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;
|
||||
ga('create', '{{ . }}', 'auto');
|
||||
ga('send', 'pageview');
|
||||
</script>
|
||||
<script async src='https://www.google-analytics.com/analytics.js'></script>
|
||||
{{ end }}
|
||||
{{ end }}
|
67
layouts/partials/head.html
Normal file
@ -0,0 +1,67 @@
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
|
||||
{{ hugo.Generator }}
|
||||
<link rel="canonical" href="{{ .Permalink }}" />
|
||||
|
||||
{{ if .IsHome }}
|
||||
{{ with .Site.Params.homeMetaContent }}
|
||||
<meta name="description" content="{{ . | plainify }}">
|
||||
{{ end }}
|
||||
{{ else }}
|
||||
{{ $summary := trim (.Summary | plainify | htmlUnescape) "\n\r"
|
||||
| default .Title }}
|
||||
<meta name="description" content="{{ $summary }}">
|
||||
{{ end }}
|
||||
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="{{ "apple-touch-icon.png" | absURL }}">
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="{{ "favicon-32x32.png" | absURL }}">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="{{ "favicon-16x16.png" | absURL }}">
|
||||
<link rel="manifest" href="{{ "site.webmanifest" | absURL }}">
|
||||
<link rel="mask-icon" href="{{ "safari-pinned-tab.svg" | absURL }}" color="#000000">
|
||||
<meta name="msapplication-TileColor" content="#ffffff">
|
||||
<meta name="theme-color" content="#ffffff">
|
||||
|
||||
<style>
|
||||
body {
|
||||
visibility: hidden;
|
||||
opacity: 0;
|
||||
}
|
||||
</style>
|
||||
|
||||
<style id="darkTheme">
|
||||
.intro-and-nav,
|
||||
.main-and-footer {
|
||||
filter: invert(100%);
|
||||
}
|
||||
|
||||
* {
|
||||
background-color: inherit
|
||||
}
|
||||
|
||||
img:not([src*=".svg"]),
|
||||
.colors,
|
||||
iframe,
|
||||
.demo-container {
|
||||
filter: invert(100%);
|
||||
}
|
||||
</style>
|
||||
|
||||
<link rel="stylesheet" href="{{ "css/prism.css" | relURL }}" media="none" onload="this.media='all';">
|
||||
|
||||
{{ $templateStyles := resources.Get "css/template-styles.css" }}
|
||||
{{ $styles := $templateStyles | resources.ExecuteAsTemplate "css/styles.css" . }}
|
||||
<link rel="stylesheet" type="text/css" href="{{ $styles.RelPermalink }}">
|
||||
|
||||
{{ range .Site.Params.customCss }}
|
||||
<link rel="stylesheet" href="{{ . | relURL }}">
|
||||
{{ end }}
|
||||
|
||||
{{ $title := print .Title " | " .Site.Title }}
|
||||
{{ if .IsHome }}
|
||||
{{ $title = .Site.Title }}
|
||||
{{ end }}
|
||||
<title>{{ $title }}</title>
|
||||
</head>
|
27
layouts/partials/header.html
Normal file
@ -0,0 +1,27 @@
|
||||
<header class="intro-and-nav" role="banner">
|
||||
<div>
|
||||
<div class="intro">
|
||||
<a
|
||||
class="logo"
|
||||
href="{{ .Site.BaseURL }}"
|
||||
aria-label="{{ .Site.Title }} home page"
|
||||
>
|
||||
{{ with .Site.Params.navTitleText }}
|
||||
<h1>{{ . }}</h1>
|
||||
{{ else }}
|
||||
<img
|
||||
src="{{ "images/logo.svg" | relURL }}"
|
||||
alt="{{ .Site.Params.logoAlt | default "Logo" }}"
|
||||
>
|
||||
{{ end }}
|
||||
</a>
|
||||
<p class="library-desc">
|
||||
{{ with .Site.Params.description }} {{ . | markdownify }} {{ end }}
|
||||
</p>
|
||||
</div>
|
||||
{{ partial "nav.html" . }}
|
||||
{{ if eq .Site.Params.moveFooterToHeader true }}
|
||||
{{ partial "footer.html" . }}
|
||||
{{ end }}
|
||||
</div>
|
||||
</header>
|
5
layouts/partials/katex.html
Normal file
@ -0,0 +1,5 @@
|
||||
{{ if eq $.Site.Params.katex true }}
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.10.1/dist/katex.min.css" integrity="sha384-dbVIfZGuN1Yq7/1Ocstc1lUEm+AT+/rCkibIcC/OmWo5f0EA48Vf8CytHzGrSwbQ" crossorigin="anonymous">
|
||||
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.10.1/dist/katex.min.js" integrity="sha384-2BKqo+exmr9su6dir+qCw08N2ZKRucY4PrGQPPWU1A7FtlCGjmEGFqXCv5nyM5Ij" crossorigin="anonymous"></script>
|
||||
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.10.1/dist/contrib/auto-render.min.js" integrity="sha384-kWPLUVMOks5AQFrykwIup5lo0m3iMkkHrD0uJ4H5cjeGihAutqP0yW0J6dpFiVkI" crossorigin="anonymous" onload="renderMathInElement(document.body);"></script>
|
||||
{{ end }}
|
26
layouts/partials/nav.html
Normal file
@ -0,0 +1,26 @@
|
||||
<nav id="patterns-nav" class="patterns" role="navigation">
|
||||
<h2 class="vh">{{ T "nav_main_navigation" }}</h2>
|
||||
<button id="menu-button" aria-expanded="false">
|
||||
<svg viewBox="0 0 50 50" aria-hidden="true" focusable="false">
|
||||
<use xlink:href="#menu"></use>
|
||||
</svg>
|
||||
{{ T "nav_button_menu" }}
|
||||
</button>
|
||||
{{ $current := . }}
|
||||
<ul id="patterns-list">
|
||||
{{ range .Site.Menus.nav }}
|
||||
<li class="pattern">
|
||||
{{ $active := or ($current.IsMenuCurrent "nav" .) ($current.HasMenuCurrent "nav" .) }}
|
||||
{{ $active = or $active (eq .Name $current.Title) }}
|
||||
{{ $active = or $active (and (eq .Name "Blog") (eq $current.Section "post")) }}
|
||||
{{ $active = or $active (and (eq .Name "Tags") (eq $current.Section "tags")) }}
|
||||
<a href="{{ .URL }}" {{ if $active }}aria-current="page"{{ end }}>
|
||||
<svg class="bookmark-icon" aria-hidden="true" focusable="false" viewBox="0 0 40 50">
|
||||
<use xlink:href="#bookmark"></use>
|
||||
</svg>
|
||||
<span class="text">{{ .Name }}</span>
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
</nav>
|
8
layouts/partials/noscript.html
Normal file
@ -0,0 +1,8 @@
|
||||
<noscript>
|
||||
<style>
|
||||
body {
|
||||
visibility: visible;
|
||||
opacity: 1;
|
||||
}
|
||||
</style>
|
||||
</noscript>
|
16
layouts/partials/script.html
Normal file
@ -0,0 +1,16 @@
|
||||
{{ $templateDomScripts := resources.Get "js/template-dom-scripts.js" }}
|
||||
{{ $domScripts := $templateDomScripts | resources.ExecuteAsTemplate "js/dom-scripts.js" . }}
|
||||
<script src="{{ $domScripts.RelPermalink }}"></script>
|
||||
|
||||
<script src="{{ "js/prism.js" | relURL }}"></script>
|
||||
|
||||
{{ if site.Params.search }}
|
||||
{{ $searchJs := resources.Get "js/search.js" | fingerprint }}
|
||||
<script src="{{ $searchJs.RelPermalink }}"></script>
|
||||
{{ $searchCss := resources.Get "css/search.css" | fingerprint }}
|
||||
<link rel="stylesheet" href="{{ $searchCss.RelPermalink }}"></link>
|
||||
{{ end }}
|
||||
|
||||
{{ range .Site.Params.customJs }}
|
||||
<script src="{{ . | relURL }}"></script>
|
||||
{{ end }}
|
88
layouts/partials/svg.html
Normal file
@ -0,0 +1,88 @@
|
||||
<svg style="display: none">
|
||||
<symbol id="bookmark" viewBox="0 0 40 50">
|
||||
<g transform="translate(2266 3206.2)">
|
||||
<path style="stroke:currentColor;stroke-width:3.2637;fill:none" d="m-2262.2-3203.4-.2331 42.195 16.319-16.318 16.318 16.318.2331-42.428z"/>
|
||||
</g>
|
||||
</symbol>
|
||||
|
||||
<symbol id="w3c" viewBox="0 0 127.09899 67.763">
|
||||
<text font-size="83" style="font-size:83px;font-family:Trebuchet;letter-spacing:-12;fill-opacity:0" letter-spacing="-12" y="67.609352" x="-26.782778">W3C</text>
|
||||
<text font-size="83" style="font-size:83px;font-weight:bold;font-family:Trebuchet;fill-opacity:0" y="67.609352" x="153.21722" font-weight="bold">SVG</text>
|
||||
<path style="fill:currentColor;image-rendering:optimizeQuality;shape-rendering:geometricPrecision" d="m33.695.377 12.062 41.016 12.067-41.016h8.731l-19.968 67.386h-.831l-12.48-41.759-12.479 41.759h-.832l-19.965-67.386h8.736l12.061 41.016 8.154-27.618-3.993-13.397h8.737z"/>
|
||||
<path style="fill:currentColor;image-rendering:optimizeQuality;shape-rendering:geometricPrecision" d="m91.355 46.132c0 6.104-1.624 11.234-4.862 15.394-3.248 4.158-7.45 6.237-12.607 6.237-3.882 0-7.263-1.238-10.148-3.702-2.885-2.47-5.02-5.812-6.406-10.022l6.82-2.829c1.001 2.552 2.317 4.562 3.953 6.028 1.636 1.469 3.56 2.207 5.781 2.207 2.329 0 4.3-1.306 5.909-3.911 1.609-2.606 2.411-5.738 2.411-9.401 0-4.049-.861-7.179-2.582-9.399-1.995-2.604-5.129-3.912-9.397-3.912h-3.327v-3.991l11.646-20.133h-14.062l-3.911 6.655h-2.493v-14.976h32.441v4.075l-12.31 21.217c4.324 1.385 7.596 3.911 9.815 7.571 2.22 3.659 3.329 7.953 3.329 12.892z"/>
|
||||
<path style="fill:currentColor;image-rendering:optimizeQuality;shape-rendering:geometricPrecision" d="m125.21 0 1.414 8.6-5.008 9.583s-1.924-4.064-5.117-6.314c-2.693-1.899-4.447-2.309-7.186-1.746-3.527.73-7.516 4.938-9.258 10.13-2.084 6.21-2.104 9.218-2.178 11.978-.115 4.428.58 7.043.58 7.043s-3.04-5.626-3.011-13.866c.018-5.882.947-11.218 3.666-16.479 2.404-4.627 5.954-7.404 9.114-7.728 3.264-.343 5.848 1.229 7.841 2.938 2.089 1.788 4.213 5.698 4.213 5.698l4.94-9.837z"/>
|
||||
<path style="fill:currentColor;image-rendering:optimizeQuality;shape-rendering:geometricPrecision" d="m125.82 48.674s-2.208 3.957-3.589 5.48c-1.379 1.524-3.849 4.209-6.896 5.555-3.049 1.343-4.646 1.598-7.661 1.306-3.01-.29-5.807-2.032-6.786-2.764-.979-.722-3.486-2.864-4.897-4.854-1.42-2-3.634-5.995-3.634-5.995s1.233 4.001 2.007 5.699c.442.977 1.81 3.965 3.749 6.572 1.805 2.425 5.315 6.604 10.652 7.545 5.336.945 9.002-1.449 9.907-2.031.907-.578 2.819-2.178 4.032-3.475 1.264-1.351 2.459-3.079 3.116-4.108.487-.758 1.276-2.286 1.276-2.286l-1.276-6.644z"/>
|
||||
</symbol>
|
||||
|
||||
<symbol id="tag" viewBox="0 0 177.16535 177.16535">
|
||||
<g transform="translate(0 -875.2)">
|
||||
<path style="fill-rule:evenodd;stroke-width:0;fill:currentColor" d="m159.9 894.3-68.79 8.5872-75.42 77.336 61.931 60.397 75.429-76.565 6.8495-69.755zm-31.412 31.835a10.813 10.813 0 0 1 1.8443 2.247 10.813 10.813 0 0 1 -3.5174 14.872l-.0445.0275a10.813 10.813 0 0 1 -14.86 -3.5714 10.813 10.813 0 0 1 3.5563 -14.863 10.813 10.813 0 0 1 13.022 1.2884z"/>
|
||||
</g>
|
||||
</symbol>
|
||||
|
||||
<symbol id="balloon" viewBox="0 0 141.73228 177.16535">
|
||||
<g transform="translate(0 -875.2)">
|
||||
<g>
|
||||
<path style="fill:currentColor" d="m68.156 882.83-.88753 1.4269c-4.9564 7.9666-6.3764 17.321-5.6731 37.378.36584 10.437 1.1246 23.51 1.6874 29.062.38895 3.8372 3.8278 32.454 4.6105 38.459 4.6694-.24176 9.2946.2879 14.377 1.481 1.2359-3.2937 5.2496-13.088 8.886-21.623 6.249-14.668 8.4128-21.264 10.253-31.252 1.2464-6.7626 1.6341-12.156 1.4204-19.764-.36325-12.93-2.1234-19.487-6.9377-25.843-2.0833-2.7507-6.9865-7.6112-7.9127-7.8436-.79716-.20019-6.6946-1.0922-6.7755-1.0248-.02213.0182-5.0006-.41858-7.5248-.22808l-2.149-.22808h-3.3738z"/>
|
||||
<path style="fill:currentColor" d="m61.915 883.28-3.2484.4497c-1.7863.24724-3.5182.53481-3.8494.63994-2.4751.33811-4.7267.86957-6.7777 1.5696-.28598 0-1.0254.20146-2.3695.58589-5.0418 1.4418-6.6374 2.2604-8.2567 4.2364-6.281 7.6657-11.457 18.43-12.932 26.891-1.4667 8.4111.71353 22.583 5.0764 32.996 3.8064 9.0852 13.569 25.149 22.801 37.517 1.3741 1.841 2.1708 2.9286 2.4712 3.5792 3.5437-1.1699 6.8496-1.9336 10.082-2.3263-1.3569-5.7831-4.6968-21.86-6.8361-33.002-.92884-4.8368-2.4692-14.322-3.2452-19.991-.68557-5.0083-.77707-6.9534-.74159-15.791.04316-10.803.41822-16.162 1.5026-21.503 1.4593-5.9026 3.3494-11.077 6.3247-15.852z"/>
|
||||
<path style="fill:currentColor" d="m94.499 885.78c-.10214-.0109-.13691 0-.0907.0409.16033.13489 1.329 1.0675 2.5976 2.0723 6.7003 5.307 11.273 14.568 12.658 25.638.52519 4.1949.24765 14.361-.5059 18.523-2.4775 13.684-9.7807 32.345-20.944 53.519l-3.0559 5.7971c2.8082.76579 5.7915 1.727 8.9926 2.8441 11.562-11.691 18.349-19.678 24.129-28.394 7.8992-11.913 11.132-20.234 12.24-31.518.98442-10.02-1.5579-20.876-6.7799-28.959-.2758-.4269-.57803-.86856-.89617-1.3166-3.247-6.13-9.752-12.053-21.264-16.131-2.3687-.86369-6.3657-2.0433-7.0802-2.1166z"/>
|
||||
<path style="fill:currentColor" d="m32.52 892.22c-.20090-.13016-1.4606.81389-3.9132 2.7457-11.486 9.0476-17.632 24.186-16.078 39.61.79699 7.9138 2.4066 13.505 5.9184 20.562 5.8577 11.77 14.749 23.219 30.087 38.74.05838.059.12188.1244.18052.1838 1.3166-.5556 2.5965-1.0618 3.8429-1.5199-.66408-.32448-1.4608-1.3297-3.8116-4.4602-5.0951-6.785-8.7512-11.962-13.051-18.486-5.1379-7.7948-5.0097-7.5894-8.0586-13.054-6.2097-11.13-8.2674-17.725-8.6014-27.563-.21552-6.3494.13041-9.2733 1.775-14.987 2.1832-7.5849 3.9273-10.986 9.2693-18.07 1.7839-2.3656 2.6418-3.57 2.4409-3.7003z"/>
|
||||
<path style="fill:currentColor" d="m69.133 992.37c-6.2405.0309-12.635.76718-19.554 2.5706 4.6956 4.7759 9.935 10.258 12.05 12.625l4.1272 4.6202h11.493l3.964-4.4516c2.0962-2.3541 7.4804-7.9845 12.201-12.768-8.378-1.4975-16.207-2.6353-24.281-2.5955z"/>
|
||||
<rect style="stroke-width:0;fill:currentColor" ry="2.0328" height="27.746" width="22.766" y="1017.7" x="60.201"/>
|
||||
</g>
|
||||
</g>
|
||||
</symbol>
|
||||
|
||||
<symbol id="info" viewBox="0 0 41.667 41.667">
|
||||
<g transform="translate(-37.035 -1004.6)">
|
||||
<path style="stroke-linejoin:round;stroke:currentColor;stroke-linecap:round;stroke-width:3.728;fill:none" d="m76.25 1030.2a18.968 18.968 0 0 1 -23.037 13.709 18.968 18.968 0 0 1 -13.738 -23.019 18.968 18.968 0 0 1 23.001 -13.768 18.968 18.968 0 0 1 13.798 22.984"/>
|
||||
<g transform="matrix(1.1146 0 0 1.1146 -26.276 -124.92)">
|
||||
<path style="stroke:currentColor;stroke-linecap:round;stroke-width:3.728;fill:none" d="m75.491 1039.5v-8.7472"/>
|
||||
<path style="stroke-width:0;fill:currentColor" transform="scale(-1)" d="m-73.193-1024.5a2.3719 2.3719 0 0 1 -2.8807 1.7142 2.3719 2.3719 0 0 1 -1.718 -2.8785 2.3719 2.3719 0 0 1 2.8763 -1.7217 2.3719 2.3719 0 0 1 1.7254 2.8741"/>
|
||||
</g>
|
||||
</g>
|
||||
</symbol>
|
||||
|
||||
<symbol id="warning" viewBox="0 0 48.430474 41.646302">
|
||||
<g transform="translate(-1.1273 -1010.2)">
|
||||
<path style="stroke-linejoin:round;stroke:currentColor;stroke-linecap:round;stroke-width:4.151;fill:none" d="m25.343 1012.3-22.14 37.496h44.28z"/>
|
||||
<path style="stroke:currentColor;stroke-linecap:round;stroke-width:4.1512;fill:none" d="m25.54 1027.7v8.7472"/>
|
||||
<path style="stroke-width:0;fill:currentColor" d="m27.839 1042.8a2.3719 2.3719 0 0 1 -2.8807 1.7143 2.3719 2.3719 0 0 1 -1.718 -2.8785 2.3719 2.3719 0 0 1 2.8763 -1.7217 2.3719 2.3719 0 0 1 1.7254 2.8741"/>
|
||||
</g>
|
||||
</symbol>
|
||||
|
||||
<symbol id="menu" viewBox="0 0 50 50">
|
||||
<rect style="stroke-width:0;fill:currentColor" height="10" width="50" y="0" x="0"/>
|
||||
<rect style="stroke-width:0;fill:currentColor" height="10" width="50" y="20" x="0"/>
|
||||
<rect style="stroke-width:0;fill:currentColor" height="10" width="50" y="40" x="0"/>
|
||||
</symbol>
|
||||
|
||||
<symbol id="link" viewBox="0 0 50 50">
|
||||
<g transform="translate(0 -1002.4)">
|
||||
<g transform="matrix(.095670 0 0 .095670 2.3233 1004.9)">
|
||||
<g>
|
||||
<path style="stroke-width:0;fill:currentColor" d="m452.84 192.9-128.65 128.65c-35.535 35.54-93.108 35.54-128.65 0l-42.881-42.886 42.881-42.876 42.884 42.876c11.845 11.822 31.064 11.846 42.886 0l128.64-128.64c11.816-11.831 11.816-31.066 0-42.9l-42.881-42.881c-11.822-11.814-31.064-11.814-42.887 0l-45.928 45.936c-21.292-12.531-45.491-17.905-69.449-16.291l72.501-72.526c35.535-35.521 93.136-35.521 128.64 0l42.886 42.881c35.535 35.523 35.535 93.141-.001 128.66zm-254.28 168.51-45.903 45.9c-11.845 11.846-31.064 11.817-42.881 0l-42.884-42.881c-11.845-11.821-11.845-31.041 0-42.886l128.65-128.65c11.819-11.814 31.069-11.814 42.884 0l42.886 42.886 42.876-42.886-42.876-42.881c-35.54-35.521-93.113-35.521-128.65 0l-128.65 128.64c-35.538 35.545-35.538 93.146 0 128.65l42.883 42.882c35.51 35.54 93.11 35.54 128.65 0l72.496-72.499c-23.956 1.597-48.092-3.784-69.474-16.283z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</symbol>
|
||||
|
||||
<symbol id="doc" viewBox="0 0 35 45">
|
||||
<g transform="translate(-147.53 -539.83)">
|
||||
<path style="stroke:currentColor;stroke-width:2.4501;fill:none" d="m149.38 542.67v39.194h31.354v-39.194z"/>
|
||||
<g style="stroke-width:25" transform="matrix(.098003 0 0 .098003 133.69 525.96)">
|
||||
<path d="m220 252.36h200" style="stroke:currentColor;stroke-width:25;fill:none"/>
|
||||
<path style="stroke:currentColor;stroke-width:25;fill:none" d="m220 409.95h200"/>
|
||||
<path d="m220 488.74h200" style="stroke:currentColor;stroke-width:25;fill:none"/>
|
||||
<path d="m220 331.15h200" style="stroke:currentColor;stroke-width:25;fill:none"/>
|
||||
</g>
|
||||
</g>
|
||||
</symbol>
|
||||
|
||||
<symbol id="tick" viewBox="0 0 177.16535 177.16535">
|
||||
<g transform="translate(0 -875.2)">
|
||||
<rect style="stroke-width:0;fill:currentColor" transform="rotate(30)" height="155" width="40" y="702.99" x="556.82"/>
|
||||
<rect style="stroke-width:0;fill:currentColor" transform="rotate(30)" height="40" width="90.404" y="817.99" x="506.42"/>
|
||||
</g>
|
||||
</symbol>
|
||||
</svg>
|
After Width: | Height: | Size: 9.5 KiB |
6
layouts/partials/toc.html
Normal file
@ -0,0 +1,6 @@
|
||||
{{ if eq .Params.toc true }}
|
||||
<nav class="toc" aria-labelledby="toc-heading">
|
||||
<strong id="toc-heading">{{ T "table_of_contents" }}</strong>
|
||||
{{ .TableOfContents }}
|
||||
</nav>
|
||||
{{ end }}
|
44
layouts/post/single.html
Normal file
@ -0,0 +1,44 @@
|
||||
{{ define "main" }}
|
||||
<main id="main">
|
||||
<h1>
|
||||
<svg class="bookmark-icon" aria-hidden="true" viewBox="0 0 40 50" focusable="false">
|
||||
<use xlink:href="#bookmark"></use>
|
||||
</svg>
|
||||
{{ .Title }}
|
||||
</h1>
|
||||
|
||||
<div class="date">
|
||||
{{ $dateFormat := $.Site.Params.dateFormat | default "Jan 2, 2006" }}
|
||||
{{ $publishDate := .PublishDate }}
|
||||
<strong>{{ T "publish_date" }} </strong>{{ $publishDate.Format $dateFormat }}
|
||||
{{ with .Lastmod }}
|
||||
{{ if gt . $publishDate }}
|
||||
<br>
|
||||
<strong>{{ T "last_updated" }} </strong>{{ .Format $dateFormat }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
</div>
|
||||
|
||||
{{ with .Params.tags }}
|
||||
<div class="tags">
|
||||
<strong>{{ T "tags" }} </strong>
|
||||
<ul aria-label="{{ T "aria_label_tags" }}">
|
||||
{{ range . }}
|
||||
<li>
|
||||
<svg class="tag-icon" aria-hidden="true" viewBox="0 0 177.16535 177.16535" focusable="false">
|
||||
<use xlink:href="#tag"></use>
|
||||
</svg>
|
||||
{{ $href := print ("tags/" | relLangURL) (. | urlize) "/" }}
|
||||
<a href="{{ $href }}">{{ . }}</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
</div>
|
||||
{{ end }}
|
||||
|
||||
{{ partial "toc.html" . }}
|
||||
|
||||
{{ .Content }}
|
||||
</main>
|
||||
{{ partial "disqus.html" . }}
|
||||
{{ end }}
|
11
layouts/shortcodes/blockquote.html
Normal file
@ -0,0 +1,11 @@
|
||||
{{ $quote := .Inner }}
|
||||
|
||||
<blockquote class="blockquote">
|
||||
<p>
|
||||
{{ $quote | markdownify }}
|
||||
{{ with (.Get "author") }}
|
||||
<br>
|
||||
<span class="author">— {{ . }}</span>
|
||||
{{ end }}
|
||||
</p>
|
||||
</blockquote>
|
7
layouts/shortcodes/cmd.html
Normal file
@ -0,0 +1,7 @@
|
||||
{{ $trimmed := (trim .Inner "\n") }}
|
||||
{{ $lines := split $trimmed "\n" }}
|
||||
<pre class="cmd">
|
||||
{{ range $lines }}
|
||||
<code>{{ . }}</code>
|
||||
{{ end }}
|
||||
</pre>
|
5
layouts/shortcodes/code.html
Normal file
@ -0,0 +1,5 @@
|
||||
{{ $code := .Inner | htmlEscape }}
|
||||
{{ $code := replace $code "[[[" "<span class='highlight'>" }}
|
||||
{{ $code := replace $code "]]]" "</span>" }}
|
||||
{{ $numbered := .Get "numbered" }}
|
||||
<div class="code-annotated {{ if and ($numbered) (ne $numbered "false") }}numbered{{ end }}"><code>{{ $code | safeHTML }}</code></div>
|
10
layouts/shortcodes/codePen.html
Normal file
@ -0,0 +1,10 @@
|
||||
{{ $pen := .Get 0 }}
|
||||
{{ with .Site.Params.codePenUser }}
|
||||
<iframe height="300" scrolling="no" title="code demonstration with codePen" src="//codepen.io/{{ . | lower }}/embed/{{ $pen }}/?height=265&theme-id=dark&default-tab=result,result&embed-version=2" frameborder="no" allowtransparency="true" allowfullscreen="true" style="width: 100%;">
|
||||
<div>
|
||||
<a href="//codepen.io/{{ . | lower }}/pen/{{ $pen }}">See the demo on codePen</a>
|
||||
</div>
|
||||
</iframe>
|
||||
{{ else }}
|
||||
<p class="site-error"><strong>Site error:</strong> The <code>codePenUser</code> param has not been set in <code>config.toml</code></p>
|
||||
{{ end }}
|
11
layouts/shortcodes/colors.html
Normal file
@ -0,0 +1,11 @@
|
||||
{{ $colorString := replace (.Get 0) " " "" | upper }}
|
||||
{{ $colors := split $colorString "," }}
|
||||
<div class="colors-container">
|
||||
<ul class="colors">
|
||||
{{ range $colors }}
|
||||
<li style="background-color: {{ . }};{{ if or (eq . "#FFFFFF") (eq . "#FFF")}} border: 1px solid #111{{ end }}">
|
||||
<span>{{ . }}</span>
|
||||
</li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
</div>
|
25
layouts/shortcodes/expandable.html
Normal file
@ -0,0 +1,25 @@
|
||||
<div class="expandable-section">
|
||||
{{ if .Get "level" }}
|
||||
<h{{ .Get "level" }}>
|
||||
{{ end }}
|
||||
{{/* 1. Get the md5 hash of the expandable inner text */}}
|
||||
{{/* 2. Split the hash string into an array */}}
|
||||
{{/* 3. Shuffle the array */}}
|
||||
{{/* 4. Convert the array back into a string */}}
|
||||
{{ $random := delimit (shuffle (split (md5 .Inner) "" )) "" }}
|
||||
<button aria-expanded="{{ with .Get "open" }}true{{ else }}false{{ end }}" data-expands="js-expandable-{{ $random }}">
|
||||
<span class="expandable-label">{{ .Get "label" | default "More info" }}</span>
|
||||
<svg aria-hidden="true" focusable="false" viewBox="0 0 70.866142 70.866141">
|
||||
<g transform="translate(0 -981.5)">
|
||||
<rect style="stroke-width:0;fill:currentColor" ry="5" height="60" width="9.8985" y="987.36" x="30.051" class="up-strut" />
|
||||
<rect style="stroke-width:0;fill:currentColor" ry="5" height="10" width="60" y="1012.4" x="5"/>
|
||||
</g>
|
||||
</svg>
|
||||
</button>
|
||||
{{ if .Get "level" }}
|
||||
</h{{ .Get "level"}}>
|
||||
{{ end }}
|
||||
<div id="js-expandable-{{ $random }}" {{ with .Get "open" | not }}hidden{{ end }}>
|
||||
{{ .Inner | markdownify }}
|
||||
</div>
|
||||
</div>
|
28
layouts/shortcodes/figureCupper.html
Normal file
@ -0,0 +1,28 @@
|
||||
{{ $img := .Get "img" }}
|
||||
{{ $caption := .Get "caption" }}
|
||||
{{ $command := .Get "command" }}
|
||||
{{ $options := .Get "options" }}
|
||||
|
||||
{{ $original := .Page.Resources.GetMatch (printf "*%s*" $img) }}
|
||||
{{ $new := "" }}
|
||||
|
||||
{{ if eq $command "Fit" }}
|
||||
{{ $new = $original.Fit $options }}
|
||||
{{ else if eq $command "Fill" }}
|
||||
{{ $new = $original.Fill $options }}
|
||||
{{ else if eq $command "Resize" }}
|
||||
{{ $new = $original.Resize $options }}
|
||||
{{ else if eq $command "Original" }}
|
||||
{{ $new = $original }}
|
||||
{{ else }}
|
||||
{{ errorf "Invalid image processing command: Must be one of Fit, Fill, Resize, Original." }}
|
||||
{{ end }}
|
||||
|
||||
<figure role="group" aria-describedby="caption-{{ $caption | md5 }}">
|
||||
<a href="{{ $original.RelPermalink }}" class="img-link">
|
||||
<img src="{{ $new.RelPermalink }}">
|
||||
</a>
|
||||
<figcaption id="caption-{{ $caption | md5 }}">
|
||||
{{ $caption | markdownify }}
|
||||
</figcaption>
|
||||
</figure>
|
3
layouts/shortcodes/fileTree.html
Normal file
@ -0,0 +1,3 @@
|
||||
<div class="file-tree">
|
||||
{{ .Inner | markdownify }}
|
||||
</div>
|
29
layouts/shortcodes/gallery.html
Normal file
@ -0,0 +1,29 @@
|
||||
{{ $command := .Get "command" }}
|
||||
{{ $options := .Get "options" }}
|
||||
|
||||
{{ with .Page.Resources.ByType "image" }}
|
||||
{{ range . }}
|
||||
|
||||
{{ $original := . }}
|
||||
{{ $new := "" }}
|
||||
|
||||
{{ if eq $command "Fit" }}
|
||||
{{ $new = $original.Fit $options }}
|
||||
{{ else if eq $command "Fill" }}
|
||||
{{ $new = $original.Fill $options }}
|
||||
{{ else if eq $command "Resize" }}
|
||||
{{ $new = $original.Resize $options }}
|
||||
{{ else if eq $command "Original" }}
|
||||
{{ $new = $original }}
|
||||
{{ else }}
|
||||
{{ errorf "Invalid image processing command: Must be one of Fit, Fill, Resize, Original." }}
|
||||
{{ end }}
|
||||
|
||||
<div class="gallery">
|
||||
<a href="{{ $original.RelPermalink }}" class="img-link">
|
||||
<img src="{{ $new.RelPermalink }}">
|
||||
</a>
|
||||
</div>
|
||||
|
||||
{{ end }}
|
||||
{{ end }}
|
8
layouts/shortcodes/note.html
Normal file
@ -0,0 +1,8 @@
|
||||
<aside aria-label="note" class="note">
|
||||
<div>
|
||||
<svg class="sign" aria-hidden="true" viewBox="0 0 41.667306 41.66729" focusable="false">
|
||||
<use xlink:href="#info"></use>
|
||||
</svg>
|
||||
{{ .Inner | markdownify }}
|
||||
</div>
|
||||
</aside>
|
24
layouts/shortcodes/principles.html
Normal file
@ -0,0 +1,24 @@
|
||||
{{ $JSON := $.Site.Data.principles }}
|
||||
{{ $included := replace (.Get "include") ", " "," }}
|
||||
{{ $included := apply (split $included ",") "lower" "." }}
|
||||
{{ $descriptions := .Get "descriptions" }}
|
||||
<ul class="principles {{ if and ($descriptions) (ne $descriptions "false") }}with-desc{{ end }}">
|
||||
{{ range $JSON.principles }}
|
||||
{{ if in $included (lower .title) }}
|
||||
<li>
|
||||
<strong>
|
||||
<a href="https://inclusivedesignprinciples.org#{{ .title | urlize }}">
|
||||
<svg class="balloon-icon" viewBox="0 0 141.73228 177.16535" aria-hidden="true" focusable="false">
|
||||
<use xlink:href="#balloon"></use>
|
||||
</svg>
|
||||
{{ .title }}
|
||||
</a>:
|
||||
</strong>
|
||||
<em>{{ .strapline }}</em>
|
||||
{{ if and ($descriptions) (ne $descriptions "false") }}
|
||||
<p>{{ .description }}</p>
|
||||
{{ end }}
|
||||
</li>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
</ul>
|
28
layouts/shortcodes/tested.html
Normal file
@ -0,0 +1,28 @@
|
||||
{{ $tested := replace (.Get "using") ", " "," }}
|
||||
{{ $tested := replace $tested " + " "+" }}
|
||||
{{ $tested := split $tested "," }}
|
||||
<table class="tested">
|
||||
<tr>
|
||||
<th scope="row">
|
||||
<svg viewBox="0 0 177.16535 177.16535" focusable="false" aria-hidden="true">
|
||||
<use xlink:href="#tick"></use>
|
||||
</svg>
|
||||
Tested using
|
||||
</th>
|
||||
{{ range $tested }}
|
||||
<td>
|
||||
{{ $browser := findRE "^[a-zA-Z ]+" . }}
|
||||
{{ $browser := index $browser 0 }}
|
||||
{{ $version := findRE "[0-9]+$" . }}
|
||||
{{ $slug := replace $browser " " "-" | lower }}
|
||||
<img src="{{ (printf "images/browser-%s" $slug) | relURL }}.svg" alt="">
|
||||
<span><strong>{{ $browser }} {{ index $version 0 }}</strong></span>
|
||||
{{ if in . "+" }}
|
||||
{{ $parts := split . "+" }}
|
||||
{{ $additional := index $parts 1 }}
|
||||
<span class="additional">with <strong>{{ $additional }}</strong></span>
|
||||
{{ end }}
|
||||
</td>
|
||||
{{ end }}
|
||||
</tr>
|
||||
</table>
|
3
layouts/shortcodes/ticks.html
Normal file
@ -0,0 +1,3 @@
|
||||
<div class="ticks">
|
||||
{{ .Inner | markdownify }}
|
||||
</div>
|
8
layouts/shortcodes/warning.html
Normal file
@ -0,0 +1,8 @@
|
||||
<aside aria-label="warning" class="note warning">
|
||||
<div>
|
||||
<svg class="sign" aria-hidden="true" viewBox="0 0 48.430474 41.646302" focusable="false">
|
||||
<use xlink:href="#warning"></use>
|
||||
</svg>
|
||||
{{ .Inner | markdownify }}
|
||||
</div>
|
||||
</aside>
|
30
layouts/shortcodes/wcag.html
Normal file
@ -0,0 +1,30 @@
|
||||
{{ $JSON := $.Site.Data.wcag }}
|
||||
{{ $included := replace (.Get "include") ", " "," }}
|
||||
{{ $included := split $included "," }}
|
||||
{{ $descriptions := .Get "descriptions" }}
|
||||
<ul class="wcag {{ if and ($descriptions) (ne $descriptions "false") }}with-desc{{ end }}">
|
||||
{{ range $JSON }}
|
||||
{{ if in $included .ref_id }}
|
||||
<li>
|
||||
<strong><a href="{{ .url }}">
|
||||
<svg class="wcag-icon" viewBox="0 0 127.09899 67.763" aria-hidden="true" focusable="false">
|
||||
<use xlink:href="#w3c"></use>
|
||||
</svg>
|
||||
{{ .ref_id }} {{ .title }}</a> (level {{ .level }}){{ if $descriptions }}:{{ end }}
|
||||
</strong>
|
||||
{{ if and ($descriptions) (ne $descriptions "false") }}
|
||||
{{ .description }}
|
||||
{{ if .special_cases }}
|
||||
<ul>
|
||||
{{ range .special_cases }}
|
||||
<li><strong>{{ .title }}:</strong>
|
||||
{{ .description }}
|
||||
</li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
</li>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
</ul>
|
6
local_git_config.sh
Executable file
@ -0,0 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
git config --local user.name "zwbetz-gh"
|
||||
git config --local user.email "zwbetz@gmail.com"
|
||||
|
||||
git config --local --list
|
13
netlify.toml
Normal file
@ -0,0 +1,13 @@
|
||||
[build]
|
||||
publish = "exampleSite/public"
|
||||
command = "cd exampleSite && hugo --themesDir ../.."
|
||||
|
||||
[build.environment]
|
||||
HUGO_VERSION = "0.83.1"
|
||||
HUGO_THEME = "repo"
|
||||
HUGO_BASEURL = "https://cupper-hugo-theme.netlify.app"
|
||||
|
||||
[[headers]]
|
||||
for = "/*"
|
||||
[headers.values]
|
||||
Access-Control-Allow-Origin = "*"
|
BIN
static/.DS_Store
vendored
Normal file
BIN
static/android-chrome-192x192.png
Normal file
After Width: | Height: | Size: 4.6 KiB |
BIN
static/android-chrome-512x512.png
Normal file
After Width: | Height: | Size: 13 KiB |
BIN
static/apple-touch-icon.png
Normal file
After Width: | Height: | Size: 3.0 KiB |
9
static/browserconfig.xml
Normal file
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<browserconfig>
|
||||
<msapplication>
|
||||
<tile>
|
||||
<square150x150logo src="/mstile-150x150.png"/>
|
||||
<TileColor>#da532c</TileColor>
|
||||
</tile>
|
||||
</msapplication>
|
||||
</browserconfig>
|
BIN
static/css/fonts/miriamlibre-bold.woff
Normal file
BIN
static/css/fonts/miriamlibre-bold.woff2
Normal file
6
static/css/images/arrow_effect.svg
Normal file
@ -0,0 +1,6 @@
|
||||
<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="50" width="24.999" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" viewBox="0 0 24.998724 50.000001">
|
||||
<g transform="translate(-25.001 -1002.4)">
|
||||
<path style="fill-rule:evenodd;fill:#ffffff" d="m25.001 1002.4 24.999 25v-25z"/>
|
||||
<path style="fill-rule:evenodd;fill:#ffffff" d="m50 1027.4-24.999 25h24.999z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 480 B |
6
static/css/images/icon-tick.svg
Normal file
@ -0,0 +1,6 @@
|
||||
<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="50mm" width="50mm" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" viewBox="0 0 177.16535 177.16535">
|
||||
<g transform="translate(0 -875.2)">
|
||||
<rect style="stroke-width:0;fill:#111" transform="rotate(30)" height="155" width="40" y="702.99" x="556.82"/>
|
||||
<rect style="stroke-width:0;fill:#111" transform="rotate(30)" height="40" width="90.404" y="817.99" x="506.42"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 535 B |
5
static/css/images/stripe.svg
Normal file
@ -0,0 +1,5 @@
|
||||
<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="22.578mm" width="11.289mm" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" viewBox="0 0 40.00001 80.000027">
|
||||
<g transform="translate(-200 -563.49)">
|
||||
<path style="fill-rule:evenodd;stroke-width:0;fill:#000000" d="m240 563.49-40 40v40l40-40z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 415 B |
183
static/css/prism.css
Normal file
@ -0,0 +1,183 @@
|
||||
/* PrismJS 1.15.0
|
||||
https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript&plugins=line-numbers */
|
||||
/**
|
||||
* prism.js default theme for JavaScript, CSS and HTML
|
||||
* Based on dabblet (http://dabblet.com)
|
||||
* @author Lea Verou
|
||||
*/
|
||||
|
||||
code[class*="language-"],
|
||||
pre[class*="language-"] {
|
||||
color: black;
|
||||
background: none;
|
||||
text-shadow: 0 1px white;
|
||||
font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
|
||||
text-align: left;
|
||||
white-space: pre;
|
||||
word-spacing: normal;
|
||||
word-break: normal;
|
||||
word-wrap: normal;
|
||||
line-height: 1.5;
|
||||
|
||||
-moz-tab-size: 4;
|
||||
-o-tab-size: 4;
|
||||
tab-size: 4;
|
||||
|
||||
-webkit-hyphens: none;
|
||||
-moz-hyphens: none;
|
||||
-ms-hyphens: none;
|
||||
hyphens: none;
|
||||
}
|
||||
|
||||
pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection,
|
||||
code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection {
|
||||
text-shadow: none;
|
||||
background: #b3d4fc;
|
||||
}
|
||||
|
||||
pre[class*="language-"]::selection, pre[class*="language-"] ::selection,
|
||||
code[class*="language-"]::selection, code[class*="language-"] ::selection {
|
||||
text-shadow: none;
|
||||
background: #b3d4fc;
|
||||
}
|
||||
|
||||
@media print {
|
||||
code[class*="language-"],
|
||||
pre[class*="language-"] {
|
||||
text-shadow: none;
|
||||
}
|
||||
}
|
||||
|
||||
/* Code blocks */
|
||||
pre[class*="language-"] {
|
||||
padding: 1em;
|
||||
margin: .5em 0;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
:not(pre) > code[class*="language-"],
|
||||
pre[class*="language-"] {
|
||||
background: #f5f2f0;
|
||||
}
|
||||
|
||||
/* Inline code */
|
||||
:not(pre) > code[class*="language-"] {
|
||||
padding: .1em;
|
||||
border-radius: .3em;
|
||||
white-space: normal;
|
||||
}
|
||||
|
||||
.token.comment,
|
||||
.token.prolog,
|
||||
.token.doctype,
|
||||
.token.cdata {
|
||||
color: slategray;
|
||||
}
|
||||
|
||||
.token.punctuation {
|
||||
color: #999;
|
||||
}
|
||||
|
||||
.namespace {
|
||||
opacity: .7;
|
||||
}
|
||||
|
||||
.token.property,
|
||||
.token.tag,
|
||||
.token.boolean,
|
||||
.token.number,
|
||||
.token.constant,
|
||||
.token.symbol,
|
||||
.token.deleted {
|
||||
color: #905;
|
||||
}
|
||||
|
||||
.token.selector,
|
||||
.token.attr-name,
|
||||
.token.string,
|
||||
.token.char,
|
||||
.token.builtin,
|
||||
.token.inserted {
|
||||
color: #690;
|
||||
}
|
||||
|
||||
.token.operator,
|
||||
.token.entity,
|
||||
.token.url,
|
||||
.language-css .token.string,
|
||||
.style .token.string {
|
||||
color: #9a6e3a;
|
||||
background: hsla(0, 0%, 100%, .5);
|
||||
}
|
||||
|
||||
.token.atrule,
|
||||
.token.attr-value,
|
||||
.token.keyword {
|
||||
color: #07a;
|
||||
}
|
||||
|
||||
.token.function,
|
||||
.token.class-name {
|
||||
color: #DD4A68;
|
||||
}
|
||||
|
||||
.token.regex,
|
||||
.token.important,
|
||||
.token.variable {
|
||||
color: #e90;
|
||||
}
|
||||
|
||||
.token.important,
|
||||
.token.bold {
|
||||
font-weight: bold;
|
||||
}
|
||||
.token.italic {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.token.entity {
|
||||
cursor: help;
|
||||
}
|
||||
|
||||
pre[class*="language-"].line-numbers {
|
||||
position: relative;
|
||||
padding-left: 3.8em;
|
||||
counter-reset: linenumber;
|
||||
}
|
||||
|
||||
pre[class*="language-"].line-numbers > code {
|
||||
position: relative;
|
||||
white-space: inherit;
|
||||
}
|
||||
|
||||
.line-numbers .line-numbers-rows {
|
||||
position: absolute;
|
||||
pointer-events: none;
|
||||
top: 0;
|
||||
font-size: 100%;
|
||||
left: -3.8em;
|
||||
width: 3em; /* works for line-numbers below 1000 lines */
|
||||
letter-spacing: -1px;
|
||||
border-right: 1px solid #999;
|
||||
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
|
||||
}
|
||||
|
||||
.line-numbers-rows > span {
|
||||
pointer-events: none;
|
||||
display: block;
|
||||
counter-increment: linenumber;
|
||||
}
|
||||
|
||||
.line-numbers-rows > span:before {
|
||||
content: counter(linenumber);
|
||||
color: #999;
|
||||
display: block;
|
||||
padding-right: 0.8em;
|
||||
text-align: right;
|
||||
}
|
||||
|
BIN
static/favicon-16x16.png
Normal file
After Width: | Height: | Size: 588 B |
BIN
static/favicon-32x32.png
Normal file
After Width: | Height: | Size: 893 B |
BIN
static/favicon-96x96.png
Normal file
After Width: | Height: | Size: 2.6 KiB |
BIN
static/favicon.ico
Normal file
After Width: | Height: | Size: 15 KiB |
13
static/images/browser-chrome-android.svg
Normal file
@ -0,0 +1,13 @@
|
||||
<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" viewBox="0 0 100 100">
|
||||
<g transform="translate(0 -952.36)">
|
||||
<g transform="matrix(.094248 0 0 .094248 2.8805 955.24)"></g>
|
||||
<g transform="matrix(.18832 0 0 .18832 4.2017 956.56)"></g>
|
||||
<g transform="matrix(.059920 0 0 .059920 64.099 1012.5)">
|
||||
<g>
|
||||
<g id="android">
|
||||
<path d="m152.68 458.36c0 15.3 10.2 25.5 25.5 25.5h25.5v89.25c0 20.4 17.85 38.25 38.25 38.25s38.25-17.85 38.25-38.25v-89.25h51v89.25c0 20.4 17.85 38.25 38.25 38.25s38.25-17.85 38.25-38.25v-89.25h25.5c15.3 0 25.5-10.2 25.5-25.5v-255h-306v255zm-63.75-255c-20.4 0-38.25 17.851-38.25 38.25v178.5c0 20.4 17.85 38.25 38.25 38.25s38.25-17.85 38.25-38.25v-178.5c0-20.4-17.85-38.25-38.25-38.25zm433.5 0c-20.4 0-38.25 17.851-38.25 38.25v178.5c0 20.4 17.85 38.25 38.25 38.25s38.25-17.85 38.25-38.25v-178.5c0-20.4-17.85-38.25-38.25-38.25zm-127.5-147.9 33.15-33.15c5.1-5.1 5.1-12.75 0-17.85-5.101-5.101-12.75-5.101-17.851 0l-38.25 38.25c-17.85-12.75-40.8-17.851-66.3-17.851s-48.45 5.101-68.85 15.3l-35.7-38.25c-5.1-2.55-15.3-2.55-20.4 0-2.55 5.101-2.55 15.301 0 20.4l33.15 33.15c-35.7 28.05-61.2 71.399-61.2 122.4h306c0-51-25.5-96.897-63.75-122.4zm-140.25 71.4h-25.5v-25.5h25.5v25.5zm127.5 0h-25.5v-25.5h25.5v25.5zm-315.17-295.94a296.37 296.37 0 0 1 -296.37 296.37 296.37 296.37 0 0 1 -296.37 -296.37 296.37 296.37 0 0 1 296.37 -296.37 296.37 296.37 0 0 1 296.37 296.37zm-104.26-296.4c96.933 62.959 161.06 172.16 161.06 296.36 0 61.07-15.514 118.54-42.798 168.65l.22814.13017-363.47 626.27c17.485 1.1449 35.126 1.7928 52.903 1.7928 143.13 0 277.31-37.916 393.4-103.98.012-.31092.02-.63485.0334-.94527-17.736-4.0482-33.875-15.396-43.092-31.162-39.38 18.48-92.101-3.73-105.87-45.11-8.2326-57.3-3.506-115.34-4.109-172.98-2.4526-23.22-2.1755-48.13 9.485-69.07 16.194-32.792 57.849-48.918 92.213-37.387 3.0695-40.159 17.93-79.632 43.548-110.86-7.7581-10.996-15.806-22.506-17.83-36.149-6.0082-29.885 19.952-62.746 51.175-60.335 23.886-.42474 44.235 15.691 58.412 33.476 37.546-10.929 78.773-12.322 115.85 1.2387 8.8519-9.3168 17.44-19.247 28.521-26.011 25.787-17.584 64.503-3.2156 75.883 24.936 9.2404 20.832.0935 45.21-14.864 60.856 24.881 28.78 39.738 65.45 44.102 103.13 44.834-99.661 69.983-210.11 69.983-326.48 0-104.75-20.275-204.75-57.01-296.36h-547.74zm-854.06-147.32c-85.186 126.81-134.88 279.48-134.88 443.73 0 401.08 296.34 732.91 682.03 788.56l274.92-473.69c-48.07 24.49-102.46 38.3-160.11 38.3l-.0317-.0317c-152.83 0-282.96-97.085-332.15-232.93l-329.78-563.95zm661.92-353.11c-253.59 0-479.45 118.48-625.38 303.08l273.22 467.26c13.519-182.06 165.09-325.68 350.4-326.64v-.0317h716.19c-130.18-262.88-401.19-443.67-714.42-443.67z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.8 KiB |
8
static/images/browser-chrome.svg
Normal file
@ -0,0 +1,8 @@
|
||||
<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" viewBox="0 0 100 100">
|
||||
<g transform="translate(0 -952.36)">
|
||||
<g transform="matrix(.19488 0 0 .19488 .30580 952.28)">
|
||||
<circle cx="255" cy="257" r="91.125"/>
|
||||
<path d="m254.45 148.42v-.007h220.21c-40.03-80.827-123.35-136.41-219.66-136.41-77.97 0-147.42 36.424-192.29 93.18l84.011 143.67c4.157-55.982 50.757-100.14 107.74-100.43zm.55 217.16c-46.99 0-87.004-29.849-102.13-71.617l-101.39-173.39c-26.192 38.99-41.48 85.93-41.48 136.43 0 123.32 91.121 225.35 209.71 242.46l84.529-145.65c-14.78 7.53-31.51 11.778-49.235 11.778zm227.48-199.71h-168.41c29.804 19.358 49.519 52.938 49.519 91.125 0 18.777-4.768 36.443-13.157 51.851l.062.037-111.75 192.56c5.376.352 10.795.55 16.261.55 135.31 0 245-109.69 245-245 0-32.206-6.226-62.956-17.521-91.125z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 964 B |
9
static/images/browser-edge.svg
Normal file
@ -0,0 +1,9 @@
|
||||
<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" viewBox="0 0 100 100">
|
||||
<g transform="translate(0 -952.36)">
|
||||
<g transform="matrix(.094248 0 0 .094248 2.8805 955.24)">
|
||||
<g>
|
||||
<path d="m48.1 445c28.7-226.6 183.3-432.1 460.4-435 167.2 3.3 304.8 79 386.7 223.5 41.1 75.4 54 154.6 56.6 242.1v102.8h-614.7c2.9 253.5 373.1 244.9 532.5 133.2v206.4c-93.4 56.1-305.2 106.2-469.2 41.7-139.7-52.4-239.2-198.6-238.6-339.3-4.6-182.4 90.7-303.1 238.6-371.8-31.4 38.8-55.3 81.7-67.7 156h347.1s20.3-207.4-196.5-207.4c-204.4 7-351.8 125.9-435.2 247.8z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 719 B |
11
static/images/browser-firefox-android.svg
Normal file
@ -0,0 +1,11 @@
|
||||
<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" viewBox="0 0 100 100">
|
||||
<g transform="translate(0 -952.36)">
|
||||
<g transform="matrix(.059920 0 0 .059920 63.622 1011.8)">
|
||||
<g>
|
||||
<g id="android">
|
||||
<path d="m152.68 458.36c0 15.3 10.2 25.5 25.5 25.5h25.5v89.25c0 20.4 17.85 38.25 38.25 38.25s38.25-17.85 38.25-38.25v-89.25h51v89.25c0 20.4 17.85 38.25 38.25 38.25s38.25-17.85 38.25-38.25v-89.25h25.5c15.3 0 25.5-10.2 25.5-25.5v-255h-306v255zm-63.75-255c-20.4 0-38.25 17.851-38.25 38.25v178.5c0 20.4 17.85 38.25 38.25 38.25s38.25-17.85 38.25-38.25v-178.5c0-20.4-17.85-38.25-38.25-38.25zm433.5 0c-20.4 0-38.25 17.851-38.25 38.25v178.5c0 20.4 17.85 38.25 38.25 38.25s38.25-17.85 38.25-38.25v-178.5c0-20.4-17.85-38.25-38.25-38.25zm-127.5-147.9 33.15-33.15c5.1-5.1 5.1-12.75 0-17.85-5.101-5.101-12.75-5.101-17.851 0l-38.25 38.25c-17.85-12.75-40.8-17.851-66.3-17.851s-48.45 5.101-68.85 15.3l-35.7-38.25c-5.1-2.55-15.3-2.55-20.4 0-2.55 5.101-2.55 15.301 0 20.4l33.15 33.15c-35.7 28.05-61.2 71.399-61.2 122.4h306c0-51-25.5-96.897-63.75-122.4zm-140.25 71.4h-25.5v-25.5h25.5v25.5zm127.5 0h-25.5v-25.5h25.5v25.5zm-648.47-1052.2c-153.2 3.6312-304.31 56.616-426.52 149.39-18.198 25.776-95.427 53.771-75.003 84.13 9.915 16.563 16.376 8.3085 28.098-2.5751 164.29-163 410.41-231.13 636.37-186.77 92.023 25.701 185.78 47.562 275.11 81.522-109.16-73.972-240.18-119.24-372.34-124.19-21.892-1.5227-43.827-2.0181-65.713-1.4994zm298.77 104.11c76.659 48.615 145.81 109.53 198.61 183.74 61.419 79.922-35.193-17.684-72.428-19.394-88.432-28.428 16.633 33.427 26.337 66.104 60.034 74.183 88.79 168.13 85.434 263.15 11.41 74.947-20.783-6.5197-51.958-25.131-26.927 16.205 9.4167 113.18 3.1944 158.15-2.001 35.591-8.6324 182.4-41.69 91.464-3.8949 21.877-8.0142 44.695-13.038 67.506 6.9144-3.442 14.6-5.2532 22.687-4.6286 23.886-.42475 44.235 15.691 58.412 33.476 37.546-10.929 78.773-12.322 115.85 1.2386 8.8519-9.3168 17.44-19.247 28.521-26.011 25.787-17.584 64.503-3.2156 75.883 24.936 9.2405 20.832.0935 45.21-14.864 60.856 6.8594 7.9343 12.945 16.469 18.286 25.457 1.0056-39.357 8.0123-77.518 30.966-112.78 53.847-99.934 51.155-220.2 19.003-326.41-8.2394 28.596-33.964 85.038-26.37 17.928 10.813-131.53-37.639-269.01-140.16-354.58-22.49 23.997-92.919-108.34-105.48-52.023 58.36 70.768 130.06 135.32 165.16 222.86-17.994-32.268-82.372-117.57-130.58-156.49-65.555-73.849-157.79-115.62-251.77-139.41zm-865.39 45.699c-50.598 52.066-69.113 127.82-74.97 198.35h.0326v12.973c36.168-35.923 74.584-71.088 121.65-92.083 18.348-21.886-58.779-74.369-46.71-119.24zm437.44 50.784c-75.56 3.3882-142.96 57.617-187.23 116.53-27.292 57.073-24.079 9.047-14.831-24.61-49.193-38.29-146.9-8.65-203.07 22.393-125.63 73.098-172.17 220.3-202.84 353.5 46.722-83.328 1.3199 41.211 7.6926 75.133-.0883 29.606-14.711 183.82 8.4097 91.17 19.997-17.796 15.603 95.292 34.486 121.84 60.197 232.76 250.23 410.71 466.84 502.11 25.064 12.981 176.11 63.077 91.04 15.809 21.545-4.9454 94.604 32.129 135.7 31.813 14.254-4.9045 111.13 24.012 52.349-12.386 87.718-10.482 179.32-14.973 265.66-40.549 25.455-4.5994 49.455-12.983 72.004-23.99-3.6951-3.749-7.0469-7.8251-9.7135-12.386-39.4 18.47-92.121-3.75-105.89-45.13-8.2333-57.3-3.507-115.34-4.11-172.98-2.4524-23.22-2.1752-48.13 9.486-69.07 16.194-32.792 57.849-48.918 92.213-37.387 3.0695-40.159 17.93-79.632 43.548-110.86-3.8428-5.4464-7.7335-11.025-10.952-16.917-17.786 46.326-44.452 87.656-88.465 114.48-20.397-56.905-69.067 56.024-98.081 43.646-19.503-24.663-105.87 20.648-151.77 15.059-29.333 13.051-163.69-36.48-81.522-34.845 30.162-11.267-81.324-26.471-110.21-35.921-66.003-36.299-124.97-97.226-144.63-171.75-6.0631-72.002-14.554-159.04 39.962-215.69-36.095-40.357-131.34-18.073-163.4 32.498-65.468 83.028-32.742 203.3 36.149 273.64-22.962-18.109-63.338-67.843-74.449-107.4-43.518-104.6 30.036-246.52 149.06-246.75 56.519-24.428 141.17 122.1 126.28 12.256 8.0825-45.987-40.037-74.328-50.035-116.53-47.135-116.39 15.69-245.94 103.17-324.95-11.083-1.7248-22.062-2.2768-32.857-1.7928zm-46.71 188.34c-17.752 59.498-4.1945 125.22 32.009 175.17 4.7202.58411 8.9614 22.512 16.852 9.9417 48.679-44.867 154.38-54.475 140.68-141.01-50.281-41.86-139.62 7.2935-189.54-44.102zm-60.954 408.62c-5.2671 74.276 14.421 156.02 79.012 200.56 16.369 17.781 32.353 17.455 54.891 16.07 80.845 8.0341 153.29-31.634 213.44-81.555 19.296-35.347 87.94 8.0109 83.999-41.592-24.259-68.562-118.59-77.127-177.94-53.033-80.692 57.747-186.74 21.228-253.4-40.451z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 4.5 KiB |
5
static/images/browser-firefox.svg
Normal file
@ -0,0 +1,5 @@
|
||||
<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" viewBox="0 0 100 100">
|
||||
<g transform="translate(0 -952.36)">
|
||||
<path style="fill:#000000" d="m48.212 1047.3c-2.4619.02-6.8405-2.2013-8.1318-1.9049 5.0976 2.8323-3.9517-.1694-5.4535-.9472-12.979-5.4764-24.366-16.139-27.973-30.086-1.1315-1.5909-.8693-8.3687-2.0675-7.3024-1.3854 5.5516-.50865-3.6884-.50336-5.4624-.38185-2.0326 2.3388-9.4953-.46079-4.5023 1.8379-7.9816 4.6266-16.8 12.154-21.18 3.3659-1.8601 9.2204-3.6361 12.168-1.3418-.55412 2.0167-.74594 4.8931.88940 1.4733 3.0318-4.0343 7.8741-7.7006 13.187-6.8738-5.2415 4.734-9.0067 12.495-6.1824 19.469.59907 2.5287 3.4842 4.2277 2.9999 6.9832.89239 6.5818-4.1802-2.1975-7.5668-.73381-7.1319.014-11.539 8.5177-8.9314 14.785.66574 2.3704 3.084 5.35 4.4599 6.4351-4.1279-4.2151-6.089-11.422-2.1662-16.397 1.9214-3.0302 7.6289-4.3642 9.7917-1.946-3.2666 3.394-2.7576 8.6087-2.3943 12.923 1.1778 4.4653 4.7112 8.117 8.6661 10.292 1.7306.5662 8.4095 1.4758 6.6022 2.1509-4.9236-.098 3.1271 2.871 4.8847 2.089 2.7503.3349 7.9265-2.3797 9.0951-.9019 1.7385.7417 4.6534-6.026 5.8756-2.6163 5.2366-3.191 6.3838-9.8086 7.3784-15.395 1.9808 5.4491 2.3774-3.3468 2.4973-5.4794.37284-2.6946-1.8045-8.5058-.19106-9.4768 1.868 1.1152 3.7972 5.997 3.1135 1.5062.20110-5.6935-1.5215-11.324-5.1187-15.769-.58148-1.958-6.8783-5.6625-1.5795-3.9591 2.2311.10252 8.0208 5.9503 4.3406 1.1614-3.1635-4.4467-7.3076-8.096-11.901-11.009 5.6314 1.4258 11.159 3.928 15.087 8.353 2.8885 2.3325 6.7461 7.4432 7.8243 9.3767-2.1033-5.2453-6.4004-9.1126-9.8973-13.353.75267-3.3744 4.9719 4.5534 6.3195 3.1155 6.1431 5.1271 9.0478 13.367 8.3999 21.248-.45504 4.0212 1.0863.63813 1.58-1.0753 1.9265 6.3645 2.0874 13.571-1.1391 19.559-2.0733 3.1852-1.9952 6.76-1.747 10.39-.28526 2.7302-2.3678 5.0662-3.9091 7.2654-2.5671 3.2593-5.9016 5.7954-9.4254 7.921-2.5621 4.2065-6.66 7.1655-11.521 8.0438-5.1734 1.5325-10.662 1.8031-15.918 2.4312 3.5236 2.182-2.2877.4449-3.1376.7408zm-9.8762-30.448c-3.8703-2.6692-5.0516-7.5674-4.736-12.018 3.9942 3.6958 10.35 5.8829 15.185 2.4227 3.5565-1.4437 9.2074-.9303 10.661 3.1779.23613 2.9722-3.8772.3751-5.0334 2.4931-3.6039 2.9912-7.9438 5.3678-12.788 4.8864-1.3505.083-2.3077.1036-3.2885-.9618zm.83582-26.006c-2.1693-2.9927-2.9816-6.9309-1.9179-10.496 2.9917 3.0796 8.3442.13308 11.357 2.6413.82094 5.1851-5.5128 5.7608-8.4296 8.4492-.47280.75321-.72707-.55934-1.0099-.59434zm-29.822-12.94c.35096-4.2257 1.4603-8.7642 4.4921-11.884-.72317 2.6884 3.8972 5.8318 2.7978 7.1432-2.82 1.258-5.1226 3.3666-7.2898 5.5191v-.77858zm8.3923-6.87c-1.2238-1.8191 3.4023-3.4964 4.4927-5.0409 8.3684-6.3529 19.001-9.5905 29.495-8.8606 7.9193.29674 15.77 3.0082 22.311 7.4406-5.3527-2.0349-10.971-3.3439-16.485-4.8839-13.539-2.6576-28.287 1.4241-38.131 11.191-.70238.65214-1.0888 1.1464-1.6829.15394z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.9 KiB |
10
static/images/browser-ie.svg
Normal file
@ -0,0 +1,10 @@
|
||||
<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" viewBox="0 0 100 100">
|
||||
<g transform="translate(0 -952.36)">
|
||||
<g transform="matrix(.094248 0 0 .094248 2.8805 955.24)"></g>
|
||||
<g transform="matrix(.18832 0 0 .18832 4.2017 956.56)">
|
||||
<g>
|
||||
<path d="m367.1 280.8h118.02c.909-8.185 1.273-16.549 1.273-25.099 0-40.111-10.768-77.733-29.562-110.13 19.45-51.66 18.75-95.5-7.27-121.7-24.75-24.64-91.15-20.64-166.21 12.599-5.552-.42-11.158-.636-16.817-.636-103.02 0-189.46 70.897-213.35 166.42 32.318-41.377 66.318-71.377 111.74-93.224-4.13 3.87-28.227 27.826-32.28 31.882-119.77 119.74-157.54 276.16-116.9 316.81 30.893 30.887 86.879 25.671 151.19-5.824 29.903 15.229 63.75 23.815 99.61 23.815 96.565 0 178.4-62.158 208.04-148.72h-118.93c-16.366 30.19-48.373 50.739-85.107 50.739s-68.743-20.549-85.108-50.739c-7.275-13.638-11.457-29.276-11.457-45.828v-.36h193.13zm-192.95-58.02c2.728-48.555 43.1-87.292 92.384-87.292 49.282 0 89.655 38.736 92.382 87.292h-184.77zm274.33-174.5c16.763 16.94 16.344 48.107 2.006 87.011-24.57-37.458-60.26-66.972-102.4-83.824 45.06-19.319 81.71-21.878 100.39-3.191zm-401.74 401.72c-21.391-21.4-14.943-66.31 12.614-120.42 17.154 48.136 50.578 88.545 93.668 114.58-47.714 21.66-86.768 25.337-106.28 5.839z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.4 KiB |
7
static/images/browser-opera.svg
Normal file
@ -0,0 +1,7 @@
|
||||
<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" viewBox="0 0 100 100">
|
||||
<g transform="translate(0 -952.36)">
|
||||
<g transform="matrix(.094248 0 0 .094248 2.8805 955.24)"></g>
|
||||
<g transform="matrix(.18832 0 0 .18832 4.2017 956.56)"></g>
|
||||
<path style="fill:#000000" d="m41.401 1047.9c-15.184-3.4313-27.055-14.514-32.097-29.968-1.8896-5.7912-2.2419-8.3552-2.2419-16.315 0-7.7133.34205-10.428 1.9973-15.851 4.3432-14.23 14.797-24.477 28.855-28.282 3.1637-.85642 4.4999-1.004 10.407-1.1488 7.5416-.18488 10.196.16319 16.09 2.1095 13.258 4.3784 23.204 15.449 26.86 29.898 5.55 21.931-3.0849 44.309-21.234 55.029-2.6091 1.5413-6.3812 3.0931-9.7867 4.0263-3.6468.9992-15.279 1.3093-18.85.5024zm13.609-11.258c5.0503-2.4708 8.4981-9.4275 9.9833-20.143.76151-5.4946.67497-24.895-.13378-29.989-1.7607-11.09-5.0434-17.485-10.15-19.773-2.7736-1.2429-7.3443-1.2343-9.8983.0188-3.9487 1.937-7.0286 6.5962-8.6902 13.147-1.6506 6.5069-1.8367 8.7982-1.8225 22.442.01131 10.842.11812 13.461.67338 16.515 1.9995 10.997 5.6512 16.945 11.401 18.571 2.5076.7089 6.2822.3649 8.637-.7872z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.2 KiB |
5
static/images/browser-safari-ios.svg
Normal file
After Width: | Height: | Size: 5.5 KiB |
5
static/images/browser-safari.svg
Normal file
@ -0,0 +1,5 @@
|
||||
<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" viewBox="0 0 100 100">
|
||||
<g transform="translate(0 -952.36)">
|
||||
<path d="m52.788 1002.2q0 1.3678-.86801 2.3674-.86801.9995-2.1832.9995-1.3678 0-2.3673-.8681-.99953-.8679-.99953-2.1832 0-1.3676.89432-2.3673.89432-.99943 2.2095-.99943t2.3147.86803q.99953.868.99953 2.1831zm.78910 3.0513 18.412-30.565q-.47346.42084-3.551 3.2879t-6.6022 6.1287-7.1808 6.6811q-3.6562 3.4194-6.155 5.8131-2.4988 2.3936-2.6566 2.7093l-18.36 30.512q.36825-.3681 3.5247-3.2615 3.1564-2.8935 6.6285-6.1287 3.4721-3.2353 7.1545-6.6811 3.6825-3.4458 6.155-5.8394t2.6303-2.6566zm34.037-2.8934q0 10.574-5.4711 19.517-.15782-.1053-.89432-.5787-.73650-.4733-1.3941-.8679-.65758-.3945-.86801-.3945-.68389 0-.68389.6839 0 .526 3.1038 2.3146-3.8929 5.8919-9.706 10.022-5.8131 4.1297-12.705 5.8131l-.84171-3.5247q-.0526-.5261-.78910-.5261-.26304 0-.42086.2894-.15782.2893-.10522.4997l.84171 3.5773q-3.7877.7891-7.6806.7891-10.469 0-19.57-5.5237.0526-.1054.68389-1.0785.63128-.9731 1.131-1.7622.49976-.7891.49976-.9997 0-.6837-.68389-.6837-.31564 0-.89432.7627-.57868.7628-1.1837 1.815-.60498 1.052-.71019 1.2099-5.9446-3.9455-10.101-9.8638-4.1559-5.9183-5.7868-12.862l3.6299-.7891q.52607-.1579.52607-.7891 0-.2631-.28934-.4208-.28934-.1579-.55237-.1054l-3.5773.7891q-.73650-3.7877-.73650-7.3123 0-10.837 5.7341-19.938.10522.0527.97323.63128.86801.57867 1.5782.99953.71019.42087.92062.42087.68389 0 .68389-.63129 0-.31564-.65759-.81541-.65758-.49976-1.7097-1.131l-1.0521-.6313q4.0507-5.892 9.9427-9.9427t12.836-5.6289l.78910 3.5247q.10522.52607.78910.52607.26303 0 .42085-.28934.15782-.28933.10522-.55237l-.78910-3.4721q3.7351-.68389 7.0493-.68389 10.732 0 19.938 5.7342-2.0517 2.946-2.0517 3.4194 0 .68389.63128.68389.57868 0 2.5251-3.3668 5.8394 3.9455 9.8638 9.7849t5.6552 12.678l-2.946.63128q-.52607.10521-.52607.84171 0 .26303.28934.42085t.49976.10521l2.9986-.68389q.73650 3.7877.73650 7.365zm4.4716 0q0-8.5749-3.3405-16.361-3.3405-7.7858-8.9695-13.415-5.6289-5.6289-13.415-8.9695-7.786-3.37-16.361-3.37-8.5749 0-16.361 3.3405-7.7858 3.3405-13.415 8.9695-5.6289 5.6289-8.9695 13.415-3.3405 7.7858-3.3405 16.361 0 8.5748 3.3405 16.361 3.3405 7.7859 8.9695 13.415 5.6289 5.629 13.415 8.9695 7.7858 3.3405 16.361 3.3405 8.5749 0 16.361-3.3405 7.7858-3.3405 13.415-8.9695 5.6289-5.6289 8.9695-13.415 3.3405-7.7859 3.3405-16.361zm5.0503 0q0 9.5744-3.7351 18.307-3.7351 8.7327-10.048 15.046-6.3128 6.3128-15.046 10.048-8.7327 3.735-18.307 3.735-9.5744 0-18.307-3.735-8.7327-3.7351-15.046-10.048-6.3128-6.3129-10.048-15.046-3.7351-8.7328-3.7351-18.307 0-9.5745 3.7351-18.307 3.7351-8.7327 10.048-15.046 6.3128-6.3128 15.046-10.048 8.7327-3.7351 18.307-3.7351 9.5744 0 18.307 3.7351 8.7327 3.7351 15.046 10.048 6.3128 6.3128 10.048 15.046 3.7351 8.7328 3.7351 18.307z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.9 KiB |