Merge pull request #1 from recanman/main

Migrate to Hugo
This commit is contained in:
rottenwheel 2024-07-02 22:18:27 +00:00 committed by GitHub
commit 42934128fa
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
41 changed files with 2224 additions and 0 deletions

28
README.md Normal file
View file

@ -0,0 +1,28 @@
## Revuo XMR Theme
The Revuo XMR theme is a customized theme for the Revuo Monero newsletter.
[Emerald](https://github.com/rottenwheel/revuo-monero-theme/) is the theme used by Revuo. It is a minimal and mobile-first blog theme, originally for Jekyll, ported to Hugo by [recanman](https://github.com/recanman).
## Setup & usage
Make sure you have Go and Hugo installed. If not, follow the instructions on the [Hugo website](https://gohugo.io/getting-started/installing/).
To use the Revuo XMR theme, clone the repository as a submodule and add it to your Hugo site:
```bash
git submodule add https://github.com/rottenwheel/revuoxmrtheme.git themes/revuo-xmr
```
Then, add the theme to your site's configuration file:
```toml
theme = "revuo-xmr"
```
## Customization
Please see [config.toml.example](./config.toml.example) for an example configuration file. You can copy this file to your site's root directory and rename it to `config.toml`.
## License
Revuo Monero is released under GNU Affero General Public License v3.0. See [LICENSE](./LICENSE) for more information.

89
archetypes/weekly.md Normal file
View file

@ -0,0 +1,89 @@
---
type: weekly
layout: weekly
date: "{{ .Date }}"
issuenumber: {{ len (readDir "content/weekly") }}
title: "Issue {{ len (readDir "content/weekly") }}: {{ dateFormat "January 02" .Date }} - {{ dateFormat "02, 2006" ((.Date | time.AsTime).AddDate 0 0 7) }}"
---
### Table of Contents:
- [Recent News](#news)
- [Upcoming Events](#events)
- [CCS Proposals](#proposals)
- [Price & Blockchain Stats](#stats)
- [Volunteer Opportunities](#volunteer)
- [Donate](#donate)
### Recent News
{{% newsbyte %}}
Haveno DEX [v1.0.8](https://github.com/haveno-dex/haveno/releases/tag/1.0.8) adding scripts to run Haveno on Tails OS; miscellaneous translations; general enhancements and a few bug fixes. Haveno Reto [v1.0.8](https://github.com/retoaccess1/haveno-reto/releases/tag/v1.0.8).
{{% /newsbyte %}}
### Upcoming Events
{{% event "July 1, 2024 (Monday) - 18:00 UTC" %}}
Seraphis Wallet Workgroup Meeting - [#no-wallet-left-behind](irc://irc.libera.chat/#no-wallet-left-behind) IRC channel; Matrix [room](https://matrix.to/#/#no-wallet-left-behind:monero.social).
{{% /event %}}
### CCS Proposal Ideas
Below you can find some CCS proposal ideas open for discussion.
{{% ccs_item link="jeffro256-full-time-2024Q3" author="jeffro256" %}}
full-time development 2024Q3
{{% /ccs_item %}}
### CCS Proposals Need Funding
{{% ccs_item link="jeffro256-full-time-2024Q3" author="jeffro256" goal=146 raised=30.04 %}}
full-time development 2024Q3
{{% /ccs_item %}}
### Price & Blockchain Stats
###### Blockchain Stats
{{< bc_stats
height="0"
hashrate="0 GH/s"
txs_per_block="0"
avg_txs_per_day="0"
block_reward="0.6"
date="January 1, 2024"
>}}
###### XMR Blocks Distribution in last 1000 blocks
![Hashrate Pool Distribution Pie Chart](./hash.png)
###### Price & Performance
{{< price_performance
market_cap="3,209,863,981"
street_price="190.07"
table_date="06/13/24"
price_usd="173.67,+5.4,+29.9,+24.7"
price_eur="160.61,+6.8,+30.9,+25.4"
price_btc="0.00258,+12.4,+19.8,-51.9"
date="June 6, 2024"
>}}
###### XMR Price Graph
![XMR Price Graph](./price.png)
Sources: [miningpoolstats.stream](https://miningpoolstats.stream/monero); [bitinfocharts.com](https://bitinfocharts.com/monero/); [coingecko.com](https://www.coingecko.com/en/coins/monero); [localmonero.co blocks](https://localmonero.co/blocks); [monero.boats](https://monero.boats/).
{{< volunteer >}}
{{% volunteer_item title="Test Monero Core Software" link="https://github.com/monero-project/monero" %}}
Anyone with moderate technical ability is encouraged to try to build and run Monero nightlies. Do not trust it with your Monero, but feel free to open an Issue on GitHub as problems arise. Instructions to build on your OS of choice can be found here.
{{% /volunteer_item %}}
{{< /volunteer >}}
{{< support />}}

75
assets/css/base.scss Normal file
View file

@ -0,0 +1,75 @@
/*
* Emerald is a simple blog theme built for Jekyll.
*/
/*- Base reset -*/
* {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
html,
body,
h1,
h2,
h3,
h4,
h5,
h6,
p,
ul,
ol,
li,
img {
margin: 0;
padding: 0;
border: 0;
}
/*- Base color -*/
$main-color: #E9E9E9;
$background-color: #0F0F0F;
$text-color: #888888;
/*- Base settings -*/
html {
background-color: $background-color;
font-size: 16px;
scroll-behavior: smooth;
@media (min-width: 940px) {
font-size: 18px;
}
line-height: 1.5;
color: $text-color;
}
/*- Link -*/
a {
color: $main-color;
outline: 0;
border-bottom: 2px dotted #6a6d72;
text-decoration: none;
font-weight: 700;
-webkit-transition: all .3s ease;
-moz-transition: all .3s ease;
-ms-transition: all .3s ease;
-o-transition: all .3s ease;
transition: all .3s ease;
&:hover,
&:focus {
color: #999999;
border-bottom: 2px dotted #333333;
}
}
a#nav-menu {
border-bottom: none;
}

417
assets/css/custom.scss Normal file
View file

@ -0,0 +1,417 @@
p.note {
font-size: 0.7em;
margin-bottom: 1rem;
margin-top: -1rem;
}
.bcstats {
background-color: var(--block-bg-color);
margin-bottom: 1.3334rem;
border-radius: 2px;
}
.bcstats p {
padding: 1em;
margin: 0;
}
.bcstats p:nth-child(even) {
background-color: var(--blog-bg-color-secondary);
}
$breakpoint-alpha: 480px; // adjust to your needs
p.table-title {
margin: 0;
padding-bottom: 0.5em;
font-weight: 700;
font-size: 16px;
padding-top: 0.5em;
}
.price-table,
.moneroversary-table {
margin: 0 0 1.3334rem 0;
width: 100%; // adjust to your needs
background: #45494f;
color: #efefef;
border-radius: 2px;
overflow: hidden;
border-spacing: 0;
background-color: var(--block-bg-color);
@media (min-width: $breakpoint-alpha) {
color: #45494f;
tr.row3 {
background-color: var(--blog-bg-color-secondary);
}
}
tr {
border-top: 2px solid #fff;
border-bottom: 2px solid #fff;
}
tr.row1 {
background-color: var(--block-bg-color-heading);
}
th {
display: none;
}
td {
display: block;
&:first-child {
padding-top: .5em;
}
&:last-child {
padding-bottom: .5em;
}
&:before {
content: attr(data-th)": "; // who knew you could do this? The internet, that's who.
font-weight: bold;
// optional stuff to make it look nicer
width: 6.5em; // magic number :( adjust according to your own content
display: inline-block;
// end options
@media (min-width: $breakpoint-alpha) {
display: none;
}
}
}
th,
td {
text-align: left;
margin: .5em 1em;
@media (min-width: $breakpoint-alpha) {
display: table-cell;
padding: .25em .5em;
padding: 1em !important;
&:first-child {
padding-left: 0;
}
&:last-child {
padding-right: 0;
}
}
}
th,
td:before {
color: var(--link-color);
}
td.green {
color: #66d166;
@media (min-width: $breakpoint-alpha) {
color: #51a751;
}
}
td.red {
color: #e36f6e;
@media (min-width: $breakpoint-alpha) {
color: #d83231;
}
}
}
.moneroversary-table {
margin: 1.3334rem 0 1.3334rem 0;
@media (max-width: $breakpoint-alpha) {
background: #f0f0f0;
color: #45494f;
}
th,
td:before {
@media (max-width: $breakpoint-alpha) {
color: #45494f;
}
}
}
.moneroversary-table tr.row1 {
background-color: #db8b55;
}
.content h3 {
margin-top: 3rem;
background-color: #45494f;
color: white;
padding-left: 1rem;
margin-bottom: 1rem;
border-radius: 2px;
}
.content h3.orange {
background-color: #db8b55;
}
.content ul,
.content ol {
line-height: 1.9;
}
.newsbyte,
.event {
padding: 1rem;
background-color: var(--block-bg-color);
margin-top: 1rem;
}
.newsbyte:first-of-type,
.event:first-of-type {
margin-top: 0;
}
.newsbyte:after {
display: none;
content: '';
width: 100%;
height: 1px;
margin-top: 2rem;
background-color: #d5d5d5;
}
.newsbyte h4,
h4.stat {
font-size: 18px;
font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif;
font-weight: 700;
@media (max-width: 480px) {
font-size: 16px;
}
}
h6 {
font-size: 18px;
font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif;
font-weight: 700;
@media (max-width: 480px) {
font-size: 16px;
}
}
.newsbyte p,
.event p {
margin-bottom: 0;
}
p.date {
margin-bottom: 0.2em;
font-weight: 700;
}
.proposal {
margin-bottom: 1rem;
padding: 1em;
background-color: var(--block-bg-color);
}
.proposal p {
margin-bottom: 0;
}
.proposal p:first-child {
padding-bottom: 0.5rem;
}
.proposal p a {
line-height: 1.7;
}
img.merchant-img {
width: 15rem;
margin: 0 0 24px 0;
}
img#pepperworks {
margin-top: 40px;
}
img#openpriv {
margin-bottom: 0;
}
img#veracrypt {
width: 10rem;
margin-top: 40px;
}
p.address {
background-color: var(--block-bg-color);
color: var(--link-color);
font-weight: bold;
word-wrap: break-word;
padding: 1.5rem;
margin-top: 1.5rem;
border-radius: 2px;
-webkit-touch-callout: all;
-webkit-user-select: all;
-khtml-user-select: all;
-moz-user-select: all;
-ms-user-select: all;
user-select: all;
}
a.qr {
display: inline-block;
border: none;
border-radius: 10px;
}
a.qr img {
margin-bottom: 0;
vertical-align: middle;
}
img.merchant-img {
margin-left: auto;
margin-right: auto;
}
img.fob-img {
margin-left: auto;
margin-right: auto;
width: 8rem;
background-color: rgba(0, 0, 0, 0.75);
;
padding: 1rem;
}
img.wikileaks-img {
margin-left: auto;
margin-right: auto;
width: 10rem;
}
img#njalla {
background-color: #01051F;
padding: 1rem;
}
p.text-lead {
margin-bottom: 0;
}
#post-page img.img-lead,
#post-page p.text-lead {
display: none;
}
img.gratuitas {
width: 10rem;
}
img.localmonero {
width: 10rem;
margin-bottom: -1rem;
}
.sponsors {
box-sizing: border-box;
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-flex: 0;
-ms-flex: 0 1 auto;
flex: 0 1 auto;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
-ms-flex-direction: row;
flex-direction: row;
-ms-flex-wrap: wrap;
flex-wrap: wrap;
-webkit-box-pack: center;
-ms-flex-pack: center;
justify-content: center;
text-align: center;
}
.sponsor {
box-sizing: border-box;
-webkit-box-flex: 0;
-ms-flex: 0 0 auto;
flex: 0 0 auto;
flex-basis: auto;
@media (max-width: 520px) {
-ms-flex-preferred-size: 100%;
flex-basis: 100%;
max-width: 100%;
}
}
img.dvchain {
height: 9rem;
margin-left: 3rem;
@media (max-width: 520px) {
margin-left: auto;
margin-top: 1rem;
height: auto;
width: 13rem;
}
}
// Periodical
.revuo-classes a {
padding: 1rem 2rem;
width: 11rem;
}
.nav-active {
color: var(--head-nav-text-color) !important;
}
// Typography for Periodical
.hted-head {
margin: 2.5rem 0 1.3334rem 0;
background: #d9dadb;
color: #222222;
width: 100%;
border-radius: 2px;
padding: 1em;
text-align: left;
}
#post-page h2 {
line-height: 1.3;
}
.text-center {
text-align: center;
}
.page-numbers-display {
display: inline-block;
margin-left: 1rem;
margin-right: 1rem;
}
html {
scroll-behavior: smooth;
}

397
assets/css/layout.scss Normal file
View file

@ -0,0 +1,397 @@
/* -- General Layout -- */
/* Required for footer to stick to the bottom */
html,
body {
height: 100%;
}
/* Navigation */
#nav,
#nav-left {
a {
display: block;
color: $background-color;
padding: 0.33334em 0;
font-size: 1.5em;
font-weight: 400;
border-bottom: none;
@media (min-width: 940px) {
font-size: 1em;
}
&:hover {
background-color: lighten($main-color, 5%);
}
}
span {
font-weight: 200;
}
}
#nav {
@include nav-position(right);
}
#nav-left {
@include nav-position(left);
}
/* Toggle class to open menu */
#nav.menu-open {
@include open(-14rem);
}
#nav-left.menu-open-left {
@include open(14rem);
}
#nav-list {
.nav-actions-static {
position: absolute;
right: 1px;
left: 1px;
bottom: 1%;
}
.nav-actions-static,
.nav-actions-flex {
gap: 12px;
justify-content: center;
align-items: center;
/* only *-flex will be overritten if the screen is small */
display: flex;
.icon {
padding: 0;
>img {
margin-bottom: 0;
}
}
}
/* Separator after menu */
&:after {
display: block;
content: '';
width: 5rem;
height: 1px;
margin: 23px auto;
background-color: $background-color;
}
}
/* Icon menu */
#nav-menu {
@include icon-position(right);
}
#nav-menu-left {
@include icon-position(left);
}
#menu {
height: 4px;
width: 1.5em;
background-color: lighten($text-color, 35%);
margin-top: 8px;
&:after,
&:before {
content: "";
display: block;
position: relative;
height: 4px;
width: 1.5em;
background-color: lighten($text-color, 35%);
transition: all 0.3s ease-in;
}
&:before {
top: -8px;
}
&:after {
top: 4px;
}
&.btn-close {
background: none;
}
&.btn-close:before {
top: 0;
-webkit-transform: rotate(-45deg);
-moz-transform: rotate(-45deg);
-ms-transform: rotate(-45deg);
transform: rotate(-45deg);
background-color: $background-color;
}
&.btn-close:after {
top: -4px;
-webkit-transform: rotate(45deg);
-moz-transform: rotate(45deg);
-ms-transform: rotate(45deg);
transform: rotate(45deg);
background-color: $background-color;
}
}
/* Main content */
.fixed {
position: fixed;
width: 100%;
@media (min-width: 940px) {
position: static;
}
}
#container {
margin: 0 auto;
max-width: 730px;
padding: 0 1.5rem;
}
#header {
text-align: center;
padding: 24px 0;
position: relative;
margin-bottom: 23px;
@media (max-width: 480px) {
padding-top: 10px;
}
a {
text-decoration: none;
color: $text-color;
display: inline-block;
border-bottom: none;
}
img {
max-height: 100px;
margin: 0 auto;
display: block;
@media (max-width: 940px) {
max-height: 90px;
}
@media (max-width: 600px) {
max-height: 60px;
}
@media (max-width: 480px) {
max-height: 50px;
}
}
h1 {
font-family: 'Bebas Neue', sans-serif; //Emerald logo font
font-weight: 400;
font-size: 4.5em;
color: #d26e2b;
@media (max-width: 940px) {
padding: 0;
}
@media (max-width: 600px) {
font-size: 3em;
}
@media (max-width: 480px) {
font-size: 2.5em;
}
}
&:after {
display: none;
content: '';
width: 5rem;
height: 1px;
margin: 23px auto;
background-color: lighten($text-color, 70%);
@media (max-width: 480px) {
margin: 0.5rem auto;
}
}
@media (max-width: 600px) {
padding-bottom: 0;
}
}
/* Posts */
#posts {
li {
list-style-type: none;
padding-bottom: 0.66667em;
}
}
#post-page {
margin-bottom: 1.5em;
@media (min-width: 940px) {
margin-bottom: 1.3334em;
}
}
.post+.post:before {
display: block;
content: '';
width: 5rem;
height: 1px;
margin: 23px auto;
background-color: lighten($background-color, 70%) !important;
}
.by-line {
display: block;
color: lighten($text-color, 25%);
line-height: 1.5em;
/* 24px/16px */
margin-bottom: 1.5em;
/* 24px/16px */
padding-top: 0.5em;
font-weight: 200;
@media (min-width: 940px) {
display: block;
color: lighten($text-color, 25%);
line-height: 1.3334em;
/* 24px/18px */
margin-bottom: 1.3334em;
/* 24px/18px */
font-weight: 200;
}
}
.by-line-post {
display: block;
color: lighten($text-color, 25%);
line-height: 1.5em;
/* 24px/16px */
padding-top: 0.5em;
font-weight: 200;
@media (min-width: 940px) {
display: block;
color: lighten($text-color, 25%);
line-height: 1.3334em;
/* 24px/18px */
margin-bottom: 1.3334em;
/* 24px/18px */
font-weight: 200;
}
}
img {
max-width: 100%;
display: block;
margin: 0 auto;
margin-bottom: 24px;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
-ms-border-radius: 4px;
border-radius: 4px;
}
img[title="Emerald"] {
box-shadow: 0 2px 6px #ddd;
}
code {
color: lighten($text-color, 35%);
background-color: lighten($background-color, 35%);
}
/* Set the vertical rhythm (and padding-left) for lists inside post content */
.content ul,
.content ol {
line-height: 1.5em;
/* 24px/16px */
padding-left: 1.5em;
@media (min-width: 940px) {
line-height: 1.33334em;
/* 24px/18px */
}
}
/* Paginator */
.pagination {
text-align: center;
margin: 2.666668em;
span {
background-color: darken($background-color, 5%);
color: $text-color;
}
a:hover {
background-color: lighten($main-color, 5%);
}
}
.page-item {
background-color: $main-color;
color: $background-color;
padding: 4px 8px;
font-weight: 400;
padding: 0.5em 1em;
border-bottom: none;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
-ms-border-radius: 4px;
border-radius: 4px;
}
.page-item:hover,
.page-item:active,
.page-item:focus {
border-bottom: none;
}
/* Footer */
footer {
background-color: $main-color;
color: $background-color;
text-align: center;
padding: 0.6667em 0;
}
#wrap {
min-height: 100%;
position: relative;
padding-bottom: 140px;
}
.footer {
padding: 25px 0;
background-color: $main-color;
color: $background-color;
text-align: center;
position: absolute;
width: 100%;
bottom: 0;
}

