diff --git a/README.md b/README.md new file mode 100644 index 0000000..0908f39 --- /dev/null +++ b/README.md @@ -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. diff --git a/archetypes/weekly.md b/archetypes/weekly.md new file mode 100644 index 0000000..8709f0b --- /dev/null +++ b/archetypes/weekly.md @@ -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 />}} \ No newline at end of file diff --git a/assets/css/base.scss b/assets/css/base.scss new file mode 100644 index 0000000..15a351e --- /dev/null +++ b/assets/css/base.scss @@ -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; +} \ No newline at end of file diff --git a/assets/css/custom.scss b/assets/css/custom.scss new file mode 100644 index 0000000..b35cf97 --- /dev/null +++ b/assets/css/custom.scss @@ -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; +} \ No newline at end of file diff --git a/assets/css/layout.scss b/assets/css/layout.scss new file mode 100644 index 0000000..87c603b --- /dev/null +++ b/assets/css/layout.scss @@ -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; +} diff --git a/assets/css/main.scss b/assets/css/main.scss new file mode 100644 index 0000000..19ef2e3 --- /dev/null +++ b/assets/css/main.scss @@ -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; + } +} diff --git a/assets/css/mixin.scss b/assets/css/mixin.scss new file mode 100644 index 0000000..e873ea2 --- /dev/null +++ b/assets/css/mixin.scss @@ -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; +} \ No newline at end of file diff --git a/assets/css/syntax.scss b/assets/css/syntax.scss new file mode 100644 index 0000000..34d12d1 --- /dev/null +++ b/assets/css/syntax.scss @@ -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 */ diff --git a/assets/css/typography.scss b/assets/css/typography.scss new file mode 100644 index 0000000..51a6005 --- /dev/null +++ b/assets/css/typography.scss @@ -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 */ + } + } + +} \ No newline at end of file diff --git a/assets/js/main.js b/assets/js/main.js new file mode 100644 index 0000000..f9b97f3 --- /dev/null +++ b/assets/js/main.js @@ -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); +} \ No newline at end of file diff --git a/config.toml.example b/config.toml.example new file mode 100644 index 0000000..4c00084 --- /dev/null +++ b/config.toml.example @@ -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 \ No newline at end of file diff --git a/font/BebasNeue-Regular.woff b/font/BebasNeue-Regular.woff new file mode 100644 index 0000000..457f916 Binary files /dev/null and b/font/BebasNeue-Regular.woff differ diff --git a/font/BebasNeue-Regular.woff2 b/font/BebasNeue-Regular.woff2 new file mode 100644 index 0000000..b4099a9 Binary files /dev/null and b/font/BebasNeue-Regular.woff2 differ diff --git a/layouts/_default/baseof.html b/layouts/_default/baseof.html new file mode 100644 index 0000000..7302761 --- /dev/null +++ b/layouts/_default/baseof.html @@ -0,0 +1,26 @@ + + +
+ {{ partial "head.html" . }} + + + {{ partial "theme-switcher.html" . }} + +{{ site.Title }} Weekly: {{ index $sTitle 1 }}
+{{ .Content }}
+ ++ If you get value out of {{ .Params.name }} and wish to see it continue, + you can send some XMR to this address: +
+ {{ partial "donate.html" . }} +{{ .Site.Params.author.monero_address }}
+{{ $image := resources.Get .Site.Params.author.monero_qr }}
\ No newline at end of file diff --git a/layouts/partials/footer.html b/layouts/partials/footer.html new file mode 100644 index 0000000..d0225ce --- /dev/null +++ b/layouts/partials/footer.html @@ -0,0 +1,58 @@ + diff --git a/layouts/partials/head.html b/layouts/partials/head.html new file mode 100644 index 0000000..328b954 --- /dev/null +++ b/layouts/partials/head.html @@ -0,0 +1,151 @@ + + +{{ .Paginator.PageNumber }} of {{ .Paginator.TotalPages }}
+ + {{ if .Paginator.HasNext }} + » + {{ end }} +Covering the period of {{ .Params.covering }}.
+Block height: {{ .Get "height" }}
+Hash rate: {{ .Get "hashrate" }}
+Average txs. per block: {{ .Get "txs_per_block" }}
+Weekly Moving Average txs. per day: {{ .Get "avg_txs_per_day" }}
+Block reward: {{ .Get "block_reward" }} XMR
+Data taken on {{ .Get "date" }}.
\ No newline at end of file diff --git a/layouts/shortcodes/ccs_item.html b/layouts/shortcodes/ccs_item.html new file mode 100644 index 0000000..d0c021c --- /dev/null +++ b/layouts/shortcodes/ccs_item.html @@ -0,0 +1,13 @@ ++ + {{ trim .Inner "\n\r" }} + by {{ .Get "author" }}. +
+ + {{ $goal := .Get "goal" }} + {{ $raised := .Get "raised" }} + {{ with .Get "raised" }} +Raised {{ $raised }} of {{ $goal }} XMR ({{ div (.) ($goal) | mul 100 | int }}%)
+ {{ end }} +{{ .Get 0 }}
+{{ .Inner | markdownify }}
+XMR Market Cap: ${{ .Get "market_cap" }}.
+Street Price: ${{ .Get "street_price" }}.
+ +{{ $times := slice "Week" "Month" "Year" }} + +Monero (XMR) Price
++ | {{ $td }} | +Week | +Month | +Year | +
---|---|---|---|---|
USD | +${{ index $price 0 }} | + + {{ $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 }} + +{{ $v }}% | + {{ end }} +||
EUR | +€{{ index $price 0 }} | + + {{ $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 }} + +{{ $v }}% | + {{ end }} +||
BTC | +₿{{ index $price 0 }} | + + {{ $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 }} + +{{ $v }}% | + {{ end }} +
Data taken on {{ .Get "date" }}.
\ No newline at end of file diff --git a/layouts/shortcodes/support.html b/layouts/shortcodes/support.html new file mode 100644 index 0000000..477f58d --- /dev/null +++ b/layouts/shortcodes/support.html @@ -0,0 +1,7 @@ +{{ .Inner }}
+ +