Website Summary Files Commits Branches @commit @diff @stats
path: root / website
diff options
context:
space:
mode:
Commit3245f1f1404785d92c21eb381c08dee5a4be6bb7 (patch)
Author
 Dimitar Trendafilov <dimitar@coherent-labs.com>
2018-09-04 09:08:41 +0300
Committer
 Dimitar Trendafilov <dimitar@coherent-labs.com>
2018-09-04 09:08:41 +0300
Files3c245582fb5a2a9eaf8518f7272c03a6aaa2f635 /website
IPL-3245f1f1404785d92c21eb381c08dee5a4be6bb7.tar
IPL-3245f1f1404785d92c21eb381c08dee5a4be6bb7.tar.gz
IPL-3245f1f1404785d92c21eb381c08dee5a4be6bb7.zip
Parentae12c0a482298e4da9b816137ceb6131c7d4b9e4 (diff)
Moved site to website folder
124 files changed, 9877 insertions, 0 deletions
-rw-r--r--website/README.md51
-rw-r--r--website/archetypes/default.md6
-rw-r--r--website/config.toml43
-rw-r--r--website/content/page/intro.md17
-rw-r--r--website/content/post/intro.md18
-rw-r--r--website/content/slides/_index.md19
-rw-r--r--website/data/reveal_hugo.toml8
-rw-r--r--website/layouts/_default/baseof.reveal.html87
-rw-r--r--website/layouts/_default/index.reveal.html3
-rw-r--r--website/layouts/_default/list.reveal.html3
-rw-r--r--website/layouts/_default/single.reveal.html0
-rw-r--r--website/layouts/partials/reveal-hugo/body.html1
-rw-r--r--website/layouts/partials/reveal-hugo/head.html1
-rw-r--r--website/layouts/partials/reveal-hugo/slides.html24
-rw-r--r--website/layouts/shortcodes/frag.html4
-rw-r--r--website/layouts/shortcodes/fragment.html4
-rw-r--r--website/layouts/shortcodes/markdown.html8
-rw-r--r--website/layouts/shortcodes/note.html1
-rw-r--r--website/layouts/shortcodes/section.html3
-rw-r--r--website/layouts/shortcodes/slide.html48
-rw-r--r--website/publish.sh23
-rw-r--r--website/static/images/wrench.pngbin0 -> 25941 bytes
-rw-r--r--website/themes/natrium/.editorconfig17
-rw-r--r--website/themes/natrium/LICENSE.md22
-rw-r--r--website/themes/natrium/README.md65
-rw-r--r--website/themes/natrium/archetypes/default.md5
-rw-r--r--website/themes/natrium/exampleSite/config.toml41
-rw-r--r--website/themes/natrium/exampleSite/content/page/about.md6
-rw-r--r--website/themes/natrium/exampleSite/content/page/site-notice.md15
-rw-r--r--website/themes/natrium/exampleSite/content/post/extending-this-logic.md11
-rw-r--r--website/themes/natrium/exampleSite/content/post/the-actor-is-a-gander.md13
-rw-r--r--website/themes/natrium/exampleSite/content/post/the-beach-is-a-push.md15
-rw-r--r--website/themes/natrium/exampleSite/static/.gitkeep0
-rw-r--r--website/themes/natrium/i18n/de.toml14
-rw-r--r--website/themes/natrium/i18n/en.toml14
-rw-r--r--website/themes/natrium/i18n/zh.toml14
-rw-r--r--website/themes/natrium/images/screenshot.pngbin0 -> 234858 bytes
-rw-r--r--website/themes/natrium/images/tn.pngbin0 -> 88601 bytes
-rw-r--r--website/themes/natrium/layouts/404.html17
-rw-r--r--website/themes/natrium/layouts/_default/list.html1
-rw-r--r--website/themes/natrium/layouts/_default/single.html31
-rw-r--r--website/themes/natrium/layouts/index.html20
-rw-r--r--website/themes/natrium/layouts/partials/footer.html13
-rw-r--r--website/themes/natrium/layouts/partials/head.html31
-rw-r--r--website/themes/natrium/layouts/partials/header.html10
-rw-r--r--website/themes/natrium/layouts/partials/list-item.html6
-rw-r--r--website/themes/natrium/layouts/partials/nav.html14
-rw-r--r--website/themes/natrium/layouts/partials/pagination.html34
-rw-r--r--website/themes/natrium/layouts/rss.xml28
-rw-r--r--website/themes/natrium/layouts/taxonomy/category.html18
-rw-r--r--website/themes/natrium/layouts/taxonomy/category.terms.html22
-rw-r--r--website/themes/natrium/layouts/taxonomy/tag.html18
-rw-r--r--website/themes/natrium/layouts/taxonomy/tag.terms.html31
-rw-r--r--website/themes/natrium/static/css/fonts.css89
-rw-r--r--website/themes/natrium/static/css/main.css536
-rw-r--r--website/themes/natrium/static/fonts/fontawesome-webfont.woffbin0 -> 98024 bytes
-rw-r--r--website/themes/natrium/static/fonts/fontawesome-webfont.woff2bin0 -> 77160 bytes
-rw-r--r--website/themes/natrium/static/fonts/lato-v14-latin-700.woffbin0 -> 27848 bytes
-rw-r--r--website/themes/natrium/static/fonts/lato-v14-latin-700.woff2bin0 -> 22820 bytes
-rw-r--r--website/themes/natrium/static/fonts/lato-v14-latin-700italic.woffbin0 -> 29692 bytes
-rw-r--r--website/themes/natrium/static/fonts/lato-v14-latin-700italic.woff2bin0 -> 24240 bytes
-rw-r--r--website/themes/natrium/static/fonts/lato-v14-latin-italic.woffbin0 -> 29600 bytes
-rw-r--r--website/themes/natrium/static/fonts/lato-v14-latin-italic.woff2bin0 -> 24192 bytes
-rw-r--r--website/themes/natrium/static/fonts/lato-v14-latin-regular.woffbin0 -> 28412 bytes
-rw-r--r--website/themes/natrium/static/fonts/lato-v14-latin-regular.woff2bin0 -> 23316 bytes
-rw-r--r--website/themes/natrium/static/fonts/merriweather-v19-latin-700.woffbin0 -> 22696 bytes
-rw-r--r--website/themes/natrium/static/fonts/merriweather-v19-latin-700.woff2bin0 -> 18484 bytes
-rw-r--r--website/themes/natrium/static/fonts/merriweather-v19-latin-700italic.woffbin0 -> 23024 bytes
-rw-r--r--website/themes/natrium/static/fonts/merriweather-v19-latin-700italic.woff2bin0 -> 18856 bytes
-rw-r--r--website/themes/natrium/static/fonts/merriweather-v19-latin-italic.woffbin0 -> 22884 bytes
-rw-r--r--website/themes/natrium/static/fonts/merriweather-v19-latin-italic.woff2bin0 -> 18740 bytes
-rw-r--r--website/themes/natrium/static/fonts/merriweather-v19-latin-regular.woffbin0 -> 23036 bytes
-rw-r--r--website/themes/natrium/static/fonts/merriweather-v19-latin-regular.woff2bin0 -> 18816 bytes
-rw-r--r--website/themes/natrium/static/fonts/roboto-mono-v5-latin-regular.woffbin0 -> 19576 bytes
-rw-r--r--website/themes/natrium/static/fonts/roboto-mono-v5-latin-regular.woff2bin0 -> 16028 bytes
-rw-r--r--website/themes/natrium/static/images/logo.pngbin0 -> 15155 bytes
-rw-r--r--website/themes/natrium/theme.toml17
-rw-r--r--website/themes/reveal-hugo/.gitignore2
-rw-r--r--website/themes/reveal-hugo/LICENSE21
-rw-r--r--website/themes/reveal-hugo/README.md371
-rw-r--r--website/themes/reveal-hugo/data/reveal_hugo.toml8
-rw-r--r--website/themes/reveal-hugo/exampleSite/.forestry/settings.yml12
-rw-r--r--website/themes/reveal-hugo/exampleSite/config.toml20
-rw-r--r--website/themes/reveal-hugo/exampleSite/content/_index.md22
-rw-r--r--website/themes/reveal-hugo/exampleSite/content/example/_index.md10
-rw-r--r--website/themes/reveal-hugo/exampleSite/content/example/presentation.md7
-rw-r--r--website/themes/reveal-hugo/exampleSite/content/home/features.md19
-rw-r--r--website/themes/reveal-hugo/exampleSite/content/home/resources.md43
-rw-r--r--website/themes/reveal-hugo/exampleSite/content/home/shortcodes/fragment.md41
-rw-r--r--website/themes/reveal-hugo/exampleSite/content/home/shortcodes/introduction.md11
-rw-r--r--website/themes/reveal-hugo/exampleSite/content/home/shortcodes/markdown.md38
-rw-r--r--website/themes/reveal-hugo/exampleSite/content/home/shortcodes/other.md33
-rw-r--r--website/themes/reveal-hugo/exampleSite/content/home/shortcodes/section.md44
-rw-r--r--website/themes/reveal-hugo/exampleSite/content/home/shortcodes/slide.md137
-rw-r--r--website/themes/reveal-hugo/exampleSite/content/home/usage.md173
-rw-r--r--website/themes/reveal-hugo/exampleSite/data/home.toml42
-rw-r--r--website/themes/reveal-hugo/exampleSite/layouts/partials/reveal-hugo/body.html12
-rw-r--r--website/themes/reveal-hugo/exampleSite/static/_redirects2
-rw-r--r--website/themes/reveal-hugo/exampleSite/static/favicon.icobin0 -> 969 bytes
-rw-r--r--website/themes/reveal-hugo/exampleSite/static/reveal-hugo/themes/robot-lung.css333
-rw-r--r--website/themes/reveal-hugo/images/reveal-hugo-hello-world.pngbin0 -> 99617 bytes
-rw-r--r--website/themes/reveal-hugo/images/screenshot.pngbin0 -> 65024 bytes
-rw-r--r--website/themes/reveal-hugo/images/tn.pngbin0 -> 36280 bytes
-rw-r--r--website/themes/reveal-hugo/layouts/_default/baseof.reveal.html87
-rw-r--r--website/themes/reveal-hugo/layouts/_default/index.reveal.html3
-rw-r--r--website/themes/reveal-hugo/layouts/_default/list.reveal.html3
-rw-r--r--website/themes/reveal-hugo/layouts/_default/single.reveal.html0
-rw-r--r--website/themes/reveal-hugo/layouts/partials/reveal-hugo/body.html1
-rw-r--r--website/themes/reveal-hugo/layouts/partials/reveal-hugo/head.html1
-rw-r--r--website/themes/reveal-hugo/layouts/partials/reveal-hugo/slides.html24
-rw-r--r--website/themes/reveal-hugo/layouts/shortcodes/frag.html4
-rw-r--r--website/themes/reveal-hugo/layouts/shortcodes/fragment.html4
-rw-r--r--website/themes/reveal-hugo/layouts/shortcodes/markdown.html8
-rw-r--r--website/themes/reveal-hugo/layouts/shortcodes/note.html1
-rw-r--r--website/themes/reveal-hugo/layouts/shortcodes/section.html3
-rw-r--r--website/themes/reveal-hugo/layouts/shortcodes/slide.html48
-rw-r--r--website/themes/reveal-hugo/netlify.toml9
-rw-r--r--website/themes/reveal-hugo/package-lock.json5117
-rw-r--r--website/themes/reveal-hugo/package.json8
-rw-r--r--website/themes/reveal-hugo/static/reveal-hugo/plugin/notes/notes.html759
-rw-r--r--website/themes/reveal-hugo/static/reveal-hugo/plugin/notes/notes.js155
-rw-r--r--website/themes/reveal-hugo/static/reveal-hugo/themes/robot-lung.css333
-rw-r--r--website/themes/reveal-hugo/static/reveal-hugo/themes/sunblind.css333
-rw-r--r--website/themes/reveal-hugo/theme.toml15
diff --git a/website/README.md b/website/README.md
new file mode 100644
index 0000000..50bb481
--- /dev/null
+++ b/website/README.md
@@ -0,0 +1,51 @@
+# Implementation of Programming Languages
+
+This is the code of the website of a course on implementing a programming
+language. The website is hosted at https://sofiacpp.github.io/IPL.
+
+## Working with the website
+
+The website is deployed as GitHub pages from the contents of the gh-pages branch
+of this repository.
+
+
+### Requirements
+
+- Git and Git-Bash on Windows
+- [hugo](https://gohugo.io)
+
+### Checking out the code
+
+Simply clone this repository.
+
+### Setting up the clone
+
+1. Make sure that `git` and `hugo` are in the path
+2. Add the gh-pages as a *git worktree* under the public folder
+
+ git worktree add public gh-pages
+
+### Creating new content
+
+#### Creating new posts
+
+The normal hugo way of creating new posts applies
+
+ hugo new content/posts/post.md
+ hugo new content/page/page.md
+
+Creating new slides requires using a different template. You can use the
+*content/slides* as boilerplate.
+
+ cp -R content/slides content/myslides
+ edit content/myslides/_index.md
+
+### Publishing changes
+
+1. Make any changes to the content and **COMMIT**
+2. Run the publish.sh script
+
+ sh publish.sh
+
+ It will generate the new version inside the *public* folder, commit and push
+ it.
diff --git a/website/archetypes/default.md b/website/archetypes/default.md
new file mode 100644
index 0000000..00e77bd
--- /dev/null
+++ b/website/archetypes/default.md
@@ -0,0 +1,6 @@
+---
+title: "{{ replace .Name "-" " " | title }}"
+date: {{ .Date }}
+draft: true
+---
+
diff --git a/website/config.toml b/website/config.toml
new file mode 100644
index 0000000..b77aaf3
--- /dev/null
+++ b/website/config.toml
@@ -0,0 +1,43 @@
+baseURL = "https://sofiacpp.github.io/IPL/"
+languageCode = "en-us"
+title = "Implementation of Programming Languages"
+theme = "natrium"
+
+preserveTaxonomyNames = true
+rssLimit = 10
+paginate = 10
+pygmentsCodefences = true
+pygmentsStyle = "native"
+
+[taxonomies]
+ category = "categories"
+ tag = "tags"
+
+[permalinks]
+ post = "/:slug/"
+ page = "/:slug/"
+
+[[menu.main]]
+ name = "About"
+ url = "/about/"
+ weight = -110
+
+[[menu.main]]
+ name = "Categories"
+ url = "/categories"
+ weight = -130
+
+[params]
+ description = "Course on implementing a programming language"
+ GitHubURL = "https://github.com/SofiaCPP/IPL"
+
+ [params.logo]
+ url = "wrench.png"
+ width = 50
+ height = 50
+ alt = "Logo"
+
+[outputFormats.Reveal]
+baseName = "index"
+mediaType = "text/html"
+isHTML = true
diff --git a/website/content/page/intro.md b/website/content/page/intro.md
new file mode 100644
index 0000000..726e99f
--- /dev/null
+++ b/website/content/page/intro.md
@@ -0,0 +1,17 @@
+---
+title: "Intro"
+date: 2018-08-02T17:38:31+03:00
+draft: false
+---
+
+# Test Hugo reveal tests
+
+- Title
+- Bullet
+
+---
+
+# Extra slide
+
+FMI course stuff.
+
diff --git a/website/content/post/intro.md b/website/content/post/intro.md
new file mode 100644
index 0000000..59e67e3
--- /dev/null
+++ b/website/content/post/intro.md
@@ -0,0 +1,18 @@
+---
+title: "Intro"
+date: 2018-08-02T17:45:53+03:00
+draft: false
+---
+
+# Test Hugo reveal tests
+
+- Title
+- Bullet
+
+---
+
+# Extra slide
+
+FMI course stuff.
+
+
diff --git a/website/content/slides/_index.md b/website/content/slides/_index.md
new file mode 100644
index 0000000..e14fb36
--- /dev/null
+++ b/website/content/slides/_index.md
@@ -0,0 +1,19 @@
+---
+title: "Intro Slides"
+date: 2018-08-02T17:45:53+03:00
+draft: false
+outputs: ["Reveal"]
+---
+
+# Test Hugo reveal tests
+
+- Title
+- Bullet
+
+---
+
+# Extra slide
+
+FMI course stuff.
+
+
diff --git a/website/data/reveal_hugo.toml b/website/data/reveal_hugo.toml
new file mode 100644
index 0000000..973cc27
--- /dev/null
+++ b/website/data/reveal_hugo.toml
@@ -0,0 +1,8 @@
+[defaults]
+theme = 'black'
+highlight_theme = 'default'
+controls = true
+progress = true
+history = true
+center = true
+transition = 'slide' # none/fade/slide/convex/concave/zoom
diff --git a/website/layouts/_default/baseof.reveal.html b/website/layouts/_default/baseof.reveal.html
new file mode 100644
index 0000000..1e3868b
--- /dev/null
+++ b/website/layouts/_default/baseof.reveal.html
@@ -0,0 +1,87 @@
+<!doctype html>
+{{- $reveal_cdn := "https://cdnjs.cloudflare.com/ajax/libs/reveal.js/3.6.0" -}}
+{{- $highlight_cdn := "https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0" -}}
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <title>{{ or .Page.Title .Site.Title }}</title>
+ <meta name="description" content="{{ or .Page.Params.Description .Site.Params.Description }}">
+ <meta name="author" content="{{ .Site.Author.name }}">
+ <meta name="apple-mobile-web-app-capable" content="yes">
+ <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
+ <link rel="stylesheet" href="{{ $reveal_cdn }}/css/reveal.min.css">
+ <!-- Theme used for presentation -->
+ {{- $theme := or .Page.Params.reveal_hugo.theme .Site.Params.reveal_hugo.theme .Site.Data.reveal_hugo.defaults.theme "black" -}}
+ {{- $custom_theme := or .Page.Params.reveal_hugo.custom_theme .Site.Params.reveal_hugo.custom_theme -}}
+ {{- if $custom_theme -}}
+ <link rel="stylesheet" href="{{ $custom_theme | relURL }}" id="theme">
+ {{ else -}}
+ <link rel="stylesheet" href="{{ $reveal_cdn }}/css/theme/{{ $theme }}.css" id="theme">
+ {{- end -}}
+ <!-- Theme used for syntax highlighting of code -->
+ {{- $highlight_theme := or .Page.Params.reveal_hugo.highlight_theme .Site.Params.reveal_hugo.highlight_theme .Site.Data.reveal_hugo.defaults.highlight_theme "default" -}}
+ <link rel="stylesheet" href="{{ $highlight_cdn }}/styles/{{ $highlight_theme }}.min.css">
+ <!-- Printing and PDF exports -->
+ <script>
+ var link = document.createElement( 'link' );
+ link.rel = 'stylesheet';
+ link.type = 'text/css';
+ link.href = window.location.search.match( /print-pdf/gi ) ? '{{ $reveal_cdn}}/css/print/pdf.css' : '{{ $reveal_cdn }}/css/print/paper.css';
+ document.getElementsByTagName( 'head' )[0].appendChild( link );
+ </script>
+ <!--[if lt IE 9]>
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv.js"></script>
+ <![endif]-->
+ {{- partial "reveal-hugo/head" . -}}
+ </head>
+ <body>
+ {{- block "main" . -}}{{- end -}}
+ <script type="application/json" id="reveal-hugo-page-params">{{ jsonify .Page.Params.reveal_hugo | safeJS }}</script>
+ <script type="application/json" id="reveal-hugo-site-params">{{ jsonify .Site.Params.reveal_hugo | safeJS }}</script>
+ <script type="application/json" id="reveal-hugo-defaults">{{ jsonify .Site.Data.reveal_hugo.defaults | safeJS }}</script>
+ <script type="text/javascript">
+ window.revealHugoDependencies = {
+ dependencies: [
+ { src: '{{ $reveal_cdn }}/lib/js/classList.js', condition: function() { return !document.body.classList; } },
+ { src: '{{ $reveal_cdn }}/plugin/markdown/marked.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
+ { src: '{{ $reveal_cdn }}/plugin/markdown/markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
+ { src: '{{ $reveal_cdn }}/plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } },
+ { src: '{{ $reveal_cdn }}/plugin/zoom-js/zoom.js', async: true },
+ // the notes plugin can't run off the CDN b/c the HTML file isn't there
+ { src: '{{ "reveal-hugo/plugin/notes/notes.js" | relURL }}', async: true }
+ ]};
+ </script>
+ <script src="{{ $reveal_cdn }}/lib/js/head.min.js"></script>
+ <script src="{{ $reveal_cdn }}/js/reveal.js"></script>
+ <script type="text/javascript">
+ // Hugo lowercases all params and Reveal.js needs camelcase
+ // So params in Hugo must be stored in snakecase and we camelize them here
+ function camelize(map) {
+ if (map) {
+ Object.keys(map).forEach(function(k) {
+ newK = k.replace(/(\_\w)/g, function(m) { return m[1].toUpperCase() });
+ if (newK != k) {
+ map[newK] = map[k];
+ delete map[k];
+ }
+ });
+ }
+ return map;
+ }
+ // pattern inspired by https://github.com/RealOrangeOne/hugo-theme-revealjs
+ var revealHugoPageParams = JSON.parse(document.getElementById('reveal-hugo-page-params').innerHTML);
+ var revealHugoSiteParams = JSON.parse(document.getElementById('reveal-hugo-site-params').innerHTML);
+ var revealHugoDefaults = JSON.parse(document.getElementById('reveal-hugo-defaults').innerHTML);
+ // See all options - https://github.com/hakimel/reveal.js#configuration
+ var options = Object.assign({},
+ camelize(revealHugoDefaults),
+ camelize(revealHugoSiteParams),
+ camelize(revealHugoPageParams),
+ revealHugoDependencies);
+ Reveal.initialize(options);
+ </script>
+
+ {{ partial "reveal-hugo/body" . }}
+ </body>
+</html>
diff --git a/website/layouts/_default/index.reveal.html b/website/layouts/_default/index.reveal.html
new file mode 100644
index 0000000..8faa735
--- /dev/null
+++ b/website/layouts/_default/index.reveal.html
@@ -0,0 +1,3 @@
+{{ define "main" }}
+ {{ partial "reveal-hugo/slides" (union (slice .Page) (where .Data.Pages "Type" "home")) }}
+{{ end }}
diff --git a/website/layouts/_default/list.reveal.html b/website/layouts/_default/list.reveal.html
new file mode 100644
index 0000000..6c3c470
--- /dev/null
+++ b/website/layouts/_default/list.reveal.html
@@ -0,0 +1,3 @@
+{{ define "main" }}
+ {{ partial "reveal-hugo/slides" (union (slice .Page) .Pages) }}
+{{ end }}
diff --git a/website/layouts/_default/single.reveal.html b/website/layouts/_default/single.reveal.html
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/website/layouts/_default/single.reveal.html
diff --git a/website/layouts/partials/reveal-hugo/body.html b/website/layouts/partials/reveal-hugo/body.html
new file mode 100644
index 0000000..f2dd4bf
--- /dev/null
+++ b/website/layouts/partials/reveal-hugo/body.html
@@ -0,0 +1 @@
+<!-- override this partial to add content before the body tag closes --> \ No newline at end of file
diff --git a/website/layouts/partials/reveal-hugo/head.html b/website/layouts/partials/reveal-hugo/head.html
new file mode 100644
index 0000000..ed1e892
--- /dev/null
+++ b/website/layouts/partials/reveal-hugo/head.html
@@ -0,0 +1 @@
+<!-- override this partial to add content before the head tag closes --> \ No newline at end of file
diff --git a/website/layouts/partials/reveal-hugo/slides.html b/website/layouts/partials/reveal-hugo/slides.html
new file mode 100644
index 0000000..e578882
--- /dev/null
+++ b/website/layouts/partials/reveal-hugo/slides.html
@@ -0,0 +1,24 @@
+<div class="reveal">
+ <!-- Any section element inside of this container is displayed as a slide -->
+ <div class="slides">
+ <!-- Use the array of pages passed as a param -->
+ {{ range . -}}
+ <!-- Don't process empty content files -->
+ {{- if ne (len .Content) 0 -}}
+ <!-- Remove the <hr /> tag generated by blackfriday for footnotes -->
+ {{- $content := replace .Content "<div class=\"footnotes\">\n\n<hr />" "<div class=\"footnotes\">" -}}
+ <!-- Split the processed content by <hr /> tag -->
+ {{- range (split $content "<hr />") -}}
+ <!-- Only wrap in <section> tag if not already wrapped by shortcode -->
+ {{- if in . "data-noprocess" -}}
+{{- . | safeHTML -}}
+ {{- else }}
+<section>
+ {{- . | safeHTML }}
+</section>
+ {{- end -}}
+ {{- end -}}
+ {{- end -}}
+ {{- end }}
+ </div>
+</div> \ No newline at end of file
diff --git a/website/layouts/shortcodes/frag.html b/website/layouts/shortcodes/frag.html
new file mode 100644
index 0000000..c1de8c8
--- /dev/null
+++ b/website/layouts/shortcodes/frag.html
@@ -0,0 +1,4 @@
+<span class='fragment {{ .Get "class" }}'
+ {{ with .Get "index" }}data-fragment-index='{{ . }}'{{ end }}>
+ {{ .Get "c" }}
+</span> \ No newline at end of file
diff --git a/website/layouts/shortcodes/fragment.html b/website/layouts/shortcodes/fragment.html
new file mode 100644
index 0000000..dc41e03
--- /dev/null
+++ b/website/layouts/shortcodes/fragment.html
@@ -0,0 +1,4 @@
+<span class='fragment {{ .Get "class" }}'
+ {{ with .Get "index" }}data-fragment-index='{{ . }}'{{ end }}>
+ {{ .Inner }}
+</span> \ No newline at end of file
diff --git a/website/layouts/shortcodes/markdown.html b/website/layouts/shortcodes/markdown.html
new file mode 100644
index 0000000..f5effbc
--- /dev/null
+++ b/website/layouts/shortcodes/markdown.html
@@ -0,0 +1,8 @@
+<section data-noprocess data-markdown
+ data-separator="^\r?\n---\r?\n$"
+ data-separator-vertical="^\r?\n------\r?\n$"
+ data-separator-notes="notes?:">
+ <script type="text/template">
+ {{ .Inner }}
+ </script>
+</section> \ No newline at end of file
diff --git a/website/layouts/shortcodes/note.html b/website/layouts/shortcodes/note.html
new file mode 100644
index 0000000..5d28fce
--- /dev/null
+++ b/website/layouts/shortcodes/note.html
@@ -0,0 +1 @@
+<aside class="notes">{{ .Inner }}</aside> \ No newline at end of file
diff --git a/website/layouts/shortcodes/section.html b/website/layouts/shortcodes/section.html
new file mode 100644
index 0000000..43611a4
--- /dev/null
+++ b/website/layouts/shortcodes/section.html
@@ -0,0 +1,3 @@
+<section data-shortcode-section>
+{{ .Inner }}
+</section> \ No newline at end of file
diff --git a/website/layouts/shortcodes/slide.html b/website/layouts/shortcodes/slide.html
new file mode 100644
index 0000000..7bb41ec
--- /dev/null
+++ b/website/layouts/shortcodes/slide.html
@@ -0,0 +1,48 @@
+{{- $scratch := .Scratch -}}
+{{- $scratch.Set "slides" slice -}}
+{{- if len .Inner -}}
+ {{- $scratch.Add "slides" .Inner -}}
+{{- end -}}
+{{- $content := .Get "content" -}}
+{{- if $content -}}
+ {{- $lookup := split $content "." }}
+ {{- $html := index .Page.Site.Data (index $lookup 0) (index $lookup 1) | markdownify -}}
+ {{- $slides := split $html "<hr />" -}}
+ {{- range $slides -}}
+ {{- $scratch.Add "slides" . -}}
+ {{- end -}}
+{{- end -}}
+{{- $params := . -}}
+{{- $noPrefix := slice "id" "class" -}}
+{{- $noOutput := slice "content" "template" -}}
+{{- range $scratch.Get "slides" }}
+<section data-noprocess data-shortcode-slide
+ {{- $template := $params.Get "template" -}}
+ {{- if $template -}}
+ {{- $scratch.Add "templateParams" (slice $.Site.Params.reveal_hugo.templates) -}}
+ {{- if ne $.Page.File.LogicalName "_index.md" -}}
+ {{- $scratch.Add "templateParams" (slice ($.Site.GetPage $.Page.Section).Params.reveal_hugo.templates) -}}
+ {{- end -}}
+ {{- $scratch.Add "templateParams" (slice $.Page.Params.reveal_hugo.templates) -}}
+ {{- range ($scratch.Get "templateParams") -}}
+ {{- if (ne . nil) -}}
+ {{- range $key, $value := (index . $template) -}}
+ {{- $scratch.SetInMap "template" $key $value | safeHTMLAttr -}}
+ {{- end -}}
+ {{- end -}}
+ {{- end -}}
+ {{- range $key, $value := ($scratch.Get "template") }}
+ {{- $attrName := cond (in $noPrefix $key) $key (delimit (slice "data" $key) "-") }}
+ {{ $attrName | safeHTMLAttr }}="{{ $value }}"
+ {{- end }}
+ data-template="{{ $template }}"
+ {{- end -}}
+ {{- range $key, $value := $.Params -}}
+ {{- if not (in $noOutput $key) -}}
+ {{- $attrName := cond (in $noPrefix $key) $key (delimit (slice "data" $key) "-") }}
+ {{ $attrName | safeHTMLAttr }}="{{ $value }}"
+ {{- end -}}
+ {{- end -}}>
+ {{ . | safeHTML }}
+</section>
+{{- end -}} \ No newline at end of file
diff --git a/website/publish.sh b/website/publish.sh
new file mode 100644
index 0000000..5959fe9
--- /dev/null
+++ b/website/publish.sh
@@ -0,0 +1,23 @@
+#!/usr/bin/sh
+
+set -e
+
+commit=`git log -n1 --format=%H`
+
+
+# Be sure that we are up-to-date
+pushd public
+git pull --ff-only
+popd
+
+rm -rf public/*
+
+hugo --minify
+
+pushd public
+
+git add --all .
+git commit -m "Published from $commit"
+git push
+
+popd
diff --git a/website/static/images/wrench.png b/website/static/images/wrench.png
new file mode 100644
index 0000000..3a3f625
--- /dev/null
+++ b/website/static/images/wrench.png
Binary files differ
diff --git a/website/themes/natrium/.editorconfig b/website/themes/natrium/.editorconfig
new file mode 100644
index 0000000..696c039
--- /dev/null
+++ b/website/themes/natrium/.editorconfig
@@ -0,0 +1,17 @@
+# editorconfig.org
+
+root = true
+
+[*]
+charset = utf-8
+indent_size = 2
+indent_style = space
+end_of_line = lf
+insert_final_newline = true
+trim_trailing_whitespace = true
+
+[*.md]
+trim_trailing_whitespace = false
+
+[*.{yaml,toml}]
+indent_size = 4
diff --git a/website/themes/natrium/LICENSE.md b/website/themes/natrium/LICENSE.md
new file mode 100644
index 0000000..63d8892
--- /dev/null
+++ b/website/themes/natrium/LICENSE.md
@@ -0,0 +1,22 @@
+MIT License
+
+Copyright (c) 2018 Tim Krieger
+Copyright (c) 2016 Jonathan Rutheiser (original theme)
+
+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.
diff --git a/website/themes/natrium/README.md b/website/themes/natrium/README.md
new file mode 100644
index 0000000..fbf245e
--- /dev/null
+++ b/website/themes/natrium/README.md
@@ -0,0 +1,65 @@
+# Hugo Natrium
+
+A simple responsive blog theme for [Hugo](https://gohugo.io/) based on [Lithium](https://github.com/jrutheiser/hugo-lithium-theme.git)
+
+## Changes
+
+Natrium includes: taxonomies (categories, tags), static footer, new fonts (Roboto Mono, Font Awesome), local fonts, syntax highlighting, better support for code, img and RSS, pagination, multiple design optimizations, i18n, 404.html...
+
+## History
+
+I learned a lot while playing with the code from Lithium. I'm an absolutly beginner. Please report any issue you recognize.
+
+## Features
+
+- Blog
+- Responsive
+- Privacy (no Google)
+- Taxonomies
+- Syntax highlighting
+- Pagination
+
+## Installation
+
+Run the following inside your Hugo site folder:
+
+```
+$ mkdir themes
+$ cd themes
+$ git clone https://github.com/mobybit/hugo-natrium-theme
+```
+
+## Configuration
+
+Take a look at the sample [config.toml](https://github.com/mobybit/hugo-natrium-theme/blob/master/exampleSite/config.toml)
+file located in the [exampleSite](https://github.com/mobybit/hugo-natrium-theme/blob/master/exampleSite) folder.
+
+## Content Types
+
+### Post
+
+Used for blog posts. Blog posts are listed on the homepage.
+
+Run `hugo new post/<post-name>.md` to create a post.
+
+### Page
+
+Used for site pages.
+
+Run `hugo new page/<page-name>.md` to create a page.
+
+## Syntax highlighting
+
+Natrium is using [Chroma](https://gohugo.io/content-management/syntax-highlighting/) and `pygmentsStyle = "native"` by default. If you would like to use another style you have to adjust the colors in `pre` in main.css.
+
+## License
+
+The code is available under the [MIT License](https://github.com/mobybit/hugo-natrium-theme/blob/master/LICENSE.md).
+
+Natrium is using [Font Awesome](http://fontawesome.io) by Dave Gandy ([SIL OFL 1.1](http://scripts.sil.org/OFL)). Realated files (CSS, LESS, SCSS) are licensed under the [MIT License](http://opensource.org/licenses/mit-license.html).
+
+Other used fonts are [Merriweather](https://github.com/EbenSorkin/Merriweather) by Sorkin Type (Copyright © 2016 The Merriweather Project, [SIL OFL 1.1](http://scripts.sil.org/OFL)), [Lato](http://www.latofonts.com/) by Łukasz Dziedzic (Copyright © 2010-2014 by tyPoland Lukasz Dziedzic, [SIL OFL 1.1](http://scripts.sil.org/OFL)) and [Roboto Mono](https://github.com/google/roboto/) by Christian Robertson (Copyright © 2015 Google Inc., [Apache License 2.0](http://www.apache.org/licenses/LICENSE-2.0)).
+
+Special thanks to [Artem Sidorenko](https://www.sidorenko.io/post/2017/07/nice-tagcloud-with-hugo/) (tag cloud).
+
+The content of the example site is generated with [Metamorphosum](http://metaphorpsum.com/) (Copyright © 2014 Kyle Stetz, [MIT License](https://github.com/kylestetz/metaphorpsum/blob/master/LICENSE.md)).
diff --git a/website/themes/natrium/archetypes/default.md b/website/themes/natrium/archetypes/default.md
new file mode 100644
index 0000000..45676d7
--- /dev/null
+++ b/website/themes/natrium/archetypes/default.md
@@ -0,0 +1,5 @@
++++
+title = "{{ replace .TranslationBaseName "-" " " | title }}"
+date = "{{ dateFormat "2006-01-02" .Date }}"
+draft = true
++++
diff --git a/website/themes/natrium/exampleSite/config.toml b/website/themes/natrium/exampleSite/config.toml
new file mode 100644
index 0000000..cf85b0c
--- /dev/null
+++ b/website/themes/natrium/exampleSite/config.toml
@@ -0,0 +1,41 @@
+baseurl = "https://example.org/"
+languageCode = "en-us"
+title = "Natrium Theme"
+theme = "hugo-natrium-theme"
+preserveTaxonomyNames = true
+rssLimit = 10
+paginate = 10
+pygmentsCodefences = true
+pygmentsStyle = "native"
+
+[taxonomies]
+ category = "categories"
+ tag = "tags"
+
+[permalinks]
+ post = "/:slug/"
+ page = "/:slug/"
+
+[[menu.main]]
+ name = "About"
+ url = "/about/"
+ weight = -110
+
+[[menu.main]]
+ name = "Tags"
+ url = "/tags"
+ weight = -120
+
+[[menu.main]]
+ name = "Categories"
+ url = "/categories"
+ weight = -130
+
+[params]
+ description = ""
+
+ [params.logo]
+ url = "logo.png"
+ width = 50
+ height = 50
+ alt = "Logo"
diff --git a/website/themes/natrium/exampleSite/content/page/about.md b/website/themes/natrium/exampleSite/content/page/about.md
new file mode 100644
index 0000000..2d24b3e
--- /dev/null
+++ b/website/themes/natrium/exampleSite/content/page/about.md
@@ -0,0 +1,6 @@
++++
+title = "About"
+date = "2018-02-09"
++++
+
+We know that an improvement is a themeless diploma. Those coughs are nothing more than distributors. Postiche authorizations show us how poisons can be organisations. The thumb of a tsunami becomes a widest downtown.
diff --git a/website/themes/natrium/exampleSite/content/page/site-notice.md b/website/themes/natrium/exampleSite/content/page/site-notice.md
new file mode 100644
index 0000000..37a0093
--- /dev/null
+++ b/website/themes/natrium/exampleSite/content/page/site-notice.md
@@ -0,0 +1,15 @@
++++
+date = "2018-02-09"
+title = "Site notice"
+slug = "site-notice"
++++
+
+
+### Walruses
+Those drizzles are nothing more than mothers. Dewlapped laborers show us how flowers can be entrances. Nowhere is it disputed that the candle is a banker. The walruses could be said to resemble malar floors.
+
+### Radio
+Those facts are nothing more than velvets. Lambdoid dimes show us how anthonies can be trombones. An intense bookcase is a bookcase of the mind. The literature would have us believe that a bastioned copy is not but a radio.
+
+### Windshields
+A cork is a land from the right perspective. The first unpierced war is, in its own way, a field. Recent controversy aside, a creek is a burn's industry. Applied windshields show us how ideas can be segments.
diff --git a/website/themes/natrium/exampleSite/content/post/extending-this-logic.md b/website/themes/natrium/exampleSite/content/post/extending-this-logic.md
new file mode 100644
index 0000000..26915d3
--- /dev/null
+++ b/website/themes/natrium/exampleSite/content/post/extending-this-logic.md
@@ -0,0 +1,11 @@
++++
+date = "2018-02-09"
+title = "Extending this logic"
+slug = "extending-this-logic"
+categories = [ "Post", "Metaphorsum" ]
+tags = [ "Lamb", "Shell", "Bookcase", "Nothing" ]
++++
+
+The quiets could be said to resemble terete lambs. Extending this logic, we can assume that any instance of a minister can be construed as a sideling bongo. Their leaf was, in this moment, a coccoid [noodle](https://en.wikipedia.org/wiki/Noodle). In modern times a noise is a barge's calendar. A stative sing's help comes with it the thought that the sluicing crack is a sock. It's an undeniable fact, really; a feast sees a half-sister as a chewy grade.
+
+A condition is a shell's pressure. A dress sees a weapon as a plodding april. The date of a notebook becomes an outbound walk. Few can name a grateful fog that isn't a compleat double. A chick of the field is assumed to be an imbued bookcase. Those litters are nothing more than [yards](https://en.wikipedia.org/wiki/Yard).
diff --git a/website/themes/natrium/exampleSite/content/post/the-actor-is-a-gander.md b/website/themes/natrium/exampleSite/content/post/the-actor-is-a-gander.md
new file mode 100644
index 0000000..47bb8b7
--- /dev/null
+++ b/website/themes/natrium/exampleSite/content/post/the-actor-is-a-gander.md
@@ -0,0 +1,13 @@
++++
+date = "2018-02-09"
+title = "The actor is a gander"
+slug = "the-actor-is-a-gander"
+categories = [ "Post", "Metaphorsum" ]
+tags = [ "Actor", "Visitor", "Snowflakes", "Interest" ]
++++
+
+However, a frostless stop is a stream of the mind. The actor is a gander. A garni person without [gorillas](https://en.wikipedia.org/wiki/Gorilla) is truly a vest of scentless plots.
+
+Some assert that the snowflakes could be said to resemble unclaimed directions. The sponge is a boat. Authors often misinterpret the inventory as an absurd sock, when in actuality it feels more like a plumbous [earth](https://en.wikipedia.org/wiki/Soil).
+
+The first enarched tune is, in its own way, a visitor. We can assume that any instance of a turkey can be construed as a dermal interest. Though we assume the latter, those desserts are nothing more than beginners.
diff --git a/website/themes/natrium/exampleSite/content/post/the-beach-is-a-push.md b/website/themes/natrium/exampleSite/content/post/the-beach-is-a-push.md
new file mode 100644
index 0000000..b285032
--- /dev/null
+++ b/website/themes/natrium/exampleSite/content/post/the-beach-is-a-push.md
@@ -0,0 +1,15 @@
++++
+date = "2018-02-09"
+title = "The beach is a push"
+slug = "the-beach-is-a-push"
+categories = [ "Post", "Metaphorsum" ]
+tags = [ "Riddles", "Beach", "Fahrenheit", "Nothing", "Interest" ]
++++
+
+Gainly stops show us how mother-in-laws can be drizzles. Some assert that the `fahrenheit` is a mascara. The crosswise idea reveals itself as a baddish ink to those who look. A grasping interest without kitties is truly a crocus of hopeful nets. The `developments` could be said to resemble farfetched triangles. A mind of the fender is assumed to be a cornute radiator.
+
+```
+In ancient times a whapping napkin's alcohol comes with it the thought that the weldless industry is a quill. A kilogram is a hardware's support. Few can name a hatted trouble that isn't a rotted fowl. Those trapezoids are nothing more than vacations. The beach is a push. A carsick giraffe is an inch of the mind.
+```
+
+Monthly riddles show us how shrimp can be nephews. In recent years, few can name a styloid dryer that isn't a toyless shoe. Their corn was, in this moment, a whoreson opera. Few can name a schmalzy cheetah that isn't a dashing barber. The chiffon alcohol comes from a million hen. What we don't know for sure is whether or not those trips are nothing more than barges.
diff --git a/website/themes/natrium/exampleSite/static/.gitkeep b/website/themes/natrium/exampleSite/static/.gitkeep
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/website/themes/natrium/exampleSite/static/.gitkeep
diff --git a/website/themes/natrium/i18n/de.toml b/website/themes/natrium/i18n/de.toml
new file mode 100644
index 0000000..4fffca2
--- /dev/null
+++ b/website/themes/natrium/i18n/de.toml
@@ -0,0 +1,14 @@
+[footerRSS]
+other = "RSS-Feed"
+
+[siteNotice]
+other = "Seitenhinweise"
+
+[categories]
+other = "Kategorien"
+
+[tags]
+other = "Tags"
+
+[errorMessage]
+other = "Hier ist nichts."
diff --git a/website/themes/natrium/i18n/en.toml b/website/themes/natrium/i18n/en.toml
new file mode 100644
index 0000000..d9b5ec1
--- /dev/null
+++ b/website/themes/natrium/i18n/en.toml
@@ -0,0 +1,14 @@
+[footerRSS]
+other = "RSS feed"
+
+[siteNotice]
+other = "Site notice"
+
+[categories]
+other = "Categories"
+
+[tags]
+other = "Tags"
+
+[errorMessage]
+other = "Here is nothing."
diff --git a/website/themes/natrium/i18n/zh.toml b/website/themes/natrium/i18n/zh.toml
new file mode 100644
index 0000000..fac8c96
--- /dev/null
+++ b/website/themes/natrium/i18n/zh.toml
@@ -0,0 +1,14 @@
+[footerRSS]
+other = "RSS订阅"
+
+[siteNotice]
+other = "本站公告"
+
+[categories]
+other = "分类"
+
+[tags]
+other = "标签"
+
+[errorMessage]
+other = "页面不存在."
diff --git a/website/themes/natrium/images/screenshot.png b/website/themes/natrium/images/screenshot.png
new file mode 100644
index 0000000..685991d
--- /dev/null
+++ b/website/themes/natrium/images/screenshot.png
Binary files differ
diff --git a/website/themes/natrium/images/tn.png b/website/themes/natrium/images/tn.png
new file mode 100644
index 0000000..5a5990a
--- /dev/null
+++ b/website/themes/natrium/images/tn.png
Binary files differ
diff --git a/website/themes/natrium/layouts/404.html b/website/themes/natrium/layouts/404.html
new file mode 100644
index 0000000..28489eb
--- /dev/null
+++ b/website/themes/natrium/layouts/404.html
@@ -0,0 +1,17 @@
+{{ partial "header" . }}
+
+ <main class="content">
+ <div>
+ <h1 class="error-page-title">404</h1>
+ </div>
+ <div class="error-page-content">
+ {{ i18n "errorMessage" }}
+ <div>
+ <a href="{{ .Site.BaseURL }}"><i class="fa fa-chevron-up"></i></a>
+ </div>
+ </div>
+ </main>
+
+{{ partial "footer" . }}
+
+
diff --git a/website/themes/natrium/layouts/_default/list.html b/website/themes/natrium/layouts/_default/list.html
new file mode 100644
index 0000000..9353e44
--- /dev/null
+++ b/website/themes/natrium/layouts/_default/list.html
@@ -0,0 +1 @@
+/* Natrium doesn't support list.html. */
diff --git a/website/themes/natrium/layouts/_default/single.html b/website/themes/natrium/layouts/_default/single.html
new file mode 100644
index 0000000..240109d
--- /dev/null
+++ b/website/themes/natrium/layouts/_default/single.html
@@ -0,0 +1,31 @@
+{{ partial "header.html" . }}
+
+<main class="content" role="main">
+ <article class="article">
+ <h1 class="article-title">{{ .Title }}</h1>
+ {{ if eq .Section "post" }}
+ <span class="article-date">{{ .Date.Format "2006-01-02" }}</span>
+ {{ end }}
+
+ <div class="article-content">
+ {{ .Content }}
+ </div>
+
+ <ul class="article-taxonomy">
+ {{ if .Params.categories }}
+ <hr>
+ <li>
+ <i class="fa fa-category"></i>{{ range $index, $category := .Params.categories }}{{ if gt $index 0 }}{{ end }}<a href="{{ "categories/" | relURL }}{{ . | urlize }}">{{ . }}</a>{{ end }}
+ </li>
+ {{ end }}
+
+ {{ if .Params.tags }}
+ <li>
+ <i class="fa fa-tags"></i>{{ range $index, $tag := .Params.tags }}{{ if gt $index 0 }}{{ end }}<a href="{{ "tags/" | relURL }}{{ . | urlize }}">{{ . }}</a>{{ end }}
+ </li>
+ {{ end }}
+ </article>
+
+</main>
+
+{{ partial "footer.html" . }}
diff --git a/website/themes/natrium/layouts/index.html b/website/themes/natrium/layouts/index.html
new file mode 100644
index 0000000..d71b3fa
--- /dev/null
+++ b/website/themes/natrium/layouts/index.html
@@ -0,0 +1,20 @@
+{{ partial "header.html" . }}
+
+<main class="content">
+
+ <div class="list">
+ {{ range (.Paginate ((where .Data.Pages "Type" "post").GroupByDate "2006")).PageGroups }}
+ <h2 class="list-title">{{ .Key }}</h2>
+ {{ range .Pages }}
+
+ {{ partial "list-item.html" . }}
+
+ {{ end }}
+ {{ end }}
+ </div>
+
+ {{ partial "pagination.html" . }}
+
+</main>
+
+{{ partial "footer.html" . }}
diff --git a/website/themes/natrium/layouts/partials/footer.html b/website/themes/natrium/layouts/partials/footer.html
new file mode 100644
index 0000000..0230966
--- /dev/null
+++ b/website/themes/natrium/layouts/partials/footer.html
@@ -0,0 +1,13 @@
+ <footer class="footer">
+ <ul class="footer-links">
+ <li>
+ <a href="{{ .Site.RSSLink }}" type="application/rss+xml" target="_blank"><i class="fa fa-rss"></i> {{ i18n "footerRSS" }}</a>
+ </li>
+ <li>
+ <a href="{{ .Site.Params.GitHubURL }}"><i class="fa fa-github"></i> Code</a>
+ </li>
+ </ul>
+ </footer>
+ </div>
+ </body>
+</html>
diff --git a/website/themes/natrium/layouts/partials/head.html b/website/themes/natrium/layouts/partials/head.html
new file mode 100644
index 0000000..b17415e
--- /dev/null
+++ b/website/themes/natrium/layouts/partials/head.html
@@ -0,0 +1,31 @@
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+{{ .Hugo.Generator }}
+
+{{ if eq .URL "/" }}
+<title>{{ .Title }}</title>
+<meta property="og:title" content="{{ .Title }}">
+<meta property="og:type" content="website">
+{{ else }}
+<title>{{ .Title }} - {{ .Site.Title }}</title>
+<meta property="og:title" content="{{ .Title }} - {{ .Site.Title }}">
+{{ end }}
+
+{{ if eq .URL "/" }}
+<meta property="description" content="{{ .Site.Params.description }}">
+{{ else }}
+ {{ if .Description }}
+ <meta property="description" content="{{ .Description }}">
+ {{ end }}
+{{ end }}
+
+{{ if .Keywords }}
+<meta property="keywords" content ="{{ delimit .Keywords ", " }}">
+{{ end }}
+
+{{ if .RSSLink }}
+<link href="{{ .RSSLink }}" rel="alternate" type="application/rss+xml" title="{{ .Site.Title }}" />
+{{ end }}
+
+<link rel="stylesheet" href="{{ .Site.BaseURL }}css/main.css" media="all">
+<link rel="stylesheet" href="{{ .Site.BaseURL }}css/fonts.css">
diff --git a/website/themes/natrium/layouts/partials/header.html b/website/themes/natrium/layouts/partials/header.html
new file mode 100644
index 0000000..6a3b55c
--- /dev/null
+++ b/website/themes/natrium/layouts/partials/header.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html lang="{{ .Site.LanguageCode }}">
+ <head>
+ {{ partial "head.html" . }}
+ </head>
+ <body>
+ <div class="wrapper">
+ <header class="header">
+ {{ partial "nav.html" . }}
+ </header>
diff --git a/website/themes/natrium/layouts/partials/list-item.html b/website/themes/natrium/layouts/partials/list-item.html
new file mode 100644
index 0000000..245a80d
--- /dev/null
+++ b/website/themes/natrium/layouts/partials/list-item.html
@@ -0,0 +1,6 @@
+ <nav class="list-item">
+ <a href="{{ .Permalink }}">{{ .Title }}</a>
+ <span class="list-item-date">
+ {{ .Date.Format "2006-01-02" }}
+ </span>
+ </nav>
diff --git a/website/themes/natrium/layouts/partials/nav.html b/website/themes/natrium/layouts/partials/nav.html
new file mode 100644
index 0000000..607878c
--- /dev/null
+++ b/website/themes/natrium/layouts/partials/nav.html
@@ -0,0 +1,14 @@
+<nav class="nav">
+ <a href="{{ .Site.BaseURL }}" class="nav-logo">
+ <img src="{{ .Site.BaseURL }}images/{{ .Site.Params.logo.url }}"
+ width="{{ .Site.Params.logo.width }}"
+ height="{{ .Site.Params.logo.height }}"
+ alt="{{ .Site.Params.logo.alt }}">
+ </a>
+
+ <ul class="nav-links">
+ {{ range .Site.Menus.main }}
+ <li><a href="{{ .URL }}">{{ .Name }}</a></li>
+ {{ end }}
+ </ul>
+</nav>
diff --git a/website/themes/natrium/layouts/partials/pagination.html b/website/themes/natrium/layouts/partials/pagination.html
new file mode 100644
index 0000000..d818c18
--- /dev/null
+++ b/website/themes/natrium/layouts/partials/pagination.html
@@ -0,0 +1,34 @@
+{{ $pag := $.Paginator }}
+{{ if gt $pag.TotalPages 1 }}
+
+<ul class="page-links">
+ <li
+ {{ if not $pag.HasPrev }}class="page-links-disabled"{{ end }}>
+ <a href="{{ if $pag.HasPrev }}{{ $pag.Prev.URL }}{{ end }}" aria-label="Previous"><span aria-hidden="true">&lt;&#160;</span></a>
+ </li>
+ {{ $.Scratch.Set "__paginator.ellipsed" false }}
+ {{ range $pag.Pagers }}
+ {{ $right := sub .TotalPages .PageNumber }}
+ {{ $showNumber := or (le .PageNumber 3) (eq $right 0) }}
+ {{ $showNumber := or $showNumber (and (gt .PageNumber (sub $pag.PageNumber 2)) (lt .PageNumber (add $pag.PageNumber 2))) }}
+ {{ if $showNumber }}
+ {{ $.Scratch.Set "__paginator.ellipsed" false }}
+ {{ $.Scratch.Set "__paginator.shouldEllipse" false }}
+ {{ else }}
+ {{ $.Scratch.Set "__paginator.shouldEllipse" (not ($.Scratch.Get "__paginator.ellipsed") ) }}
+ {{ $.Scratch.Set "__paginator.ellipsed" true }}
+ {{ end }}
+ {{ if $showNumber }}
+ <li
+ {{ if eq . $pag }}class="page-links-active"{{ end }}><a href="{{ .URL }}">{{ .PageNumber }}</a>
+ </li>
+ {{ else if ($.Scratch.Get "__paginator.shouldEllipse") }}
+ <li class="page-links-disabled"><span aria-hidden="true">&hellip;</span></li>
+ {{ end }}
+ {{ end }}
+ <li
+ {{ if not $pag.HasNext }}class="page-links-disabled"{{ end }}>
+ <a href="{{ if $pag.HasNext }}{{ $pag.Next.URL }}{{ end }}" aria-label="Next"><span aria-hidden="true">&#160;&gt;</span></a>
+ </li>
+</ul>
+{{ end }}
diff --git a/website/themes/natrium/layouts/rss.xml b/website/themes/natrium/layouts/rss.xml
new file mode 100644
index 0000000..4008f49
--- /dev/null
+++ b/website/themes/natrium/layouts/rss.xml
@@ -0,0 +1,28 @@
+<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
+ <channel>
+ <title>{{ if eq .Title .Site.Title }}{{ .Site.Title }}{{ else }}{{ with .Title }}{{.}} on {{ end }}{{ .Site.Title }}{{ end }}</title>
+ <link>{{ .Permalink }}</link>
+ <description>Recent content {{ if ne .Title .Site.Title }}{{ with .Title }}in {{.}} {{ end }}{{ end }}on {{ .Site.Title }}</description>
+ <generator>Hugo -- gohugo.io</generator>{{ with .Site.LanguageCode }}
+ <language>{{.}}</language>{{end}}{{ with .Site.Author.email }}
+ <managingEditor>{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}</managingEditor>{{end}}{{ with .Site.Author.email }}
+ <webMaster>{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}</webMaster>{{end}}{{ with .Site.Copyright }}
+ <copyright>{{.}}</copyright>{{end}}{{ if not .Date.IsZero }}
+ <lastBuildDate>{{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</lastBuildDate>{{ end }}
+ {{ with .OutputFormats.Get "RSS" }}
+ {{ printf "<atom:link href=%q rel=\"self\" type=%q />" .Permalink .MediaType | safeHTML }}
+ {{ end }}
+ {{ range .Data.Pages }}
+ {{ if eq .Section "post" }}
+ <item>
+ <title>{{ .Title }}</title>
+ <link>{{ .Permalink }}</link>
+ <pubDate>{{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</pubDate>
+ {{ with .Site.Author.email }}<author>{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}</author>{{end}}
+ <guid>{{ .Permalink }}</guid>
+ <description>{{ .Summary | html }}</description>
+ </item>
+ {{ end }}
+ {{ end }}
+ </channel>
+</rss>
diff --git a/website/themes/natrium/layouts/taxonomy/category.html b/website/themes/natrium/layouts/taxonomy/category.html
new file mode 100644
index 0000000..d20298a
--- /dev/null
+++ b/website/themes/natrium/layouts/taxonomy/category.html
@@ -0,0 +1,18 @@
+{{ partial "header.html" . }}
+
+<main class="content" role="main">
+
+ <div class="list">
+ <h2 class="list-title">{{ .Title }}</h2>
+ {{ range .Paginator.Pages }}
+
+ {{ partial "list-item.html" . }}
+
+ {{ end }}
+ </div>
+
+ {{ partial "pagination.html" . }}
+
+</main>
+
+{{ partial "footer.html" . }}
diff --git a/website/themes/natrium/layouts/taxonomy/category.terms.html b/website/themes/natrium/layouts/taxonomy/category.terms.html
new file mode 100644
index 0000000..d5ba7bc
--- /dev/null
+++ b/website/themes/natrium/layouts/taxonomy/category.terms.html
@@ -0,0 +1,22 @@
+{{ partial "header.html" . }}
+
+<main class="content">
+
+ <div class="category">
+ <h2 class="category-title">{{ i18n "categories" }}</h2>
+ {{ $data := .Data }}
+ {{ range $key, $value := .Data.Terms.Alphabetical }}
+ <ul class="category-item">
+ <li>
+ <a href="{{ $.Site.LanguagePrefix }}/{{ $data.Plural }}/{{ $value.Name | urlize }}">{{ $value.Name }}</a>
+ <span class="category-item-count">
+ <sup>({{ $value.Count }})</sup>
+ </span>
+ </li>
+ </ul>
+ {{ end }}
+ </div>
+
+</main>
+
+{{ partial "footer.html" . }}
diff --git a/website/themes/natrium/layouts/taxonomy/tag.html b/website/themes/natrium/layouts/taxonomy/tag.html
new file mode 100644
index 0000000..08eb524
--- /dev/null
+++ b/website/themes/natrium/layouts/taxonomy/tag.html
@@ -0,0 +1,18 @@
+{{ partial "header.html" . }}
+
+<main class="content" role="main">
+
+ <div class="list">
+ <h2 class="list-title">{{ .Title }}</h2>
+ {{ range .Paginator.Pages }}
+
+ {{ partial "list-item.html" . }}
+
+ {{ end }}
+ </div>
+
+ {{ partial "pagination.html" . }}
+
+</main>
+
+{{ partial "footer.html" . }}
diff --git a/website/themes/natrium/layouts/taxonomy/tag.terms.html b/website/themes/natrium/layouts/taxonomy/tag.terms.html
new file mode 100644
index 0000000..77a68c7
--- /dev/null
+++ b/website/themes/natrium/layouts/taxonomy/tag.terms.html
@@ -0,0 +1,31 @@
+{{ partial "header.html" . }}
+
+<main class="content">
+
+ <div class="tag-cloud">
+ <h2 class="tag-cloud-title">{{ i18n "tags" }}</h2>
+ {{ if not (eq (len $.Site.Taxonomies.tags) 0) }}
+ {{ $fontUnit := "rem" }}
+ {{ $largestFontSize := 2.5 }}
+ {{ $smallestFontSize := 1.0 }}
+ {{ $fontSpread := sub $largestFontSize $smallestFontSize }}
+ {{ $max := add (len (index $.Site.Taxonomies.tags.ByCount 0).Pages) 1 }}
+ {{ $min := len (index $.Site.Taxonomies.tags.ByCount.Reverse 0).Pages }}
+ {{ $spread := sub $max $min }}
+ {{ $fontStep := div $fontSpread $spread }}
+ <ul class="tag-cloud-item">
+ {{ range $name, $taxonomy := $.Site.Taxonomies.tags }}
+ {{ $currentTagCount := len $taxonomy.Pages }}
+ {{ $currentFontSize := (add $smallestFontSize (mul (sub $currentTagCount $min) $fontStep) ) }}
+ {{ $count := len $taxonomy.Pages }}
+ {{ $weigth := div (sub (math.Log $count) (math.Log $min)) (sub (math.Log $max) (math.Log $min)) }}
+ {{ $currentFontSize := (add $smallestFontSize (mul (sub $largestFontSize $smallestFontSize) $weigth) ) }}
+ <li><a href="{{ "/tags/" | relLangURL }}{{ $name | urlize }}" style="font-size:{{$currentFontSize}}{{$fontUnit}}">{{ $name }}</a></li>
+ {{ end }}
+ </ul>
+ {{ end }}
+ </div>
+
+</main>
+
+{{ partial "footer.html" . }}
diff --git a/website/themes/natrium/static/css/fonts.css b/website/themes/natrium/static/css/fonts.css
new file mode 100644
index 0000000..d096b37
--- /dev/null
+++ b/website/themes/natrium/static/css/fonts.css
@@ -0,0 +1,89 @@
+/* roboto-mono-regular - latin */
+@font-face {
+ font-family: 'Roboto Mono';
+ font-style: normal;
+ font-weight: 400;
+ src: local('Roboto Mono'), local('RobotoMono-Regular'),
+ url('../fonts/roboto-mono-v5-latin-regular.woff2') format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */
+ url('../fonts/roboto-mono-v5-latin-regular.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
+}
+/* lato-regular - latin */
+@font-face {
+ font-family: 'Lato';
+ font-style: normal;
+ font-weight: 400;
+ src: local('Lato Regular'), local('Lato-Regular'),
+ url('../fonts/lato-v14-latin-regular.woff2') format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */
+ url('../fonts/lato-v14-latin-regular.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
+}
+/* lato-700 - latin */
+@font-face {
+ font-family: 'Lato';
+ font-style: normal;
+ font-weight: 700;
+ src: local('Lato Bold'), local('Lato-Bold'),
+ url('../fonts/lato-v14-latin-700.woff2') format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */
+ url('../fonts/lato-v14-latin-700.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
+}
+/* lato-italic - latin */
+@font-face {
+ font-family: 'Lato';
+ font-style: italic;
+ font-weight: 400;
+ src: local('Lato Italic'), local('Lato-Italic'),
+ url('../fonts/lato-v14-latin-italic.woff2') format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */
+ url('../fonts/lato-v14-latin-italic.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
+}
+/* lato-700italic - latin */
+@font-face {
+ font-family: 'Lato';
+ font-style: italic;
+ font-weight: 700;
+ src: local('Lato Bold Italic'), local('Lato-BoldItalic'),
+ url('../fonts/lato-v14-latin-700italic.woff2') format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */
+ url('../fonts/lato-v14-latin-700italic.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
+}
+/* merriweather-regular - latin */
+@font-face {
+ font-family: 'Merriweather';
+ font-style: normal;
+ font-weight: 400;
+ src: local('Merriweather Regular'), local('Merriweather-Regular'),
+ url('../fonts/merriweather-v19-latin-regular.woff2') format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */
+ url('../fonts/merriweather-v19-latin-regular.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
+}
+/* merriweather-italic - latin */
+@font-face {
+ font-family: 'Merriweather';
+ font-style: italic;
+ font-weight: 400;
+ src: local('Merriweather Italic'), local('Merriweather-Italic'),
+ url('../fonts/merriweather-v19-latin-italic.woff2') format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */
+ url('../fonts/merriweather-v19-latin-italic.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
+}
+/* merriweather-700 - latin */
+@font-face {
+ font-family: 'Merriweather';
+ font-style: normal;
+ font-weight: 700;
+ src: local('Merriweather Bold'), local('Merriweather-Bold'),
+ url('../fonts/merriweather-v19-latin-700.woff2') format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */
+ url('../fonts/merriweather-v19-latin-700.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
+}
+/* merriweather-700italic - latin */
+@font-face {
+ font-family: 'Merriweather';
+ font-style: italic;
+ font-weight: 700;
+ src: local('Merriweather Bold Italic'), local('Merriweather-BoldItalic'),
+ url('../fonts/merriweather-v19-latin-700italic.woff2') format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */
+ url('../fonts/merriweather-v19-latin-700italic.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
+}
+/* fontawesome */
+@font-face {
+ font-family: 'FontAwesome';
+ src: url('../fonts/fontawesome-webfont.eot?v=4.7.0');
+ src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'), url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff');
+ font-weight: normal;
+ font-style: normal;
+}
diff --git a/website/themes/natrium/static/css/main.css b/website/themes/natrium/static/css/main.css
new file mode 100644
index 0000000..1ce0f12
--- /dev/null
+++ b/website/themes/natrium/static/css/main.css
@@ -0,0 +1,536 @@
+html,
+body {
+ margin: 0;
+ padding: 0;
+ position: relative;
+}
+
+body {
+ font-family: 'Merriweather', serif;
+ -webkit-hyphens: auto;
+ hyphens: auto;
+}
+
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+ font-family: 'Lato', sans-serif;
+ color: #222;
+}
+
+pre,
+code {
+ font-family: 'Roboto Mono', monospace;
+ font-size: 15px;
+}
+
+code {
+ border-radius: 3px;
+ padding: 1px 3px;
+ background: #f0f0f0;
+ -webkit-hyphens: none;
+ hyphens: none;
+}
+
+pre {
+ overflow-x: auto;
+ padding: 8px 12px;
+ border-radius: 3px;
+ background: #202020;
+ color: #d0d0d0;
+}
+
+pre code {
+ padding: initial;
+ background: transparent;
+}
+
+a:hover,
+a:active {
+ outline: none;
+ background-color: rgba(0,0,0,0);
+ -webkit-tap-highlight-color: rgba(0,0,0,0);
+}
+
+img {
+ display: block;
+ margin: 0 auto;
+ max-width: 100%;
+ height: auto;
+}
+
+blockquote {
+ border-left: 5px solid #ccc;
+ background: #f5f5f5;
+ margin: 20px;
+ padding-left: 10px;
+}
+
+.wrapper {
+ overflow: hidden;
+ position: relative;
+}
+
+.header {
+ padding: 20px 0;
+ position: relative;
+ background: #f5f5f5;
+ border-bottom: 1px solid #eaeaea;
+}
+
+.nav {
+ max-width: 800px;
+ margin: 0 auto;
+ padding: 0 15px;
+ font-family: 'Lato', sans-serif;
+ text-align: right;
+}
+
+.nav-logo {
+ float: left;
+ margin-top: -11px;
+ transition: transform 150ms ease-out;
+}
+
+.nav-logo:hover {
+ transform: scale(1.1);
+}
+
+.nav-logo img {
+ display: block;
+ max-height: 40px;
+ width: auto;
+}
+
+.nav-links {
+ margin: 0;
+ padding: 0;
+ font-size: 14px;
+ list-style: none;
+}
+
+.nav-links li {
+ display: inline-block;
+ margin: 0 0 0 15px;
+}
+
+.nav-links li:first-child {
+ margin-left: 0;
+}
+
+.nav-links a {
+ text-decoration: none;
+ color: #444;
+}
+
+.nav-links a:hover {
+ color: #111;
+}
+
+.content {
+ display: block;
+ max-width: 700px;
+ margin: 60px auto 80px;
+ padding: 0 15px;
+ font-size: 16px;
+ line-height: 1.7;
+ color: #555;
+}
+
+.article-title {
+ font-size: 34px;
+ color: #222;
+ margin: 0;
+ line-height: 1.3;
+}
+
+.article-date {
+ font-size: 16px;
+ font-family: 'Lato', sans-serif;
+ color: #ccc;
+}
+
+.article-content p {
+ margin: 15px 0 25px;
+}
+
+.article-content a {
+ text-decoration: none;
+ color: inherit;
+ border-bottom: medium solid #f0f0f0;
+ transition: border-color 600ms;
+}
+
+.article-content a:hover,
+.article-content a:active {
+ border-color: #606060;
+}
+
+.article-content hr {
+ width: 150px;
+ margin: 50px auto;
+ height: 1px;
+ overflow: hidden;
+ border: none;
+ background: #e8e8e8;
+}
+
+.article-taxonomy {
+ list-style: none;
+ padding-left: 0;
+ font-family: 'Lato', sans-serif;
+ color: #404040;
+ font-size: 14px;
+ text-align: left;
+}
+
+.article-taxonomy hr {
+ width: 200px;
+ margin: 5px 0 10px;
+ height: 1px;
+ border: none;
+ background: #e8e8e8;
+}
+
+.article-taxonomy a {
+ display: inline-block;
+ margin: 0 10px 0 0;
+ text-decoration: none;
+ color: inherit;
+ transition: color 300ms;
+}
+
+.article-taxonomy a:hover,
+.article-taxonomy a:active {
+ color: #ccc;
+}
+
+.article-image-large {
+ padding: 2px;
+ border: solid 1px #e6e6e6;
+ opacity: 1;
+ transition: opacity 1s;
+}
+
+.article-image-large:hover,
+.article-image-large:active {
+ opacity: 0.5;
+}
+
+.list,
+.category,
+.tag-cloud {
+ margin: 0;
+ padding: 0;
+ line-height: 1.3em;
+}
+
+.list-title,
+.category-title,
+.tag-cloud-title {
+ font-size: 32px;
+ margin-top: 60px;
+ padding-bottom: 10px;
+}
+
+.list-item {
+ margin: 0 0 20px;
+ padding: 0;
+}
+
+.list-item-date {
+ display: block;
+ padding: 4px 0;
+ font-family: 'Lato', sans-serif;
+ color: #ccc;
+ font-size: 14px;
+}
+
+.list-item a {
+ display: inline-block;
+ box-sizing: border-box;
+ width: auto;
+ max-width: 100%;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ padding: 3px 0;
+ text-decoration: none;
+ font-size: 17px;
+ font-family: 'Lato', sans-serif;
+ font-weight: bold;
+ color: #222;
+ border-bottom: 1px solid #ddd;
+ transition: border-color 300ms;
+}
+
+.list-item a:hover {
+ border-color: #222;
+}
+
+.category-item {
+ display: block;
+ list-style: none;
+ margin: 5px 0 15px;
+ padding: 0;
+}
+
+.category-item a {
+ display: inline-block;
+ padding: 5px 0;
+ text-decoration: none;
+ font-size: 19px;
+ font-family: 'Lato', sans-serif;
+ font-weight: bold;
+ color: #222;
+ transition: color 300ms;
+}
+
+.category-item-count {
+ font-family: 'Lato', sans-serif;
+ margin-right: 15px;
+ color: #ccc;
+ font-size: 14px;
+ font-weight: bold;
+}
+
+.tag-cloud-item {
+ margin: 0;
+ padding: 0;
+}
+
+.tag-cloud-item li {
+ display: inline-block;
+ list-style: none;
+ padding: 0 15px 15px 0;
+}
+
+.tag-cloud-item a {
+ text-decoration: none;
+ font-family: 'Lato', sans-serif;
+ font-weight: bold;
+ color: #222;
+ transition: color 300ms;
+}
+
+.tag-cloud-item a:hover,
+.tag-cloud-item a:active,
+.category-item a:hover,
+.category-item a:active {
+ color: #ccc;
+}
+
+.footer {
+ height: 40px;
+ margin: 0;
+ padding: 0;
+ text-align: center;
+ font-family: 'Lato', sans-serif;
+}
+
+.footer-links {
+ list-style: none;
+ margin: 0;
+ padding: 0;
+ color: #ccc;
+ font-size: 14px;
+}
+
+.footer-links li {
+ margin: 0;
+ padding: 0;
+ display: inline-block;
+}
+
+.footer-links a {
+ color: #888;
+ text-decoration: none;
+ transition: color 300ms;
+ margin: 0 5px;
+}
+
+.footer-links a:hover {
+ color: #222;
+}
+
+.footer-links li::before {
+ content: '•';
+ position: relative;
+ left: -2px;
+}
+
+.footer-links li:first-child::before {
+ display: none;
+}
+
+.page-links {
+ margin: 25px 0;
+ padding: 0;
+ text-align: center;
+ font-family: 'Lato', sans-serif;
+ font-size: 16px;
+}
+
+.page-links li {
+ display: inline-block;
+}
+
+.page-links a {
+ text-decoration: none;
+ padding: 0 5px;
+ color: #555;
+ transition: color 300ms;
+}
+
+.page-links a:hover {
+ color: #ccc;
+}
+
+.page-links-active a,
+.page-links-disabled a {
+ text-decoration: none;
+ color: #ccc;
+}
+
+.error-page-title {
+ text-align: center;
+ font-size: 76px;
+}
+
+.error-page-content {
+ text-align: center;
+}
+
+.error-page-content a {
+ text-decoration: none;
+ color: inherit;
+ transition: color 600ms;
+}
+
+.error-page-content a:hover,
+.error-page-content a:active {
+ color: #ccc;
+}
+
+.fa {
+ font-family: 'FontAwesome';
+ font-style: normal;
+}
+
+.fa-rss::before {
+ content: "\f09e";
+}
+
+.fa-chevron-up::before {
+ content: "\f077";
+}
+
+.fa-github::before {
+ content: "\f09b";
+}
+
+.fa-tags::before {
+ content: "\f02c";
+ float: left;
+ padding: 0px 10px 50px 0;
+}
+
+.fa-category::before {
+ content: "\f07c";
+ float: left;
+ padding: 0 10px 0px 0;
+}
+
+@media (min-width: 600px) {
+ code {
+ padding: 2px 4px;
+ }
+
+ pre,
+ code {
+ font-size: 17px;
+ }
+
+ .header {
+ padding: 25px 0;
+ }
+
+ .nav-logo {
+ margin-top: -13px;
+ }
+
+ .nav-logo img {
+ max-height: 50px;
+ }
+
+ .nav-links {
+ font-size: 18px;
+ }
+
+ .nav-links li {
+ margin: 0 0 0 30px;
+ }
+
+ .content {
+ font-size: 19px;
+ line-height: 1.8;
+ margin: 100px auto;
+ }
+
+ .article-title {
+ font-size: 42px;
+ }
+
+ .article-date {
+ font-size: 19px;
+ }
+
+ .article-taxonomy {
+ font-size: 17px;
+ }
+
+ .list-title,
+ .category-title,
+ .tag-cloud-title {
+ font-size: 38px;
+ }
+
+ .list-item a {
+ padding: 5px 0;
+ font-size: 21px;
+ }
+
+ .list-item-date {
+ padding: 5px 0;
+ font-size: 17px;
+ text-align: right;
+ float: right;
+ }
+
+ .category-item {
+ display: inline-block;
+ }
+
+ .category-item a {
+ font-size: 21px;
+ }
+
+ .footer-links {
+ font-size: inherit;
+ }
+
+ .footer-links a {
+ margin: 0 15px;
+ }
+
+ .page-links {
+ font-size: 19px;
+ }
+
+ .error-page-title {
+ font-size: 114px;
+ }
+}
diff --git a/website/themes/natrium/static/fonts/fontawesome-webfont.woff b/website/themes/natrium/static/fonts/fontawesome-webfont.woff
new file mode 100644
index 0000000..400014a
--- /dev/null
+++ b/website/themes/natrium/static/fonts/fontawesome-webfont.woff
Binary files differ
diff --git a/website/themes/natrium/static/fonts/fontawesome-webfont.woff2 b/website/themes/natrium/static/fonts/fontawesome-webfont.woff2
new file mode 100644
index 0000000..4d13fc6
--- /dev/null
+++ b/website/themes/natrium/static/fonts/fontawesome-webfont.woff2
Binary files differ
diff --git a/website/themes/natrium/static/fonts/lato-v14-latin-700.woff b/website/themes/natrium/static/fonts/lato-v14-latin-700.woff
new file mode 100644
index 0000000..1d9d75b
--- /dev/null
+++ b/website/themes/natrium/static/fonts/lato-v14-latin-700.woff
Binary files differ
diff --git a/website/themes/natrium/static/fonts/lato-v14-latin-700.woff2 b/website/themes/natrium/static/fonts/lato-v14-latin-700.woff2
new file mode 100644
index 0000000..d88f1af
--- /dev/null
+++ b/website/themes/natrium/static/fonts/lato-v14-latin-700.woff2
Binary files differ
diff --git a/website/themes/natrium/static/fonts/lato-v14-latin-700italic.woff b/website/themes/natrium/static/fonts/lato-v14-latin-700italic.woff
new file mode 100644
index 0000000..f79d9a9
--- /dev/null
+++ b/website/themes/natrium/static/fonts/lato-v14-latin-700italic.woff
Binary files differ
diff --git a/website/themes/natrium/static/fonts/lato-v14-latin-700italic.woff2 b/website/themes/natrium/static/fonts/lato-v14-latin-700italic.woff2
new file mode 100644
index 0000000..c351d88
--- /dev/null
+++ b/website/themes/natrium/static/fonts/lato-v14-latin-700italic.woff2
Binary files differ
diff --git a/website/themes/natrium/static/fonts/lato-v14-latin-italic.woff b/website/themes/natrium/static/fonts/lato-v14-latin-italic.woff
new file mode 100644
index 0000000..169e8cf
--- /dev/null
+++ b/website/themes/natrium/static/fonts/lato-v14-latin-italic.woff
Binary files differ
diff --git a/website/themes/natrium/static/fonts/lato-v14-latin-italic.woff2 b/website/themes/natrium/static/fonts/lato-v14-latin-italic.woff2
new file mode 100644
index 0000000..2688dc6
--- /dev/null
+++ b/website/themes/natrium/static/fonts/lato-v14-latin-italic.woff2
Binary files differ
diff --git a/website/themes/natrium/static/fonts/lato-v14-latin-regular.woff b/website/themes/natrium/static/fonts/lato-v14-latin-regular.woff
new file mode 100644
index 0000000..97ab144
--- /dev/null
+++ b/website/themes/natrium/static/fonts/lato-v14-latin-regular.woff
Binary files differ
diff --git a/website/themes/natrium/static/fonts/lato-v14-latin-regular.woff2 b/website/themes/natrium/static/fonts/lato-v14-latin-regular.woff2
new file mode 100644
index 0000000..b14c76c
--- /dev/null
+++ b/website/themes/natrium/static/fonts/lato-v14-latin-regular.woff2
Binary files differ
diff --git a/website/themes/natrium/static/fonts/merriweather-v19-latin-700.woff b/website/themes/natrium/static/fonts/merriweather-v19-latin-700.woff
new file mode 100644
index 0000000..54fd386
--- /dev/null
+++ b/website/themes/natrium/static/fonts/merriweather-v19-latin-700.woff
Binary files differ
diff --git a/website/themes/natrium/static/fonts/merriweather-v19-latin-700.woff2 b/website/themes/natrium/static/fonts/merriweather-v19-latin-700.woff2
new file mode 100644
index 0000000..c10e226
--- /dev/null
+++ b/website/themes/natrium/static/fonts/merriweather-v19-latin-700.woff2
Binary files differ
diff --git a/website/themes/natrium/static/fonts/merriweather-v19-latin-700italic.woff b/website/themes/natrium/static/fonts/merriweather-v19-latin-700italic.woff
new file mode 100644
index 0000000..a390989
--- /dev/null
+++ b/website/themes/natrium/static/fonts/merriweather-v19-latin-700italic.woff
Binary files differ
diff --git a/website/themes/natrium/static/fonts/merriweather-v19-latin-700italic.woff2 b/website/themes/natrium/static/fonts/merriweather-v19-latin-700italic.woff2
new file mode 100644
index 0000000..0538466
--- /dev/null
+++ b/website/themes/natrium/static/fonts/merriweather-v19-latin-700italic.woff2
Binary files differ
diff --git a/website/themes/natrium/static/fonts/merriweather-v19-latin-italic.woff b/website/themes/natrium/static/fonts/merriweather-v19-latin-italic.woff
new file mode 100644
index 0000000..b03db73
--- /dev/null
+++ b/website/themes/natrium/static/fonts/merriweather-v19-latin-italic.woff
Binary files differ
diff --git a/website/themes/natrium/static/fonts/merriweather-v19-latin-italic.woff2 b/website/themes/natrium/static/fonts/merriweather-v19-latin-italic.woff2
new file mode 100644
index 0000000..a854315
--- /dev/null
+++ b/website/themes/natrium/static/fonts/merriweather-v19-latin-italic.woff2
Binary files differ
diff --git a/website/themes/natrium/static/fonts/merriweather-v19-latin-regular.woff b/website/themes/natrium/static/fonts/merriweather-v19-latin-regular.woff
new file mode 100644
index 0000000..941d8a8
--- /dev/null
+++ b/website/themes/natrium/static/fonts/merriweather-v19-latin-regular.woff
Binary files differ
diff --git a/website/themes/natrium/static/fonts/merriweather-v19-latin-regular.woff2 b/website/themes/natrium/static/fonts/merriweather-v19-latin-regular.woff2
new file mode 100644
index 0000000..e834d42
--- /dev/null
+++ b/website/themes/natrium/static/fonts/merriweather-v19-latin-regular.woff2
Binary files differ
diff --git a/website/themes/natrium/static/fonts/roboto-mono-v5-latin-regular.woff b/website/themes/natrium/static/fonts/roboto-mono-v5-latin-regular.woff
new file mode 100644
index 0000000..0ea5db8
--- /dev/null
+++ b/website/themes/natrium/static/fonts/roboto-mono-v5-latin-regular.woff
Binary files differ
diff --git a/website/themes/natrium/static/fonts/roboto-mono-v5-latin-regular.woff2 b/website/themes/natrium/static/fonts/roboto-mono-v5-latin-regular.woff2
new file mode 100644
index 0000000..6163de7
--- /dev/null
+++ b/website/themes/natrium/static/fonts/roboto-mono-v5-latin-regular.woff2
Binary files differ
diff --git a/website/themes/natrium/static/images/logo.png b/website/themes/natrium/static/images/logo.png
new file mode 100644
index 0000000..c636fe9
--- /dev/null
+++ b/website/themes/natrium/static/images/logo.png
Binary files differ
diff --git a/website/themes/natrium/theme.toml b/website/themes/natrium/theme.toml
new file mode 100644
index 0000000..5105c3e
--- /dev/null
+++ b/website/themes/natrium/theme.toml
@@ -0,0 +1,17 @@
+name = "Natrium"
+license = "MIT"
+licenselink = "https://github.com/mobybit/hugo-natrium-theme/blob/master/LICENSE.md"
+description = "Natrium minimal theme"
+homepage = "https://github.com/mobybit/hugo-natrium-theme"
+tags = ["blog", "minimal", "personal", "responsive"]
+features = ["blog", "taxonomies", "privacy"]
+min_version = 0.25
+
+[author]
+ name = "Tim Krieger"
+ homepage = "https://blog.mobybit.de"
+
+[original]
+ name = "Jonathan Rutheiser"
+ homepage = "http://jrutheiser.com/"
+ repo = "https://github.com/jrutheiser/hugo-lithium-theme"
diff --git a/website/themes/reveal-hugo/.gitignore b/website/themes/reveal-hugo/.gitignore
new file mode 100644
index 0000000..36170a7
--- /dev/null
+++ b/website/themes/reveal-hugo/.gitignore
@@ -0,0 +1,2 @@
+node_modules
+public
diff --git a/website/themes/reveal-hugo/LICENSE b/website/themes/reveal-hugo/LICENSE
new file mode 100644
index 0000000..9d53fe0
--- /dev/null
+++ b/website/themes/reveal-hugo/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2018 Josh Dzielak
+
+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. \ No newline at end of file
diff --git a/website/themes/reveal-hugo/README.md b/website/themes/reveal-hugo/README.md
new file mode 100644
index 0000000..b0e9508
--- /dev/null
+++ b/website/themes/reveal-hugo/README.md
@@ -0,0 +1,371 @@
+# reveal-hugo
+
+A Hugo theme for [Reveal.js](https://revealjs.com/) that makes authoring and customization a breeze. With it, you can turn any properly-formatted Hugo content into a HTML presentation.
+
+![screenshot of reveal-hugo](https://github.com/dzello/reveal-hugo/blob/master/images/screenshot.png?raw=true)
+
+## Example
+
+Using reveal-hugo, presentations with multiple slides can be created with just one markdown file, like so:
+
+```markdown
++++
+title = "How to say hello"
++++
+
+# English
+Hello.
+
+---
+
+# Français
+Salut.
+
+---
+
+# Español
+Holá.
+```
+
+Just use `---` to split content into different slides.
+
+## Demo
+
+Visit [reveal-hugo.dzello.com](https://reveal-hugo.dzello.com/) to see a presentation created with this theme and learn more about what you can do. Jump to the [exampleSite](exampleSite) folder in this repository to see the source code for that presentation.
+
+If you're looking for a very simple reveal-hugo app you can use as a boilerplate, see the [programming-quotes](https://github.com/dzello/programming-quotes) repository.
+
+For a full-length blog post about reveal-hugo, checkout [Harness the Power of Static Site Generators to Create Presentations](https://forestry.io/blog/harness-the-power-of-static-to-create-presentations/) on the [Forestry.io blog](https://forestry.io/blog).
+
+## Tutorial
+
+You should be able to complete this section with no prior knowledge of Hugo or Reveal.js. At the end, you'll have a working presentation with instant reloading.
+
+### Create your first presentation
+
+To start, [install Hugo](https://gohugo.io/) and create a new Hugo site:
+
+```shell
+$ hugo new site my-presentation
+```
+
+Change into the directory of the new site:
+
+```shell
+$ cd my-presentation
+```
+
+Add the reveal-hugo theme as a submodule in the themes directory:
+
+```shell
+$ git submodule add git@github.com:dzello/reveal-hugo.git themes/reveal-hugo
+```
+
+Open `config.toml` and add the following contents:
+
+```toml
+theme = "reveal-hugo"
+
+[outputFormats.Reveal]
+baseName = "index"
+mediaType = "text/html"
+isHTML = true
+```
+This tells Hugo to use the reveal-hugo theme and it registers a new output format called "Reveal".
+
+Next, create a file in `content/_index.md` and add the following:
+
+```markdown
++++
+title = "My presentation"
+outputs = ["Reveal"]
++++
+
+# Hello world!
+
+This is my first slide.
+```
+
+Back on the command line, run:
+
+```shell
+$ hugo server
+```
+
+Navigate to [http://localhost:1313/](http://localhost:1313/) and you should see your presentation.
+
+![New site with reveal-hugo](https://github.com/dzello/reveal-hugo/blob/master/images/reveal-hugo-hello-world.png?raw=true)
+
+To add more slides, just add content to `_index.md` or create new markdown files in `content/home`. Remember that each slide must be separated by `---` with blank lines above and below.
+
+```markdown
+# Hello world!
+
+This is my first slide.
+
+---
+
+# Hello Mars!
+
+This is my second slide.
+```
+
+## Usage
+
+The Usage guide is contained in the example presentation that lives in this repository in the [exampleSite](./exampleSite) directory. You can access a live version at [reveal-hugo.dzello.com](https://reveal-hugo.dzello.com/).
+
+### Root vs. section presentations
+
+Here's what the folder structure would look like with one root presentation and one section presentation.
+
+```
+- content
+ - home # special section for appending to root presentation
+ - body.md # appends to the root presentation
+ - conclusion.md # appends to the root presentation
+ - _index.md # beginning of the root presentation
+ - ted-talk
+ - _index.md # beginning of the ted talk presentation
+ - body.md # appends to the ted talk presentation
+ - conclusion.md # appends to the ted talk presentation
+```
+
+This will create two presentations, one at `/` and one at `/ted-talk/`. The order that slides are appended to each can be controlled by the `weight` parameter specified in each file's front matter. The slides in `_index.md` will always come first, though you don't have to put any slides in there if you want to.
+
+### Shortcodes
+
+reveal-hugo comes with a variety of shortcodes that help you take advantage of some very useful Reveal.js features.
+
+#### fragment shortcode
+
+Wrap any content in the fragment shortcode and it will appear incrementally. Great for bulleted lists where you want one bullet point at a a time to appear.
+
+```markdown
+- {{% fragment %}}One{{% /fragment %}}
+- {{% fragment %}}Two{{% /fragment %}}
+- {{% fragment %}}Three{{% /fragment %}}
+```
+
+#### frag shortcode
+
+Like fragment but more terse - content is placed inline in a self-closing shortcode.
+
+```markdown
+- {{< frag c="One" />}}
+- {{< frag c="Two" />}}
+- {{< frag c="Three" />}}
+```
+
+#### slide shortcode
+
+The slide shortcode lets you set custom HTML and Reveal.js attributes for each slide - things like id, class, transition, background and [much more](https://github.com/hakimel/reveal.js/#slide-attributes). The names are the same as Reveal.js but without the 'data-' prefix.
+
+```markdown
+{{% slide id="hello" background="#FFF" transition="zoom" transition-speed="fast" %}}
+
+# Hello, world!
+
+{{% /slide %}}
+```
+
+Here's a list of documented slide attributes from the Reveal.js docs:
+
+- `autoslide`
+- `state`
+- `background`
+- `background-color`
+- `background-image`
+- `background-size`
+- `background-position`
+- `background-repeat`
+- `background-video`
+- `background-video-loop`
+- `background-video-muted`
+- `background-interactive`
+- `background-iframe`
+- `background-transition`
+- `transition` (can have different in and out transitions)
+- `transition-speed`
+- `notes` (can also use the note shortcode)
+- `timing`
+
+You can also pass through your own, a `data-` prefix will be added automatically to each one (except for `id` and `class`).
+
+#### section shortcode
+
+To create groups of slides that can be navigated vertically, surround your markdown with the section shortcode.
+
+```markdown
+{{% section %}}
+
+# Vertical slide 1
+
+---
+
+# Vertical slide 2
+
+{{% /section %}}
+```
+
+#### note shortcode
+
+Add [speaker notes](https://github.com/hakimel/reveal.js/#speaker-notes) for each slide with the note shortcode.
+
+```markdown
+{{% note %}}
+Don't forget to thank the audience.
+{{% /note %}}
+```
+
+*💡 Tip: you can also add notes by adding a `note` attribute to the slide shortcode.*
+
+#### markdown shortcode
+
+Markdown surrounded by the markdown shortcode will not be rendered by Hugo but by Reveal.js itself. This is useful if you want to use some native Reveal.js markdown syntax that isn't supported by reveal-hugo.
+
+```markdown
+{{% markdown %}}
+# I'm rendered...
+...by Reveal.js
+{{% /markdown %}}
+```
+
+### HTML slides
+
+If you need to create fancier HTML for a slide than you can do with markdown, just add `data-noprocess` to the &lt;section&gt; element.
+
+```html
+<section data-noprocess>
+ <h1>Hello, world!</h1>
+</section>
+```
+
+### Reusable slides and sections
+
+Sometimes you need to reuse a slide in the same presentation or across different presentations. reveal-hugo makes use of Hugo data templates to make both cases easy.
+
+To create reusable slides, create a TOML (or JSON or YAML) file in your site's data directory. Give it a name that reflects its content or just `slides.toml`. In that file, add a key for each reusable slide. The name should reflect the slide's content and the value should be the slide's markdown.
+
+```toml
+thankyou = '''
+
+# Thank you!
+
+Any questions?
+
+'''
+```
+
+*💡 Tip: TOML's multiline string syntax comes in handy here, note the '''.*
+
+Each key can contain **one or more** slides separated by `---` and newlines. That way you can create reusable sections.
+
+```toml
+thankyou = '''
+
+# Thank you!
+
+---
+
+Any questions?
+
+'''
+```
+
+To render a slide from a data template, use the slide shortcode with a content attribute:
+
+```markdown
+{{% slide content="slides.thankyou" /%}}
+```
+
+The part before the "." is the name of the file in the data directory. The part after the dot is the key to look up in that file.
+
+You can use all the additional slide shortcode attributes. They will be applied to every slide in the data template.
+
+## Configuration
+
+Customize the Reveal.js presentation by setting these values in `config.toml` or the front matter of any presentation's `index.md` file.
+
+- `params.reveal_hugo.theme`: The Reveal.js theme used, defaults to "black"
+- `params.reveal_hugo.custom_theme`: The path to a locally hosted Reveal.js theme
+- `params.reveal_hugo.highlight_theme`: The [highlight.js](https://highlightjs.org/) theme used, defaults to "default"
+
+Include any other attributes in `params.reveal_hugo` that you'd like to be fed as arguments to `Reveal.initialize` in **snakecase**. So `slideNumber` becomes `slide_number`. The reason is that Hugo lowercases all params and Reveal.js is case-sensitive. Params are converted from snakecase to camelcase before passing to Reveal.js.
+
+See the [extensive list of Reveal.js configuration options](https://github.com/hakimel/reveal.js/#configuration) here. The defaults used by this theme are located in `data/reveal_hugo.toml`.
+
+If you're new to TOML, this is how it should look in your `config.toml`:
+
+```TOML
+[params.reveal_hugo]
+theme = "moon"
+```
+
+Or in the front matter of an `_index.md` file:
+
+```TOML
+[reveal_hugo]
+theme = "moon"
+```
+
+## Adding HTML to the layout
+
+If you need to add something to the HTML page, just override one or both of the empty partials that live at `layouts/partials/reveal-hugo/body.html` and `layouts/partials/reveal-hugo/head.html`. These partials are injected into the page just before the closing of the body and head tags respectively. Common uses would be to add custom CSS or JavaScript to your presentation.
+
+## Recipes
+
+### Add a Reveal.js presentation to an existing Hugo site
+
+If your Hugo site already has a theme but you'd like to create a presentation from some of its content, that's very easy. First, manually copy a few files out of this theme into a few of your site's directories:
+
+```shell
+cd my-hugo-site
+git clone git@github.com:dzello/reveal-hugo.git themes/reveal-hugo
+cd themes/reveal-hugo
+cp -r data layouts static ../../
+```
+
+Files and directories are named such that they shouldn't conflict with your existing content. Of course, you should double check before copying, especially the shortcodes which can't be put under a directory.
+
+Next, add the Reveal output format to your site's `config.toml` file
+
+```toml
+[outputFormats.Reveal]
+baseName = "index"
+mediaType = "text/html"
+isHTML = true
+```
+
+Now you can add `outputs = ["Reveal"]` to the front matter of any section's `_index.md` file and that section's content will be combined into a presentation and written to `index.html`. If you already have a `index.html` page for that section, just change the `baseName` above to `reveal` and the presentation will be placed in a `reveal.html` file instead.
+
+Note: If you specify `outputs = ["Reveal"]` for a single content file, you can prevent anything being generated for that file. This is handy if you other default layouts that would have created a regular HTML file from it. Only the list file is required for the presentation.
+
+## Reveal.js tips
+
+These are some useful Reveal.js features and shortcuts.
+
+- 's' - type 's' to enter speaker mode, which opens a separate window with a time and speaker notes
+- 'o' - type 'o' to enter overview mode and scroll through slide thumbnails
+- 'f' - type 'f' to go into full-screen mode
+
+Here are a few useful Reveal.js-related tools:
+
+- [decktape](https://github.com/astefanutti/decktape) for exporting a presentation as a PDF
+- More [revealjs themes](https://github.com/dzello/revealjs-themes) including robot-lung and sunblind
+
+Find many more on the Reveal.js wiki: [Plugins, tools and hardware](https://github.com/hakimel/reveal.js/wiki/Plugins,-Tools-and-Hardware).
+
+## Contributing
+
+Contributions are very welcome. To run the example site in this repository locally, clone this repository and run:
+
+```shell
+hugo server -s exampleSite
+```
+
+or simply...
+
+```shell
+npm start
+```
+
diff --git a/website/themes/reveal-hugo/data/reveal_hugo.toml b/website/themes/reveal-hugo/data/reveal_hugo.toml
new file mode 100644
index 0000000..973cc27
--- /dev/null
+++ b/website/themes/reveal-hugo/data/reveal_hugo.toml
@@ -0,0 +1,8 @@
+[defaults]
+theme = 'black'
+highlight_theme = 'default'
+controls = true
+progress = true
+history = true
+center = true
+transition = 'slide' # none/fade/slide/convex/concave/zoom
diff --git a/website/themes/reveal-hugo/exampleSite/.forestry/settings.yml b/website/themes/reveal-hugo/exampleSite/.forestry/settings.yml
new file mode 100644
index 0000000..8130263
--- /dev/null
+++ b/website/themes/reveal-hugo/exampleSite/.forestry/settings.yml
@@ -0,0 +1,12 @@
+---
+new_page_extension: md
+auto_deploy: false
+admin_path:
+webhook_url:
+sections:
+upload_dir: "./exampleSite/static/uploads"
+public_path: "/uploads"
+front_matter_path: ''
+use_front_matter_path: false
+file_template: ":filename:"
+version: 0.38.1
diff --git a/website/themes/reveal-hugo/exampleSite/config.toml b/website/themes/reveal-hugo/exampleSite/config.toml
new file mode 100644
index 0000000..a5910a0
--- /dev/null
+++ b/website/themes/reveal-hugo/exampleSite/config.toml
@@ -0,0 +1,20 @@
+baseURL = "https://example.com/"
+languageCode = "en-us"
+title = "A Hugo theme for creating Reveal.js presentations"
+disableKinds = ["sitemap", "RSS"]
+theme = "."
+themesDir = "../"
+
+[author]
+name = "Josh Dzielak"
+
+[params]
+description = "Includes a handy markdown-based syntax and shortcodes to help you get presentations done fast"
+
+[params.reveal_hugo]
+history = true
+
+[outputFormats.Reveal]
+baseName = "index"
+mediaType = "text/html"
+isHTML = true
diff --git a/website/themes/reveal-hugo/exampleSite/content/_index.md b/website/themes/reveal-hugo/exampleSite/content/_index.md
new file mode 100644
index 0000000..fba3be6
--- /dev/null
+++ b/website/themes/reveal-hugo/exampleSite/content/_index.md
@@ -0,0 +1,22 @@
++++
+title = "reveal-hugo"
+description = "A Hugo theme for creating Reveal.js presentations"
+outputs = ["Reveal"]
+[reveal_hugo]
+custom_theme = "reveal-hugo/themes/robot-lung.css"
+margin = 0.2
+highlight_theme = "color-brewer"
+transition = "slide"
+transition_speed = "fast"
+[reveal_hugo.templates.hotpink]
+class = "hotpink"
+background = "#FF4081"
++++
+
+# 📽️
+
+# reveal-hugo
+
+A Hugo theme for creating Reveal.js presentations.
+
+~ made by [@dzello](https://dzello.com/) ~ \ No newline at end of file
diff --git a/website/themes/reveal-hugo/exampleSite/content/example/_index.md b/website/themes/reveal-hugo/exampleSite/content/example/_index.md
new file mode 100644
index 0000000..91a81a7
--- /dev/null
+++ b/website/themes/reveal-hugo/exampleSite/content/example/_index.md
@@ -0,0 +1,10 @@
++++
+title = "Example of a section presentation"
+outputs = ["Reveal"]
+[reveal_hugo]
+theme = "moon"
++++
+
+# Section Presentation
+
+Only content from this section will go into this presentation. \ No newline at end of file
diff --git a/website/themes/reveal-hugo/exampleSite/content/example/presentation.md b/website/themes/reveal-hugo/exampleSite/content/example/presentation.md
new file mode 100644
index 0000000..585bab5
--- /dev/null
+++ b/website/themes/reveal-hugo/exampleSite/content/example/presentation.md
@@ -0,0 +1,7 @@
++++
+weight = 10
++++
+
+# Including...
+
+Content from files like this one. \ No newline at end of file
diff --git a/website/themes/reveal-hugo/exampleSite/content/home/features.md b/website/themes/reveal-hugo/exampleSite/content/home/features.md
new file mode 100644
index 0000000..b00c363
--- /dev/null
+++ b/website/themes/reveal-hugo/exampleSite/content/home/features.md
@@ -0,0 +1,19 @@
++++
+weight = 10
++++
+
+## What's included?
+
+- All Reveal.js HTML, CSS and JS (v3.6.0)
+- All out-of-the-box Reveal.js themes
+- Two custom Reveal.js themes (including this one)
+
+---
+
+## Features
+
+- Write slides in Markdown in one or more files
+- Shorcodes for fragments, sections, slides & more
+- All Reveal.js parameters can be customized
+- Any Hugo section can be output as a presentation
+
diff --git a/website/themes/reveal-hugo/exampleSite/content/home/resources.md b/website/themes/reveal-hugo/exampleSite/content/home/resources.md
new file mode 100644
index 0000000..e19cbc1
--- /dev/null
+++ b/website/themes/reveal-hugo/exampleSite/content/home/resources.md
@@ -0,0 +1,43 @@
++++
+weight = 42
++++
+
+# Resources
+
+---
+
+## Code and docs
+
+- [reveal-hugo Github README](https://github.com/dzello/reveal-hugo)
+- [Content for this presentation](https://github.com/dzello/reveal-hugo/tree/master/exampleSite)
+
+---
+
+## External resources
+
+- [Reveal.js](https://revealjs.com/)
+- [Hugo docs](https://gohugo.io/)
+- [Hugo output format docs](https://gohugo.io/templates/output-formats/)
+
+---
+
+## Designed to...
+
+- Deploy to [Netlify](https://netlify.com/)
+- Edit with [Forestry](https://forestry.io/)
+
+---
+
+# 🙏
+
+Contribute by opening issues and pull requests.
+
+---
+
+# Thanks!
+
+---
+
+# ↩️
+
+#### [Start over](#)
diff --git a/website/themes/reveal-hugo/exampleSite/content/home/shortcodes/fragment.md b/website/themes/reveal-hugo/exampleSite/content/home/shortcodes/fragment.md
new file mode 100644
index 0000000..e53592c
--- /dev/null
+++ b/website/themes/reveal-hugo/exampleSite/content/home/shortcodes/fragment.md
@@ -0,0 +1,41 @@
++++
+weight = 30
++++
+
+## Fragment
+
+The `fragment` shortcode makes content appear incrementally.
+
+```
+{{%/* fragment */%}} One {{%/* /fragment */%}}
+{{%/* fragment */%}} Two {{%/* /fragment */%}}
+{{%/* fragment */%}} Three {{%/* /fragment */%}}
+```
+
+{{% fragment %}} One {{% /fragment %}}
+{{% fragment %}} Two {{% /fragment %}}
+{{% fragment %}} Three {{% /fragment %}}
+
+---
+
+## Frag
+
+The `frag` shortcode is more terse than `fragment`. It accepts a `c` attribute.
+
+```
+{{</* frag c="One" */>}}
+{{</* frag c="Two" */>}}
+{{</* frag c="Three" */>}}
+```
+
+{{< frag c="One" >}}
+{{< frag c="Two" >}}
+{{< frag c="Three" >}}
+
+---
+
+Both `fragment` and `frag` accept two additional parameters:
+
+- `class`: sets the class of the wrapping `span` element
+- `index`: controls the order in which sections will appear
+
diff --git a/website/themes/reveal-hugo/exampleSite/content/home/shortcodes/introduction.md b/website/themes/reveal-hugo/exampleSite/content/home/shortcodes/introduction.md
new file mode 100644
index 0000000..2978a52
--- /dev/null
+++ b/website/themes/reveal-hugo/exampleSite/content/home/shortcodes/introduction.md
@@ -0,0 +1,11 @@
++++
+weight = 29
++++
+
+# Shortcodes
+
+---
+
+Hugo's shortcodes are similar to functions or templates that extend what you can do with Markdown.
+
+[Shortcode documentation](https://gohugo.io/content-management/shortcodes/) \ No newline at end of file
diff --git a/website/themes/reveal-hugo/exampleSite/content/home/shortcodes/markdown.md b/website/themes/reveal-hugo/exampleSite/content/home/shortcodes/markdown.md
new file mode 100644
index 0000000..21167bd
--- /dev/null
+++ b/website/themes/reveal-hugo/exampleSite/content/home/shortcodes/markdown.md
@@ -0,0 +1,38 @@
++++
+weight = 36
++++
+
+{{< markdown >}}
+
+## Markdown
+
+Reveal.js has its own [markdown processor](https://github.com/hakimel/reveal.js#markdown). To use that instead of Hugo, surround a slide with the markdown shortcode.
+
+```
+{{</* markdown */>}}
+
+# Hello world!
+
+{{</* /markdown */>}}
+```
+
+<br>
+<small>
+💡 Make sure to use the `{{</* */>}}` shortcode syntax to avoid rendering by Hugo.
+</small>
+
+---
+
+<!-- .slide: data-background="#FF4081" -->
+
+Reveal.js markdown uses HTML comments to change slide properties, like background color.
+
+```
+{{</* markdown */>}}
+<!-- .slide: data-background="#FF4081" -->
+# I'm a colorful slide
+{{</* /markdown */>}}
+```
+
+{{< /markdown >}}
+
diff --git a/website/themes/reveal-hugo/exampleSite/content/home/shortcodes/other.md b/website/themes/reveal-hugo/exampleSite/content/home/shortcodes/other.md
new file mode 100644
index 0000000..abc9d5a
--- /dev/null
+++ b/website/themes/reveal-hugo/exampleSite/content/home/shortcodes/other.md
@@ -0,0 +1,33 @@
++++
+weight = 38
++++
+
+## Note
+
+Add speaker notes to your presentation with the note shortcode.
+
+```markdown
+{{%/* note */%}}
+
+Type 's' to see this slide's speaker notes.
+
+{{%/* /note */%}}
+```
+
+{{% note %}}
+
+You found the speaker notes!
+
+{{% /note %}}
+
+---
+
+<section data-noprocess>
+ <h2>Write slides in HTML</h2>
+ <p>Use a <code>section</code> tag with a <code>data-noprocess</code> attribute to avoid any processing by reveal-hugo.</p>
+ <pre>
+&lt;section data-noprocess&gt;
+ &lt;h1&gt;Hello world!&lt;/h1&gt;
+&lt;section&gt;</pre>
+ <small>💡 This is useful if you can't get Markdown to output exactly what you want.</small>
+</section>
diff --git a/website/themes/reveal-hugo/exampleSite/content/home/shortcodes/section.md b/website/themes/reveal-hugo/exampleSite/content/home/shortcodes/section.md
new file mode 100644
index 0000000..797ba21
--- /dev/null
+++ b/website/themes/reveal-hugo/exampleSite/content/home/shortcodes/section.md
@@ -0,0 +1,44 @@
++++
+weight = 33
++++
+
+{{% section %}}
+
+## Section
+
+The `section` shortcode groups slides into a **vertical display**.
+
+<br>
+<small>
+use the down arrow or swipe down to continue
+</small>
+<br>
+<a href="#" class="navigate-down">🔽</a>
+
+---
+
+Put the shortcode around the slides you want to group together.
+
+```markdown
+{{%/* section */%}}
+
+## Section slide 1
+
+---
+
+## Section slide 2
+
+{{%/* /section */%}}
+```
+
+Keep going down.
+
+---
+
+## That's it!
+
+Use the right arrow or swipe right to continue.
+
+{{% /section %}}
+
+
diff --git a/website/themes/reveal-hugo/exampleSite/content/home/shortcodes/slide.md b/website/themes/reveal-hugo/exampleSite/content/home/shortcodes/slide.md
new file mode 100644
index 0000000..473199e
--- /dev/null
+++ b/website/themes/reveal-hugo/exampleSite/content/home/shortcodes/slide.md
@@ -0,0 +1,137 @@
++++
+weight = 34
++++
+
+## Slide
+
+Customize individual slide attributes like id, class, background color and transition. Use the same keys as Reveal.js but omit the 'data-' prefix.
+
+---
+
+{{% slide id="custom-1" transition="zoom" transition-speed="fast" %}}
+
+## Custom slide 1
+
+```
+{{%/* slide id="custom-1" transition="zoom" transition-speed="fast" */%}}
+
+## Custom slide 1
+
+{{%/* /slide */%}}
+```
+
+{{% /slide %}}
+
+---
+
+{{% slide id="custom-2" background="#FF4081" %}}
+
+## Custom slide 2
+
+```
+{{%/* slide id="custom-2" background="#FF4081" */%}}
+
+## Custom slide 2
+
+{{%/* /slide */%}}
+```
+
+{{% /slide %}}
+
+---
+
+💡 Tip: Setting a slide's `id` attribute makes it easy to link to from other parts of the presentation.
+
+<br>
+```markdown
+Go to [custom slide 1](#custom-1)
+```
+
+<small>
+Go to [custom slide 1](#custom-1)
+</small>
+
+---
+
+Slide attribute possibilities from the [Reveal.js docs](https://github.com/hakimel/reveal.js):
+
+- `autoslide`
+- `state`
+- `background`
+- `background-color`
+- `background-image`
+- `background-size`
+- `background-position`
+- `background-repeat`
+
+---
+
+- `background-video`
+- `background-video-loop`
+- `background-video-muted`
+- `background-interactive`
+- `background-iframe`
+- `background-transition`
+- `transition` (can have different in and out transitions)
+- `transition-speed`
+- `notes` (can also use the note shortcode)
+- `timing`
+
+---
+
+{{% section %}}
+
+## Slide templates
+
+Store sets of common slide attributes in front matter variables and apply them to slides with the template attribute.
+
+<br>
+<small>
+navigate down to learn more
+</small>
+<br>
+<a href="#" class="navigate-down">🔽</a>
+
+---
+
+Create templates in config.toml, _index.md or the current page's front matter. Put them under the **templates** key with a meaningful name:
+
+```toml
+[reveal_hugo.templates.hotpink]
+class = "hotpink"
+background = "#FF4081"
+```
+
+---
+
+{{% slide template="hotpink" %}}
+
+Apply the template using the **template** attribute of the slide shortcode:
+
+```markdown
+{{%/* slide template="hotpink" */%}}
+
+# I'm a hot pink slide!
+
+{{%/* /slide */%}}
+```
+
+{{% /slide %}}
+
+---
+
+If a template exists in multiple configurations, it's properties will be merged. If a property is declared multiple times, the order of precedence is:
+
+- page
+- section (_index.md)
+- site (config.toml)
+
+{{% /section %}}
+
+---
+
+{{% section %}}
+
+{{% slide content="home.example" /%}}
+
+{{% /section %}}
diff --git a/website/themes/reveal-hugo/exampleSite/content/home/usage.md b/website/themes/reveal-hugo/exampleSite/content/home/usage.md
new file mode 100644
index 0000000..af50dfa
--- /dev/null
+++ b/website/themes/reveal-hugo/exampleSite/content/home/usage.md
@@ -0,0 +1,173 @@
++++
+weight = 20
++++
+
+# Usage
+
+---
+
+## Prerequisite
+
+First, add this to your `config.toml`:
+
+```toml
+[outputFormats.Reveal]
+baseName = "index"
+mediaType = "text/html"
+isHTML = true
+```
+
+---
+
+### Presentation at site root
+
+Create `content/_index.md`:
+
+```markdown
++++
+outputs = ["Reveal"]
++++
+
+# Slide 1
+
+Hello world!
+```
+
+---
+
+### Add slides in same file
+
+Separate them by `---`:
+
+```
+
+# Slide 1
+
+Hello world!
+
+---
+
+# Slide 2
+
+Hello program!
+
+```
+
+---
+
+### Add slides with other files
+
+Add slides to `content/home/*.md`
+
+```markdown
++++
+weight = 10
++++
+
+# Slide 3
+
+---
+
+# Slide 4
+```
+
+<small>💡 Tip: Use `weight` to specify the order that files should be added.</small>
+
+---
+
+### Presentation at '/{section}/'
+
+In `content/{section}/_index.md`:
+
+```markdown
++++
+outputs = ["Reveal"]
++++
+
+# Slide 1
+
+---
+
+# Slide 2
+
+```
+
+---
+
+Add slides from other files in `content/{section}/*.md`
+
+```markdown
++++
+weight = 10
++++
+
+# Slide 3
+
+---
+
+# Slide 4
+```
+
+<small>💡 Tip: Use `weight` to specify the order that files should be added.</small>
+
+---
+
+# Configuration
+
+---
+
+## Reveal.js themes
+
+Put in `config.toml` or a presentation's front matter.
+
+Use the `theme` key for themes that come with Reveal.js.
+
+```toml
+[params.reveal_hugo]
+theme = "moon"
+highlight_theme = "zenburn"
+```
+
+[Reveal.js themes](https://github.com/hakimel/reveal.js/#theming) &middot;
+[highlight.js themes](https://highlightjs.org/static/demo/)
+
+---
+
+## Use a custom theme
+
+Use the `custom_theme` key to point to a CSS file in the `static` directory.
+
+```toml
+[params.reveal_hugo]
+custom_theme = "reveal-hugo/themes/robot-lung.css"
+```
+
+---
+
+## Like this theme?
+
+reveal-hugo comes with 2 extra Reveal.js themes:
+
+- [robot-lung](https://github.com/dzello/revealjs-themes#robot-lung) (this one)
+- [sunblind](https://github.com/dzello/revealjs-themes#sunblind)
+
+<br>
+<small>
+They live in the `static/reveal-hugo/themes` folder and also [on Github](https://github.com/dzello/revealjs-themes).
+</small>
+
+---
+
+## Reveal.js params
+
+Set **snakecase** versions of Reveal.js params, which will be camelized and passed to `Reveal.initialize`.
+
+```toml
+[params.reveal_hugo]
+history = true
+slide_number = true
+transition = 'zoom'
+transition_speed = 'fast'
+```
+
+[Full list of params](https://github.com/hakimel/reveal.js/#configuration)
diff --git a/website/themes/reveal-hugo/exampleSite/data/home.toml b/website/themes/reveal-hugo/exampleSite/data/home.toml
new file mode 100644
index 0000000..f242290
--- /dev/null
+++ b/website/themes/reveal-hugo/exampleSite/data/home.toml
@@ -0,0 +1,42 @@
+example = '''
+
+# Reusable slides
+
+Store markdown in a [data template](https://gohugo.io/templates/data-templates/) and reuse it in multiple sections or presentations.
+
+<br>
+<small>
+navigate down to learn more
+</small>
+<br>
+<a href="#" class="navigate-down">🔽</a>
+
+---
+
+Add an `example` key to data/home.toml:
+
+```
+example = "I'm a slide"
+```
+<br>
+
+Set the `content` attribute to "home.example":
+
+```
+{{% slide content="home.example" /%}}
+```
+
+<br>
+<small>
+💡 Make sure to use a closing or self-closing shortcode.
+</small>
+
+---
+
+💡 Each data template entry can contain one or more slides, separated by `---` with newlines.
+
+---
+
+💡 All other slide shortcode attributes (background, transition, etc.) can be used and will be applied to each slide in the data template entry.
+
+'''
diff --git a/website/themes/reveal-hugo/exampleSite/layouts/partials/reveal-hugo/body.html b/website/themes/reveal-hugo/exampleSite/layouts/partials/reveal-hugo/body.html
new file mode 100644
index 0000000..9caa4c7
--- /dev/null
+++ b/website/themes/reveal-hugo/exampleSite/layouts/partials/reveal-hugo/body.html
@@ -0,0 +1,12 @@
+<div class="line top"></div>
+<div class="line bottom"></div>
+<div class="line left"></div>
+<div class="line right"></div>
+
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-24132749-1"></script>
+<script>
+ window.dataLayer = window.dataLayer || [];
+ function gtag(){dataLayer.push(arguments);}
+ gtag('js', new Date());
+ gtag('config', "UA-24132749-1");
+</script> \ No newline at end of file
diff --git a/website/themes/reveal-hugo/exampleSite/static/_redirects b/website/themes/reveal-hugo/exampleSite/static/_redirects
new file mode 100644
index 0000000..b711d67
--- /dev/null
+++ b/website/themes/reveal-hugo/exampleSite/static/_redirects
@@ -0,0 +1,2 @@
+# Redirect default Netlify subdomain to primary domain
+https://revealjs-hugo.netlify.com/* https://revealjs-hugo.dzello.com/:splat 301! \ No newline at end of file
diff --git a/website/themes/reveal-hugo/exampleSite/static/favicon.ico b/website/themes/reveal-hugo/exampleSite/static/favicon.ico
new file mode 100644
index 0000000..64b7e45
--- /dev/null
+++ b/website/themes/reveal-hugo/exampleSite/static/favicon.ico
Binary files differ
diff --git a/website/themes/reveal-hugo/exampleSite/static/reveal-hugo/themes/robot-lung.css b/website/themes/reveal-hugo/exampleSite/static/reveal-hugo/themes/robot-lung.css
new file mode 100644
index 0000000..a080f8e
--- /dev/null
+++ b/website/themes/reveal-hugo/exampleSite/static/reveal-hugo/themes/robot-lung.css
@@ -0,0 +1,333 @@
+/**
+
+ [ robot-lung ]
+
+ A hot pink theme for Reveal.js with Roboto fonts and a colorful border.
+ By Josh Dzielak, https://dzello.com/, License MIT
+
+ The bold border is optional and requires some HTML. To use it:
+
+ 1. Add 4 divs to your HTML page:
+ <div class="line top"></div>
+ <div class="line bottom"></div>
+ <div class="line left"></div>
+ <div class="line right"></div>
+
+ 2. Set { margin: 0.2 } in the Reveal.js initializer to make sure
+ your presentation content doesn't collide with the frame.
+
+ Like the theme but don't like the colors? Don't fret. Just change
+ $borderColor and/or $linkColor below to something else and rebuild.
+
+ Or if you don't want to rebuild the theme just override the .line background
+ property with some CSS:
+
+ .line {
+ background: <new-color>;
+ }
+
+*/
+@import url(https://fonts.googleapis.com/css?family=Roboto+Slab:300,700);
+@import url(https://fonts.googleapis.com/css?family=Roboto:700);
+section.has-light-background, section.has-light-background h1, section.has-light-background h2, section.has-light-background h3, section.has-light-background h4, section.has-light-background h5, section.has-light-background h6 {
+ color: #141414; }
+
+.reveal .controls {
+ right: 50px;
+ bottom: 50px; }
+
+.line {
+ content: '';
+ position: fixed;
+ background: #FF4081;
+ z-index: 105; }
+ .line.top {
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: 30px; }
+ @media (max-width: 840px) {
+ .line.top {
+ height: 15px; } }
+ .line.bottom {
+ left: 0;
+ top: auto;
+ bottom: 0;
+ width: 100%;
+ height: 30px; }
+ @media (max-width: 840px) {
+ .line.bottom {
+ height: 15px; } }
+ .line.left {
+ left: 0;
+ top: 0;
+ width: 30px;
+ height: 200%; }
+ @media (max-width: 840px) {
+ .line.left {
+ width: 15px; } }
+ .line.right {
+ left: auto;
+ right: 0;
+ top: 0;
+ width: 30px;
+ height: 200%; }
+ @media (max-width: 840px) {
+ .line.right {
+ width: 15px; } }
+
+/*********************************************
+ * GLOBAL STYLES
+ *********************************************/
+body {
+ background: #fff;
+ background-color: #fff; }
+
+.reveal {
+ font-family: "Roboto Slab", serif;
+ font-size: 32px;
+ font-weight: normal;
+ color: #363636; }
+
+::selection {
+ color: #fff;
+ background: #ffc0d5;
+ text-shadow: none; }
+
+::-moz-selection {
+ color: #fff;
+ background: #ffc0d5;
+ text-shadow: none; }
+
+.reveal .slides > section,
+.reveal .slides > section > section {
+ line-height: 1.3;
+ font-weight: inherit; }
+
+/*********************************************
+ * HEADERS
+ *********************************************/
+.reveal h1,
+.reveal h2,
+.reveal h3,
+.reveal h4,
+.reveal h5,
+.reveal h6 {
+ margin: 0 0 20px 0;
+ color: #141414;
+ font-family: "Roboto", sans-serif;
+ font-weight: 700;
+ line-height: 1.2;
+ letter-spacing: normal;
+ text-transform: uppercase;
+ text-shadow: none;
+ word-wrap: break-word; }
+
+.reveal h1 {
+ font-size: 2.6em; }
+
+.reveal h2 {
+ font-size: 2.2em; }
+
+.reveal h3 {
+ font-size: 1.7em; }
+
+.reveal h4 {
+ font-size: 1.4em; }
+
+.reveal h1 {
+ text-shadow: none; }
+
+/*********************************************
+ * OTHER
+ *********************************************/
+.reveal p {
+ margin: 20px 0;
+ line-height: 1.3; }
+
+/* Ensure certain elements are never larger than the slide itself */
+.reveal img,
+.reveal video,
+.reveal iframe {
+ max-width: 95%;
+ max-height: 95%; }
+
+.reveal strong,
+.reveal b {
+ font-weight: bold; }
+
+.reveal em {
+ font-style: italic; }
+
+.reveal ol,
+.reveal dl,
+.reveal ul {
+ display: inline-block;
+ text-align: left;
+ margin: 0 0 0 1em; }
+
+.reveal ol {
+ list-style-type: decimal; }
+
+.reveal ul {
+ list-style-type: disc; }
+
+.reveal ul ul {
+ list-style-type: square; }
+
+.reveal ul ul ul {
+ list-style-type: circle; }
+
+.reveal ul ul,
+.reveal ul ol,
+.reveal ol ol,
+.reveal ol ul {
+ display: block;
+ margin-left: 40px; }
+
+.reveal dt {
+ font-weight: bold; }
+
+.reveal dd {
+ margin-left: 40px; }
+
+.reveal blockquote {
+ display: block;
+ position: relative;
+ width: 70%;
+ margin: 20px auto;
+ padding: 5px;
+ font-style: italic;
+ background: rgba(255, 255, 255, 0.05);
+ box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2); }
+
+.reveal blockquote p:first-child,
+.reveal blockquote p:last-child {
+ display: inline-block; }
+
+.reveal q {
+ font-style: italic; }
+
+.reveal pre {
+ display: block;
+ position: relative;
+ width: 90%;
+ margin: 20px auto;
+ text-align: left;
+ font-size: 0.55em;
+ font-family: monospace;
+ line-height: 1.2em;
+ word-wrap: break-word;
+ box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }
+
+.reveal code {
+ font-family: monospace;
+ text-transform: none; }
+
+.reveal pre code {
+ display: block;
+ padding: 5px;
+ overflow: auto;
+ max-height: 400px;
+ word-wrap: normal; }
+
+.reveal table {
+ margin: auto;
+ border-collapse: collapse;
+ border-spacing: 0; }
+
+.reveal table th {
+ font-weight: bold; }
+
+.reveal table th,
+.reveal table td {
+ text-align: left;
+ padding: 0.2em 0.5em 0.2em 0.5em;
+ border-bottom: 1px solid; }
+
+.reveal table th[align="center"],
+.reveal table td[align="center"] {
+ text-align: center; }
+
+.reveal table th[align="right"],
+.reveal table td[align="right"] {
+ text-align: right; }
+
+.reveal table tbody tr:last-child th,
+.reveal table tbody tr:last-child td {
+ border-bottom: none; }
+
+.reveal sup {
+ vertical-align: super; }
+
+.reveal sub {
+ vertical-align: sub; }
+
+.reveal small {
+ display: inline-block;
+ font-size: 0.6em;
+ line-height: 1.2em;
+ vertical-align: top; }
+
+.reveal small * {
+ vertical-align: top; }
+
+/*********************************************
+ * LINKS
+ *********************************************/
+.reveal a {
+ color: #FF4081;
+ text-decoration: none;
+ -webkit-transition: color .15s ease;
+ -moz-transition: color .15s ease;
+ transition: color .15s ease; }
+
+.reveal a:hover {
+ color: #ff8db3;
+ text-shadow: none;
+ border: none; }
+
+.reveal .roll span:after {
+ color: #fff;
+ background: #f30053; }
+
+/*********************************************
+ * IMAGES
+ *********************************************/
+.reveal section img {
+ margin: 15px 0px;
+ background: rgba(255, 255, 255, 0.12);
+ border: 4px solid #363636;
+ box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); }
+
+.reveal section img.plain {
+ border: 0;
+ box-shadow: none; }
+
+.reveal a img {
+ -webkit-transition: all .15s linear;
+ -moz-transition: all .15s linear;
+ transition: all .15s linear; }
+
+.reveal a:hover img {
+ background: rgba(255, 255, 255, 0.2);
+ border-color: #FF4081;
+ box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); }
+
+/*********************************************
+ * NAVIGATION CONTROLS
+ *********************************************/
+.reveal .controls {
+ color: #FF4081; }
+
+/*********************************************
+ * PROGRESS BAR
+ *********************************************/
+.reveal .progress {
+ background: rgba(0, 0, 0, 0.2);
+ color: #FF4081; }
+
+.reveal .progress span {
+ -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
+ -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
+ transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
diff --git a/website/themes/reveal-hugo/images/reveal-hugo-hello-world.png b/website/themes/reveal-hugo/images/reveal-hugo-hello-world.png
new file mode 100644
index 0000000..10d9901
--- /dev/null
+++ b/website/themes/reveal-hugo/images/reveal-hugo-hello-world.png
Binary files differ
diff --git a/website/themes/reveal-hugo/images/screenshot.png b/website/themes/reveal-hugo/images/screenshot.png
new file mode 100644
index 0000000..49eda5e
--- /dev/null
+++ b/website/themes/reveal-hugo/images/screenshot.png
Binary files differ
diff --git a/website/themes/reveal-hugo/images/tn.png b/website/themes/reveal-hugo/images/tn.png
new file mode 100644
index 0000000..de89998
--- /dev/null
+++ b/website/themes/reveal-hugo/images/tn.png
Binary files differ
diff --git a/website/themes/reveal-hugo/layouts/_default/baseof.reveal.html b/website/themes/reveal-hugo/layouts/_default/baseof.reveal.html
new file mode 100644
index 0000000..1e3868b
--- /dev/null
+++ b/website/themes/reveal-hugo/layouts/_default/baseof.reveal.html
@@ -0,0 +1,87 @@
+<!doctype html>
+{{- $reveal_cdn := "https://cdnjs.cloudflare.com/ajax/libs/reveal.js/3.6.0" -}}
+{{- $highlight_cdn := "https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0" -}}
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <title>{{ or .Page.Title .Site.Title }}</title>
+ <meta name="description" content="{{ or .Page.Params.Description .Site.Params.Description }}">
+ <meta name="author" content="{{ .Site.Author.name }}">
+ <meta name="apple-mobile-web-app-capable" content="yes">
+ <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
+ <link rel="stylesheet" href="{{ $reveal_cdn }}/css/reveal.min.css">
+ <!-- Theme used for presentation -->
+ {{- $theme := or .Page.Params.reveal_hugo.theme .Site.Params.reveal_hugo.theme .Site.Data.reveal_hugo.defaults.theme "black" -}}
+ {{- $custom_theme := or .Page.Params.reveal_hugo.custom_theme .Site.Params.reveal_hugo.custom_theme -}}
+ {{- if $custom_theme -}}
+ <link rel="stylesheet" href="{{ $custom_theme | relURL }}" id="theme">
+ {{ else -}}
+ <link rel="stylesheet" href="{{ $reveal_cdn }}/css/theme/{{ $theme }}.css" id="theme">
+ {{- end -}}
+ <!-- Theme used for syntax highlighting of code -->
+ {{- $highlight_theme := or .Page.Params.reveal_hugo.highlight_theme .Site.Params.reveal_hugo.highlight_theme .Site.Data.reveal_hugo.defaults.highlight_theme "default" -}}
+ <link rel="stylesheet" href="{{ $highlight_cdn }}/styles/{{ $highlight_theme }}.min.css">
+ <!-- Printing and PDF exports -->
+ <script>
+ var link = document.createElement( 'link' );
+ link.rel = 'stylesheet';
+ link.type = 'text/css';
+ link.href = window.location.search.match( /print-pdf/gi ) ? '{{ $reveal_cdn}}/css/print/pdf.css' : '{{ $reveal_cdn }}/css/print/paper.css';
+ document.getElementsByTagName( 'head' )[0].appendChild( link );
+ </script>
+ <!--[if lt IE 9]>
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv.js"></script>
+ <![endif]-->
+ {{- partial "reveal-hugo/head" . -}}
+ </head>
+ <body>
+ {{- block "main" . -}}{{- end -}}
+ <script type="application/json" id="reveal-hugo-page-params">{{ jsonify .Page.Params.reveal_hugo | safeJS }}</script>
+ <script type="application/json" id="reveal-hugo-site-params">{{ jsonify .Site.Params.reveal_hugo | safeJS }}</script>
+ <script type="application/json" id="reveal-hugo-defaults">{{ jsonify .Site.Data.reveal_hugo.defaults | safeJS }}</script>
+ <script type="text/javascript">
+ window.revealHugoDependencies = {
+ dependencies: [
+ { src: '{{ $reveal_cdn }}/lib/js/classList.js', condition: function() { return !document.body.classList; } },
+ { src: '{{ $reveal_cdn }}/plugin/markdown/marked.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
+ { src: '{{ $reveal_cdn }}/plugin/markdown/markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
+ { src: '{{ $reveal_cdn }}/plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } },
+ { src: '{{ $reveal_cdn }}/plugin/zoom-js/zoom.js', async: true },
+ // the notes plugin can't run off the CDN b/c the HTML file isn't there
+ { src: '{{ "reveal-hugo/plugin/notes/notes.js" | relURL }}', async: true }
+ ]};
+ </script>
+ <script src="{{ $reveal_cdn }}/lib/js/head.min.js"></script>
+ <script src="{{ $reveal_cdn }}/js/reveal.js"></script>
+ <script type="text/javascript">
+ // Hugo lowercases all params and Reveal.js needs camelcase
+ // So params in Hugo must be stored in snakecase and we camelize them here
+ function camelize(map) {
+ if (map) {
+ Object.keys(map).forEach(function(k) {
+ newK = k.replace(/(\_\w)/g, function(m) { return m[1].toUpperCase() });
+ if (newK != k) {
+ map[newK] = map[k];
+ delete map[k];
+ }
+ });
+ }
+ return map;
+ }
+ // pattern inspired by https://github.com/RealOrangeOne/hugo-theme-revealjs
+ var revealHugoPageParams = JSON.parse(document.getElementById('reveal-hugo-page-params').innerHTML);
+ var revealHugoSiteParams = JSON.parse(document.getElementById('reveal-hugo-site-params').innerHTML);
+ var revealHugoDefaults = JSON.parse(document.getElementById('reveal-hugo-defaults').innerHTML);
+ // See all options - https://github.com/hakimel/reveal.js#configuration
+ var options = Object.assign({},
+ camelize(revealHugoDefaults),
+ camelize(revealHugoSiteParams),
+ camelize(revealHugoPageParams),
+ revealHugoDependencies);
+ Reveal.initialize(options);
+ </script>
+
+ {{ partial "reveal-hugo/body" . }}
+ </body>
+</html>
diff --git a/website/themes/reveal-hugo/layouts/_default/index.reveal.html b/website/themes/reveal-hugo/layouts/_default/index.reveal.html
new file mode 100644
index 0000000..8faa735
--- /dev/null
+++ b/website/themes/reveal-hugo/layouts/_default/index.reveal.html
@@ -0,0 +1,3 @@
+{{ define "main" }}
+ {{ partial "reveal-hugo/slides" (union (slice .Page) (where .Data.Pages "Type" "home")) }}
+{{ end }}
diff --git a/website/themes/reveal-hugo/layouts/_default/list.reveal.html b/website/themes/reveal-hugo/layouts/_default/list.reveal.html
new file mode 100644
index 0000000..6c3c470
--- /dev/null
+++ b/website/themes/reveal-hugo/layouts/_default/list.reveal.html
@@ -0,0 +1,3 @@
+{{ define "main" }}
+ {{ partial "reveal-hugo/slides" (union (slice .Page) .Pages) }}
+{{ end }}
diff --git a/website/themes/reveal-hugo/layouts/_default/single.reveal.html b/website/themes/reveal-hugo/layouts/_default/single.reveal.html
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/website/themes/reveal-hugo/layouts/_default/single.reveal.html
diff --git a/website/themes/reveal-hugo/layouts/partials/reveal-hugo/body.html b/website/themes/reveal-hugo/layouts/partials/reveal-hugo/body.html
new file mode 100644
index 0000000..f2dd4bf
--- /dev/null
+++ b/website/themes/reveal-hugo/layouts/partials/reveal-hugo/body.html
@@ -0,0 +1 @@
+<!-- override this partial to add content before the body tag closes --> \ No newline at end of file
diff --git a/website/themes/reveal-hugo/layouts/partials/reveal-hugo/head.html b/website/themes/reveal-hugo/layouts/partials/reveal-hugo/head.html
new file mode 100644
index 0000000..ed1e892
--- /dev/null
+++ b/website/themes/reveal-hugo/layouts/partials/reveal-hugo/head.html
@@ -0,0 +1 @@
+<!-- override this partial to add content before the head tag closes --> \ No newline at end of file
diff --git a/website/themes/reveal-hugo/layouts/partials/reveal-hugo/slides.html b/website/themes/reveal-hugo/layouts/partials/reveal-hugo/slides.html
new file mode 100644
index 0000000..e578882
--- /dev/null
+++ b/website/themes/reveal-hugo/layouts/partials/reveal-hugo/slides.html
@@ -0,0 +1,24 @@
+<div class="reveal">
+ <!-- Any section element inside of this container is displayed as a slide -->
+ <div class="slides">
+ <!-- Use the array of pages passed as a param -->
+ {{ range . -}}
+ <!-- Don't process empty content files -->
+ {{- if ne (len .Content) 0 -}}
+ <!-- Remove the <hr /> tag generated by blackfriday for footnotes -->
+ {{- $content := replace .Content "<div class=\"footnotes\">\n\n<hr />" "<div class=\"footnotes\">" -}}
+ <!-- Split the processed content by <hr /> tag -->
+ {{- range (split $content "<hr />") -}}
+ <!-- Only wrap in <section> tag if not already wrapped by shortcode -->
+ {{- if in . "data-noprocess" -}}
+{{- . | safeHTML -}}
+ {{- else }}
+<section>
+ {{- . | safeHTML }}
+</section>
+ {{- end -}}
+ {{- end -}}
+ {{- end -}}
+ {{- end }}
+ </div>
+</div> \ No newline at end of file
diff --git a/website/themes/reveal-hugo/layouts/shortcodes/frag.html b/website/themes/reveal-hugo/layouts/shortcodes/frag.html
new file mode 100644
index 0000000..c1de8c8
--- /dev/null
+++ b/website/themes/reveal-hugo/layouts/shortcodes/frag.html
@@ -0,0 +1,4 @@
+<span class='fragment {{ .Get "class" }}'
+ {{ with .Get "index" }}data-fragment-index='{{ . }}'{{ end }}>
+ {{ .Get "c" }}
+</span> \ No newline at end of file
diff --git a/website/themes/reveal-hugo/layouts/shortcodes/fragment.html b/website/themes/reveal-hugo/layouts/shortcodes/fragment.html
new file mode 100644
index 0000000..dc41e03
--- /dev/null
+++ b/website/themes/reveal-hugo/layouts/shortcodes/fragment.html
@@ -0,0 +1,4 @@
+<span class='fragment {{ .Get "class" }}'
+ {{ with .Get "index" }}data-fragment-index='{{ . }}'{{ end }}>
+ {{ .Inner }}
+</span> \ No newline at end of file
diff --git a/website/themes/reveal-hugo/layouts/shortcodes/markdown.html b/website/themes/reveal-hugo/layouts/shortcodes/markdown.html
new file mode 100644
index 0000000..f5effbc
--- /dev/null
+++ b/website/themes/reveal-hugo/layouts/shortcodes/markdown.html
@@ -0,0 +1,8 @@
+<section data-noprocess data-markdown
+ data-separator="^\r?\n---\r?\n$"
+ data-separator-vertical="^\r?\n------\r?\n$"
+ data-separator-notes="notes?:">
+ <script type="text/template">
+ {{ .Inner }}
+ </script>
+</section> \ No newline at end of file
diff --git a/website/themes/reveal-hugo/layouts/shortcodes/note.html b/website/themes/reveal-hugo/layouts/shortcodes/note.html
new file mode 100644
index 0000000..5d28fce
--- /dev/null
+++ b/website/themes/reveal-hugo/layouts/shortcodes/note.html
@@ -0,0 +1 @@
+<aside class="notes">{{ .Inner }}</aside> \ No newline at end of file
diff --git a/website/themes/reveal-hugo/layouts/shortcodes/section.html b/website/themes/reveal-hugo/layouts/shortcodes/section.html
new file mode 100644
index 0000000..43611a4
--- /dev/null
+++ b/website/themes/reveal-hugo/layouts/shortcodes/section.html
@@ -0,0 +1,3 @@
+<section data-shortcode-section>
+{{ .Inner }}
+</section> \ No newline at end of file
diff --git a/website/themes/reveal-hugo/layouts/shortcodes/slide.html b/website/themes/reveal-hugo/layouts/shortcodes/slide.html
new file mode 100644
index 0000000..7bb41ec
--- /dev/null
+++ b/website/themes/reveal-hugo/layouts/shortcodes/slide.html
@@ -0,0 +1,48 @@
+{{- $scratch := .Scratch -}}
+{{- $scratch.Set "slides" slice -}}
+{{- if len .Inner -}}
+ {{- $scratch.Add "slides" .Inner -}}
+{{- end -}}
+{{- $content := .Get "content" -}}
+{{- if $content -}}
+ {{- $lookup := split $content "." }}
+ {{- $html := index .Page.Site.Data (index $lookup 0) (index $lookup 1) | markdownify -}}
+ {{- $slides := split $html "<hr />" -}}
+ {{- range $slides -}}
+ {{- $scratch.Add "slides" . -}}
+ {{- end -}}
+{{- end -}}
+{{- $params := . -}}
+{{- $noPrefix := slice "id" "class" -}}
+{{- $noOutput := slice "content" "template" -}}
+{{- range $scratch.Get "slides" }}
+<section data-noprocess data-shortcode-slide
+ {{- $template := $params.Get "template" -}}
+ {{- if $template -}}
+ {{- $scratch.Add "templateParams" (slice $.Site.Params.reveal_hugo.templates) -}}
+ {{- if ne $.Page.File.LogicalName "_index.md" -}}
+ {{- $scratch.Add "templateParams" (slice ($.Site.GetPage $.Page.Section).Params.reveal_hugo.templates) -}}
+ {{- end -}}
+ {{- $scratch.Add "templateParams" (slice $.Page.Params.reveal_hugo.templates) -}}
+ {{- range ($scratch.Get "templateParams") -}}
+ {{- if (ne . nil) -}}
+ {{- range $key, $value := (index . $template) -}}
+ {{- $scratch.SetInMap "template" $key $value | safeHTMLAttr -}}
+ {{- end -}}
+ {{- end -}}
+ {{- end -}}
+ {{- range $key, $value := ($scratch.Get "template") }}
+ {{- $attrName := cond (in $noPrefix $key) $key (delimit (slice "data" $key) "-") }}
+ {{ $attrName | safeHTMLAttr }}="{{ $value }}"
+ {{- end }}
+ data-template="{{ $template }}"
+ {{- end -}}
+ {{- range $key, $value := $.Params -}}
+ {{- if not (in $noOutput $key) -}}
+ {{- $attrName := cond (in $noPrefix $key) $key (delimit (slice "data" $key) "-") }}
+ {{ $attrName | safeHTMLAttr }}="{{ $value }}"
+ {{- end -}}
+ {{- end -}}>
+ {{ . | safeHTML }}
+</section>
+{{- end -}} \ No newline at end of file
diff --git a/website/themes/reveal-hugo/netlify.toml b/website/themes/reveal-hugo/netlify.toml
new file mode 100644
index 0000000..80cef0f
--- /dev/null
+++ b/website/themes/reveal-hugo/netlify.toml
@@ -0,0 +1,9 @@
+[build]
+command = "hugo -s exampleSite"
+publish = "exampleSite/public"
+
+[context.production.environment]
+HUGO_VERSION = "0.37.1"
+
+[context.deploy-preview.environment]
+HUGO_VERSION = "0.37.1" \ No newline at end of file
diff --git a/website/themes/reveal-hugo/package-lock.json b/website/themes/reveal-hugo/package-lock.json
new file mode 100644
index 0000000..f183afd
--- /dev/null
+++ b/website/themes/reveal-hugo/package-lock.json
@@ -0,0 +1,5117 @@
+{
+ "requires": true,
+ "lockfileVersion": 1,
+ "dependencies": {
+ "npm": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/npm/-/npm-6.0.0.tgz",
+ "integrity": "sha512-EtM7gNAgMdQeUh8SW2bsaogywVS37lPhf2GYAf2vxR1pktxxT02CW8BHrx59MSbG3ZrRBbcOhpe03gts+eAbdA==",
+ "requires": {
+ "JSONStream": "1.3.2",
+ "abbrev": "1.1.1",
+ "ansi-regex": "3.0.0",
+ "ansicolors": "0.3.2",
+ "ansistyles": "0.1.3",
+ "aproba": "1.2.0",
+ "archy": "1.0.0",
+ "bin-links": "1.1.2",
+ "bluebird": "3.5.1",
+ "byte-size": "4.0.2",
+ "cacache": "11.0.1",
+ "call-limit": "1.1.0",
+ "chownr": "1.0.1",
+ "cli-columns": "3.1.2",
+ "cli-table2": "0.2.0",
+ "cmd-shim": "2.0.2",
+ "columnify": "1.5.4",
+ "config-chain": "1.1.11",
+ "debuglog": "1.0.1",
+ "detect-indent": "5.0.0",
+ "detect-newline": "2.1.0",
+ "dezalgo": "1.0.3",
+ "editor": "1.0.0",
+ "figgy-pudding": "3.1.0",
+ "find-npm-prefix": "1.0.2",
+ "fs-vacuum": "1.2.10",
+ "fs-write-stream-atomic": "1.0.10",
+ "gentle-fs": "2.0.1",
+ "glob": "7.1.2",
+ "graceful-fs": "4.1.11",
+ "has-unicode": "2.0.1",
+ "hosted-git-info": "2.6.0",
+ "iferr": "1.0.0",
+ "imurmurhash": "0.1.4",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "ini": "1.3.5",
+ "init-package-json": "1.10.3",
+ "is-cidr": "2.0.5",
+ "json-parse-better-errors": "1.0.2",
+ "lazy-property": "1.0.0",
+ "libcipm": "1.6.2",
+ "libnpmhook": "4.0.1",
+ "libnpx": "10.2.0",
+ "lockfile": "1.0.3",
+ "lodash._baseindexof": "3.1.0",
+ "lodash._baseuniq": "4.6.0",
+ "lodash._bindcallback": "3.0.1",
+ "lodash._cacheindexof": "3.0.2",
+ "lodash._createcache": "3.1.2",
+ "lodash._getnative": "3.9.1",
+ "lodash.clonedeep": "4.5.0",
+ "lodash.restparam": "3.6.1",
+ "lodash.union": "4.6.0",
+ "lodash.uniq": "4.5.0",
+ "lodash.without": "4.4.0",
+ "lru-cache": "4.1.2",
+ "meant": "1.0.1",
+ "mississippi": "3.0.0",
+ "mkdirp": "0.5.1",
+ "move-concurrently": "1.0.1",
+ "node-gyp": "3.6.2",
+ "nopt": "4.0.1",
+ "normalize-package-data": "2.4.0",
+ "npm-audit-report": "1.0.5",
+ "npm-cache-filename": "1.0.2",
+ "npm-install-checks": "3.0.0",
+ "npm-lifecycle": "2.0.1",
+ "npm-package-arg": "6.1.0",
+ "npm-packlist": "1.1.10",
+ "npm-pick-manifest": "2.1.0",
+ "npm-profile": "3.0.1",
+ "npm-registry-client": "8.5.1",
+ "npm-registry-fetch": "1.1.0",
+ "npm-user-validate": "1.0.0",
+ "npmlog": "4.1.2",
+ "once": "1.4.0",
+ "opener": "1.4.3",
+ "osenv": "0.1.5",
+ "pacote": "8.1.0",
+ "path-is-inside": "1.0.2",
+ "promise-inflight": "1.0.1",
+ "qrcode-terminal": "0.12.0",
+ "query-string": "6.0.0",
+ "qw": "1.0.1",
+ "read": "1.0.7",
+ "read-cmd-shim": "1.0.1",
+ "read-installed": "4.0.3",
+ "read-package-json": "2.0.13",
+ "read-package-tree": "5.2.1",
+ "readable-stream": "2.3.6",
+ "readdir-scoped-modules": "1.0.2",
+ "request": "2.85.0",
+ "retry": "0.12.0",
+ "rimraf": "2.6.2",
+ "safe-buffer": "5.1.1",
+ "semver": "5.5.0",
+ "sha": "2.0.1",
+ "slide": "1.1.6",
+ "sorted-object": "2.0.1",
+ "sorted-union-stream": "2.1.3",
+ "ssri": "6.0.0",
+ "strip-ansi": "4.0.0",
+ "tar": "4.4.1",
+ "text-table": "0.2.0",
+ "tiny-relative-date": "1.3.0",
+ "uid-number": "0.0.6",
+ "umask": "1.1.0",
+ "unique-filename": "1.1.0",
+ "unpipe": "1.0.0",
+ "update-notifier": "2.4.0",
+ "uuid": "3.2.1",
+ "validate-npm-package-license": "3.0.3",
+ "validate-npm-package-name": "3.0.0",
+ "which": "1.3.0",
+ "worker-farm": "1.6.0",
+ "wrappy": "1.0.2",
+ "write-file-atomic": "2.3.0"
+ },
+ "dependencies": {
+ "JSONStream": {
+ "version": "1.3.2",
+ "bundled": true,
+ "requires": {
+ "jsonparse": "1.3.1",
+ "through": "2.3.8"
+ },
+ "dependencies": {
+ "jsonparse": {
+ "version": "1.3.1",
+ "bundled": true
+ },
+ "through": {
+ "version": "2.3.8",
+ "bundled": true
+ }
+ }
+ },
+ "abbrev": {
+ "version": "1.1.1",
+ "bundled": true
+ },
+ "ansi-regex": {
+ "version": "3.0.0",
+ "bundled": true
+ },
+ "ansicolors": {
+ "version": "0.3.2",
+ "bundled": true
+ },
+ "ansistyles": {
+ "version": "0.1.3",
+ "bundled": true
+ },
+ "aproba": {
+ "version": "1.2.0",
+ "bundled": true
+ },
+ "archy": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "bin-links": {
+ "version": "1.1.2",
+ "bundled": true,
+ "requires": {
+ "bluebird": "3.5.1",
+ "cmd-shim": "2.0.2",
+ "gentle-fs": "2.0.1",
+ "graceful-fs": "4.1.11",
+ "write-file-atomic": "2.3.0"
+ }
+ },
+ "bluebird": {
+ "version": "3.5.1",
+ "bundled": true
+ },
+ "byte-size": {
+ "version": "4.0.2",
+ "bundled": true
+ },
+ "cacache": {
+ "version": "11.0.1",
+ "bundled": true,
+ "requires": {
+ "bluebird": "3.5.1",
+ "chownr": "1.0.1",
+ "figgy-pudding": "3.1.0",
+ "glob": "7.1.2",
+ "graceful-fs": "4.1.11",
+ "lru-cache": "4.1.2",
+ "mississippi": "3.0.0",
+ "mkdirp": "0.5.1",
+ "move-concurrently": "1.0.1",
+ "promise-inflight": "1.0.1",
+ "rimraf": "2.6.2",
+ "ssri": "6.0.0",
+ "unique-filename": "1.1.0",
+ "y18n": "4.0.0"
+ },
+ "dependencies": {
+ "y18n": {
+ "version": "4.0.0",
+ "bundled": true
+ }
+ }
+ },
+ "call-limit": {
+ "version": "1.1.0",
+ "bundled": true
+ },
+ "chownr": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "cli-columns": {
+ "version": "3.1.2",
+ "bundled": true,
+ "requires": {
+ "string-width": "2.1.1",
+ "strip-ansi": "3.0.1"
+ },
+ "dependencies": {
+ "string-width": {
+ "version": "2.1.1",
+ "bundled": true,
+ "requires": {
+ "is-fullwidth-code-point": "2.0.0",
+ "strip-ansi": "4.0.0"
+ },
+ "dependencies": {
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "bundled": true
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "bundled": true,
+ "requires": {
+ "ansi-regex": "3.0.0"
+ }
+ }
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "bundled": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
+ "cli-table2": {
+ "version": "0.2.0",
+ "bundled": true,
+ "requires": {
+ "colors": "1.1.2",
+ "lodash": "3.10.1",
+ "string-width": "1.0.2"
+ },
+ "dependencies": {
+ "colors": {
+ "version": "1.1.2",
+ "bundled": true,
+ "optional": true
+ },
+ "lodash": {
+ "version": "3.10.1",
+ "bundled": true
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "bundled": true,
+ "requires": {
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
+ },
+ "dependencies": {
+ "code-point-at": {
+ "version": "1.1.0",
+ "bundled": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "bundled": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ },
+ "dependencies": {
+ "number-is-nan": {
+ "version": "1.0.1",
+ "bundled": true
+ }
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "bundled": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "bundled": true
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "cmd-shim": {
+ "version": "2.0.2",
+ "bundled": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "mkdirp": "0.5.1"
+ }
+ },
+ "columnify": {
+ "version": "1.5.4",
+ "bundled": true,
+ "requires": {
+ "strip-ansi": "3.0.1",
+ "wcwidth": "1.0.1"
+ },
+ "dependencies": {
+ "strip-ansi": {
+ "version": "3.0.1",
+ "bundled": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "bundled": true
+ }
+ }
+ },
+ "wcwidth": {
+ "version": "1.0.1",
+ "bundled": true,
+ "requires": {
+ "defaults": "1.0.3"
+ },
+ "dependencies": {
+ "defaults": {
+ "version": "1.0.3",
+ "bundled": true,
+ "requires": {
+ "clone": "1.0.2"
+ },
+ "dependencies": {
+ "clone": {
+ "version": "1.0.2",
+ "bundled": true
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "config-chain": {
+ "version": "1.1.11",
+ "bundled": true,
+ "requires": {
+ "ini": "1.3.5",
+ "proto-list": "1.2.4"
+ },
+ "dependencies": {
+ "proto-list": {
+ "version": "1.2.4",
+ "bundled": true
+ }
+ }
+ },
+ "debuglog": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "detect-indent": {
+ "version": "5.0.0",
+ "bundled": true
+ },
+ "detect-newline": {
+ "version": "2.1.0",
+ "bundled": true
+ },
+ "dezalgo": {
+ "version": "1.0.3",
+ "bundled": true,
+ "requires": {
+ "asap": "2.0.5",
+ "wrappy": "1.0.2"
+ },
+ "dependencies": {
+ "asap": {
+ "version": "2.0.5",
+ "bundled": true
+ }
+ }
+ },
+ "editor": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "figgy-pudding": {
+ "version": "3.1.0",
+ "bundled": true
+ },
+ "find-npm-prefix": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "fs-vacuum": {
+ "version": "1.2.10",
+ "bundled": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "path-is-inside": "1.0.2",
+ "rimraf": "2.6.2"
+ }
+ },
+ "fs-write-stream-atomic": {
+ "version": "1.0.10",
+ "bundled": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "iferr": "0.1.5",
+ "imurmurhash": "0.1.4",
+ "readable-stream": "2.3.6"
+ },
+ "dependencies": {
+ "iferr": {
+ "version": "0.1.5",
+ "bundled": true
+ }
+ }
+ },
+ "gentle-fs": {
+ "version": "2.0.1",
+ "bundled": true,
+ "requires": {
+ "aproba": "1.2.0",
+ "fs-vacuum": "1.2.10",
+ "graceful-fs": "4.1.11",
+ "iferr": "0.1.5",
+ "mkdirp": "0.5.1",
+ "path-is-inside": "1.0.2",
+ "read-cmd-shim": "1.0.1",
+ "slide": "1.1.6"
+ },
+ "dependencies": {
+ "iferr": {
+ "version": "0.1.5",
+ "bundled": true
+ }
+ }
+ },
+ "glob": {
+ "version": "7.1.2",
+ "bundled": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ },
+ "dependencies": {
+ "fs.realpath": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "bundled": true,
+ "requires": {
+ "brace-expansion": "1.1.8"
+ },
+ "dependencies": {
+ "brace-expansion": {
+ "version": "1.1.8",
+ "bundled": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ },
+ "dependencies": {
+ "balanced-match": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "bundled": true
+ }
+ }
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "bundled": true
+ },
+ "has-unicode": {
+ "version": "2.0.1",
+ "bundled": true
+ },
+ "hosted-git-info": {
+ "version": "2.6.0",
+ "bundled": true
+ },
+ "iferr": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "bundled": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "bundled": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "bundled": true
+ },
+ "ini": {
+ "version": "1.3.5",
+ "bundled": true
+ },
+ "init-package-json": {
+ "version": "1.10.3",
+ "bundled": true,
+ "requires": {
+ "glob": "7.1.2",
+ "npm-package-arg": "6.1.0",
+ "promzard": "0.3.0",
+ "read": "1.0.7",
+ "read-package-json": "2.0.13",
+ "semver": "5.5.0",
+ "validate-npm-package-license": "3.0.3",
+ "validate-npm-package-name": "3.0.0"
+ },
+ "dependencies": {
+ "promzard": {
+ "version": "0.3.0",
+ "bundled": true,
+ "requires": {
+ "read": "1.0.7"
+ }
+ }
+ }
+ },
+ "is-cidr": {
+ "version": "2.0.5",
+ "bundled": true,
+ "requires": {
+ "cidr-regex": "2.0.8"
+ },
+ "dependencies": {
+ "cidr-regex": {
+ "version": "2.0.8",
+ "bundled": true,
+ "requires": {
+ "ip-regex": "2.1.0"
+ },
+ "dependencies": {
+ "ip-regex": {
+ "version": "2.1.0",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
+ "json-parse-better-errors": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "lazy-property": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "libcipm": {
+ "version": "1.6.2",
+ "bundled": true,
+ "requires": {
+ "bin-links": "1.1.2",
+ "bluebird": "3.5.1",
+ "find-npm-prefix": "1.0.2",
+ "graceful-fs": "4.1.11",
+ "lock-verify": "2.0.1",
+ "npm-lifecycle": "2.0.1",
+ "npm-logical-tree": "1.2.1",
+ "npm-package-arg": "6.1.0",
+ "pacote": "7.6.1",
+ "protoduck": "5.0.0",
+ "read-package-json": "2.0.13",
+ "rimraf": "2.6.2",
+ "worker-farm": "1.6.0"
+ },
+ "dependencies": {
+ "lock-verify": {
+ "version": "2.0.1",
+ "bundled": true,
+ "requires": {
+ "npm-package-arg": "5.1.2",
+ "semver": "5.5.0"
+ },
+ "dependencies": {
+ "npm-package-arg": {
+ "version": "5.1.2",
+ "bundled": true,
+ "requires": {
+ "hosted-git-info": "2.6.0",
+ "osenv": "0.1.5",
+ "semver": "5.5.0",
+ "validate-npm-package-name": "3.0.0"
+ }
+ }
+ }
+ },
+ "npm-logical-tree": {
+ "version": "1.2.1",
+ "bundled": true
+ },
+ "pacote": {
+ "version": "7.6.1",
+ "bundled": true,
+ "requires": {
+ "bluebird": "3.5.1",
+ "cacache": "10.0.4",
+ "get-stream": "3.0.0",
+ "glob": "7.1.2",
+ "lru-cache": "4.1.2",
+ "make-fetch-happen": "2.6.0",
+ "minimatch": "3.0.4",
+ "mississippi": "3.0.0",
+ "mkdirp": "0.5.1",
+ "normalize-package-data": "2.4.0",
+ "npm-package-arg": "6.1.0",
+ "npm-packlist": "1.1.10",
+ "npm-pick-manifest": "2.1.0",
+ "osenv": "0.1.5",
+ "promise-inflight": "1.0.1",
+ "promise-retry": "1.1.1",
+ "protoduck": "5.0.0",
+ "rimraf": "2.6.2",
+ "safe-buffer": "5.1.1",
+ "semver": "5.5.0",
+ "ssri": "5.3.0",
+ "tar": "4.4.1",
+ "unique-filename": "1.1.0",
+ "which": "1.3.0"
+ },
+ "dependencies": {
+ "cacache": {
+ "version": "10.0.4",
+ "bundled": true,
+ "requires": {
+ "bluebird": "3.5.1",
+ "chownr": "1.0.1",
+ "glob": "7.1.2",
+ "graceful-fs": "4.1.11",
+ "lru-cache": "4.1.2",
+ "mississippi": "2.0.0",
+ "mkdirp": "0.5.1",
+ "move-concurrently": "1.0.1",
+ "promise-inflight": "1.0.1",
+ "rimraf": "2.6.2",
+ "ssri": "5.3.0",
+ "unique-filename": "1.1.0",
+ "y18n": "4.0.0"
+ },
+ "dependencies": {
+ "mississippi": {
+ "version": "2.0.0",
+ "bundled": true,
+ "requires": {
+ "concat-stream": "1.6.2",
+ "duplexify": "3.5.4",
+ "end-of-stream": "1.4.1",
+ "flush-write-stream": "1.0.3",
+ "from2": "2.3.0",
+ "parallel-transform": "1.1.0",
+ "pump": "2.0.1",
+ "pumpify": "1.4.0",
+ "stream-each": "1.2.2",
+ "through2": "2.0.3"
+ },
+ "dependencies": {
+ "concat-stream": {
+ "version": "1.6.2",
+ "bundled": true,
+ "requires": {
+ "buffer-from": "1.0.0",
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.6",
+ "typedarray": "0.0.6"
+ },
+ "dependencies": {
+ "buffer-from": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "bundled": true
+ }
+ }
+ },
+ "duplexify": {
+ "version": "3.5.4",
+ "bundled": true,
+ "requires": {
+ "end-of-stream": "1.4.1",
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.6",
+ "stream-shift": "1.0.0"
+ },
+ "dependencies": {
+ "stream-shift": {
+ "version": "1.0.0",
+ "bundled": true
+ }
+ }
+ },
+ "end-of-stream": {
+ "version": "1.4.1",
+ "bundled": true,
+ "requires": {
+ "once": "1.4.0"
+ }
+ },
+ "flush-write-stream": {
+ "version": "1.0.3",
+ "bundled": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.6"
+ }
+ },
+ "from2": {
+ "version": "2.3.0",
+ "bundled": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.6"
+ }
+ },
+ "parallel-transform": {
+ "version": "1.1.0",
+ "bundled": true,
+ "requires": {
+ "cyclist": "0.2.2",
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.6"
+ },
+ "dependencies": {
+ "cyclist": {
+ "version": "0.2.2",
+ "bundled": true
+ }
+ }
+ },
+ "pump": {
+ "version": "2.0.1",
+ "bundled": true,
+ "requires": {
+ "end-of-stream": "1.4.1",
+ "once": "1.4.0"
+ }
+ },
+ "pumpify": {
+ "version": "1.4.0",
+ "bundled": true,
+ "requires": {
+ "duplexify": "3.5.4",
+ "inherits": "2.0.3",
+ "pump": "2.0.1"
+ }
+ },
+ "stream-each": {
+ "version": "1.2.2",
+ "bundled": true,
+ "requires": {
+ "end-of-stream": "1.4.1",
+ "stream-shift": "1.0.0"
+ },
+ "dependencies": {
+ "stream-shift": {
+ "version": "1.0.0",
+ "bundled": true
+ }
+ }
+ },
+ "through2": {
+ "version": "2.0.3",
+ "bundled": true,
+ "requires": {
+ "readable-stream": "2.3.6",
+ "xtend": "4.0.1"
+ },
+ "dependencies": {
+ "xtend": {
+ "version": "4.0.1",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
+ "y18n": {
+ "version": "4.0.0",
+ "bundled": true
+ }
+ }
+ },
+ "get-stream": {
+ "version": "3.0.0",
+ "bundled": true
+ },
+ "make-fetch-happen": {
+ "version": "2.6.0",
+ "bundled": true,
+ "requires": {
+ "agentkeepalive": "3.4.1",
+ "cacache": "10.0.4",
+ "http-cache-semantics": "3.8.1",
+ "http-proxy-agent": "2.1.0",
+ "https-proxy-agent": "2.2.1",
+ "lru-cache": "4.1.2",
+ "mississippi": "1.3.1",
+ "node-fetch-npm": "2.0.2",
+ "promise-retry": "1.1.1",
+ "socks-proxy-agent": "3.0.1",
+ "ssri": "5.3.0"
+ },
+ "dependencies": {
+ "agentkeepalive": {
+ "version": "3.4.1",
+ "bundled": true,
+ "requires": {
+ "humanize-ms": "1.2.1"
+ },
+ "dependencies": {
+ "humanize-ms": {
+ "version": "1.2.1",
+ "bundled": true,
+ "requires": {
+ "ms": "2.1.1"
+ },
+ "dependencies": {
+ "ms": {
+ "version": "2.1.1",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
+ "http-cache-semantics": {
+ "version": "3.8.1",
+ "bundled": true
+ },
+ "http-proxy-agent": {
+ "version": "2.1.0",
+ "bundled": true,
+ "requires": {
+ "agent-base": "4.2.0",
+ "debug": "3.1.0"
+ },
+ "dependencies": {
+ "agent-base": {
+ "version": "4.2.0",
+ "bundled": true,
+ "requires": {
+ "es6-promisify": "5.0.0"
+ },
+ "dependencies": {
+ "es6-promisify": {
+ "version": "5.0.0",
+ "bundled": true,
+ "requires": {
+ "es6-promise": "4.2.4"
+ },
+ "dependencies": {
+ "es6-promise": {
+ "version": "4.2.4",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
+ "debug": {
+ "version": "3.1.0",
+ "bundled": true,
+ "requires": {
+ "ms": "2.0.0"
+ },
+ "dependencies": {
+ "ms": {
+ "version": "2.0.0",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
+ "https-proxy-agent": {
+ "version": "2.2.1",
+ "bundled": true,
+ "requires": {
+ "agent-base": "4.2.0",
+ "debug": "3.1.0"
+ },
+ "dependencies": {
+ "agent-base": {
+ "version": "4.2.0",
+ "bundled": true,
+ "requires": {
+ "es6-promisify": "5.0.0"
+ },
+ "dependencies": {
+ "es6-promisify": {
+ "version": "5.0.0",
+ "bundled": true,
+ "requires": {
+ "es6-promise": "4.2.4"
+ },
+ "dependencies": {
+ "es6-promise": {
+ "version": "4.2.4",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
+ "debug": {
+ "version": "3.1.0",
+ "bundled": true,
+ "requires": {
+ "ms": "2.0.0"
+ },
+ "dependencies": {
+ "ms": {
+ "version": "2.0.0",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
+ "mississippi": {
+ "version": "1.3.1",
+ "bundled": true,
+ "requires": {
+ "concat-stream": "1.6.2",
+ "duplexify": "3.5.4",
+ "end-of-stream": "1.4.1",
+ "flush-write-stream": "1.0.3",
+ "from2": "2.3.0",
+ "parallel-transform": "1.1.0",
+ "pump": "1.0.3",
+ "pumpify": "1.4.0",
+ "stream-each": "1.2.2",
+ "through2": "2.0.3"
+ },
+ "dependencies": {
+ "concat-stream": {
+ "version": "1.6.2",
+ "bundled": true,
+ "requires": {
+ "buffer-from": "1.0.0",
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.6",
+ "typedarray": "0.0.6"
+ },
+ "dependencies": {
+ "buffer-from": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "bundled": true
+ }
+ }
+ },
+ "duplexify": {
+ "version": "3.5.4",
+ "bundled": true,
+ "requires": {
+ "end-of-stream": "1.4.1",
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.6",
+ "stream-shift": "1.0.0"
+ },
+ "dependencies": {
+ "stream-shift": {
+ "version": "1.0.0",
+ "bundled": true
+ }
+ }
+ },
+ "end-of-stream": {
+ "version": "1.4.1",
+ "bundled": true,
+ "requires": {
+ "once": "1.4.0"
+ }
+ },
+ "flush-write-stream": {
+ "version": "1.0.3",
+ "bundled": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.6"
+ }
+ },
+ "from2": {
+ "version": "2.3.0",
+ "bundled": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.6"
+ }
+ },
+ "parallel-transform": {
+ "version": "1.1.0",
+ "bundled": true,
+ "requires": {
+ "cyclist": "0.2.2",
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.6"
+ },
+ "dependencies": {
+ "cyclist": {
+ "version": "0.2.2",
+ "bundled": true
+ }
+ }
+ },
+ "pump": {
+ "version": "1.0.3",
+ "bundled": true,
+ "requires": {
+ "end-of-stream": "1.4.1",
+ "once": "1.4.0"
+ }
+ },
+ "pumpify": {
+ "version": "1.4.0",
+ "bundled": true,
+ "requires": {
+ "duplexify": "3.5.4",
+ "inherits": "2.0.3",
+ "pump": "2.0.1"
+ },
+ "dependencies": {
+ "pump": {
+ "version": "2.0.1",
+ "bundled": true,
+ "requires": {
+ "end-of-stream": "1.4.1",
+ "once": "1.4.0"
+ }
+ }
+ }
+ },
+ "stream-each": {
+ "version": "1.2.2",
+ "bundled": true,
+ "requires": {
+ "end-of-stream": "1.4.1",
+ "stream-shift": "1.0.0"
+ },
+ "dependencies": {
+ "stream-shift": {
+ "version": "1.0.0",
+ "bundled": true
+ }
+ }
+ },
+ "through2": {
+ "version": "2.0.3",
+ "bundled": true,
+ "requires": {
+ "readable-stream": "2.3.6",
+ "xtend": "4.0.1"
+ },
+ "dependencies": {
+ "xtend": {
+ "version": "4.0.1",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
+ "node-fetch-npm": {
+ "version": "2.0.2",
+ "bundled": true,
+ "requires": {
+ "encoding": "0.1.12",
+ "json-parse-better-errors": "1.0.2",
+ "safe-buffer": "5.1.1"
+ },
+ "dependencies": {
+ "encoding": {
+ "version": "0.1.12",
+ "bundled": true,
+ "requires": {
+ "iconv-lite": "0.4.21"
+ },
+ "dependencies": {
+ "iconv-lite": {
+ "version": "0.4.21",
+ "bundled": true,
+ "requires": {
+ "safer-buffer": "2.1.2"
+ },
+ "dependencies": {
+ "safer-buffer": {
+ "version": "2.1.2",
+ "bundled": true
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "socks-proxy-agent": {
+ "version": "3.0.1",
+ "bundled": true,
+ "requires": {
+ "agent-base": "4.2.0",
+ "socks": "1.1.10"
+ },
+ "dependencies": {
+ "agent-base": {
+ "version": "4.2.0",
+ "bundled": true,
+ "requires": {
+ "es6-promisify": "5.0.0"
+ },
+ "dependencies": {
+ "es6-promisify": {
+ "version": "5.0.0",
+ "bundled": true,
+ "requires": {
+ "es6-promise": "4.2.4"
+ },
+ "dependencies": {
+ "es6-promise": {
+ "version": "4.2.4",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
+ "socks": {
+ "version": "1.1.10",
+ "bundled": true,
+ "requires": {
+ "ip": "1.1.5",
+ "smart-buffer": "1.1.15"
+ },
+ "dependencies": {
+ "ip": {
+ "version": "1.1.5",
+ "bundled": true
+ },
+ "smart-buffer": {
+ "version": "1.1.15",
+ "bundled": true
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "bundled": true,
+ "requires": {
+ "brace-expansion": "1.1.11"
+ },
+ "dependencies": {
+ "brace-expansion": {
+ "version": "1.1.11",
+ "bundled": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ },
+ "dependencies": {
+ "balanced-match": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
+ "promise-retry": {
+ "version": "1.1.1",
+ "bundled": true,
+ "requires": {
+ "err-code": "1.1.2",
+ "retry": "0.10.1"
+ },
+ "dependencies": {
+ "err-code": {
+ "version": "1.1.2",
+ "bundled": true
+ },
+ "retry": {
+ "version": "0.10.1",
+ "bundled": true
+ }
+ }
+ },
+ "ssri": {
+ "version": "5.3.0",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ }
+ }
+ },
+ "protoduck": {
+ "version": "5.0.0",
+ "bundled": true,
+ "requires": {
+ "genfun": "4.0.1"
+ },
+ "dependencies": {
+ "genfun": {
+ "version": "4.0.1",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
+ "libnpmhook": {
+ "version": "4.0.1",
+ "bundled": true,
+ "requires": {
+ "figgy-pudding": "3.1.0",
+ "npm-registry-fetch": "3.1.1"
+ },
+ "dependencies": {
+ "npm-registry-fetch": {
+ "version": "3.1.1",
+ "bundled": true,
+ "requires": {
+ "bluebird": "3.5.1",
+ "figgy-pudding": "3.1.0",
+ "lru-cache": "4.1.2",
+ "make-fetch-happen": "4.0.1",
+ "npm-package-arg": "6.1.0"
+ },
+ "dependencies": {
+ "make-fetch-happen": {
+ "version": "4.0.1",
+ "bundled": true,
+ "requires": {
+ "agentkeepalive": "3.4.1",
+ "cacache": "11.0.1",
+ "http-cache-semantics": "3.8.1",
+ "http-proxy-agent": "2.1.0",
+ "https-proxy-agent": "2.2.1",
+ "lru-cache": "4.1.2",
+ "mississippi": "3.0.0",
+ "node-fetch-npm": "2.0.2",
+ "promise-retry": "1.1.1",
+ "socks-proxy-agent": "4.0.0",
+ "ssri": "6.0.0"
+ },
+ "dependencies": {
+ "agentkeepalive": {
+ "version": "3.4.1",
+ "bundled": true,
+ "requires": {
+ "humanize-ms": "1.2.1"
+ },
+ "dependencies": {
+ "humanize-ms": {
+ "version": "1.2.1",
+ "bundled": true,
+ "requires": {
+ "ms": "2.1.1"
+ },
+ "dependencies": {
+ "ms": {
+ "version": "2.1.1",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
+ "http-cache-semantics": {
+ "version": "3.8.1",
+ "bundled": true
+ },
+ "http-proxy-agent": {
+ "version": "2.1.0",
+ "bundled": true,
+ "requires": {
+ "agent-base": "4.2.0",
+ "debug": "3.1.0"
+ },
+ "dependencies": {
+ "agent-base": {
+ "version": "4.2.0",
+ "bundled": true,
+ "requires": {
+ "es6-promisify": "5.0.0"
+ },
+ "dependencies": {
+ "es6-promisify": {
+ "version": "5.0.0",
+ "bundled": true,
+ "requires": {
+ "es6-promise": "4.2.4"
+ },
+ "dependencies": {
+ "es6-promise": {
+ "version": "4.2.4",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
+ "debug": {
+ "version": "3.1.0",
+ "bundled": true,
+ "requires": {
+ "ms": "2.0.0"
+ },
+ "dependencies": {
+ "ms": {
+ "version": "2.0.0",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
+ "https-proxy-agent": {
+ "version": "2.2.1",
+ "bundled": true,
+ "requires": {
+ "agent-base": "4.2.0",
+ "debug": "3.1.0"
+ },
+ "dependencies": {
+ "agent-base": {
+ "version": "4.2.0",
+ "bundled": true,
+ "requires": {
+ "es6-promisify": "5.0.0"
+ },
+ "dependencies": {
+ "es6-promisify": {
+ "version": "5.0.0",
+ "bundled": true,
+ "requires": {
+ "es6-promise": "4.2.4"
+ },
+ "dependencies": {
+ "es6-promise": {
+ "version": "4.2.4",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
+ "debug": {
+ "version": "3.1.0",
+ "bundled": true,
+ "requires": {
+ "ms": "2.0.0"
+ },
+ "dependencies": {
+ "ms": {
+ "version": "2.0.0",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
+ "node-fetch-npm": {
+ "version": "2.0.2",
+ "bundled": true,
+ "requires": {
+ "encoding": "0.1.12",
+ "json-parse-better-errors": "1.0.2",
+ "safe-buffer": "5.1.1"
+ },
+ "dependencies": {
+ "encoding": {
+ "version": "0.1.12",
+ "bundled": true,
+ "requires": {
+ "iconv-lite": "0.4.21"
+ },
+ "dependencies": {
+ "iconv-lite": {
+ "version": "0.4.21",
+ "bundled": true,
+ "requires": {
+ "safer-buffer": "2.1.2"
+ },
+ "dependencies": {
+ "safer-buffer": {
+ "version": "2.1.2",
+ "bundled": true
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "promise-retry": {
+ "version": "1.1.1",
+ "bundled": true,
+ "requires": {
+ "err-code": "1.1.2",
+ "retry": "0.10.1"
+ },
+ "dependencies": {
+ "err-code": {
+ "version": "1.1.2",
+ "bundled": true
+ },
+ "retry": {
+ "version": "0.10.1",
+ "bundled": true
+ }
+ }
+ },
+ "socks-proxy-agent": {
+ "version": "4.0.0",
+ "bundled": true,
+ "requires": {
+ "agent-base": "4.1.2",
+ "socks": "2.1.6"
+ },
+ "dependencies": {
+ "agent-base": {
+ "version": "4.1.2",
+ "bundled": true,
+ "requires": {
+ "es6-promisify": "5.0.0"
+ },
+ "dependencies": {
+ "es6-promisify": {
+ "version": "5.0.0",
+ "bundled": true,
+ "requires": {
+ "es6-promise": "4.2.4"
+ },
+ "dependencies": {
+ "es6-promise": {
+ "version": "4.2.4",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
+ "socks": {
+ "version": "2.1.6",
+ "bundled": true,
+ "requires": {
+ "ip": "1.1.5",
+ "smart-buffer": "4.0.1"
+ },
+ "dependencies": {
+ "ip": {
+ "version": "1.1.5",
+ "bundled": true
+ },
+ "smart-buffer": {
+ "version": "4.0.1",
+ "bundled": true
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "libnpx": {
+ "version": "10.2.0",
+ "bundled": true,
+ "requires": {
+ "dotenv": "5.0.1",
+ "npm-package-arg": "6.1.0",
+ "rimraf": "2.6.2",
+ "safe-buffer": "5.1.1",
+ "update-notifier": "2.4.0",
+ "which": "1.3.0",
+ "y18n": "4.0.0",
+ "yargs": "11.0.0"
+ },
+ "dependencies": {
+ "dotenv": {
+ "version": "5.0.1",
+ "bundled": true
+ },
+ "y18n": {
+ "version": "4.0.0",
+ "bundled": true
+ },
+ "yargs": {
+ "version": "11.0.0",
+ "bundled": true,
+ "requires": {
+ "cliui": "4.0.0",
+ "decamelize": "1.2.0",
+ "find-up": "2.1.0",
+ "get-caller-file": "1.0.2",
+ "os-locale": "2.1.0",
+ "require-directory": "2.1.1",
+ "require-main-filename": "1.0.1",
+ "set-blocking": "2.0.0",
+ "string-width": "2.1.1",
+ "which-module": "2.0.0",
+ "y18n": "3.2.1",
+ "yargs-parser": "9.0.2"
+ },
+ "dependencies": {
+ "cliui": {
+ "version": "4.0.0",
+ "bundled": true,
+ "requires": {
+ "string-width": "2.1.1",
+ "strip-ansi": "4.0.0",
+ "wrap-ansi": "2.1.0"
+ },
+ "dependencies": {
+ "wrap-ansi": {
+ "version": "2.1.0",
+ "bundled": true,
+ "requires": {
+ "string-width": "1.0.2",
+ "strip-ansi": "3.0.1"
+ },
+ "dependencies": {
+ "string-width": {
+ "version": "1.0.2",
+ "bundled": true,
+ "requires": {
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
+ },
+ "dependencies": {
+ "code-point-at": {
+ "version": "1.1.0",
+ "bundled": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "bundled": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ },
+ "dependencies": {
+ "number-is-nan": {
+ "version": "1.0.1",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "bundled": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "bundled": true
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "decamelize": {
+ "version": "1.2.0",
+ "bundled": true
+ },
+ "find-up": {
+ "version": "2.1.0",
+ "bundled": true,
+ "requires": {
+ "locate-path": "2.0.0"
+ },
+ "dependencies": {
+ "locate-path": {
+ "version": "2.0.0",
+ "bundled": true,
+ "requires": {
+ "p-locate": "2.0.0",
+ "path-exists": "3.0.0"
+ },
+ "dependencies": {
+ "p-locate": {
+ "version": "2.0.0",
+ "bundled": true,
+ "requires": {
+ "p-limit": "1.2.0"
+ },
+ "dependencies": {
+ "p-limit": {
+ "version": "1.2.0",
+ "bundled": true,
+ "requires": {
+ "p-try": "1.0.0"
+ },
+ "dependencies": {
+ "p-try": {
+ "version": "1.0.0",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
+ "get-caller-file": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "os-locale": {
+ "version": "2.1.0",
+ "bundled": true,
+ "requires": {
+ "execa": "0.7.0",
+ "lcid": "1.0.0",
+ "mem": "1.1.0"
+ },
+ "dependencies": {
+ "execa": {
+ "version": "0.7.0",
+ "bundled": true,
+ "requires": {
+ "cross-spawn": "5.1.0",
+ "get-stream": "3.0.0",
+ "is-stream": "1.1.0",
+ "npm-run-path": "2.0.2",
+ "p-finally": "1.0.0",
+ "signal-exit": "3.0.2",
+ "strip-eof": "1.0.0"
+ },
+ "dependencies": {
+ "cross-spawn": {
+ "version": "5.1.0",
+ "bundled": true,
+ "requires": {
+ "lru-cache": "4.1.2",
+ "shebang-command": "1.2.0",
+ "which": "1.3.0"
+ },
+ "dependencies": {
+ "shebang-command": {
+ "version": "1.2.0",
+ "bundled": true,
+ "requires": {
+ "shebang-regex": "1.0.0"
+ },
+ "dependencies": {
+ "shebang-regex": {
+ "version": "1.0.0",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
+ "get-stream": {
+ "version": "3.0.0",
+ "bundled": true
+ },
+ "is-stream": {
+ "version": "1.1.0",
+ "bundled": true
+ },
+ "npm-run-path": {
+ "version": "2.0.2",
+ "bundled": true,
+ "requires": {
+ "path-key": "2.0.1"
+ },
+ "dependencies": {
+ "path-key": {
+ "version": "2.0.1",
+ "bundled": true
+ }
+ }
+ },
+ "p-finally": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "bundled": true
+ },
+ "strip-eof": {
+ "version": "1.0.0",
+ "bundled": true
+ }
+ }
+ },
+ "lcid": {
+ "version": "1.0.0",
+ "bundled": true,
+ "requires": {
+ "invert-kv": "1.0.0"
+ },
+ "dependencies": {
+ "invert-kv": {
+ "version": "1.0.0",
+ "bundled": true
+ }
+ }
+ },
+ "mem": {
+ "version": "1.1.0",
+ "bundled": true,
+ "requires": {
+ "mimic-fn": "1.2.0"
+ },
+ "dependencies": {
+ "mimic-fn": {
+ "version": "1.2.0",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
+ "require-directory": {
+ "version": "2.1.1",
+ "bundled": true
+ },
+ "require-main-filename": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "bundled": true
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "bundled": true,
+ "requires": {
+ "is-fullwidth-code-point": "2.0.0",
+ "strip-ansi": "4.0.0"
+ },
+ "dependencies": {
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "bundled": true
+ }
+ }
+ },
+ "which-module": {
+ "version": "2.0.0",
+ "bundled": true
+ },
+ "y18n": {
+ "version": "3.2.1",
+ "bundled": true
+ },
+ "yargs-parser": {
+ "version": "9.0.2",
+ "bundled": true,
+ "requires": {
+ "camelcase": "4.1.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "4.1.0",
+ "bundled": true
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "lockfile": {
+ "version": "1.0.3",
+ "bundled": true
+ },
+ "lodash._baseindexof": {
+ "version": "3.1.0",
+ "bundled": true
+ },
+ "lodash._baseuniq": {
+ "version": "4.6.0",
+ "bundled": true,
+ "requires": {
+ "lodash._createset": "4.0.3",
+ "lodash._root": "3.0.1"
+ },
+ "dependencies": {
+ "lodash._createset": {
+ "version": "4.0.3",
+ "bundled": true
+ },
+ "lodash._root": {
+ "version": "3.0.1",
+ "bundled": true
+ }
+ }
+ },
+ "lodash._bindcallback": {
+ "version": "3.0.1",
+ "bundled": true
+ },
+ "lodash._cacheindexof": {
+ "version": "3.0.2",
+ "bundled": true
+ },
+ "lodash._createcache": {
+ "version": "3.1.2",
+ "bundled": true,
+ "requires": {
+ "lodash._getnative": "3.9.1"
+ }
+ },
+ "lodash._getnative": {
+ "version": "3.9.1",
+ "bundled": true
+ },
+ "lodash.clonedeep": {
+ "version": "4.5.0",
+ "bundled": true
+ },
+ "lodash.restparam": {
+ "version": "3.6.1",
+ "bundled": true
+ },
+ "lodash.union": {
+ "version": "4.6.0",
+ "bundled": true
+ },
+ "lodash.uniq": {
+ "version": "4.5.0",
+ "bundled": true
+ },
+ "lodash.without": {
+ "version": "4.4.0",
+ "bundled": true
+ },
+ "lru-cache": {
+ "version": "4.1.2",
+ "bundled": true,
+ "requires": {
+ "pseudomap": "1.0.2",
+ "yallist": "2.1.2"
+ },
+ "dependencies": {
+ "pseudomap": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "yallist": {
+ "version": "2.1.2",
+ "bundled": true
+ }
+ }
+ },
+ "meant": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "mississippi": {
+ "version": "3.0.0",
+ "bundled": true,
+ "requires": {
+ "concat-stream": "1.6.1",
+ "duplexify": "3.5.4",
+ "end-of-stream": "1.4.1",
+ "flush-write-stream": "1.0.2",
+ "from2": "2.3.0",
+ "parallel-transform": "1.1.0",
+ "pump": "3.0.0",
+ "pumpify": "1.4.0",
+ "stream-each": "1.2.2",
+ "through2": "2.0.3"
+ },
+ "dependencies": {
+ "concat-stream": {
+ "version": "1.6.1",
+ "bundled": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.6",
+ "typedarray": "0.0.6"
+ },
+ "dependencies": {
+ "typedarray": {
+ "version": "0.0.6",
+ "bundled": true
+ }
+ }
+ },
+ "duplexify": {
+ "version": "3.5.4",
+ "bundled": true,
+ "requires": {
+ "end-of-stream": "1.4.1",
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.6",
+ "stream-shift": "1.0.0"
+ },
+ "dependencies": {
+ "stream-shift": {
+ "version": "1.0.0",
+ "bundled": true
+ }
+ }
+ },
+ "end-of-stream": {
+ "version": "1.4.1",
+ "bundled": true,
+ "requires": {
+ "once": "1.4.0"
+ }
+ },
+ "flush-write-stream": {
+ "version": "1.0.2",
+ "bundled": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.6"
+ }
+ },
+ "from2": {
+ "version": "2.3.0",
+ "bundled": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.6"
+ }
+ },
+ "parallel-transform": {
+ "version": "1.1.0",
+ "bundled": true,
+ "requires": {
+ "cyclist": "0.2.2",
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.6"
+ },
+ "dependencies": {
+ "cyclist": {
+ "version": "0.2.2",
+ "bundled": true
+ }
+ }
+ },
+ "pump": {
+ "version": "3.0.0",
+ "bundled": true,
+ "requires": {
+ "end-of-stream": "1.4.1",
+ "once": "1.4.0"
+ }
+ },
+ "pumpify": {
+ "version": "1.4.0",
+ "bundled": true,
+ "requires": {
+ "duplexify": "3.5.4",
+ "inherits": "2.0.3",
+ "pump": "2.0.1"
+ },
+ "dependencies": {
+ "pump": {
+ "version": "2.0.1",
+ "bundled": true,
+ "requires": {
+ "end-of-stream": "1.4.1",
+ "once": "1.4.0"
+ }
+ }
+ }
+ },
+ "stream-each": {
+ "version": "1.2.2",
+ "bundled": true,
+ "requires": {
+ "end-of-stream": "1.4.1",
+ "stream-shift": "1.0.0"
+ },
+ "dependencies": {
+ "stream-shift": {
+ "version": "1.0.0",
+ "bundled": true
+ }
+ }
+ },
+ "through2": {
+ "version": "2.0.3",
+ "bundled": true,
+ "requires": {
+ "readable-stream": "2.3.6",
+ "xtend": "4.0.1"
+ },
+ "dependencies": {
+ "xtend": {
+ "version": "4.0.1",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "bundled": true,
+ "requires": {
+ "minimist": "0.0.8"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "0.0.8",
+ "bundled": true
+ }
+ }
+ },
+ "move-concurrently": {
+ "version": "1.0.1",
+ "bundled": true,
+ "requires": {
+ "aproba": "1.2.0",
+ "copy-concurrently": "1.0.5",
+ "fs-write-stream-atomic": "1.0.10",
+ "mkdirp": "0.5.1",
+ "rimraf": "2.6.2",
+ "run-queue": "1.0.3"
+ },
+ "dependencies": {
+ "copy-concurrently": {
+ "version": "1.0.5",
+ "bundled": true,
+ "requires": {
+ "aproba": "1.2.0",
+ "fs-write-stream-atomic": "1.0.10",
+ "iferr": "0.1.5",
+ "mkdirp": "0.5.1",
+ "rimraf": "2.6.2",
+ "run-queue": "1.0.3"
+ },
+ "dependencies": {
+ "iferr": {
+ "version": "0.1.5",
+ "bundled": true
+ }
+ }
+ },
+ "run-queue": {
+ "version": "1.0.3",
+ "bundled": true,
+ "requires": {
+ "aproba": "1.2.0"
+ }
+ }
+ }
+ },
+ "node-gyp": {
+ "version": "3.6.2",
+ "bundled": true,
+ "requires": {
+ "fstream": "1.0.11",
+ "glob": "7.1.2",
+ "graceful-fs": "4.1.11",
+ "minimatch": "3.0.4",
+ "mkdirp": "0.5.1",
+ "nopt": "3.0.6",
+ "npmlog": "4.1.2",
+ "osenv": "0.1.5",
+ "request": "2.85.0",
+ "rimraf": "2.6.2",
+ "semver": "5.3.0",
+ "tar": "2.2.1",
+ "which": "1.3.0"
+ },
+ "dependencies": {
+ "fstream": {
+ "version": "1.0.11",
+ "bundled": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "inherits": "2.0.3",
+ "mkdirp": "0.5.1",
+ "rimraf": "2.6.2"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "bundled": true,
+ "requires": {
+ "brace-expansion": "1.1.11"
+ },
+ "dependencies": {
+ "brace-expansion": {
+ "version": "1.1.11",
+ "bundled": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ },
+ "dependencies": {
+ "balanced-match": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
+ "nopt": {
+ "version": "3.0.6",
+ "bundled": true,
+ "requires": {
+ "abbrev": "1.1.1"
+ }
+ },
+ "semver": {
+ "version": "5.3.0",
+ "bundled": true
+ },
+ "tar": {
+ "version": "2.2.1",
+ "bundled": true,
+ "requires": {
+ "block-stream": "0.0.9",
+ "fstream": "1.0.11",
+ "inherits": "2.0.3"
+ },
+ "dependencies": {
+ "block-stream": {
+ "version": "0.0.9",
+ "bundled": true,
+ "requires": {
+ "inherits": "2.0.3"
+ }
+ }
+ }
+ }
+ }
+ },
+ "nopt": {
+ "version": "4.0.1",
+ "bundled": true,
+ "requires": {
+ "abbrev": "1.1.1",
+ "osenv": "0.1.5"
+ }
+ },
+ "normalize-package-data": {
+ "version": "2.4.0",
+ "bundled": true,
+ "requires": {
+ "hosted-git-info": "2.6.0",
+ "is-builtin-module": "1.0.0",
+ "semver": "5.5.0",
+ "validate-npm-package-license": "3.0.3"
+ },
+ "dependencies": {
+ "is-builtin-module": {
+ "version": "1.0.0",
+ "bundled": true,
+ "requires": {
+ "builtin-modules": "1.1.1"
+ },
+ "dependencies": {
+ "builtin-modules": {
+ "version": "1.1.1",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
+ "npm-audit-report": {
+ "version": "1.0.5",
+ "bundled": true,
+ "requires": {
+ "ansicolors": "0.3.2",
+ "ansistyles": "0.1.3",
+ "cli-table2": "0.2.0"
+ }
+ },
+ "npm-cache-filename": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "npm-install-checks": {
+ "version": "3.0.0",
+ "bundled": true,
+ "requires": {
+ "semver": "5.5.0"
+ }
+ },
+ "npm-lifecycle": {
+ "version": "2.0.1",
+ "bundled": true,
+ "requires": {
+ "byline": "5.0.0",
+ "graceful-fs": "4.1.11",
+ "node-gyp": "3.6.2",
+ "resolve-from": "4.0.0",
+ "slide": "1.1.6",
+ "uid-number": "0.0.6",
+ "umask": "1.1.0",
+ "which": "1.3.0"
+ },
+ "dependencies": {
+ "byline": {
+ "version": "5.0.0",
+ "bundled": true
+ },
+ "resolve-from": {
+ "version": "4.0.0",
+ "bundled": true
+ }
+ }
+ },
+ "npm-package-arg": {
+ "version": "6.1.0",
+ "bundled": true,
+ "requires": {
+ "hosted-git-info": "2.6.0",
+ "osenv": "0.1.5",
+ "semver": "5.5.0",
+ "validate-npm-package-name": "3.0.0"
+ }
+ },
+ "npm-packlist": {
+ "version": "1.1.10",
+ "bundled": true,
+ "requires": {
+ "ignore-walk": "3.0.1",
+ "npm-bundled": "1.0.3"
+ },
+ "dependencies": {
+ "ignore-walk": {
+ "version": "3.0.1",
+ "bundled": true,
+ "requires": {
+ "minimatch": "3.0.4"
+ },
+ "dependencies": {
+ "minimatch": {
+ "version": "3.0.4",
+ "bundled": true,
+ "requires": {
+ "brace-expansion": "1.1.8"
+ },
+ "dependencies": {
+ "brace-expansion": {
+ "version": "1.1.8",
+ "bundled": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ },
+ "dependencies": {
+ "balanced-match": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "bundled": true
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "npm-bundled": {
+ "version": "1.0.3",
+ "bundled": true
+ }
+ }
+ },
+ "npm-pick-manifest": {
+ "version": "2.1.0",
+ "bundled": true,
+ "requires": {
+ "npm-package-arg": "6.1.0",
+ "semver": "5.5.0"
+ }
+ },
+ "npm-profile": {
+ "version": "3.0.1",
+ "bundled": true,
+ "requires": {
+ "aproba": "1.2.0",
+ "make-fetch-happen": "2.6.0"
+ },
+ "dependencies": {
+ "make-fetch-happen": {
+ "version": "2.6.0",
+ "bundled": true,
+ "requires": {
+ "agentkeepalive": "3.3.0",
+ "cacache": "10.0.4",
+ "http-cache-semantics": "3.8.1",
+ "http-proxy-agent": "2.0.0",
+ "https-proxy-agent": "2.1.1",
+ "lru-cache": "4.1.2",
+ "mississippi": "1.3.1",
+ "node-fetch-npm": "2.0.2",
+ "promise-retry": "1.1.1",
+ "socks-proxy-agent": "3.0.1",
+ "ssri": "5.3.0"
+ },
+ "dependencies": {
+ "agentkeepalive": {
+ "version": "3.3.0",
+ "bundled": true,
+ "requires": {
+ "humanize-ms": "1.2.1"
+ },
+ "dependencies": {
+ "humanize-ms": {
+ "version": "1.2.1",
+ "bundled": true,
+ "requires": {
+ "ms": "2.1.1"
+ },
+ "dependencies": {
+ "ms": {
+ "version": "2.1.1",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
+ "cacache": {
+ "version": "10.0.4",
+ "bundled": true,
+ "requires": {
+ "bluebird": "3.5.1",
+ "chownr": "1.0.1",
+ "glob": "7.1.2",
+ "graceful-fs": "4.1.11",
+ "lru-cache": "4.1.2",
+ "mississippi": "2.0.0",
+ "mkdirp": "0.5.1",
+ "move-concurrently": "1.0.1",
+ "promise-inflight": "1.0.1",
+ "rimraf": "2.6.2",
+ "ssri": "5.3.0",
+ "unique-filename": "1.1.0",
+ "y18n": "4.0.0"
+ },
+ "dependencies": {
+ "mississippi": {
+ "version": "2.0.0",
+ "bundled": true,
+ "requires": {
+ "concat-stream": "1.6.2",
+ "duplexify": "3.5.4",
+ "end-of-stream": "1.4.1",
+ "flush-write-stream": "1.0.3",
+ "from2": "2.3.0",
+ "parallel-transform": "1.1.0",
+ "pump": "2.0.1",
+ "pumpify": "1.4.0",
+ "stream-each": "1.2.2",
+ "through2": "2.0.3"
+ },
+ "dependencies": {
+ "concat-stream": {
+ "version": "1.6.2",
+ "bundled": true,
+ "requires": {
+ "buffer-from": "1.0.0",
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.6",
+ "typedarray": "0.0.6"
+ },
+ "dependencies": {
+ "buffer-from": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "bundled": true
+ }
+ }
+ },
+ "duplexify": {
+ "version": "3.5.4",
+ "bundled": true,
+ "requires": {
+ "end-of-stream": "1.4.1",
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.6",
+ "stream-shift": "1.0.0"
+ },
+ "dependencies": {
+ "stream-shift": {
+ "version": "1.0.0",
+ "bundled": true
+ }
+ }
+ },
+ "end-of-stream": {
+ "version": "1.4.1",
+ "bundled": true,
+ "requires": {
+ "once": "1.4.0"
+ }
+ },
+ "flush-write-stream": {
+ "version": "1.0.3",
+ "bundled": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.6"
+ }
+ },
+ "from2": {
+ "version": "2.3.0",
+ "bundled": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.6"
+ }
+ },
+ "parallel-transform": {
+ "version": "1.1.0",
+ "bundled": true,
+ "requires": {
+ "cyclist": "0.2.2",
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.6"
+ },
+ "dependencies": {
+ "cyclist": {
+ "version": "0.2.2",
+ "bundled": true
+ }
+ }
+ },
+ "pump": {
+ "version": "2.0.1",
+ "bundled": true,
+ "requires": {
+ "end-of-stream": "1.4.1",
+ "once": "1.4.0"
+ }
+ },
+ "pumpify": {
+ "version": "1.4.0",
+ "bundled": true,
+ "requires": {
+ "duplexify": "3.5.4",
+ "inherits": "2.0.3",
+ "pump": "2.0.1"
+ }
+ },
+ "stream-each": {
+ "version": "1.2.2",
+ "bundled": true,
+ "requires": {
+ "end-of-stream": "1.4.1",
+ "stream-shift": "1.0.0"
+ },
+ "dependencies": {
+ "stream-shift": {
+ "version": "1.0.0",
+ "bundled": true
+ }
+ }
+ },
+ "through2": {
+ "version": "2.0.3",
+ "bundled": true,
+ "requires": {
+ "readable-stream": "2.3.6",
+ "xtend": "4.0.1"
+ },
+ "dependencies": {
+ "xtend": {
+ "version": "4.0.1",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
+ "y18n": {
+ "version": "4.0.0",
+ "bundled": true
+ }
+ }
+ },
+ "http-cache-semantics": {
+ "version": "3.8.1",
+ "bundled": true
+ },
+ "http-proxy-agent": {
+ "version": "2.0.0",
+ "bundled": true,
+ "requires": {
+ "agent-base": "4.2.0",
+ "debug": "2.6.9"
+ },
+ "dependencies": {
+ "agent-base": {
+ "version": "4.2.0",
+ "bundled": true,
+ "requires": {
+ "es6-promisify": "5.0.0"
+ },
+ "dependencies": {
+ "es6-promisify": {
+ "version": "5.0.0",
+ "bundled": true,
+ "requires": {
+ "es6-promise": "4.2.4"
+ },
+ "dependencies": {
+ "es6-promise": {
+ "version": "4.2.4",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
+ "debug": {
+ "version": "2.6.9",
+ "bundled": true,
+ "requires": {
+ "ms": "2.0.0"
+ },
+ "dependencies": {
+ "ms": {
+ "version": "2.0.0",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
+ "https-proxy-agent": {
+ "version": "2.1.1",
+ "bundled": true,
+ "requires": {
+ "agent-base": "4.2.0",
+ "debug": "3.1.0"
+ },
+ "dependencies": {
+ "agent-base": {
+ "version": "4.2.0",
+ "bundled": true,
+ "requires": {
+ "es6-promisify": "5.0.0"
+ },
+ "dependencies": {
+ "es6-promisify": {
+ "version": "5.0.0",
+ "bundled": true,
+ "requires": {
+ "es6-promise": "4.2.4"
+ },
+ "dependencies": {
+ "es6-promise": {
+ "version": "4.2.4",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
+ "debug": {
+ "version": "3.1.0",
+ "bundled": true,
+ "requires": {
+ "ms": "2.0.0"
+ },
+ "dependencies": {
+ "ms": {
+ "version": "2.0.0",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
+ "mississippi": {
+ "version": "1.3.1",
+ "bundled": true,
+ "requires": {
+ "concat-stream": "1.6.0",
+ "duplexify": "3.5.3",
+ "end-of-stream": "1.4.1",
+ "flush-write-stream": "1.0.2",
+ "from2": "2.3.0",
+ "parallel-transform": "1.1.0",
+ "pump": "1.0.3",
+ "pumpify": "1.4.0",
+ "stream-each": "1.2.2",
+ "through2": "2.0.3"
+ },
+ "dependencies": {
+ "concat-stream": {
+ "version": "1.6.0",
+ "bundled": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.6",
+ "typedarray": "0.0.6"
+ },
+ "dependencies": {
+ "typedarray": {
+ "version": "0.0.6",
+ "bundled": true
+ }
+ }
+ },
+ "duplexify": {
+ "version": "3.5.3",
+ "bundled": true,
+ "requires": {
+ "end-of-stream": "1.4.1",
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.6",
+ "stream-shift": "1.0.0"
+ },
+ "dependencies": {
+ "stream-shift": {
+ "version": "1.0.0",
+ "bundled": true
+ }
+ }
+ },
+ "end-of-stream": {
+ "version": "1.4.1",
+ "bundled": true,
+ "requires": {
+ "once": "1.4.0"
+ }
+ },
+ "flush-write-stream": {
+ "version": "1.0.2",
+ "bundled": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.6"
+ }
+ },
+ "from2": {
+ "version": "2.3.0",
+ "bundled": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.6"
+ }
+ },
+ "parallel-transform": {
+ "version": "1.1.0",
+ "bundled": true,
+ "requires": {
+ "cyclist": "0.2.2",
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.6"
+ },
+ "dependencies": {
+ "cyclist": {
+ "version": "0.2.2",
+ "bundled": true
+ }
+ }
+ },
+ "pump": {
+ "version": "1.0.3",
+ "bundled": true,
+ "requires": {
+ "end-of-stream": "1.4.1",
+ "once": "1.4.0"
+ }
+ },
+ "pumpify": {
+ "version": "1.4.0",
+ "bundled": true,
+ "requires": {
+ "duplexify": "3.5.3",
+ "inherits": "2.0.3",
+ "pump": "2.0.1"
+ },
+ "dependencies": {
+ "pump": {
+ "version": "2.0.1",
+ "bundled": true,
+ "requires": {
+ "end-of-stream": "1.4.1",
+ "once": "1.4.0"
+ }
+ }
+ }
+ },
+ "stream-each": {
+ "version": "1.2.2",
+ "bundled": true,
+ "requires": {
+ "end-of-stream": "1.4.1",
+ "stream-shift": "1.0.0"
+ },
+ "dependencies": {
+ "stream-shift": {
+ "version": "1.0.0",
+ "bundled": true
+ }
+ }
+ },
+ "through2": {
+ "version": "2.0.3",
+ "bundled": true,
+ "requires": {
+ "readable-stream": "2.3.6",
+ "xtend": "4.0.1"
+ },
+ "dependencies": {
+ "xtend": {
+ "version": "4.0.1",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
+ "node-fetch-npm": {
+ "version": "2.0.2",
+ "bundled": true,
+ "requires": {
+ "encoding": "0.1.12",
+ "json-parse-better-errors": "1.0.1",
+ "safe-buffer": "5.1.1"
+ },
+ "dependencies": {
+ "encoding": {
+ "version": "0.1.12",
+ "bundled": true,
+ "requires": {
+ "iconv-lite": "0.4.19"
+ },
+ "dependencies": {
+ "iconv-lite": {
+ "version": "0.4.19",
+ "bundled": true
+ }
+ }
+ },
+ "json-parse-better-errors": {
+ "version": "1.0.1",
+ "bundled": true
+ }
+ }
+ },
+ "promise-retry": {
+ "version": "1.1.1",
+ "bundled": true,
+ "requires": {
+ "err-code": "1.1.2",
+ "retry": "0.10.1"
+ },
+ "dependencies": {
+ "err-code": {
+ "version": "1.1.2",
+ "bundled": true
+ },
+ "retry": {
+ "version": "0.10.1",
+ "bundled": true
+ }
+ }
+ },
+ "socks-proxy-agent": {
+ "version": "3.0.1",
+ "bundled": true,
+ "requires": {
+ "agent-base": "4.2.0",
+ "socks": "1.1.10"
+ },
+ "dependencies": {
+ "agent-base": {
+ "version": "4.2.0",
+ "bundled": true,
+ "requires": {
+ "es6-promisify": "5.0.0"
+ },
+ "dependencies": {
+ "es6-promisify": {
+ "version": "5.0.0",
+ "bundled": true,
+ "requires": {
+ "es6-promise": "4.2.4"
+ },
+ "dependencies": {
+ "es6-promise": {
+ "version": "4.2.4",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
+ "socks": {
+ "version": "1.1.10",
+ "bundled": true,
+ "requires": {
+ "ip": "1.1.5",
+ "smart-buffer": "1.1.15"
+ },
+ "dependencies": {
+ "ip": {
+ "version": "1.1.5",
+ "bundled": true
+ },
+ "smart-buffer": {
+ "version": "1.1.15",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
+ "ssri": {
+ "version": "5.3.0",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ }
+ }
+ }
+ }
+ },
+ "npm-registry-client": {
+ "version": "8.5.1",
+ "bundled": true,
+ "requires": {
+ "concat-stream": "1.6.1",
+ "graceful-fs": "4.1.11",
+ "normalize-package-data": "2.4.0",
+ "npm-package-arg": "6.1.0",
+ "npmlog": "4.1.2",
+ "once": "1.4.0",
+ "request": "2.85.0",
+ "retry": "0.10.1",
+ "safe-buffer": "5.1.1",
+ "semver": "5.5.0",
+ "slide": "1.1.6",
+ "ssri": "5.3.0"
+ },
+ "dependencies": {
+ "concat-stream": {
+ "version": "1.6.1",
+ "bundled": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.6",
+ "typedarray": "0.0.6"
+ },
+ "dependencies": {
+ "typedarray": {
+ "version": "0.0.6",
+ "bundled": true
+ }
+ }
+ },
+ "retry": {
+ "version": "0.10.1",
+ "bundled": true
+ },
+ "ssri": {
+ "version": "5.3.0",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ }
+ }
+ },
+ "npm-registry-fetch": {
+ "version": "1.1.0",
+ "bundled": true,
+ "requires": {
+ "bluebird": "3.5.1",
+ "figgy-pudding": "2.0.1",
+ "lru-cache": "4.1.2",
+ "make-fetch-happen": "3.0.0",
+ "npm-package-arg": "6.1.0",
+ "safe-buffer": "5.1.1"
+ },
+ "dependencies": {
+ "figgy-pudding": {
+ "version": "2.0.1",
+ "bundled": true
+ },
+ "make-fetch-happen": {
+ "version": "3.0.0",
+ "bundled": true,
+ "requires": {
+ "agentkeepalive": "3.4.1",
+ "cacache": "10.0.4",
+ "http-cache-semantics": "3.8.1",
+ "http-proxy-agent": "2.1.0",
+ "https-proxy-agent": "2.2.1",
+ "lru-cache": "4.1.2",
+ "mississippi": "3.0.0",
+ "node-fetch-npm": "2.0.2",
+ "promise-retry": "1.1.1",
+ "socks-proxy-agent": "3.0.1",
+ "ssri": "5.3.0"
+ },
+ "dependencies": {
+ "agentkeepalive": {
+ "version": "3.4.1",
+ "bundled": true,
+ "requires": {
+ "humanize-ms": "1.2.1"
+ },
+ "dependencies": {
+ "humanize-ms": {
+ "version": "1.2.1",
+ "bundled": true,
+ "requires": {
+ "ms": "2.1.1"
+ },
+ "dependencies": {
+ "ms": {
+ "version": "2.1.1",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
+ "cacache": {
+ "version": "10.0.4",
+ "bundled": true,
+ "requires": {
+ "bluebird": "3.5.1",
+ "chownr": "1.0.1",
+ "glob": "7.1.2",
+ "graceful-fs": "4.1.11",
+ "lru-cache": "4.1.2",
+ "mississippi": "2.0.0",
+ "mkdirp": "0.5.1",
+ "move-concurrently": "1.0.1",
+ "promise-inflight": "1.0.1",
+ "rimraf": "2.6.2",
+ "ssri": "5.3.0",
+ "unique-filename": "1.1.0",
+ "y18n": "4.0.0"
+ },
+ "dependencies": {
+ "mississippi": {
+ "version": "2.0.0",
+ "bundled": true,
+ "requires": {
+ "concat-stream": "1.6.2",
+ "duplexify": "3.5.4",
+ "end-of-stream": "1.4.1",
+ "flush-write-stream": "1.0.3",
+ "from2": "2.3.0",
+ "parallel-transform": "1.1.0",
+ "pump": "2.0.1",
+ "pumpify": "1.4.0",
+ "stream-each": "1.2.2",
+ "through2": "2.0.3"
+ },
+ "dependencies": {
+ "concat-stream": {
+ "version": "1.6.2",
+ "bundled": true,
+ "requires": {
+ "buffer-from": "1.0.0",
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.6",
+ "typedarray": "0.0.6"
+ },
+ "dependencies": {
+ "buffer-from": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "bundled": true
+ }
+ }
+ },
+ "duplexify": {
+ "version": "3.5.4",
+ "bundled": true,
+ "requires": {
+ "end-of-stream": "1.4.1",
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.6",
+ "stream-shift": "1.0.0"
+ },
+ "dependencies": {
+ "stream-shift": {
+ "version": "1.0.0",
+ "bundled": true
+ }
+ }
+ },
+ "end-of-stream": {
+ "version": "1.4.1",
+ "bundled": true,
+ "requires": {
+ "once": "1.4.0"
+ }
+ },
+ "flush-write-stream": {
+ "version": "1.0.3",
+ "bundled": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.6"
+ }
+ },
+ "from2": {
+ "version": "2.3.0",
+ "bundled": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.6"
+ }
+ },
+ "parallel-transform": {
+ "version": "1.1.0",
+ "bundled": true,
+ "requires": {
+ "cyclist": "0.2.2",
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.6"
+ },
+ "dependencies": {
+ "cyclist": {
+ "version": "0.2.2",
+ "bundled": true
+ }
+ }
+ },
+ "pump": {
+ "version": "2.0.1",
+ "bundled": true,
+ "requires": {
+ "end-of-stream": "1.4.1",
+ "once": "1.4.0"
+ }
+ },
+ "pumpify": {
+ "version": "1.4.0",
+ "bundled": true,
+ "requires": {
+ "duplexify": "3.5.4",
+ "inherits": "2.0.3",
+ "pump": "2.0.1"
+ }
+ },
+ "stream-each": {
+ "version": "1.2.2",
+ "bundled": true,
+ "requires": {
+ "end-of-stream": "1.4.1",
+ "stream-shift": "1.0.0"
+ },
+ "dependencies": {
+ "stream-shift": {
+ "version": "1.0.0",
+ "bundled": true
+ }
+ }
+ },
+ "through2": {
+ "version": "2.0.3",
+ "bundled": true,
+ "requires": {
+ "readable-stream": "2.3.6",
+ "xtend": "4.0.1"
+ },
+ "dependencies": {
+ "xtend": {
+ "version": "4.0.1",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
+ "y18n": {
+ "version": "4.0.0",
+ "bundled": true
+ }
+ }
+ },
+ "http-cache-semantics": {
+ "version": "3.8.1",
+ "bundled": true
+ },
+ "http-proxy-agent": {
+ "version": "2.1.0",
+ "bundled": true,
+ "requires": {
+ "agent-base": "4.2.0",
+ "debug": "3.1.0"
+ },
+ "dependencies": {
+ "agent-base": {
+ "version": "4.2.0",
+ "bundled": true,
+ "requires": {
+ "es6-promisify": "5.0.0"
+ },
+ "dependencies": {
+ "es6-promisify": {
+ "version": "5.0.0",
+ "bundled": true,
+ "requires": {
+ "es6-promise": "4.2.4"
+ },
+ "dependencies": {
+ "es6-promise": {
+ "version": "4.2.4",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
+ "debug": {
+ "version": "3.1.0",
+ "bundled": true,
+ "requires": {
+ "ms": "2.0.0"
+ },
+ "dependencies": {
+ "ms": {
+ "version": "2.0.0",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
+ "https-proxy-agent": {
+ "version": "2.2.1",
+ "bundled": true,
+ "requires": {
+ "agent-base": "4.2.0",
+ "debug": "3.1.0"
+ },
+ "dependencies": {
+ "agent-base": {
+ "version": "4.2.0",
+ "bundled": true,
+ "requires": {
+ "es6-promisify": "5.0.0"
+ },
+ "dependencies": {
+ "es6-promisify": {
+ "version": "5.0.0",
+ "bundled": true,
+ "requires": {
+ "es6-promise": "4.2.4"
+ },
+ "dependencies": {
+ "es6-promise": {
+ "version": "4.2.4",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
+ "debug": {
+ "version": "3.1.0",
+ "bundled": true,
+ "requires": {
+ "ms": "2.0.0"
+ },
+ "dependencies": {
+ "ms": {
+ "version": "2.0.0",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
+ "node-fetch-npm": {
+ "version": "2.0.2",
+ "bundled": true,
+ "requires": {
+ "encoding": "0.1.12",
+ "json-parse-better-errors": "1.0.2",
+ "safe-buffer": "5.1.1"
+ },
+ "dependencies": {
+ "encoding": {
+ "version": "0.1.12",
+ "bundled": true,
+ "requires": {
+ "iconv-lite": "0.4.21"
+ },
+ "dependencies": {
+ "iconv-lite": {
+ "version": "0.4.21",
+ "bundled": true,
+ "requires": {
+ "safer-buffer": "2.1.2"
+ },
+ "dependencies": {
+ "safer-buffer": {
+ "version": "2.1.2",
+ "bundled": true
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "promise-retry": {
+ "version": "1.1.1",
+ "bundled": true,
+ "requires": {
+ "err-code": "1.1.2",
+ "retry": "0.10.1"
+ },
+ "dependencies": {
+ "err-code": {
+ "version": "1.1.2",
+ "bundled": true
+ },
+ "retry": {
+ "version": "0.10.1",
+ "bundled": true
+ }
+ }
+ },
+ "socks-proxy-agent": {
+ "version": "3.0.1",
+ "bundled": true,
+ "requires": {
+ "agent-base": "4.2.0",
+ "socks": "1.1.10"
+ },
+ "dependencies": {
+ "agent-base": {
+ "version": "4.2.0",
+ "bundled": true,
+ "requires": {
+ "es6-promisify": "5.0.0"
+ },
+ "dependencies": {
+ "es6-promisify": {
+ "version": "5.0.0",
+ "bundled": true,
+ "requires": {
+ "es6-promise": "4.2.4"
+ },
+ "dependencies": {
+ "es6-promise": {
+ "version": "4.2.4",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
+ "socks": {
+ "version": "1.1.10",
+ "bundled": true,
+ "requires": {
+ "ip": "1.1.5",
+ "smart-buffer": "1.1.15"
+ },
+ "dependencies": {
+ "ip": {
+ "version": "1.1.5",
+ "bundled": true
+ },
+ "smart-buffer": {
+ "version": "1.1.15",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
+ "ssri": {
+ "version": "5.3.0",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ }
+ }
+ }
+ }
+ },
+ "npm-user-validate": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "npmlog": {
+ "version": "4.1.2",
+ "bundled": true,
+ "requires": {
+ "are-we-there-yet": "1.1.4",
+ "console-control-strings": "1.1.0",
+ "gauge": "2.7.4",
+ "set-blocking": "2.0.0"
+ },
+ "dependencies": {
+ "are-we-there-yet": {
+ "version": "1.1.4",
+ "bundled": true,
+ "requires": {
+ "delegates": "1.0.0",
+ "readable-stream": "2.3.6"
+ },
+ "dependencies": {
+ "delegates": {
+ "version": "1.0.0",
+ "bundled": true
+ }
+ }
+ },
+ "console-control-strings": {
+ "version": "1.1.0",
+ "bundled": true
+ },
+ "gauge": {
+ "version": "2.7.4",
+ "bundled": true,
+ "requires": {
+ "aproba": "1.2.0",
+ "console-control-strings": "1.1.0",
+ "has-unicode": "2.0.1",
+ "object-assign": "4.1.1",
+ "signal-exit": "3.0.2",
+ "string-width": "1.0.2",
+ "strip-ansi": "3.0.1",
+ "wide-align": "1.1.2"
+ },
+ "dependencies": {
+ "object-assign": {
+ "version": "4.1.1",
+ "bundled": true
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "bundled": true
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "bundled": true,
+ "requires": {
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
+ },
+ "dependencies": {
+ "code-point-at": {
+ "version": "1.1.0",
+ "bundled": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "bundled": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ },
+ "dependencies": {
+ "number-is-nan": {
+ "version": "1.0.1",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "bundled": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "bundled": true
+ }
+ }
+ },
+ "wide-align": {
+ "version": "1.1.2",
+ "bundled": true,
+ "requires": {
+ "string-width": "1.0.2"
+ }
+ }
+ }
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "bundled": true
+ }
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "bundled": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "opener": {
+ "version": "1.4.3",
+ "bundled": true
+ },
+ "osenv": {
+ "version": "0.1.5",
+ "bundled": true,
+ "requires": {
+ "os-homedir": "1.0.2",
+ "os-tmpdir": "1.0.2"
+ },
+ "dependencies": {
+ "os-homedir": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "bundled": true
+ }
+ }
+ },
+ "pacote": {
+ "version": "8.1.0",
+ "bundled": true,
+ "requires": {
+ "bluebird": "3.5.1",
+ "cacache": "11.0.1",
+ "get-stream": "3.0.0",
+ "glob": "7.1.2",
+ "lru-cache": "4.1.2",
+ "make-fetch-happen": "4.0.1",
+ "minimatch": "3.0.4",
+ "mississippi": "3.0.0",
+ "mkdirp": "0.5.1",
+ "normalize-package-data": "2.4.0",
+ "npm-package-arg": "6.1.0",
+ "npm-packlist": "1.1.10",
+ "npm-pick-manifest": "2.1.0",
+ "osenv": "0.1.5",
+ "promise-inflight": "1.0.1",
+ "promise-retry": "1.1.1",
+ "protoduck": "5.0.0",
+ "rimraf": "2.6.2",
+ "safe-buffer": "5.1.1",
+ "semver": "5.5.0",
+ "ssri": "6.0.0",
+ "tar": "4.4.1",
+ "unique-filename": "1.1.0",
+ "which": "1.3.0"
+ },
+ "dependencies": {
+ "get-stream": {
+ "version": "3.0.0",
+ "bundled": true
+ },
+ "make-fetch-happen": {
+ "version": "4.0.1",
+ "bundled": true,
+ "requires": {
+ "agentkeepalive": "3.4.1",
+ "cacache": "11.0.1",
+ "http-cache-semantics": "3.8.1",
+ "http-proxy-agent": "2.1.0",
+ "https-proxy-agent": "2.2.1",
+ "lru-cache": "4.1.2",
+ "mississippi": "3.0.0",
+ "node-fetch-npm": "2.0.2",
+ "promise-retry": "1.1.1",
+ "socks-proxy-agent": "4.0.1",
+ "ssri": "6.0.0"
+ },
+ "dependencies": {
+ "agentkeepalive": {
+ "version": "3.4.1",
+ "bundled": true,
+ "requires": {
+ "humanize-ms": "1.2.1"
+ },
+ "dependencies": {
+ "humanize-ms": {
+ "version": "1.2.1",
+ "bundled": true,
+ "requires": {
+ "ms": "2.1.1"
+ },
+ "dependencies": {
+ "ms": {
+ "version": "2.1.1",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
+ "http-cache-semantics": {
+ "version": "3.8.1",
+ "bundled": true
+ },
+ "http-proxy-agent": {
+ "version": "2.1.0",
+ "bundled": true,
+ "requires": {
+ "agent-base": "4.2.0",
+ "debug": "3.1.0"
+ },
+ "dependencies": {
+ "agent-base": {
+ "version": "4.2.0",
+ "bundled": true,
+ "requires": {
+ "es6-promisify": "5.0.0"
+ },
+ "dependencies": {
+ "es6-promisify": {
+ "version": "5.0.0",
+ "bundled": true,
+ "requires": {
+ "es6-promise": "4.2.4"
+ },
+ "dependencies": {
+ "es6-promise": {
+ "version": "4.2.4",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
+ "debug": {
+ "version": "3.1.0",
+ "bundled": true,
+ "requires": {
+ "ms": "2.0.0"
+ },
+ "dependencies": {
+ "ms": {
+ "version": "2.0.0",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
+ "https-proxy-agent": {
+ "version": "2.2.1",
+ "bundled": true,
+ "requires": {
+ "agent-base": "4.2.0",
+ "debug": "3.1.0"
+ },
+ "dependencies": {
+ "agent-base": {
+ "version": "4.2.0",
+ "bundled": true,
+ "requires": {
+ "es6-promisify": "5.0.0"
+ },
+ "dependencies": {
+ "es6-promisify": {
+ "version": "5.0.0",
+ "bundled": true,
+ "requires": {
+ "es6-promise": "4.2.4"
+ },
+ "dependencies": {
+ "es6-promise": {
+ "version": "4.2.4",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
+ "debug": {
+ "version": "3.1.0",
+ "bundled": true,
+ "requires": {
+ "ms": "2.0.0"
+ },
+ "dependencies": {
+ "ms": {
+ "version": "2.0.0",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
+ "node-fetch-npm": {
+ "version": "2.0.2",
+ "bundled": true,
+ "requires": {
+ "encoding": "0.1.12",
+ "json-parse-better-errors": "1.0.2",
+ "safe-buffer": "5.1.1"
+ },
+ "dependencies": {
+ "encoding": {
+ "version": "0.1.12",
+ "bundled": true,
+ "requires": {
+ "iconv-lite": "0.4.21"
+ },
+ "dependencies": {
+ "iconv-lite": {
+ "version": "0.4.21",
+ "bundled": true,
+ "requires": {
+ "safer-buffer": "2.1.2"
+ },
+ "dependencies": {
+ "safer-buffer": {
+ "version": "2.1.2",
+ "bundled": true
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "socks-proxy-agent": {
+ "version": "4.0.1",
+ "bundled": true,
+ "requires": {
+ "agent-base": "4.2.0",
+ "socks": "2.2.0"
+ },
+ "dependencies": {
+ "agent-base": {
+ "version": "4.2.0",
+ "bundled": true,
+ "requires": {
+ "es6-promisify": "5.0.0"
+ },
+ "dependencies": {
+ "es6-promisify": {
+ "version": "5.0.0",
+ "bundled": true,
+ "requires": {
+ "es6-promise": "4.2.4"
+ },
+ "dependencies": {
+ "es6-promise": {
+ "version": "4.2.4",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
+ "socks": {
+ "version": "2.2.0",
+ "bundled": true,
+ "requires": {
+ "ip": "1.1.5",
+ "smart-buffer": "4.0.1"
+ },
+ "dependencies": {
+ "ip": {
+ "version": "1.1.5",
+ "bundled": true
+ },
+ "smart-buffer": {
+ "version": "4.0.1",
+ "bundled": true
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "bundled": true,
+ "requires": {
+ "brace-expansion": "1.1.11"
+ },
+ "dependencies": {
+ "brace-expansion": {
+ "version": "1.1.11",
+ "bundled": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ },
+ "dependencies": {
+ "balanced-match": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
+ "promise-retry": {
+ "version": "1.1.1",
+ "bundled": true,
+ "requires": {
+ "err-code": "1.1.2",
+ "retry": "0.10.1"
+ },
+ "dependencies": {
+ "err-code": {
+ "version": "1.1.2",
+ "bundled": true
+ },
+ "retry": {
+ "version": "0.10.1",
+ "bundled": true
+ }
+ }
+ },
+ "protoduck": {
+ "version": "5.0.0",
+ "bundled": true,
+ "requires": {
+ "genfun": "4.0.1"
+ },
+ "dependencies": {
+ "genfun": {
+ "version": "4.0.1",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
+ "path-is-inside": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "promise-inflight": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "qrcode-terminal": {
+ "version": "0.12.0",
+ "bundled": true
+ },
+ "query-string": {
+ "version": "6.0.0",
+ "bundled": true,
+ "requires": {
+ "decode-uri-component": "0.2.0",
+ "strict-uri-encode": "2.0.0"
+ },
+ "dependencies": {
+ "decode-uri-component": {
+ "version": "0.2.0",
+ "bundled": true
+ },
+ "strict-uri-encode": {
+ "version": "2.0.0",
+ "bundled": true
+ }
+ }
+ },
+ "qw": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "read": {
+ "version": "1.0.7",
+ "bundled": true,
+ "requires": {
+ "mute-stream": "0.0.7"
+ },
+ "dependencies": {
+ "mute-stream": {
+ "version": "0.0.7",
+ "bundled": true
+ }
+ }
+ },
+ "read-cmd-shim": {
+ "version": "1.0.1",
+ "bundled": true,
+ "requires": {
+ "graceful-fs": "4.1.11"
+ }
+ },
+ "read-installed": {
+ "version": "4.0.3",
+ "bundled": true,
+ "requires": {
+ "debuglog": "1.0.1",
+ "graceful-fs": "4.1.11",
+ "read-package-json": "2.0.13",
+ "readdir-scoped-modules": "1.0.2",
+ "semver": "5.5.0",
+ "slide": "1.1.6",
+ "util-extend": "1.0.3"
+ },
+ "dependencies": {
+ "util-extend": {
+ "version": "1.0.3",
+ "bundled": true
+ }
+ }
+ },
+ "read-package-json": {
+ "version": "2.0.13",
+ "bundled": true,
+ "requires": {
+ "glob": "7.1.2",
+ "graceful-fs": "4.1.11",
+ "json-parse-better-errors": "1.0.1",
+ "normalize-package-data": "2.4.0",
+ "slash": "1.0.0"
+ },
+ "dependencies": {
+ "json-parse-better-errors": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "slash": {
+ "version": "1.0.0",
+ "bundled": true
+ }
+ }
+ },
+ "read-package-tree": {
+ "version": "5.2.1",
+ "bundled": true,
+ "requires": {
+ "debuglog": "1.0.1",
+ "dezalgo": "1.0.3",
+ "once": "1.4.0",
+ "read-package-json": "2.0.13",
+ "readdir-scoped-modules": "1.0.2"
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "bundled": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "2.0.0",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.1.1",
+ "util-deprecate": "1.0.2"
+ },
+ "dependencies": {
+ "core-util-is": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.0",
+ "bundled": true
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "bundled": true
+ }
+ }
+ },
+ "readdir-scoped-modules": {
+ "version": "1.0.2",
+ "bundled": true,
+ "requires": {
+ "debuglog": "1.0.1",
+ "dezalgo": "1.0.3",
+ "graceful-fs": "4.1.11",
+ "once": "1.4.0"
+ }
+ },
+ "request": {
+ "version": "2.85.0",
+ "bundled": true,
+ "requires": {
+ "aws-sign2": "0.7.0",
+ "aws4": "1.6.0",
+ "caseless": "0.12.0",
+ "combined-stream": "1.0.6",
+ "extend": "3.0.1",
+ "forever-agent": "0.6.1",
+ "form-data": "2.3.2",
+ "har-validator": "5.0.3",
+ "hawk": "6.0.2",
+ "http-signature": "1.2.0",
+ "is-typedarray": "1.0.0",
+ "isstream": "0.1.2",
+ "json-stringify-safe": "5.0.1",
+ "mime-types": "2.1.18",
+ "oauth-sign": "0.8.2",
+ "performance-now": "2.1.0",
+ "qs": "6.5.1",
+ "safe-buffer": "5.1.1",
+ "stringstream": "0.0.5",
+ "tough-cookie": "2.3.4",
+ "tunnel-agent": "0.6.0",
+ "uuid": "3.2.1"
+ },
+ "dependencies": {
+ "aws-sign2": {
+ "version": "0.7.0",
+ "bundled": true
+ },
+ "aws4": {
+ "version": "1.6.0",
+ "bundled": true
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "bundled": true
+ },
+ "combined-stream": {
+ "version": "1.0.6",
+ "bundled": true,
+ "requires": {
+ "delayed-stream": "1.0.0"
+ },
+ "dependencies": {
+ "delayed-stream": {
+ "version": "1.0.0",
+ "bundled": true
+ }
+ }
+ },
+ "extend": {
+ "version": "3.0.1",
+ "bundled": true
+ },
+ "forever-agent": {
+ "version": "0.6.1",
+ "bundled": true
+ },
+ "form-data": {
+ "version": "2.3.2",
+ "bundled": true,
+ "requires": {
+ "asynckit": "0.4.0",
+ "combined-stream": "1.0.6",
+ "mime-types": "2.1.18"
+ },
+ "dependencies": {
+ "asynckit": {
+ "version": "0.4.0",
+ "bundled": true
+ }
+ }
+ },
+ "har-validator": {
+ "version": "5.0.3",
+ "bundled": true,
+ "requires": {
+ "ajv": "5.5.2",
+ "har-schema": "2.0.0"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "5.5.2",
+ "bundled": true,
+ "requires": {
+ "co": "4.6.0",
+ "fast-deep-equal": "1.1.0",
+ "fast-json-stable-stringify": "2.0.0",
+ "json-schema-traverse": "0.3.1"
+ },
+ "dependencies": {
+ "co": {
+ "version": "4.6.0",
+ "bundled": true
+ },
+ "fast-deep-equal": {
+ "version": "1.1.0",
+ "bundled": true
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.0.0",
+ "bundled": true
+ },
+ "json-schema-traverse": {
+ "version": "0.3.1",
+ "bundled": true
+ }
+ }
+ },
+ "har-schema": {
+ "version": "2.0.0",
+ "bundled": true
+ }
+ }
+ },
+ "hawk": {
+ "version": "6.0.2",
+ "bundled": true,
+ "requires": {
+ "boom": "4.3.1",
+ "cryptiles": "3.1.2",
+ "hoek": "4.2.1",
+ "sntp": "2.1.0"
+ },
+ "dependencies": {
+ "boom": {
+ "version": "4.3.1",
+ "bundled": true,
+ "requires": {
+ "hoek": "4.2.1"
+ }
+ },
+ "cryptiles": {
+ "version": "3.1.2",
+ "bundled": true,
+ "requires": {
+ "boom": "5.2.0"
+ },
+ "dependencies": {
+ "boom": {
+ "version": "5.2.0",
+ "bundled": true,
+ "requires": {
+ "hoek": "4.2.1"
+ }
+ }
+ }
+ },
+ "hoek": {
+ "version": "4.2.1",
+ "bundled": true
+ },
+ "sntp": {
+ "version": "2.1.0",
+ "bundled": true,
+ "requires": {
+ "hoek": "4.2.1"
+ }
+ }
+ }
+ },
+ "http-signature": {
+ "version": "1.2.0",
+ "bundled": true,
+ "requires": {
+ "assert-plus": "1.0.0",
+ "jsprim": "1.4.1",
+ "sshpk": "1.14.1"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "jsprim": {
+ "version": "1.4.1",
+ "bundled": true,
+ "requires": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.2.3",
+ "verror": "1.10.0"
+ },
+ "dependencies": {
+ "extsprintf": {
+ "version": "1.3.0",
+ "bundled": true
+ },
+ "json-schema": {
+ "version": "0.2.3",
+ "bundled": true
+ },
+ "verror": {
+ "version": "1.10.0",
+ "bundled": true,
+ "requires": {
+ "assert-plus": "1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "1.3.0"
+ },
+ "dependencies": {
+ "core-util-is": {
+ "version": "1.0.2",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
+ "sshpk": {
+ "version": "1.14.1",
+ "bundled": true,
+ "requires": {
+ "asn1": "0.2.3",
+ "assert-plus": "1.0.0",
+ "bcrypt-pbkdf": "1.0.1",
+ "dashdash": "1.14.1",
+ "ecc-jsbn": "0.1.1",
+ "getpass": "0.1.7",
+ "jsbn": "0.1.1",
+ "tweetnacl": "0.14.5"
+ },
+ "dependencies": {
+ "asn1": {
+ "version": "0.2.3",
+ "bundled": true
+ },
+ "bcrypt-pbkdf": {
+ "version": "1.0.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "tweetnacl": "0.14.5"
+ }
+ },
+ "dashdash": {
+ "version": "1.14.1",
+ "bundled": true,
+ "requires": {
+ "assert-plus": "1.0.0"
+ }
+ },
+ "ecc-jsbn": {
+ "version": "0.1.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "jsbn": "0.1.1"
+ }
+ },
+ "getpass": {
+ "version": "0.1.7",
+ "bundled": true,
+ "requires": {
+ "assert-plus": "1.0.0"
+ }
+ },
+ "jsbn": {
+ "version": "0.1.1",
+ "bundled": true,
+ "optional": true
+ },
+ "tweetnacl": {
+ "version": "0.14.5",
+ "bundled": true,
+ "optional": true
+ }
+ }
+ }
+ }
+ },
+ "is-typedarray": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "bundled": true
+ },
+ "json-stringify-safe": {
+ "version": "5.0.1",
+ "bundled": true
+ },
+ "mime-types": {
+ "version": "2.1.18",
+ "bundled": true,
+ "requires": {
+ "mime-db": "1.33.0"
+ },
+ "dependencies": {
+ "mime-db": {
+ "version": "1.33.0",
+ "bundled": true
+ }
+ }
+ },
+ "oauth-sign": {
+ "version": "0.8.2",
+ "bundled": true
+ },
+ "performance-now": {
+ "version": "2.1.0",
+ "bundled": true
+ },
+ "qs": {
+ "version": "6.5.1",
+ "bundled": true
+ },
+ "stringstream": {
+ "version": "0.0.5",
+ "bundled": true
+ },
+ "tough-cookie": {
+ "version": "2.3.4",
+ "bundled": true,
+ "requires": {
+ "punycode": "1.4.1"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "1.4.1",
+ "bundled": true
+ }
+ }
+ },
+ "tunnel-agent": {
+ "version": "0.6.0",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ }
+ }
+ },
+ "retry": {
+ "version": "0.12.0",
+ "bundled": true
+ },
+ "rimraf": {
+ "version": "2.6.2",
+ "bundled": true,
+ "requires": {
+ "glob": "7.1.2"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.1",
+ "bundled": true
+ },
+ "semver": {
+ "version": "5.5.0",
+ "bundled": true
+ },
+ "sha": {
+ "version": "2.0.1",
+ "bundled": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "readable-stream": "2.3.6"
+ }
+ },
+ "slide": {
+ "version": "1.1.6",
+ "bundled": true
+ },
+ "sorted-object": {
+ "version": "2.0.1",
+ "bundled": true
+ },
+ "sorted-union-stream": {
+ "version": "2.1.3",
+ "bundled": true,
+ "requires": {
+ "from2": "1.3.0",
+ "stream-iterate": "1.2.0"
+ },
+ "dependencies": {
+ "from2": {
+ "version": "1.3.0",
+ "bundled": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "readable-stream": "1.1.14"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "1.1.14",
+ "bundled": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "0.0.1",
+ "string_decoder": "0.10.31"
+ },
+ "dependencies": {
+ "core-util-is": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "bundled": true
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
+ "stream-iterate": {
+ "version": "1.2.0",
+ "bundled": true,
+ "requires": {
+ "readable-stream": "2.3.6",
+ "stream-shift": "1.0.0"
+ },
+ "dependencies": {
+ "stream-shift": {
+ "version": "1.0.0",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
+ "ssri": {
+ "version": "6.0.0",
+ "bundled": true
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "bundled": true,
+ "requires": {
+ "ansi-regex": "3.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "bundled": true
+ }
+ }
+ },
+ "tar": {
+ "version": "4.4.1",
+ "bundled": true,
+ "requires": {
+ "chownr": "1.0.1",
+ "fs-minipass": "1.2.5",
+ "minipass": "2.2.4",
+ "minizlib": "1.1.0",
+ "mkdirp": "0.5.1",
+ "safe-buffer": "5.1.1",
+ "yallist": "3.0.2"
+ },
+ "dependencies": {
+ "fs-minipass": {
+ "version": "1.2.5",
+ "bundled": true,
+ "requires": {
+ "minipass": "2.2.4"
+ }
+ },
+ "minipass": {
+ "version": "2.2.4",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "5.1.1",
+ "yallist": "3.0.2"
+ }
+ },
+ "minizlib": {
+ "version": "1.1.0",
+ "bundled": true,
+ "requires": {
+ "minipass": "2.2.4"
+ }
+ },
+ "yallist": {
+ "version": "3.0.2",
+ "bundled": true
+ }
+ }
+ },
+ "text-table": {
+ "version": "0.2.0",
+ "bundled": true
+ },
+ "tiny-relative-date": {
+ "version": "1.3.0",
+ "bundled": true
+ },
+ "uid-number": {
+ "version": "0.0.6",
+ "bundled": true
+ },
+ "umask": {
+ "version": "1.1.0",
+ "bundled": true
+ },
+ "unique-filename": {
+ "version": "1.1.0",
+ "bundled": true,
+ "requires": {
+ "unique-slug": "2.0.0"
+ },
+ "dependencies": {
+ "unique-slug": {
+ "version": "2.0.0",
+ "bundled": true,
+ "requires": {
+ "imurmurhash": "0.1.4"
+ }
+ }
+ }
+ },
+ "unpipe": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "update-notifier": {
+ "version": "2.4.0",
+ "bundled": true,
+ "requires": {
+ "boxen": "1.3.0",
+ "chalk": "2.3.2",
+ "configstore": "3.1.2",
+ "import-lazy": "2.1.0",
+ "is-ci": "1.1.0",
+ "is-installed-globally": "0.1.0",
+ "is-npm": "1.0.0",
+ "latest-version": "3.1.0",
+ "semver-diff": "2.1.0",
+ "xdg-basedir": "3.0.0"
+ },
+ "dependencies": {
+ "boxen": {
+ "version": "1.3.0",
+ "bundled": true,
+ "requires": {
+ "ansi-align": "2.0.0",
+ "camelcase": "4.1.0",
+ "chalk": "2.3.2",
+ "cli-boxes": "1.0.0",
+ "string-width": "2.1.1",
+ "term-size": "1.2.0",
+ "widest-line": "2.0.0"
+ },
+ "dependencies": {
+ "ansi-align": {
+ "version": "2.0.0",
+ "bundled": true,
+ "requires": {
+ "string-width": "2.1.1"
+ }
+ },
+ "camelcase": {
+ "version": "4.1.0",
+ "bundled": true
+ },
+ "cli-boxes": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "bundled": true,
+ "requires": {
+ "is-fullwidth-code-point": "2.0.0",
+ "strip-ansi": "4.0.0"
+ },
+ "dependencies": {
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "bundled": true
+ }
+ }
+ },
+ "term-size": {
+ "version": "1.2.0",
+ "bundled": true,
+ "requires": {
+ "execa": "0.7.0"
+ },
+ "dependencies": {
+ "execa": {
+ "version": "0.7.0",
+ "bundled": true,
+ "requires": {
+ "cross-spawn": "5.1.0",
+ "get-stream": "3.0.0",
+ "is-stream": "1.1.0",
+ "npm-run-path": "2.0.2",
+ "p-finally": "1.0.0",
+ "signal-exit": "3.0.2",
+ "strip-eof": "1.0.0"
+ },
+ "dependencies": {
+ "cross-spawn": {
+ "version": "5.1.0",
+ "bundled": true,
+ "requires": {
+ "lru-cache": "4.1.2",
+ "shebang-command": "1.2.0",
+ "which": "1.3.0"
+ },
+ "dependencies": {
+ "shebang-command": {
+ "version": "1.2.0",
+ "bundled": true,
+ "requires": {
+ "shebang-regex": "1.0.0"
+ },
+ "dependencies": {
+ "shebang-regex": {
+ "version": "1.0.0",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
+ "get-stream": {
+ "version": "3.0.0",
+ "bundled": true
+ },
+ "is-stream": {
+ "version": "1.1.0",
+ "bundled": true
+ },
+ "npm-run-path": {
+ "version": "2.0.2",
+ "bundled": true,
+ "requires": {
+ "path-key": "2.0.1"
+ },
+ "dependencies": {
+ "path-key": {
+ "version": "2.0.1",
+ "bundled": true
+ }
+ }
+ },
+ "p-finally": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "bundled": true
+ },
+ "strip-eof": {
+ "version": "1.0.0",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
+ "widest-line": {
+ "version": "2.0.0",
+ "bundled": true,
+ "requires": {
+ "string-width": "2.1.1"
+ }
+ }
+ }
+ },
+ "chalk": {
+ "version": "2.3.2",
+ "bundled": true,
+ "requires": {
+ "ansi-styles": "3.2.1",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "5.3.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "bundled": true,
+ "requires": {
+ "color-convert": "1.9.1"
+ },
+ "dependencies": {
+ "color-convert": {
+ "version": "1.9.1",
+ "bundled": true,
+ "requires": {
+ "color-name": "1.1.3"
+ },
+ "dependencies": {
+ "color-name": {
+ "version": "1.1.3",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "bundled": true
+ },
+ "supports-color": {
+ "version": "5.3.0",
+ "bundled": true,
+ "requires": {
+ "has-flag": "3.0.0"
+ },
+ "dependencies": {
+ "has-flag": {
+ "version": "3.0.0",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
+ "configstore": {
+ "version": "3.1.2",
+ "bundled": true,
+ "requires": {
+ "dot-prop": "4.2.0",
+ "graceful-fs": "4.1.11",
+ "make-dir": "1.2.0",
+ "unique-string": "1.0.0",
+ "write-file-atomic": "2.3.0",
+ "xdg-basedir": "3.0.0"
+ },
+ "dependencies": {
+ "dot-prop": {
+ "version": "4.2.0",
+ "bundled": true,
+ "requires": {
+ "is-obj": "1.0.1"
+ },
+ "dependencies": {
+ "is-obj": {
+ "version": "1.0.1",
+ "bundled": true
+ }
+ }
+ },
+ "make-dir": {
+ "version": "1.2.0",
+ "bundled": true,
+ "requires": {
+ "pify": "3.0.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "3.0.0",
+ "bundled": true
+ }
+ }
+ },
+ "unique-string": {
+ "version": "1.0.0",
+ "bundled": true,
+ "requires": {
+ "crypto-random-string": "1.0.0"
+ },
+ "dependencies": {
+ "crypto-random-string": {
+ "version": "1.0.0",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
+ "import-lazy": {
+ "version": "2.1.0",
+ "bundled": true
+ },
+ "is-ci": {
+ "version": "1.1.0",
+ "bundled": true,
+ "requires": {
+ "ci-info": "1.1.3"
+ },
+ "dependencies": {
+ "ci-info": {
+ "version": "1.1.3",
+ "bundled": true
+ }
+ }
+ },
+ "is-installed-globally": {
+ "version": "0.1.0",
+ "bundled": true,
+ "requires": {
+ "global-dirs": "0.1.1",
+ "is-path-inside": "1.0.1"
+ },
+ "dependencies": {
+ "global-dirs": {
+ "version": "0.1.1",
+ "bundled": true,
+ "requires": {
+ "ini": "1.3.5"
+ }
+ },
+ "is-path-inside": {
+ "version": "1.0.1",
+ "bundled": true,
+ "requires": {
+ "path-is-inside": "1.0.2"
+ }
+ }
+ }
+ },
+ "is-npm": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "latest-version": {
+ "version": "3.1.0",
+ "bundled": true,
+ "requires": {
+ "package-json": "4.0.1"
+ },
+ "dependencies": {
+ "package-json": {
+ "version": "4.0.1",
+ "bundled": true,
+ "requires": {
+ "got": "6.7.1",
+ "registry-auth-token": "3.3.2",
+ "registry-url": "3.1.0",
+ "semver": "5.5.0"
+ },
+ "dependencies": {
+ "got": {
+ "version": "6.7.1",
+ "bundled": true,
+ "requires": {
+ "create-error-class": "3.0.2",
+ "duplexer3": "0.1.4",
+ "get-stream": "3.0.0",
+ "is-redirect": "1.0.0",
+ "is-retry-allowed": "1.1.0",
+ "is-stream": "1.1.0",
+ "lowercase-keys": "1.0.1",
+ "safe-buffer": "5.1.1",
+ "timed-out": "4.0.1",
+ "unzip-response": "2.0.1",
+ "url-parse-lax": "1.0.0"
+ },
+ "dependencies": {
+ "create-error-class": {
+ "version": "3.0.2",
+ "bundled": true,
+ "requires": {
+ "capture-stack-trace": "1.0.0"
+ },
+ "dependencies": {
+ "capture-stack-trace": {
+ "version": "1.0.0",
+ "bundled": true
+ }
+ }
+ },
+ "duplexer3": {
+ "version": "0.1.4",
+ "bundled": true
+ },
+ "get-stream": {
+ "version": "3.0.0",
+ "bundled": true
+ },
+ "is-redirect": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "is-retry-allowed": {
+ "version": "1.1.0",
+ "bundled": true
+ },
+ "is-stream": {
+ "version": "1.1.0",
+ "bundled": true
+ },
+ "lowercase-keys": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "timed-out": {
+ "version": "4.0.1",
+ "bundled": true
+ },
+ "unzip-response": {
+ "version": "2.0.1",
+ "bundled": true
+ },
+ "url-parse-lax": {
+ "version": "1.0.0",
+ "bundled": true,
+ "requires": {
+ "prepend-http": "1.0.4"
+ },
+ "dependencies": {
+ "prepend-http": {
+ "version": "1.0.4",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
+ "registry-auth-token": {
+ "version": "3.3.2",
+ "bundled": true,
+ "requires": {
+ "rc": "1.2.6",
+ "safe-buffer": "5.1.1"
+ },
+ "dependencies": {
+ "rc": {
+ "version": "1.2.6",
+ "bundled": true,
+ "requires": {
+ "deep-extend": "0.4.2",
+ "ini": "1.3.5",
+ "minimist": "1.2.0",
+ "strip-json-comments": "2.0.1"
+ },
+ "dependencies": {
+ "deep-extend": {
+ "version": "0.4.2",
+ "bundled": true
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "bundled": true
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
+ "registry-url": {
+ "version": "3.1.0",
+ "bundled": true,
+ "requires": {
+ "rc": "1.2.6"
+ },
+ "dependencies": {
+ "rc": {
+ "version": "1.2.6",
+ "bundled": true,
+ "requires": {
+ "deep-extend": "0.4.2",
+ "ini": "1.3.5",
+ "minimist": "1.2.0",
+ "strip-json-comments": "2.0.1"
+ },
+ "dependencies": {
+ "deep-extend": {
+ "version": "0.4.2",
+ "bundled": true
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "bundled": true
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "bundled": true
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "semver-diff": {
+ "version": "2.1.0",
+ "bundled": true,
+ "requires": {
+ "semver": "5.5.0"
+ }
+ },
+ "xdg-basedir": {
+ "version": "3.0.0",
+ "bundled": true
+ }
+ }
+ },
+ "uuid": {
+ "version": "3.2.1",
+ "bundled": true
+ },
+ "validate-npm-package-license": {
+ "version": "3.0.3",
+ "bundled": true,
+ "requires": {
+ "spdx-correct": "3.0.0",
+ "spdx-expression-parse": "3.0.0"
+ },
+ "dependencies": {
+ "spdx-correct": {
+ "version": "3.0.0",
+ "bundled": true,
+ "requires": {
+ "spdx-expression-parse": "3.0.0",
+ "spdx-license-ids": "3.0.0"
+ },
+ "dependencies": {
+ "spdx-license-ids": {
+ "version": "3.0.0",
+ "bundled": true
+ }
+ }
+ },
+ "spdx-expression-parse": {
+ "version": "3.0.0",
+ "bundled": true,
+ "requires": {
+ "spdx-exceptions": "2.1.0",
+ "spdx-license-ids": "3.0.0"
+ },
+ "dependencies": {
+ "spdx-exceptions": {
+ "version": "2.1.0",
+ "bundled": true
+ },
+ "spdx-license-ids": {
+ "version": "3.0.0",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
+ "validate-npm-package-name": {
+ "version": "3.0.0",
+ "bundled": true,
+ "requires": {
+ "builtins": "1.0.3"
+ },
+ "dependencies": {
+ "builtins": {
+ "version": "1.0.3",
+ "bundled": true
+ }
+ }
+ },
+ "which": {
+ "version": "1.3.0",
+ "bundled": true,
+ "requires": {
+ "isexe": "2.0.0"
+ },
+ "dependencies": {
+ "isexe": {
+ "version": "2.0.0",
+ "bundled": true
+ }
+ }
+ },
+ "worker-farm": {
+ "version": "1.6.0",
+ "bundled": true,
+ "requires": {
+ "errno": "0.1.7"
+ },
+ "dependencies": {
+ "errno": {
+ "version": "0.1.7",
+ "bundled": true,
+ "requires": {
+ "prr": "1.0.1"
+ },
+ "dependencies": {
+ "prr": {
+ "version": "1.0.1",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "write-file-atomic": {
+ "version": "2.3.0",
+ "bundled": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "imurmurhash": "0.1.4",
+ "signal-exit": "3.0.2"
+ },
+ "dependencies": {
+ "signal-exit": {
+ "version": "3.0.2",
+ "bundled": true
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/website/themes/reveal-hugo/package.json b/website/themes/reveal-hugo/package.json
new file mode 100644
index 0000000..17ffe1f
--- /dev/null
+++ b/website/themes/reveal-hugo/package.json
@@ -0,0 +1,8 @@
+{
+ "scripts": {
+ "start": "hugo server -s exampleSite"
+ },
+ "dependencies": {
+ "npm": "^6.0.0"
+ }
+}
diff --git a/website/themes/reveal-hugo/static/reveal-hugo/plugin/notes/notes.html b/website/themes/reveal-hugo/static/reveal-hugo/plugin/notes/notes.html
new file mode 100644
index 0000000..4c5b799
--- /dev/null
+++ b/website/themes/reveal-hugo/static/reveal-hugo/plugin/notes/notes.html
@@ -0,0 +1,759 @@
+<!doctype html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>reveal.js - Slide Notes</title>
+
+ <style>
+ body {
+ font-family: Helvetica;
+ font-size: 18px;
+ }
+
+ #current-slide,
+ #upcoming-slide,
+ #speaker-controls {
+ padding: 6px;
+ box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ }
+
+ #current-slide iframe,
+ #upcoming-slide iframe {
+ width: 100%;
+ height: 100%;
+ border: 1px solid #ddd;
+ }
+
+ #current-slide .label,
+ #upcoming-slide .label {
+ position: absolute;
+ top: 10px;
+ left: 10px;
+ z-index: 2;
+ }
+
+ .overlay-element {
+ height: 34px;
+ line-height: 34px;
+ padding: 0 10px;
+ text-shadow: none;
+ background: rgba( 220, 220, 220, 0.8 );
+ color: #222;
+ font-size: 14px;
+ }
+
+ .overlay-element.interactive:hover {
+ background: rgba( 220, 220, 220, 1 );
+ }
+
+ #current-slide {
+ position: absolute;
+ width: 60%;
+ height: 100%;
+ top: 0;
+ left: 0;
+ padding-right: 0;
+ }
+
+ #upcoming-slide {
+ position: absolute;
+ width: 40%;
+ height: 40%;
+ right: 0;
+ top: 0;
+ }
+
+ /* Speaker controls */
+ #speaker-controls {
+ position: absolute;
+ top: 40%;
+ right: 0;
+ width: 40%;
+ height: 60%;
+ overflow: auto;
+ font-size: 18px;
+ }
+
+ .speaker-controls-time.hidden,
+ .speaker-controls-notes.hidden {
+ display: none;
+ }
+
+ .speaker-controls-time .label,
+ .speaker-controls-pace .label,
+ .speaker-controls-notes .label {
+ text-transform: uppercase;
+ font-weight: normal;
+ font-size: 0.66em;
+ color: #666;
+ margin: 0;
+ }
+
+ .speaker-controls-time, .speaker-controls-pace {
+ border-bottom: 1px solid rgba( 200, 200, 200, 0.5 );
+ margin-bottom: 10px;
+ padding: 10px 16px;
+ padding-bottom: 20px;
+ cursor: pointer;
+ }
+
+ .speaker-controls-time .reset-button {
+ opacity: 0;
+ float: right;
+ color: #666;
+ text-decoration: none;
+ }
+ .speaker-controls-time:hover .reset-button {
+ opacity: 1;
+ }
+
+ .speaker-controls-time .timer,
+ .speaker-controls-time .clock {
+ width: 50%;
+ }
+
+ .speaker-controls-time .timer,
+ .speaker-controls-time .clock,
+ .speaker-controls-time .pacing .hours-value,
+ .speaker-controls-time .pacing .minutes-value,
+ .speaker-controls-time .pacing .seconds-value {
+ font-size: 1.9em;
+ }
+
+ .speaker-controls-time .timer {
+ float: left;
+ }
+
+ .speaker-controls-time .clock {
+ float: right;
+ text-align: right;
+ }
+
+ .speaker-controls-time span.mute {
+ opacity: 0.3;
+ }
+
+ .speaker-controls-time .pacing-title {
+ margin-top: 5px;
+ }
+
+ .speaker-controls-time .pacing.ahead {
+ color: blue;
+ }
+
+ .speaker-controls-time .pacing.on-track {
+ color: green;
+ }
+
+ .speaker-controls-time .pacing.behind {
+ color: red;
+ }
+
+ .speaker-controls-notes {
+ padding: 10px 16px;
+ }
+
+ .speaker-controls-notes .value {
+ margin-top: 5px;
+ line-height: 1.4;
+ font-size: 1.2em;
+ }
+
+ /* Layout selector */
+ #speaker-layout {
+ position: absolute;
+ top: 10px;
+ right: 10px;
+ color: #222;
+ z-index: 10;
+ }
+ #speaker-layout select {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ top: 0;
+ left: 0;
+ border: 0;
+ box-shadow: 0;
+ cursor: pointer;
+ opacity: 0;
+
+ font-size: 1em;
+ background-color: transparent;
+
+ -moz-appearance: none;
+ -webkit-appearance: none;
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
+ }
+
+ #speaker-layout select:focus {
+ outline: none;
+ box-shadow: none;
+ }
+
+ .clear {
+ clear: both;
+ }
+
+ /* Speaker layout: Wide */
+ body[data-speaker-layout="wide"] #current-slide,
+ body[data-speaker-layout="wide"] #upcoming-slide {
+ width: 50%;
+ height: 45%;
+ padding: 6px;
+ }
+
+ body[data-speaker-layout="wide"] #current-slide {
+ top: 0;
+ left: 0;
+ }
+
+ body[data-speaker-layout="wide"] #upcoming-slide {
+ top: 0;
+ left: 50%;
+ }
+
+ body[data-speaker-layout="wide"] #speaker-controls {
+ top: 45%;
+ left: 0;
+ width: 100%;
+ height: 50%;
+ font-size: 1.25em;
+ }
+
+ /* Speaker layout: Tall */
+ body[data-speaker-layout="tall"] #current-slide,
+ body[data-speaker-layout="tall"] #upcoming-slide {
+ width: 45%;
+ height: 50%;
+ padding: 6px;
+ }
+
+ body[data-speaker-layout="tall"] #current-slide {
+ top: 0;
+ left: 0;
+ }
+
+ body[data-speaker-layout="tall"] #upcoming-slide {
+ top: 50%;
+ left: 0;
+ }
+
+ body[data-speaker-layout="tall"] #speaker-controls {
+ padding-top: 40px;
+ top: 0;
+ left: 45%;
+ width: 55%;
+ height: 100%;
+ font-size: 1.25em;
+ }
+
+ /* Speaker layout: Notes only */
+ body[data-speaker-layout="notes-only"] #current-slide,
+ body[data-speaker-layout="notes-only"] #upcoming-slide {
+ display: none;
+ }
+
+ body[data-speaker-layout="notes-only"] #speaker-controls {
+ padding-top: 40px;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ font-size: 1.25em;
+ }
+
+ @media screen and (max-width: 1080px) {
+ body[data-speaker-layout="default"] #speaker-controls {
+ font-size: 16px;
+ }
+ }
+
+ @media screen and (max-width: 900px) {
+ body[data-speaker-layout="default"] #speaker-controls {
+ font-size: 14px;
+ }
+ }
+
+ @media screen and (max-width: 800px) {
+ body[data-speaker-layout="default"] #speaker-controls {
+ font-size: 12px;
+ }
+ }
+
+ </style>
+ </head>
+
+ <body>
+
+ <div id="current-slide"></div>
+ <div id="upcoming-slide"><span class="overlay-element label">Upcoming</span></div>
+ <div id="speaker-controls">
+ <div class="speaker-controls-time">
+ <h4 class="label">Time <span class="reset-button">Click to Reset</span></h4>
+ <div class="clock">
+ <span class="clock-value">0:00 AM</span>
+ </div>
+ <div class="timer">
+ <span class="hours-value">00</span><span class="minutes-value">:00</span><span class="seconds-value">:00</span>
+ </div>
+ <div class="clear"></div>
+
+ <h4 class="label pacing-title" style="display: none">Pacing – Time to finish current slide</h4>
+ <div class="pacing" style="display: none">
+ <span class="hours-value">00</span><span class="minutes-value">:00</span><span class="seconds-value">:00</span>
+ </div>
+ </div>
+
+ <div class="speaker-controls-notes hidden">
+ <h4 class="label">Notes</h4>
+ <div class="value"></div>
+ </div>
+ </div>
+ <div id="speaker-layout" class="overlay-element interactive">
+ <span class="speaker-layout-label"></span>
+ <select class="speaker-layout-dropdown"></select>
+ </div>
+
+ <script src="../../plugin/markdown/marked.js"></script>
+ <script>
+
+ (function() {
+
+ var notes,
+ notesValue,
+ currentState,
+ currentSlide,
+ upcomingSlide,
+ layoutLabel,
+ layoutDropdown,
+ connected = false;
+
+ var SPEAKER_LAYOUTS = {
+ 'default': 'Default',
+ 'wide': 'Wide',
+ 'tall': 'Tall',
+ 'notes-only': 'Notes only'
+ };
+
+ setupLayout();
+
+ window.addEventListener( 'message', function( event ) {
+
+ var data = JSON.parse( event.data );
+
+ // The overview mode is only useful to the reveal.js instance
+ // where navigation occurs so we don't sync it
+ if( data.state ) delete data.state.overview;
+
+ // Messages sent by the notes plugin inside of the main window
+ if( data && data.namespace === 'reveal-notes' ) {
+ if( data.type === 'connect' ) {
+ handleConnectMessage( data );
+ }
+ else if( data.type === 'state' ) {
+ handleStateMessage( data );
+ }
+ }
+ // Messages sent by the reveal.js inside of the current slide preview
+ else if( data && data.namespace === 'reveal' ) {
+ if( /ready/.test( data.eventName ) ) {
+ // Send a message back to notify that the handshake is complete
+ window.opener.postMessage( JSON.stringify({ namespace: 'reveal-notes', type: 'connected'} ), '*' );
+ }
+ else if( /slidechanged|fragmentshown|fragmenthidden|paused|resumed/.test( data.eventName ) && currentState !== JSON.stringify( data.state ) ) {
+
+ window.opener.postMessage( JSON.stringify({ method: 'setState', args: [ data.state ]} ), '*' );
+
+ }
+ }
+
+ } );
+
+ /**
+ * Called when the main window is trying to establish a
+ * connection.
+ */
+ function handleConnectMessage( data ) {
+
+ if( connected === false ) {
+ connected = true;
+
+ setupIframes( data );
+ setupKeyboard();
+ setupNotes();
+ setupTimer();
+ }
+
+ }
+
+ /**
+ * Called when the main window sends an updated state.
+ */
+ function handleStateMessage( data ) {
+
+ // Store the most recently set state to avoid circular loops
+ // applying the same state
+ currentState = JSON.stringify( data.state );
+
+ // No need for updating the notes in case of fragment changes
+ if ( data.notes ) {
+ notes.classList.remove( 'hidden' );
+ notesValue.style.whiteSpace = data.whitespace;
+ if( data.markdown ) {
+ notesValue.innerHTML = marked( data.notes );
+ }
+ else {
+ notesValue.innerHTML = data.notes;
+ }
+ }
+ else {
+ notes.classList.add( 'hidden' );
+ }
+
+ // Update the note slides
+ currentSlide.contentWindow.postMessage( JSON.stringify({ method: 'setState', args: [ data.state ] }), '*' );
+ upcomingSlide.contentWindow.postMessage( JSON.stringify({ method: 'setState', args: [ data.state ] }), '*' );
+ upcomingSlide.contentWindow.postMessage( JSON.stringify({ method: 'next' }), '*' );
+
+ }
+
+ // Limit to max one state update per X ms
+ handleStateMessage = debounce( handleStateMessage, 200 );
+
+ /**
+ * Forward keyboard events to the current slide window.
+ * This enables keyboard events to work even if focus
+ * isn't set on the current slide iframe.
+ */
+ function setupKeyboard() {
+
+ document.addEventListener( 'keydown', function( event ) {
+ currentSlide.contentWindow.postMessage( JSON.stringify({ method: 'triggerKey', args: [ event.keyCode ] }), '*' );
+ } );
+
+ }
+
+ /**
+ * Creates the preview iframes.
+ */
+ function setupIframes( data ) {
+
+ var params = [
+ 'receiver',
+ 'progress=false',
+ 'history=false',
+ 'transition=none',
+ 'autoSlide=0',
+ 'backgroundTransition=none'
+ ].join( '&' );
+
+ var urlSeparator = /\?/.test(data.url) ? '&' : '?';
+ var hash = '#/' + data.state.indexh + '/' + data.state.indexv;
+ var currentURL = data.url + urlSeparator + params + '&postMessageEvents=true' + hash;
+ var upcomingURL = data.url + urlSeparator + params + '&controls=false' + hash;
+
+ currentSlide = document.createElement( 'iframe' );
+ currentSlide.setAttribute( 'width', 1280 );
+ currentSlide.setAttribute( 'height', 1024 );
+ currentSlide.setAttribute( 'src', currentURL );
+ document.querySelector( '#current-slide' ).appendChild( currentSlide );
+
+ upcomingSlide = document.createElement( 'iframe' );
+ upcomingSlide.setAttribute( 'width', 640 );
+ upcomingSlide.setAttribute( 'height', 512 );
+ upcomingSlide.setAttribute( 'src', upcomingURL );
+ document.querySelector( '#upcoming-slide' ).appendChild( upcomingSlide );
+
+ }
+
+ /**
+ * Setup the notes UI.
+ */
+ function setupNotes() {
+
+ notes = document.querySelector( '.speaker-controls-notes' );
+ notesValue = document.querySelector( '.speaker-controls-notes .value' );
+
+ }
+
+ function getTimings() {
+
+ var slides = Reveal.getSlides();
+ var defaultTiming = Reveal.getConfig().defaultTiming;
+ if (defaultTiming == null) {
+ return null;
+ }
+ var timings = [];
+ for ( var i in slides ) {
+ var slide = slides[i];
+ var timing = defaultTiming;
+ if( slide.hasAttribute( 'data-timing' )) {
+ var t = slide.getAttribute( 'data-timing' );
+ timing = parseInt(t);
+ if( isNaN(timing) ) {
+ console.warn("Could not parse timing '" + t + "' of slide " + i + "; using default of " + defaultTiming);
+ timing = defaultTiming;
+ }
+ }
+ timings.push(timing);
+ }
+ return timings;
+
+ }
+
+ /**
+ * Return the number of seconds allocated for presenting
+ * all slides up to and including this one.
+ */
+ function getTimeAllocated(timings) {
+
+ var slides = Reveal.getSlides();
+ var allocated = 0;
+ var currentSlide = Reveal.getSlidePastCount();
+ for (var i in slides.slice(0, currentSlide + 1)) {
+ allocated += timings[i];
+ }
+ return allocated;
+
+ }
+
+ /**
+ * Create the timer and clock and start updating them
+ * at an interval.
+ */
+ function setupTimer() {
+
+ var start = new Date(),
+ timeEl = document.querySelector( '.speaker-controls-time' ),
+ clockEl = timeEl.querySelector( '.clock-value' ),
+ hoursEl = timeEl.querySelector( '.hours-value' ),
+ minutesEl = timeEl.querySelector( '.minutes-value' ),
+ secondsEl = timeEl.querySelector( '.seconds-value' ),
+ pacingTitleEl = timeEl.querySelector( '.pacing-title' ),
+ pacingEl = timeEl.querySelector( '.pacing' ),
+ pacingHoursEl = pacingEl.querySelector( '.hours-value' ),
+ pacingMinutesEl = pacingEl.querySelector( '.minutes-value' ),
+ pacingSecondsEl = pacingEl.querySelector( '.seconds-value' );
+
+ var timings = getTimings();
+ if (timings !== null) {
+ pacingTitleEl.style.removeProperty('display');
+ pacingEl.style.removeProperty('display');
+ }
+
+ function _displayTime( hrEl, minEl, secEl, time) {
+
+ var sign = Math.sign(time) == -1 ? "-" : "";
+ time = Math.abs(Math.round(time / 1000));
+ var seconds = time % 60;
+ var minutes = Math.floor( time / 60 ) % 60 ;
+ var hours = Math.floor( time / ( 60 * 60 )) ;
+ hrEl.innerHTML = sign + zeroPadInteger( hours );
+ if (hours == 0) {
+ hrEl.classList.add( 'mute' );
+ }
+ else {
+ hrEl.classList.remove( 'mute' );
+ }
+ minEl.innerHTML = ':' + zeroPadInteger( minutes );
+ if (hours == 0 && minutes == 0) {
+ minEl.classList.add( 'mute' );
+ }
+ else {
+ minEl.classList.remove( 'mute' );
+ }
+ secEl.innerHTML = ':' + zeroPadInteger( seconds );
+ }
+
+ function _updateTimer() {
+
+ var diff, hours, minutes, seconds,
+ now = new Date();
+
+ diff = now.getTime() - start.getTime();
+
+ clockEl.innerHTML = now.toLocaleTimeString( 'en-US', { hour12: true, hour: '2-digit', minute:'2-digit' } );
+ _displayTime( hoursEl, minutesEl, secondsEl, diff );
+ if (timings !== null) {
+ _updatePacing(diff);
+ }
+
+ }
+
+ function _updatePacing(diff) {
+
+ var slideEndTiming = getTimeAllocated(timings) * 1000;
+ var currentSlide = Reveal.getSlidePastCount();
+ var currentSlideTiming = timings[currentSlide] * 1000;
+ var timeLeftCurrentSlide = slideEndTiming - diff;
+ if (timeLeftCurrentSlide < 0) {
+ pacingEl.className = 'pacing behind';
+ }
+ else if (timeLeftCurrentSlide < currentSlideTiming) {
+ pacingEl.className = 'pacing on-track';
+ }
+ else {
+ pacingEl.className = 'pacing ahead';
+ }
+ _displayTime( pacingHoursEl, pacingMinutesEl, pacingSecondsEl, timeLeftCurrentSlide );
+
+ }
+
+ // Update once directly
+ _updateTimer();
+
+ // Then update every second
+ setInterval( _updateTimer, 1000 );
+
+ function _resetTimer() {
+
+ if (timings == null) {
+ start = new Date();
+ }
+ else {
+ // Reset timer to beginning of current slide
+ var slideEndTiming = getTimeAllocated(timings) * 1000;
+ var currentSlide = Reveal.getSlidePastCount();
+ var currentSlideTiming = timings[currentSlide] * 1000;
+ var previousSlidesTiming = slideEndTiming - currentSlideTiming;
+ var now = new Date();
+ start = new Date(now.getTime() - previousSlidesTiming);
+ }
+ _updateTimer();
+
+ }
+
+ timeEl.addEventListener( 'click', function() {
+ _resetTimer();
+ return false;
+ } );
+
+ }
+
+ /**
+ * Sets up the speaker view layout and layout selector.
+ */
+ function setupLayout() {
+
+ layoutDropdown = document.querySelector( '.speaker-layout-dropdown' );
+ layoutLabel = document.querySelector( '.speaker-layout-label' );
+
+ // Render the list of available layouts
+ for( var id in SPEAKER_LAYOUTS ) {
+ var option = document.createElement( 'option' );
+ option.setAttribute( 'value', id );
+ option.textContent = SPEAKER_LAYOUTS[ id ];
+ layoutDropdown.appendChild( option );
+ }
+
+ // Monitor the dropdown for changes
+ layoutDropdown.addEventListener( 'change', function( event ) {
+
+ setLayout( layoutDropdown.value );
+
+ }, false );
+
+ // Restore any currently persisted layout
+ setLayout( getLayout() );
+
+ }
+
+ /**
+ * Sets a new speaker view layout. The layout is persisted
+ * in local storage.
+ */
+ function setLayout( value ) {
+
+ var title = SPEAKER_LAYOUTS[ value ];
+
+ layoutLabel.innerHTML = 'Layout' + ( title ? ( ': ' + title ) : '' );
+ layoutDropdown.value = value;
+
+ document.body.setAttribute( 'data-speaker-layout', value );
+
+ // Persist locally
+ if( supportsLocalStorage() ) {
+ window.localStorage.setItem( 'reveal-speaker-layout', value );
+ }
+
+ }
+
+ /**
+ * Returns the ID of the most recently set speaker layout
+ * or our default layout if none has been set.
+ */
+ function getLayout() {
+
+ if( supportsLocalStorage() ) {
+ var layout = window.localStorage.getItem( 'reveal-speaker-layout' );
+ if( layout ) {
+ return layout;
+ }
+ }
+
+ // Default to the first record in the layouts hash
+ for( var id in SPEAKER_LAYOUTS ) {
+ return id;
+ }
+
+ }
+
+ function supportsLocalStorage() {
+
+ try {
+ localStorage.setItem('test', 'test');
+ localStorage.removeItem('test');
+ return true;
+ }
+ catch( e ) {
+ return false;
+ }
+
+ }
+
+ function zeroPadInteger( num ) {
+
+ var str = '00' + parseInt( num );
+ return str.substring( str.length - 2 );
+
+ }
+
+ /**
+ * Limits the frequency at which a function can be called.
+ */
+ function debounce( fn, ms ) {
+
+ var lastTime = 0,
+ timeout;
+
+ return function() {
+
+ var args = arguments;
+ var context = this;
+
+ clearTimeout( timeout );
+
+ var timeSinceLastCall = Date.now() - lastTime;
+ if( timeSinceLastCall > ms ) {
+ fn.apply( context, args );
+ lastTime = Date.now();
+ }
+ else {
+ timeout = setTimeout( function() {
+ fn.apply( context, args );
+ lastTime = Date.now();
+ }, ms - timeSinceLastCall );
+ }
+
+ }
+
+ }
+
+ })();
+
+ </script>
+ </body>
+</html>
diff --git a/website/themes/reveal-hugo/static/reveal-hugo/plugin/notes/notes.js b/website/themes/reveal-hugo/static/reveal-hugo/plugin/notes/notes.js
new file mode 100644
index 0000000..80fb6e2
--- /dev/null
+++ b/website/themes/reveal-hugo/static/reveal-hugo/plugin/notes/notes.js
@@ -0,0 +1,155 @@
+/**
+ * Handles opening of and synchronization with the reveal.js
+ * notes window.
+ *
+ * Handshake process:
+ * 1. This window posts 'connect' to notes window
+ * - Includes URL of presentation to show
+ * 2. Notes window responds with 'connected' when it is available
+ * 3. This window proceeds to send the current presentation state
+ * to the notes window
+ */
+var RevealNotes = (function() {
+
+ function openNotes( notesFilePath ) {
+
+ if( !notesFilePath ) {
+ var jsFileLocation = document.querySelector('script[src$="notes.js"]').src; // this js file path
+ jsFileLocation = jsFileLocation.replace(/notes\.js(\?.*)?$/, ''); // the js folder path
+ notesFilePath = jsFileLocation + 'notes.html';
+ }
+
+ var notesPopup = window.open( notesFilePath, 'reveal.js - Notes', 'width=1100,height=700' );
+
+ // Allow popup window access to Reveal API
+ notesPopup.Reveal = this.Reveal;
+
+ /**
+ * Connect to the notes window through a postmessage handshake.
+ * Using postmessage enables us to work in situations where the
+ * origins differ, such as a presentation being opened from the
+ * file system.
+ */
+ function connect() {
+ // Keep trying to connect until we get a 'connected' message back
+ var connectInterval = setInterval( function() {
+ notesPopup.postMessage( JSON.stringify( {
+ namespace: 'reveal-notes',
+ type: 'connect',
+ url: window.location.protocol + '//' + window.location.host + window.location.pathname + window.location.search,
+ state: Reveal.getState()
+ } ), '*' );
+ }, 500 );
+
+ window.addEventListener( 'message', function( event ) {
+ var data = JSON.parse( event.data );
+ if( data && data.namespace === 'reveal-notes' && data.type === 'connected' ) {
+ clearInterval( connectInterval );
+ onConnected();
+ }
+ } );
+ }
+
+ /**
+ * Posts the current slide data to the notes window
+ */
+ function post( event ) {
+
+ var slideElement = Reveal.getCurrentSlide(),
+ notesElement = slideElement.querySelector( 'aside.notes' ),
+ fragmentElement = slideElement.querySelector( '.current-fragment' );
+
+ var messageData = {
+ namespace: 'reveal-notes',
+ type: 'state',
+ notes: '',
+ markdown: false,
+ whitespace: 'normal',
+ state: Reveal.getState()
+ };
+
+ // Look for notes defined in a slide attribute
+ if( slideElement.hasAttribute( 'data-notes' ) ) {
+ messageData.notes = slideElement.getAttribute( 'data-notes' );
+ messageData.whitespace = 'pre-wrap';
+ }
+
+ // Look for notes defined in a fragment
+ if( fragmentElement ) {
+ var fragmentNotes = fragmentElement.querySelector( 'aside.notes' );
+ if( fragmentNotes ) {
+ notesElement = fragmentNotes;
+ }
+ else if( fragmentElement.hasAttribute( 'data-notes' ) ) {
+ messageData.notes = fragmentElement.getAttribute( 'data-notes' );
+ messageData.whitespace = 'pre-wrap';
+
+ // In case there are slide notes
+ notesElement = null;
+ }
+ }
+
+ // Look for notes defined in an aside element
+ if( notesElement ) {
+ messageData.notes = notesElement.innerHTML;
+ messageData.markdown = typeof notesElement.getAttribute( 'data-markdown' ) === 'string';
+ }
+
+ notesPopup.postMessage( JSON.stringify( messageData ), '*' );
+
+ }
+
+ /**
+ * Called once we have established a connection to the notes
+ * window.
+ */
+ function onConnected() {
+
+ // Monitor events that trigger a change in state
+ Reveal.addEventListener( 'slidechanged', post );
+ Reveal.addEventListener( 'fragmentshown', post );
+ Reveal.addEventListener( 'fragmenthidden', post );
+ Reveal.addEventListener( 'overviewhidden', post );
+ Reveal.addEventListener( 'overviewshown', post );
+ Reveal.addEventListener( 'paused', post );
+ Reveal.addEventListener( 'resumed', post );
+
+ // Post the initial state
+ post();
+
+ }
+
+ connect();
+
+ }
+
+ if( !/receiver/i.test( window.location.search ) ) {
+
+ // If the there's a 'notes' query set, open directly
+ if( window.location.search.match( /(\?|\&)notes/gi ) !== null ) {
+ openNotes();
+ }
+
+ // Open the notes when the 's' key is hit
+ document.addEventListener( 'keydown', function( event ) {
+ // Disregard the event if the target is editable or a
+ // modifier is present
+ if ( document.querySelector( ':focus' ) !== null || event.shiftKey || event.altKey || event.ctrlKey || event.metaKey ) return;
+
+ // Disregard the event if keyboard is disabled
+ if ( Reveal.getConfig().keyboard === false ) return;
+
+ if( event.keyCode === 83 ) {
+ event.preventDefault();
+ openNotes();
+ }
+ }, false );
+
+ // Show our keyboard shortcut in the reveal.js help overlay
+ if( window.Reveal ) Reveal.registerKeyboardShortcut( 'S', 'Speaker notes view' );
+
+ }
+
+ return { open: openNotes };
+
+})();
diff --git a/website/themes/reveal-hugo/static/reveal-hugo/themes/robot-lung.css b/website/themes/reveal-hugo/static/reveal-hugo/themes/robot-lung.css
new file mode 100644
index 0000000..a080f8e
--- /dev/null
+++ b/website/themes/reveal-hugo/static/reveal-hugo/themes/robot-lung.css
@@ -0,0 +1,333 @@
+/**
+
+ [ robot-lung ]
+
+ A hot pink theme for Reveal.js with Roboto fonts and a colorful border.
+ By Josh Dzielak, https://dzello.com/, License MIT
+
+ The bold border is optional and requires some HTML. To use it:
+
+ 1. Add 4 divs to your HTML page:
+ <div class="line top"></div>
+ <div class="line bottom"></div>
+ <div class="line left"></div>
+ <div class="line right"></div>
+
+ 2. Set { margin: 0.2 } in the Reveal.js initializer to make sure
+ your presentation content doesn't collide with the frame.
+
+ Like the theme but don't like the colors? Don't fret. Just change
+ $borderColor and/or $linkColor below to something else and rebuild.
+
+ Or if you don't want to rebuild the theme just override the .line background
+ property with some CSS:
+
+ .line {
+ background: <new-color>;
+ }
+
+*/
+@import url(https://fonts.googleapis.com/css?family=Roboto+Slab:300,700);
+@import url(https://fonts.googleapis.com/css?family=Roboto:700);
+section.has-light-background, section.has-light-background h1, section.has-light-background h2, section.has-light-background h3, section.has-light-background h4, section.has-light-background h5, section.has-light-background h6 {
+ color: #141414; }
+
+.reveal .controls {
+ right: 50px;
+ bottom: 50px; }
+
+.line {
+ content: '';
+ position: fixed;
+ background: #FF4081;
+ z-index: 105; }
+ .line.top {
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: 30px; }
+ @media (max-width: 840px) {
+ .line.top {
+ height: 15px; } }
+ .line.bottom {
+ left: 0;
+ top: auto;
+ bottom: 0;
+ width: 100%;
+ height: 30px; }
+ @media (max-width: 840px) {
+ .line.bottom {
+ height: 15px; } }
+ .line.left {
+ left: 0;
+ top: 0;
+ width: 30px;
+ height: 200%; }
+ @media (max-width: 840px) {
+ .line.left {
+ width: 15px; } }
+ .line.right {
+ left: auto;
+ right: 0;
+ top: 0;
+ width: 30px;
+ height: 200%; }
+ @media (max-width: 840px) {
+ .line.right {
+ width: 15px; } }
+
+/*********************************************
+ * GLOBAL STYLES
+ *********************************************/
+body {
+ background: #fff;
+ background-color: #fff; }
+
+.reveal {
+ font-family: "Roboto Slab", serif;
+ font-size: 32px;
+ font-weight: normal;
+ color: #363636; }
+
+::selection {
+ color: #fff;
+ background: #ffc0d5;
+ text-shadow: none; }
+
+::-moz-selection {
+ color: #fff;
+ background: #ffc0d5;
+ text-shadow: none; }
+
+.reveal .slides > section,
+.reveal .slides > section > section {
+ line-height: 1.3;
+ font-weight: inherit; }
+
+/*********************************************
+ * HEADERS
+ *********************************************/
+.reveal h1,
+.reveal h2,
+.reveal h3,
+.reveal h4,
+.reveal h5,
+.reveal h6 {
+ margin: 0 0 20px 0;
+ color: #141414;
+ font-family: "Roboto", sans-serif;
+ font-weight: 700;
+ line-height: 1.2;
+ letter-spacing: normal;
+ text-transform: uppercase;
+ text-shadow: none;
+ word-wrap: break-word; }
+
+.reveal h1 {
+ font-size: 2.6em; }
+
+.reveal h2 {
+ font-size: 2.2em; }
+
+.reveal h3 {
+ font-size: 1.7em; }
+
+.reveal h4 {
+ font-size: 1.4em; }
+
+.reveal h1 {
+ text-shadow: none; }
+
+/*********************************************
+ * OTHER
+ *********************************************/
+.reveal p {
+ margin: 20px 0;
+ line-height: 1.3; }
+
+/* Ensure certain elements are never larger than the slide itself */
+.reveal img,
+.reveal video,
+.reveal iframe {
+ max-width: 95%;
+ max-height: 95%; }
+
+.reveal strong,
+.reveal b {
+ font-weight: bold; }
+
+.reveal em {
+ font-style: italic; }
+
+.reveal ol,
+.reveal dl,
+.reveal ul {
+ display: inline-block;
+ text-align: left;
+ margin: 0 0 0 1em; }
+
+.reveal ol {
+ list-style-type: decimal; }
+
+.reveal ul {
+ list-style-type: disc; }
+
+.reveal ul ul {
+ list-style-type: square; }
+
+.reveal ul ul ul {
+ list-style-type: circle; }
+
+.reveal ul ul,
+.reveal ul ol,
+.reveal ol ol,
+.reveal ol ul {
+ display: block;
+ margin-left: 40px; }
+
+.reveal dt {
+ font-weight: bold; }
+
+.reveal dd {
+ margin-left: 40px; }
+
+.reveal blockquote {
+ display: block;
+ position: relative;
+ width: 70%;
+ margin: 20px auto;
+ padding: 5px;
+ font-style: italic;
+ background: rgba(255, 255, 255, 0.05);
+ box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2); }
+
+.reveal blockquote p:first-child,
+.reveal blockquote p:last-child {
+ display: inline-block; }
+
+.reveal q {
+ font-style: italic; }
+
+.reveal pre {
+ display: block;
+ position: relative;
+ width: 90%;
+ margin: 20px auto;
+ text-align: left;
+ font-size: 0.55em;
+ font-family: monospace;
+ line-height: 1.2em;
+ word-wrap: break-word;
+ box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }
+
+.reveal code {
+ font-family: monospace;
+ text-transform: none; }
+
+.reveal pre code {
+ display: block;
+ padding: 5px;
+ overflow: auto;
+ max-height: 400px;
+ word-wrap: normal; }
+
+.reveal table {
+ margin: auto;
+ border-collapse: collapse;
+ border-spacing: 0; }
+
+.reveal table th {
+ font-weight: bold; }
+
+.reveal table th,
+.reveal table td {
+ text-align: left;
+ padding: 0.2em 0.5em 0.2em 0.5em;
+ border-bottom: 1px solid; }
+
+.reveal table th[align="center"],
+.reveal table td[align="center"] {
+ text-align: center; }
+
+.reveal table th[align="right"],
+.reveal table td[align="right"] {
+ text-align: right; }
+
+.reveal table tbody tr:last-child th,
+.reveal table tbody tr:last-child td {
+ border-bottom: none; }
+
+.reveal sup {
+ vertical-align: super; }
+
+.reveal sub {
+ vertical-align: sub; }
+
+.reveal small {
+ display: inline-block;
+ font-size: 0.6em;
+ line-height: 1.2em;
+ vertical-align: top; }
+
+.reveal small * {
+ vertical-align: top; }
+
+/*********************************************
+ * LINKS
+ *********************************************/
+.reveal a {
+ color: #FF4081;
+ text-decoration: none;
+ -webkit-transition: color .15s ease;
+ -moz-transition: color .15s ease;
+ transition: color .15s ease; }
+
+.reveal a:hover {
+ color: #ff8db3;
+ text-shadow: none;
+ border: none; }
+
+.reveal .roll span:after {
+ color: #fff;
+ background: #f30053; }
+
+/*********************************************
+ * IMAGES
+ *********************************************/
+.reveal section img {
+ margin: 15px 0px;
+ background: rgba(255, 255, 255, 0.12);
+ border: 4px solid #363636;
+ box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); }
+
+.reveal section img.plain {
+ border: 0;
+ box-shadow: none; }
+
+.reveal a img {
+ -webkit-transition: all .15s linear;
+ -moz-transition: all .15s linear;
+ transition: all .15s linear; }
+
+.reveal a:hover img {
+ background: rgba(255, 255, 255, 0.2);
+ border-color: #FF4081;
+ box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); }
+
+/*********************************************
+ * NAVIGATION CONTROLS
+ *********************************************/
+.reveal .controls {
+ color: #FF4081; }
+
+/*********************************************
+ * PROGRESS BAR
+ *********************************************/
+.reveal .progress {
+ background: rgba(0, 0, 0, 0.2);
+ color: #FF4081; }
+
+.reveal .progress span {
+ -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
+ -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
+ transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
diff --git a/website/themes/reveal-hugo/static/reveal-hugo/themes/sunblind.css b/website/themes/reveal-hugo/static/reveal-hugo/themes/sunblind.css
new file mode 100644
index 0000000..2a48fbd
--- /dev/null
+++ b/website/themes/reveal-hugo/static/reveal-hugo/themes/sunblind.css
@@ -0,0 +1,333 @@
+/**
+
+ [ sunblind ]
+
+ A blindingly sunny theme for Reveal.js with Lora + Leto fonts and a colorful border.
+ By Josh Dzielak, https://dzello.com/, License MIT
+
+ The bold border is optional and requires some HTML. To use it:
+
+ 1. Add 4 divs to your HTML page:
+ <div class="line top"></div>
+ <div class="line bottom"></div>
+ <div class="line left"></div>
+ <div class="line right"></div>
+
+ 2. Set { margin: 0.2 } in the Reveal.js initializer to make sure
+ your presentation content doesn't collide with the frame.
+
+ Like the theme but don't like the colors? Don't fret. Just change
+ $borderColor and/or $linkColor below to something else and rebuild.
+
+ Or if you don't want to rebuild the theme just override the .line background
+ property with some CSS:
+
+ .line {
+ background: <new-color>;
+ }
+
+*/
+@import url(https://fonts.googleapis.com/css?family=Lato:300,700);
+@import url(https://fonts.googleapis.com/css?family=Lora:700);
+section.has-light-background, section.has-light-background h1, section.has-light-background h2, section.has-light-background h3, section.has-light-background h4, section.has-light-background h5, section.has-light-background h6 {
+ color: #141414; }
+
+.reveal .controls {
+ right: 50px;
+ bottom: 50px; }
+
+.line {
+ content: '';
+ position: fixed;
+ background: #f6f195;
+ z-index: 105; }
+ .line.top {
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: 30px; }
+ @media (max-width: 840px) {
+ .line.top {
+ height: 15px; } }
+ .line.bottom {
+ left: 0;
+ top: auto;
+ bottom: 0;
+ width: 100%;
+ height: 30px; }
+ @media (max-width: 840px) {
+ .line.bottom {
+ height: 15px; } }
+ .line.left {
+ left: 0;
+ top: 0;
+ width: 30px;
+ height: 200%; }
+ @media (max-width: 840px) {
+ .line.left {
+ width: 15px; } }
+ .line.right {
+ left: auto;
+ right: 0;
+ top: 0;
+ width: 30px;
+ height: 200%; }
+ @media (max-width: 840px) {
+ .line.right {
+ width: 15px; } }
+
+/*********************************************
+ * GLOBAL STYLES
+ *********************************************/
+body {
+ background: #fff;
+ background-color: #fff; }
+
+.reveal {
+ font-family: "Lato", serif;
+ font-size: 32px;
+ font-weight: normal;
+ color: #363636; }
+
+::selection {
+ color: #fff;
+ background: #ffc0d5;
+ text-shadow: none; }
+
+::-moz-selection {
+ color: #fff;
+ background: #ffc0d5;
+ text-shadow: none; }
+
+.reveal .slides > section,
+.reveal .slides > section > section {
+ line-height: 1.3;
+ font-weight: inherit; }
+
+/*********************************************
+ * HEADERS
+ *********************************************/
+.reveal h1,
+.reveal h2,
+.reveal h3,
+.reveal h4,
+.reveal h5,
+.reveal h6 {
+ margin: 0 0 20px 0;
+ color: #141414;
+ font-family: "Lora", sans-serif;
+ font-weight: 700;
+ line-height: 1.2;
+ letter-spacing: normal;
+ text-transform: uppercase;
+ text-shadow: none;
+ word-wrap: break-word; }
+
+.reveal h1 {
+ font-size: 2em; }
+
+.reveal h2 {
+ font-size: 1.8em; }
+
+.reveal h3 {
+ font-size: 1.4em; }
+
+.reveal h4 {
+ font-size: 1.2em; }
+
+.reveal h1 {
+ text-shadow: none; }
+
+/*********************************************
+ * OTHER
+ *********************************************/
+.reveal p {
+ margin: 20px 0;
+ line-height: 1.3; }
+
+/* Ensure certain elements are never larger than the slide itself */
+.reveal img,
+.reveal video,
+.reveal iframe {
+ max-width: 95%;
+ max-height: 95%; }
+
+.reveal strong,
+.reveal b {
+ font-weight: bold; }
+
+.reveal em {
+ font-style: italic; }
+
+.reveal ol,
+.reveal dl,
+.reveal ul {
+ display: inline-block;
+ text-align: left;
+ margin: 0 0 0 1em; }
+
+.reveal ol {
+ list-style-type: decimal; }
+
+.reveal ul {
+ list-style-type: disc; }
+
+.reveal ul ul {
+ list-style-type: square; }
+
+.reveal ul ul ul {
+ list-style-type: circle; }
+
+.reveal ul ul,
+.reveal ul ol,
+.reveal ol ol,
+.reveal ol ul {
+ display: block;
+ margin-left: 40px; }
+
+.reveal dt {
+ font-weight: bold; }
+
+.reveal dd {
+ margin-left: 40px; }
+
+.reveal blockquote {
+ display: block;
+ position: relative;
+ width: 70%;
+ margin: 20px auto;
+ padding: 5px;
+ font-style: italic;
+ background: rgba(255, 255, 255, 0.05);
+ box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2); }
+
+.reveal blockquote p:first-child,
+.reveal blockquote p:last-child {
+ display: inline-block; }
+
+.reveal q {
+ font-style: italic; }
+
+.reveal pre {
+ display: block;
+ position: relative;
+ width: 90%;
+ margin: 20px auto;
+ text-align: left;
+ font-size: 0.55em;
+ font-family: monospace;
+ line-height: 1.2em;
+ word-wrap: break-word;
+ box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }
+
+.reveal code {
+ font-family: monospace;
+ text-transform: none; }
+
+.reveal pre code {
+ display: block;
+ padding: 5px;
+ overflow: auto;
+ max-height: 400px;
+ word-wrap: normal; }
+
+.reveal table {
+ margin: auto;
+ border-collapse: collapse;
+ border-spacing: 0; }
+
+.reveal table th {
+ font-weight: bold; }
+
+.reveal table th,
+.reveal table td {
+ text-align: left;
+ padding: 0.2em 0.5em 0.2em 0.5em;
+ border-bottom: 1px solid; }
+
+.reveal table th[align="center"],
+.reveal table td[align="center"] {
+ text-align: center; }
+
+.reveal table th[align="right"],
+.reveal table td[align="right"] {
+ text-align: right; }
+
+.reveal table tbody tr:last-child th,
+.reveal table tbody tr:last-child td {
+ border-bottom: none; }
+
+.reveal sup {
+ vertical-align: super; }
+
+.reveal sub {
+ vertical-align: sub; }
+
+.reveal small {
+ display: inline-block;
+ font-size: 0.6em;
+ line-height: 1.2em;
+ vertical-align: top; }
+
+.reveal small * {
+ vertical-align: top; }
+
+/*********************************************
+ * LINKS
+ *********************************************/
+.reveal a {
+ color: #FF4081;
+ text-decoration: none;
+ -webkit-transition: color .15s ease;
+ -moz-transition: color .15s ease;
+ transition: color .15s ease; }
+
+.reveal a:hover {
+ color: #ff8db3;
+ text-shadow: none;
+ border: none; }
+
+.reveal .roll span:after {
+ color: #fff;
+ background: #f30053; }
+
+/*********************************************
+ * IMAGES
+ *********************************************/
+.reveal section img {
+ margin: 15px 0px;
+ background: rgba(255, 255, 255, 0.12);
+ border: 4px solid #363636;
+ box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); }
+
+.reveal section img.plain {
+ border: 0;
+ box-shadow: none; }
+
+.reveal a img {
+ -webkit-transition: all .15s linear;
+ -moz-transition: all .15s linear;
+ transition: all .15s linear; }
+
+.reveal a:hover img {
+ background: rgba(255, 255, 255, 0.2);
+ border-color: #FF4081;
+ box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); }
+
+/*********************************************
+ * NAVIGATION CONTROLS
+ *********************************************/
+.reveal .controls {
+ color: #FF4081; }
+
+/*********************************************
+ * PROGRESS BAR
+ *********************************************/
+.reveal .progress {
+ background: rgba(0, 0, 0, 0.2);
+ color: #FF4081; }
+
+.reveal .progress span {
+ -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
+ -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
+ transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
diff --git a/website/themes/reveal-hugo/theme.toml b/website/themes/reveal-hugo/theme.toml
new file mode 100644
index 0000000..3a2b1b8
--- /dev/null
+++ b/website/themes/reveal-hugo/theme.toml
@@ -0,0 +1,15 @@
+name = "reveal-hugo"
+license = "MIT"
+licenselink = "https://github.com/dzello/reveal-hugo/blob/master/LICENSE"
+homepage = "https://reveal-hugo.dzello.com/"
+tags = ["presentation", "revealjs"]
+features = ["presentation"]
+
+[author]
+name = "Josh Dzielak"
+homepage = "https://dzello.com/"
+
+[original]
+name = "reveal.js"
+homepage = "https://revealjs.com"
+repo = "https://github.com/hakimel/reveal.js/" \ No newline at end of file