181
assets/css/main.scss Normal file
View file

@ -0,0 +1,181 @@
//Import
@import "base", "mixin", "typography", "layout", "syntax.scss", "custom.scss";
// Default Style (Dark)
:root {
--primary-color: #888888;
--secondary-color: #666666;
--font-color: #cecece;
--link-color: #e6e6e6;
--bg-color: #0f0f0f;
--heading-color: #454545;
--block-bg-color: #2f3234;
--block-bg-color-secondary: #444444;
--block-bg-color-heading: #333333;
--table-color: #cecece;
--head-nav-bg-color: transparent;
--head-nav-text-color: #d56f2a;
--menu-color: #e1e1e1;
--license-color: #666666;
}
.nojs-toggle {
display: none;
}
// BEGIN theme switcher
#main-theme-switcher {
left: 25px;
top: 35px;
z-index: 999;
display: block !important;
position: absolute !important;
transition: all .3s ease;
}
#theme-switcher:checked~* {
--primary-color: #666666;
--secondary-color: #555555;
--font-color: #555555;
--link-color: #444444;
--bg-color: #f0f0f0;
--heading-color: #666666;
--block-bg-color: #d7d7d7;
--block-bg-color-secondary: #c0c0c0;
--block-bg-color-heading: #a5a5a5;
--table-color: #000000;
--head-nav-bg-color: transparent;
--head-nav-text-color: #d56f2a;
--menu-color: #202225;
--license-color: #666666;
}
#theme-switcher:checked~.switch .slider {
background-color: #d56f2a;
}
#theme-switcher:checked~.switch .slider::before {
-webkit-transform: translateX(26px);
-moz-transform: translateX(26px);
-ms-transform: translateX(26px);
transform: translateX(26px);
}
@media (max-width: 480px) {
#main-theme-switcher {
top: 19px;
right: 10px;
}
}
// END theme switcher
// BEGIN menu toggle
#menu-toggle:checked~#nav {
-webkit-transform: translateX(-14rem);
-moz-transform: translateX(-14rem);
-ms-transform: translateX(-14rem);
transform: translateX(-14rem);
width: 100%;
}
#menu-toggle:checked~.menu-toggle #menu {
background: none;
transition: all 0.1s ease-in;
}
#menu-toggle:checked~.menu-toggle #menu::before {
top: 0;
-webkit-transform: rotate(-45deg);
-moz-transform: rotate(-45deg);
-ms-transform: rotate(-45deg);
transform: rotate(-45deg);
background-color: #0F0F0F;
}
#menu-toggle:checked~.menu-toggle #menu::after {
top: -4px;
-webkit-transform: rotate(45deg);
-moz-transform: rotate(45deg);
-ms-transform: rotate(45deg);
transform: rotate(45deg);
background-color: #0F0F0F;
}
@media (min-width: 940px) {
#menu-toggle:checked~#nav {
width: 30%;
}
/* Sets burger menu for small screens */
#header {
.action-container {
display: flex !important;
}
}
#nav-list {
.nav-actions-flex {
display: none !important;
}
}
}
// END menu toggle
#wrap {
background-color: var(--bg-color);
color: var(--font-color);
}
h1 {
color: var(--secondary-color);
}
a {
color: var(--link-color);
}
.moneroversary-table,
.price-table {
color: var(--table-color);
}
time.by-line,
p.by-line-post {
color: var(--table-color);
}
#menu,
#menu::after,
#menu::before {
background-color: var(--menu-color);
}
#header .action-container {
&--left {
left: 25px;
top: 35px;
}
&--right {
right: 80px;
top: 35px;
}
align-items: center;
display: none;
flex-direction: row;
gap: 12px;
height: 36px;
position: absolute;
}
#header {
a.rss,
a.donate {
display: block;
padding-bottom: 0;
}
}

49
assets/css/mixin.scss Normal file
View file

@ -0,0 +1,49 @@
// -- Mixins -- //
// Nav menu
@mixin icon-position($position) {
display: block;
position: absolute;
top: 35px;
#{$position}: 25px;
z-index: 10;
height: 36px;
padding: 8px;
// background-color: rgba(240, 240, 240, .6);
@media (max-width: 480px) {
top: 15px;
right: 10px;
}
}
@mixin open($x) {
-webkit-transform: translateX($x);
-moz-transform: translateX($x);
-ms-transform: translateX($x);
transform: translateX($x);
width: 100%;
@media (min-width: 940px) {
width: 30%;
}
}
@mixin nav-position($position) {
width: 14rem;
position: fixed;
background-color: $main-color;
top: 0;
bottom: 0;
#{$position}: -14rem;
color: $background-color;
opacity: 0.95;
-webkit-transition: all 0.3s ease-in;
-moz-transition: all 0.3s ease-in;
-ms-transition: all 0.3s ease-in;
transition: all 0.3s ease-in;
z-index: 1;
padding: 72px 0;
text-align: center;
}

66
assets/css/syntax.scss Normal file
View file

@ -0,0 +1,66 @@
/*
* A Github stylesheet to highlight code snippet
* https://github.com/mojombo/tpw/blob/master/css/syntax.css
*/
// .highlight { background-color: #FFF; }
.lineno { color: darken($background-color, 25%); margin-right: 1em; }
.highlight .c { color: #999988; font-style: italic } /* Comment */
.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
.highlight .k { font-weight: bold } /* Keyword */
.highlight .o { font-weight: bold } /* Operator */
.highlight .cm { color: #999988; font-style: italic } /* Comment.Multiline */
.highlight .cp { color: #999999; font-weight: bold } /* Comment.Preproc */
.highlight .c1 { color: #999988; font-style: italic } /* Comment.Single */
.highlight .cs { color: #999999; font-weight: bold; font-style: italic } /* Comment.Special */
.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */
.highlight .gd .x { color: #000000; background-color: #ffaaaa } /* Generic.Deleted.Specific */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .gr { color: #aa0000 } /* Generic.Error */
.highlight .gh { color: #999999 } /* Generic.Heading */
.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */
.highlight .gi .x { color: #000000; background-color: #aaffaa } /* Generic.Inserted.Specific */
.highlight .go { color: #888888 } /* Generic.Output */
.highlight .gp { color: #555555 } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #aaaaaa } /* Generic.Subheading */
.highlight .gt { color: #aa0000 } /* Generic.Traceback */
.highlight .kc { font-weight: bold } /* Keyword.Constant */
.highlight .kd { font-weight: bold } /* Keyword.Declaration */
.highlight .kp { font-weight: bold } /* Keyword.Pseudo */
.highlight .kr { font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #445588; font-weight: bold } /* Keyword.Type */
.highlight .m { color: #009999 } /* Literal.Number */
.highlight .s { color: #d14 } /* Literal.String */
.highlight .na { color: #008080 } /* Name.Attribute */
.highlight .nb { color: #0086B3 } /* Name.Builtin */
.highlight .nc { color: #445588; font-weight: bold } /* Name.Class */
.highlight .no { color: #008080 } /* Name.Constant */
.highlight .ni { color: #800080 } /* Name.Entity */
.highlight .ne { color: #990000; font-weight: bold } /* Name.Exception */
.highlight .nf { color: #990000; font-weight: bold } /* Name.Function */
.highlight .nn { color: #555555 } /* Name.Namespace */
.highlight .nt { color: #000080 } /* Name.Tag */
.highlight .nv { color: #008080 } /* Name.Variable */
.highlight .ow { font-weight: bold } /* Operator.Word */
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
.highlight .mf { color: #009999 } /* Literal.Number.Float */
.highlight .mh { color: #009999 } /* Literal.Number.Hex */
.highlight .mi { color: #009999 } /* Literal.Number.Integer */
.highlight .mo { color: #009999 } /* Literal.Number.Oct */
.highlight .sb { color: #d14 } /* Literal.String.Backtick */
.highlight .sc { color: #d14 } /* Literal.String.Char */
.highlight .sd { color: #d14 } /* Literal.String.Doc */
.highlight .s2 { color: #d14 } /* Literal.String.Double */
.highlight .se { color: #d14 } /* Literal.String.Escape */
.highlight .sh { color: #d14 } /* Literal.String.Heredoc */
.highlight .si { color: #d14 } /* Literal.String.Interpol */
.highlight .sx { color: #d14 } /* Literal.String.Other */
.highlight .sr { color: #009926 } /* Literal.String.Regex */
.highlight .s1 { color: #d14 } /* Literal.String.Single */
.highlight .ss { color: #990073 } /* Literal.String.Symbol */
.highlight .bp { color: #999999 } /* Name.Builtin.Pseudo */
.highlight .vc { color: #008080 } /* Name.Variable.Class */
.highlight .vg { color: #008080 } /* Name.Variable.Global */
.highlight .vi { color: #008080 } /* Name.Variable.Instance */
.highlight .il { color: #009999 } /* Literal.Number.Integer.Long */

202
assets/css/typography.scss Normal file
View file

@ -0,0 +1,202 @@
/*- Typography -*/
//
// Based on the typographic scale: 12, 14, 16, 18, 21, 24, 36, 48, 60, 72.
//
@font-face {
font-family: 'Bebas Neue';
src: url('../font/BebasNeue-Regular.woff') format('woff'),
/* Pretty Modern Browsers */
}
body {
font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif;
letter-spacing: 0.01em;
-webkit-font-smoothing: antialiased;
text-rendering: optimizeLegibility;
}
/*- Typography for medium and small screen, based on 16px font-size -*/
p,
ul,
ol {
font-size: 18px;
line-height: 1.7em;
/* 24px/16px */
margin-bottom: 1.5em;
/* 24px/16px */
}
h1 {
font-size: 2.25em;
/* 36px/16px */
line-height: 1.3333em;
/* 48px/36px */
padding: 0.33335em 0;
/* 12px/36px * 2 (Use padding instead of margin to maintain proximity with paragraph) */
font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif;
}
h2 {
font-size: 1.5em;
/* 24px/16px */
line-height: 1.5em;
/* 24px/24px */
padding: 1em 0 0 0;
/* 12px/24px * 2, only top (Use padding instead of margin to maintain proximity with paragwithph) */
font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif;
@media (max-width: 480px) {
font-size: 1.6rem;
}
}
h3 {
font-size: 1.3em;
/* 18px/16px */
line-height: 1.7em;
/* 24px/18px */
padding: 0.66667em 0;
/* 12px/18px * 2 (Use padding instead of margin to maintain proximity with paragraph) */
font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif;
}
.hted-head th {
font-size: 1.1em;
}
h4,
h5,
h6 {
font-size: 1.125em;
/* 18px/16px */
line-height: 1.7em;
/* 24px/18px */
padding: 0.66667em 0;
/* 12px/18px * 2 (Use padding instead of margin to maintain proximity with paragraph) */
font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif;
}
h5 {
padding-bottom: 0.3em;
font-size: 1.3em;
margin-bottom: 0.5em;
}
blockquote {
font-style: italic;
margin: 1.5em;
/* 24px/18px */
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
-ms-border-radius: 4px;
border-radius: 4px;
background-color: darken($background-color, 5%);
padding: 0 1.5em;
/* 24px/18px */
p,
ul,
ol {
padding: 1.5em 0;
/* 24px/18px */
}
}
@media (min-width: 520px) {
//Breakpoint set to 940px
p,
ul,
ol {
font-size: 20px;
line-height: 1.7em;
/* 24px/16px */
margin-bottom: 1.5em;
/* 24px/16px */
}
h3,
h5 {
font-size: 1.5em;
}
.hted-head th {
font-size: 1.2em;
}
}
/*- Typography for big screen, based on 18px font-size -*/
@media (min-width: 940px) {
//Breakpoint set to 940px
p,
ul,
ol {
font-size: 1em;
/* 18px */
line-height: 1.7em;
/* 24px/18px */
margin-bottom: 1.3334em;
/* 24px/18px */
}
h1 {
font-size: 2.6667em;
/* 48px/18px */
line-height: 1em;
/* 48px/48px */
padding: 0.25em 0;
/* 12px/48px * 2 (Use padding instead of margin to maintain proximity with paragraph) */
}
h2 {
font-size: 2em;
/* 36px/18px */
line-height: 1.7em;
/* 48px/36px */
padding: 0.66667em 0 0 0;
/* 12px/36px * 2, pnly top (Use padding instead of margin to maintain proximity with paragraph) */
}
h3,
h4,
h5,
h6 {
font-size: 1.7em;
/* 24px/18px */
line-height: 1.7em;
/* 24px/24px */
padding: 0.5em 0;
/* 12px/24px * 2 (Use padding instead of margin to maintain proximity with paragraph) */
}
h5 {
padding-bottom: 0;
font-size: 1.5em;
}
blockquote {
font-style: italic;
margin: 1.3334em;
/* 24px/18px */
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
-ms-border-radius: 4px;
border-radius: 4px;
background-color: darken($background-color, 5%);
padding: 0 1.33334em;
/* 24px/18px */
p,
ul,
ol {
padding: 1.33334em 0;
/* 24px/18px */
}
}
}

93
assets/js/main.js Normal file
View file

@ -0,0 +1,93 @@
// @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat
// The above is a GNU LibreJS specific license declaration. The Expat license is the same as the MIT license.
// See: https://www.gnu.org/software/librejs/free-your-javascript.html#magnet-link-license
const themeVariables = [
// Light theme
[
{ name: 'primary-color', value: '#666666' },
{ name: 'secondary-color', value: '#555555' },
{ name: 'font-color', value: '#555555' },
{ name: 'link-color', value: '#444444' },
{ name: 'bg-color', value: '#f0f0f0' },
{ name: 'heading-color', value: '#666666' },
{ name: 'block-bg-color', value: '#d7d7d7' },
{ name: 'block-bg-color-secondary', value: '#c0c0c0' },
{ name: 'block-bg-color-heading', value: '#a5a5a5' },
{ name: 'table-color', value: '#000000' },
{ name: 'head-nav-bg-color', value: 'transparent' },
{ name: 'head-nav-text-color', value: '#d56f2a' },
{ name: 'menu-color', value: '#202225' },
{ name: 'license-color', value: '#666666' },
],
// Dark theme
[
{ name: 'primary-color', value: '#888888' },
{ name: 'secondary-color', value: '#666666' },
{ name: 'font-color', value: '#cecece' },
{ name: 'link-color', value: '#e6e6e6' },
{ name: 'bg-color', value: '#0f0f0f' },
{ name: 'heading-color', value: '#454545' },
{ name: 'block-bg-color', value: '#2f3234' },
{ name: 'block-bg-color-secondary', value: '#444444' },
{ name: 'block-bg-color-heading', value: '#333333' },
{ name: 'table-color', value: '#cecece' },
{ name: 'head-nav-bg-color', value: 'transparent' },
{ name: 'head-nav-text-color', value: '#d56f2a' },
{ name: 'menu-color', value: '#e1e1e1' },
{ name: 'license-color', value: '#666666' },
]
]
const runThemeSwitcher = () => {
// Saves themes in-between pages to LocalStorage.
const themeSwitcher = document.getElementById('theme-switcher');
const setTheme = e => localStorage.setItem('theme', e.target.checked ? 'dark' : 'light');
const checkTheme = () => themeSwitcher.checked = localStorage.getItem('theme') === 'dark';
// Ensures backward compatibility with IE old versions
if (document.addEventListener) {
themeSwitcher.addEventListener('click', setTheme);
} else if (document.attachEvent) {
themeSwitcher.attachEvent('onclick', setTheme);
}
checkTheme()
// Make the theme switcher in the hamburger menu on mobile devices work.
if (document.body.clientWidth < 940) {
const themeSwitcherLabel = document.getElementById('main-theme-switcher');
const navActionsContainer = document.getElementById('nav-actions-flex-container');
// Move the theme switcher to inside the hamburger menu.
navActionsContainer.appendChild(themeSwitcher);
navActionsContainer.appendChild(themeSwitcherLabel);
themeSwitcherLabel.style.top = '';
themeSwitcherLabel.style.left = '42vw';
const checkMobileTheme = () => {
const theme = themeVariables[themeSwitcher.checked ? 1 : 0];
theme.forEach(variable => {
document.documentElement.style.setProperty(`--${variable.name}`, variable.value);
});
};
// Ensure IE compatibility
if (document.addEventListener) {
themeSwitcher.addEventListener('change', checkMobileTheme);
} else if (document.attachEvent) {
themeSwitcher.attachEvent('onchange', checkMobileTheme);
}
checkMobileTheme();
}
};
if (document.addEventListener) {
document.addEventListener('DOMContentLoaded', runThemeSwitcher);
} else if (document.attachEvent) {
document.attachEvent('onDOMContentLoaded', runThemeSwitcher);
}

66
config.toml.example Normal file
View file

@ -0,0 +1,66 @@
baseURL = 'https://revuo-xmr.com/'
languageCode = 'en-us'
title = 'Revuo Monero'
description = 'Weekly and Quarterly Monero Newsletter'
disablePathToLower = true
canonifyURLs = true
enableRobotsTXT = true
theme = 'revuo-xmr'
[sitemap]
changefreq = "weekly"
priority = 0.5
[imaging]
quality = 50
[params]
dateFormat = "02 Jan 2006"
nav_links = [
{ title = "Revuo Weekly", link = "/" },
{ title = "Revuo Periodical", link = "/periodicals" },
{ title = "Source Code & Licenses", link = "/source" },
{ title = "Support Revuo", link = "/support" }
]
right_icons = [
{ title = "Support", link = "/support", external = false, icon = "donate.png", icon_alt = "Donate" },
{ title = "ATOM Feed", link = "/atom.xml", external = true, icon = "rss_1.png", icon_alt = "ATOM Feed" },
]
mirrors = [
{ title = "Onion", link = "http://revuo75joezkbeitqmas4ab6spbrkr4vzbhjmeuv75ovrfqfp47mtjid.onion/", icon = "tor.png", icon_alt = "Tor" },
{ title = "I2P", link = "http://qve7i3ke5h2mbbyphd7agmh5awzcwulvrvghjvhndkagdbi4mkcq.b32.i2p/", icon = "itoopie.png", icon_alt = "I2P" },
]
bottom_nav_icons = [
{ title = "Nostr", link = "https://primal.net/p/npub1tn8spk9zhxrctg2qym3gj8r7eq2wk6z3phrl8304wc54vt9qam4qvzw6jx", icon = "nostr-icon.png", icon_alt = "Nostr" },
{ title = "x.com", link = "https://xcancel.com/revuoxmr", icon="xcom-icon.png", icon_alt = "x.com" },
{ title = "XMPP MUC", link = "xmpp:revuo-monero@conference.jabbers.one?join", icon = "xmpp.png", icon_alt = "XMPP MUC" },
{ title = "Matrix Room", link = "https://matrix.to/#/#revuo:monero.social", icon = "matrix.png", icon_alt = "Matrix Room" },
]
[params.author]
name = "rottenwheel"
monero_address = "89Esx7ZAoVcD9wiDw57gxgS7m52sFEEbQiFC4qq18YZy3CdcsXvJ67FYdcDFbmYEGK7xerxgmDptd1C2xLstCbgF3RUhSMT"
monero_qr = "img/qr.jpg"
[params.logo]
icon = "revuo-monero-logo.png"
icon_alt = "Revuo Monero Logo"
[params.nav_footer]
title = "Monero Website"
link = "https://www.getmonero.org/"
[params.sponsor]
introduction = "Infrastructure sponsored by"
link = "https://www.digilol.net"
icon = "digilol.png"
icon_alt = "Digilol"
[markup]
[markup.goldmark]
[markup.goldmark.renderer]
unsafe = true

BIN
font/BebasNeue-Regular.woff Normal file

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1,26 @@
<!DOCTYPE html>
<html
lang="{{ or site.Language.LanguageCode }}"
dir="{{ or site.Language.LanguageDirection `ltr` }}"
>
<head>
{{ partial "head.html" . }}
</head>
<body>
{{ partial "theme-switcher.html" . }}
<div id="wrap">
<div>
{{ partial "navigation.html" . }}
{{ partial "header.html" . }}
<div id="container">
<div class="content">
{{ block "main" . }}{{ end }}
</div>
</div>
{{ partial "footer.html" . }}
</div>
</div>
</body>
</html>

View file

@ -0,0 +1,23 @@
{{ define "main" }}
<ul id="posts">
{{ $paginator := .Paginate (where site.Pages "Type" "weekly") 6 }}
{{ range $paginator.Pages }}
{{ if not .Params.issuenumber }}
{{ continue }}
{{ end }}
<li class="post">
<h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2>
<time class="by-line">{{ .Date.Format .Site.Params.dateFormat }}</time>
<a href="{{ .RelPermalink }}">
<img class="img-lead" src="{{ .RelPermalink }}cover.png" alt="Revuo Monero Weekly #{{ .Params.issuenumber }} cover">
</a>
{{ $sTitle := split .Params.title ":" }}
<p>{{ site.Title }} Weekly: {{ index $sTitle 1 }}</p>
</li>
{{ end }}
</ul>
{{ partial "pagination.html" . }}
{{ end }}

6
layouts/page/single.html Normal file
View file

@ -0,0 +1,6 @@
{{ define "main" }}
<div class="content">
<h3>{{ .Title }}</h3>
{{ .Content }}
</div>
{{ end }}

12
layouts/page/support.html Normal file
View file

@ -0,0 +1,12 @@
{{ define "main" }}
<div class="content">
<h3 id="support">Support {{ .Params.name }}</h3>
<p markdown="1">{{ .Content }}</p>
<p markdown="1">
If you get value out of {{ .Params.name }} and wish to see it continue,
you can send some XMR to this address:
</p>
{{ partial "donate.html" . }}
</div>
{{ end }}

View file

@ -0,0 +1,7 @@
{{ with .Site.Params.bottom_nav_icons }}
{{ range . }}
<a class="icon" href="{{ .link }}" target="_blank">
<img src="/img/{{ .icon }}" alt="{{ .icon_alt }}" title="{{ .title }}" />
</a>
{{ end }}
{{ end }}

View file

@ -0,0 +1,2 @@
<p class="address" markdown="1">{{ .Site.Params.author.monero_address }}</p>
<p><a href="monero:{{ .Site.Params.author.monero_address }}">{{ $image := resources.Get .Site.Params.author.monero_qr }}<img src='{{ $image.RelPermalink }}' class="qr" style="max-width: 200px; margin-bottom: 50px" alt="Donate XMR" /></a></p>

View file

@ -0,0 +1,58 @@
<footer class="footer">
<style>
a.color-grey,
.footer-links {
color: var(--license-color);
}
.footer-links-section {
margin-bottom: 0;
}
.footer-icons {
display: inline;
height: 1rem;
vertical-align: middle;
margin-bottom: 0;
border-radius: 0;
}
.footer-sponsor,
.footer-sponsor:hover,
.footer-sponsor:focus {
border-bottom: none;
text-decoration: none;
}
.footer-sponsor img {
display: inline;
height: 1.3rem;
vertical-align: middle;
margin-bottom: 0;
border-radius: 0;
}
</style>
<span
>&copy; {{ .Date.Format "2006" }} - {{ .Site.Title }}<br />
<a class="color-grey" href="/source/" target="_blank"
>Source Code & Licenses</a
></span
>
<p class="footer-links-section" style="align-items: center">
<a class="footer-links" href="{{ .Site.BaseURL }}">Clearnet</a>
|
{{ with .Site.Params.mirrors }}
{{ range $index, $element := . }}
<img class="footer-icons" src="/img/{{ .icon }}" alt="{{ .icon_alt }}" />
<a class="footer-links" href="{{ .link }}">{{ .title }}</a>
{{ if ne (add $index 1) (len $.Site.Params.mirrors) }}
|
{{ end }}
{{ end }}
{{ end }}
</p>
{{ with .Site.Params.sponsor }}
{{ .introduction }}
<a class="footer-sponsor" href="{{ .link }}" target="_blank">
<img src="/img/{{ .icon }}" alt="{{ .icon_alt }}" />
</a>
{{ end }}
</footer>

151
layouts/partials/head.html Normal file
View file

@ -0,0 +1,151 @@
<meta charset="UTF-8" />
<meta
name="viewport"
content="width=device-width, initial-scale=1.0, maximum-scale=1"
/>
<title>{{ .Title }}</title>
<meta name="description" content="{{ .Description }}" />
<meta name="keywords" content="{{ .Keywords }}" />
<link rel="icon" type="image/png" sizes="32x32" href="/revuo-icon_1.png" />
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon_1.png" />
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32_1.png" />
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16_1.png" />
<meta name="application-name" content="{{ .Site.Title }}" />
<meta name="msapplication-TileColor" content="#ffffff" />
<meta name="theme-color" content="#193e4c" />
<meta name="apple-mobile-web-app-title" content="{{ .Site.Title }}" />
<meta name="apple-mobile-web-app-status-bar-style" content="#193e4c" />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="{{ .Title }}" />
<meta property="og:site_name" content="{{ .Site.Title }}" />
<meta property="og:title" content="{{ .Title }}" />
<script type="application/ld+json">
{
"@context" : "http://schema.org",
"@type" : "BlogPosting",
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "{{ .Site.BaseURL }}"
},
"articleSection" : "{{ .Section }}",
"name" : "{{ .Title }}",
"headline" : "{{ .Title }}",
// "description" : "{{ if .Description }}{{ .Description }}{{ else }}{{if .IsPage}}{{ .Summary }}{{ end }}{{ end }}",
"description" : "{{ with .Description }}{{ . }}{{ else }}{{ .Site.Params.description }}{{ end }}"
"inLanguage" : "{{ .Lang }}",
"author" : "{{ range .Site.Author }}{{ . }}{{ end }}",
"creator" : "{{ range .Site.Author }}{{ . }}{{ end }}",
"publisher": "{{ range .Site.Author }}{{ . }}{{ end }}",
"accountablePerson" : "{{ range .Site.Author }}{{ . }}{{ end }}",
"copyrightHolder" : "{{ range .Site.Author }}{{ . }}{{ end }}",
"copyrightYear" : "{{ .Date.Format "2006" }}",
"datePublished": "{{ .Date | safeHTML }}",
"dateModified" : "{{ .Date | safeHTML }}",
"url" : "{{ .Permalink }}",
"wordCount" : "{{ .WordCount }}",
"keywords" : [ {{ if isset .Params "tags" }}{{ range .Params.tags }}"{{ . }}",{{ end }}{{ end }}"Blog" ]
}
</script>
<!-- CSS -->
{{- with resources.Get "css/main.scss" }}
{{ $opts := dict "transpiler" "libsass" "targetPath" "css/style.css" }}
{{ with . | toCSS $opts }}
{{ if hugo.IsDevelopment }}
<link rel="stylesheet" href="{{ .RelPermalink }}">
{{ else }}
{{ with . | minify | fingerprint }}
<link rel="stylesheet" href="{{ .RelPermalink }}" integrity="{{ .Data.Integrity }}" crossorigin="anonymous">
{{ end }}
{{ end }}
{{ end }}
{{- end }}
<!-- JS -->
{{- with resources.Get "js/main.js" }}
{{- if eq hugo.Environment "development" }}
{{- with . | js.Build }}
<script src="{{ .RelPermalink }}"></script>
{{- end }}
{{- else }}
{{- $opts := dict "minify" true }}
{{- with . | js.Build $opts | fingerprint }}
<script src="{{ .RelPermalink }}" integrity="{{- .Data.Integrity }}" crossorigin="anonymous"></script>
{{- end }}
{{- end }}
{{- end }}
<style>
.switch {
position: relative;
display: inline-block;
width: 56px;
height: 30px;
}
.switch input {
opacity: 0;
width: 0;
height: 0;
}
.slider {
position: absolute;
cursor: pointer;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: #363636;
-webkit-transition: 0.4s;
transition: 0.4s;
}
.slider:before {
position: absolute;
content: "";
height: 22px;
width: 22px;
left: 4px;
bottom: 4px;
background-color: white;
-webkit-transition: 0.4s;
transition: 0.4s;
}
input:checked + .slider {
background-color: #d56f2a;
}
input:focus + .slider {
box-shadow: 0 0 1px #d56f2a;
}
input:checked + .slider:before {
-webkit-transform: translateX(26px);
-ms-transform: translateX(26px);
transform: translateX(26px);
}
/* Rounded sliders */
.slider.round {
border-radius: 34px;
}
.slider.round:before {
border-radius: 50%;
}
table {
margin-top: 34px;
}
td {
height: 50px;
vertical-align: middle;
}
</style>

View file

@ -0,0 +1,28 @@
<header id="header">
<div>
<a href="/">
{{ with .Site.Params.logo }}
<img src="/img/{{ .icon }}" alt="{{ .icon_alt }}" />
{{ end }}
</a>
</div>
<div class="action-container action-container--right">
{{ partial "right_icons.html" . }}
</div>
<div class="revuo-classes">
{{ $path := .Page.RelPermalink }}
{{ $wk := "" }}
{{ $pd := "" }}
{{ if eq $path "/periodicals/" }}
{{ $pd = "nav-active" }}
{{ else }}
{{ $wk = "nav-active" }}
{{ end }}
<a href="/" class="{{ $wk }}">Weekly</a>
<a href="/periodicals/" class="{{ $pd }}">Periodical</a>
</div>
</header>

View file

@ -0,0 +1,5 @@
{{ with .Site.Params.nav_links }}
{{ range . }}
<a href="{{ .link }}" title="{{ .title }}">{{ .title }}</a>
{{ end }}
{{ end }}

View file

@ -0,0 +1,25 @@
<input class="nojs-toggle" id="menu-toggle" type="checkbox" name="menu-toggle">
<label id="nav-menu" for="menu-toggle" class="menu-toggle">
<div id="menu"></div>
</label>
<nav id="nav">
<div id="nav-list">
<div class="nav-actions">
<div id="nav-actions-flex-container" class="nav-actions-flex">
{{ partial "right_icons.html" . }}
</div>
<div id="nav-actions-static-container" class="nav-actions-static">
{{ partial "bottom_nav_icons.html" . }}
</div>
</div>
{{ partial "nav_links.html" . }}
</div>
<!-- Nav footer -->
{{ with .Site.Params.nav_footer }}
<a href="{{ .link }}" title="{{ .title }}" target="_blank" hreflang="en">{{ .title }}</a>
{{ end }}
</nav>

View file

@ -0,0 +1,11 @@
<div class="pagination">
{{ if .Paginator.HasPrev }}
<a href="{{ .Paginator.Prev.URL }}" class="page-item prev">«</a>
{{ end }}
<p class="page-numbers-display">{{ .Paginator.PageNumber }} of {{ .Paginator.TotalPages }}</p>
{{ if .Paginator.HasNext }}
<a href="{{ .Paginator.Next.URL }}" class="page-item next">»</a>
{{ end }}
</div>

View file

@ -0,0 +1,8 @@
{{ with .Site.Params.right_icons }}
{{ range . }}
{{ $target := cond .external "_blank" "_self" }}
<a class="icon" href="{{ .link }}" target="{{ $target }}">
<img src="/img/{{ .icon }}" alt="{{ .icon_alt }}" title="{{ .title }}" />
</a>
{{ end }}
{{ end }}

View file

@ -0,0 +1,7 @@
<!--
Unfortunately, targeting the parent is not a thing in CSS. This is a workaround.
-->
<input class="nojs-toggle" id="theme-switcher" type="checkbox" name="theme-switcher">
<label class="switch" for="theme-switcher" id="main-theme-switcher">
<span class="slider round"></span>
</label>

View file

@ -0,0 +1,23 @@
{{ define "main" }}
<ul id="posts">
{{ $paginator := .Paginate (where site.Pages "Type" "periodical") 6 }}
{{ range $paginator.Pages }}
{{ if not .Params.issuenumber }}
{{ continue }}
{{ end }}
<li class="post">
<h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2>
<time class="by-line">{{ .Date.Format .Site.Params.dateFormat }}</time>
<a href="{{ .RelPermalink }}">
<img class="img-lead" src="{{ .RelPermalink }}cover.png" alt="Revuo Monero Weekly #{{ .Params.issuenumber }} cover">
</a>
{{ $sTitle := split .Params.title ":" }}
<p>Covering the period of {{ .Params.covering }}.</p>
</li>
{{ end }}
</ul>
{{ partial "pagination.html" . }}
{{ end }}

View file

@ -0,0 +1,8 @@
{{ define "main" }}
<article id="post-page">
<h2>{{ .Title }}</h2>
<time class="by-line">{{ .Date.Format .Site.Params.dateFormat }}</time>
{{ .Content }}
</article>
{{ end }}

View file

@ -0,0 +1,8 @@
{{ define "main" }}
<article id="post-page">
<h2>{{ .Title }}</h2>
<time class="by-line">{{ .Date.Format .Site.Params.dateFormat }}</time>
{{ .Content }}
</article><div style="margin-bottom: 45px"></div>
{{ end }}

View file

@ -0,0 +1,9 @@
<div class="bcstats">
<p>Block height: <b>{{ .Get "height" }}</b></p>
<p>Hash rate: <b>{{ .Get "hashrate" }}</b></p>
<p>Average txs. per block: <b>{{ .Get "txs_per_block" }}</b></p>
<p>Weekly Moving Average txs. per day: <b>{{ .Get "avg_txs_per_day" }}</b></p>
<p>Block reward: <b>{{ .Get "block_reward" }} XMR</b></p>
</div>
<p class="note">Data taken on {{ .Get "date" }}.</p>

View file

@ -0,0 +1,13 @@
<div class="proposal">
<p>
<a href='https://ccs.getmonero.org/proposals/{{ .Get "link" }}.html' target="_blank">
{{ trim .Inner "<p></p>\n\r" }}
</a><span>by {{ .Get "author" }}.</span>
</p>
{{ $goal := .Get "goal" }}
{{ $raised := .Get "raised" }}
{{ with .Get "raised" }}
<p>Raised <b>{{ $raised }}</b> of <b>{{ $goal }}</b> XMR ({{ div (.) ($goal) | mul 100 | int }}%)</p>
{{ end }}
</div>

View file

@ -0,0 +1,4 @@
<div class="event">
<p class="date" markdown="1">{{ .Get 0 }}</p>
<p markdown="1">{{ .Inner | markdownify }}</p>
</div>

View file

@ -0,0 +1 @@
<div class="newsbyte"><h4>{{ .Inner | markdownify }}</h4></div>

View file

@ -0,0 +1,79 @@
<p>XMR Market Cap: <b>${{ .Get "market_cap" }}</b>.</p>
<p>Street Price: <b>${{ .Get "street_price" }}</b>.</p>
{{ $times := slice "Week" "Month" "Year" }}
<p class="table-title">Monero (XMR) Price</p>
<table class="price-table">
{{ $td := .Get "table_date" }}
<tbody><tr class="row1">
<th></th>
<th>{{ $td }}</th>
<th>Week</th>
<th>Month</th>
<th>Year</th>
</tr>
<tr>
{{ $price := split (.Get "price_usd") "," }}
<td data-th="XMR to">USD</td>
<td data-th='{{ $td := .Get "table_date" }}'>${{ index $price 0 }}</td>
{{ $week := index $price 1 }}
{{ $month := index $price 2 }}
{{ $year := index $price 3 }}
{{ $price = slice $week $month $year }}
{{ range $i, $v := $price }}
{{ $color := "green" }}
{{ if eq (substr $v 0 1) "-" }}
{{ $color = "red" }}
{{ end }}
<td data-th="{{ index $times $i }}" class="{{ $color }}">{{ $v }}%</td>
{{ end }}
</tr>
<tr class="row3">
{{ $price := split (.Get "price_eur") "," }}
<td data-th="XMR to">EUR</td>
<td data-th='{{ $td := .Get "table_date" }}'>€{{ index $price 0 }}</td>
{{ $week := index $price 1 }}
{{ $month := index $price 2 }}
{{ $year := index $price 3 }}
{{ $price = slice $week $month $year }}
{{ range $i, $v := $price }}
{{ $color := "green" }}
{{ if eq (substr $v 0 1) "-" }}
{{ $color = "red" }}
{{ end }}
<td data-th="{{ index $times $i }}" class="{{ $color }}">{{ $v }}%</td>
{{ end }}
</tr>
<tr>
{{ $price := split (.Get "price_btc") "," }}
<td data-th="XMR to">BTC</td>
<td data-th='{{ $td := .Get "table_date" }}'>₿{{ index $price 0 }}</td>
{{ $week := index $price 1 }}
{{ $month := index $price 2 }}
{{ $year := index $price 3 }}
{{ $price = slice $week $month $year }}
{{ range $i, $v := $price }}
{{ $color := "green" }}
{{ if eq (substr $v 0 1) "-" }}
{{ $color = "red" }}
{{ end }}
<td data-th="{{ index $times $i }}" class="{{ $color }}">{{ $v }}%</td>
{{ end }}
</tr>
</tbody>
</table>
<p class="note">Data taken on {{ .Get "date" }}.</p>

View file

@ -0,0 +1,7 @@
<h3>Support</h3>
Revuo is an <a href="/support">audience-funded newsletter</a>. If you enjoy this content, please consider supporting it directly:
{{ partial "donate.html" . }}
Comments, criticisms, want to share links to be included in future issues? Contact us at <b>rotten</b> at <b>revuo-xmr</b> dot <b>com</b>.
{{ .Inner }}

View file

@ -0,0 +1,4 @@
<h3>Volunteer Opportunities</h3>
If you want to get involved in making Monero better, but aren't sure how, check out some volunteer opportunities.
{{ .Inner }}

View file

@ -0,0 +1,6 @@
<div class="newsbyte">
<p class="date">
<a href='{{ .Get "link" }}' target="_blank">{{ .Get "title" }}</a></p>
<p>{{ .Inner }}</p>
</p>
</div>

View file

@ -0,0 +1,8 @@
{{ define "main" }}
<article id="post-page">
<h2>{{ .Title }}</h2>
<time class="by-line">{{ .Date.Format .Site.Params.dateFormat }}</time>
{{ .Content }}
</article>
{{ end }}

View file

@ -0,0 +1,8 @@
{{ define "main" }}
<article id="post-page">
<h2>{{ .Title }}</h2>
<time class="by-line">{{ .Date.Format .Site.Params.dateFormat }}</time>
{{ .Content }}
</article><div style="margin-bottom: 45px"></div>
{{ end }}

14
theme.toml Normal file
View file

@ -0,0 +1,14 @@
name = 'revuo-xmr'
license = 'AGPLv3'
description = 'Theme for Revuo Monero newsletter'
[author]
name = 'recanman'
homepage = 'https://github.com/recanman'
# Originally released under the MIT license.
# Copyright (c) 2015 Jacopo Rabolini
[original]
author = 'KingFelix'
homepage = 'https://www.jacoporabolini.com/emerald/'
repo = 'https://github.com/KingFelix/emerald/'