diff options
author | Rahmat Subekti <rahmatsubekti@live.com> | 2020-06-29 18:30:10 +0300 |
---|---|---|
committer | Rahmat Subekti <rahmatsubekti@live.com> | 2020-06-29 18:30:10 +0300 |
commit | a60eecf43834fa664c31f8f2cd40840caf2f352b (patch) | |
tree | 5e0be4898cad08e7b75f4d84eb57569ea54294b4 |
root testing
65 files changed, 1846 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..bfa72bc --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +*/*_gen +**/*public
\ No newline at end of file diff --git a/archetypes/default.md b/archetypes/default.md new file mode 100644 index 0000000..00e77bd --- /dev/null +++ b/archetypes/default.md @@ -0,0 +1,6 @@ +--- +title: "{{ replace .Name "-" " " | title }}" +date: {{ .Date }} +draft: true +--- + diff --git a/config.yml b/config.yml new file mode 100644 index 0000000..f846a16 --- /dev/null +++ b/config.yml @@ -0,0 +1,42 @@ +baseURL: https://rmsubekti.github.io/the-roots-home/ +languageCode: id-ID +title: Root's Home +params: + Description: I'm root, I am root, i am root. 😁 i am root. +disqusShortname: +theme: the-roots-home + +enableGitInfo: true +enableEmoji: true +enableRobotsTXT: true + +# Syntax Highlight Options +pygmentsCodeFencesGuessSyntax: true +pygmentsCodeFences : true +pygmentsUseClasses: true +pygmentsStyle: vs +pygmentsOptions: + linenos: true + +markup: + defaultMarkdownHandler: goldmark + goldmark: + renderer: + unsafe: true + +mediaTypes: + "application/manifest+json": + suffixes: ["webmanifest"] + +outputFormats: + WebAppManifest: + mediaType: application/manifest+json + rel: manifest + +outputs: + page: + - HTML + home: + - HTML + - RSS + - WebAppManifest
\ No newline at end of file diff --git a/content/_index.md b/content/_index.md new file mode 100644 index 0000000..38c19d4 --- /dev/null +++ b/content/_index.md @@ -0,0 +1,5 @@ +--- +title: Index of ~ +weight: 1 +--- +I am root.
\ No newline at end of file diff --git a/content/blog/_index.md b/content/blog/_index.md new file mode 100644 index 0000000..0eeea5f --- /dev/null +++ b/content/blog/_index.md @@ -0,0 +1,6 @@ +--- +title: Blog +weight: 2 +--- +I am blog. + diff --git a/content/blog/am-i-groot/_index.md b/content/blog/am-i-groot/_index.md new file mode 100644 index 0000000..c6508b9 --- /dev/null +++ b/content/blog/am-i-groot/_index.md @@ -0,0 +1,6 @@ +--- +title: Am I Groot? +weight: 3 +--- +am i Groot? + diff --git a/content/blog/am-i-groot/i-am-root.md b/content/blog/am-i-groot/i-am-root.md new file mode 100644 index 0000000..4e6ab2b --- /dev/null +++ b/content/blog/am-i-groot/i-am-root.md @@ -0,0 +1,20 @@ +--- +title: "I Am Root" +date: 2020-06-29T16:39:46+07:00 +--- + +# I AM ROOT + +i'm root + +## I Am Root + +i am root + +### i AM Root + +i am root + +#### I am root + +i am root
\ No newline at end of file diff --git a/content/blog/i-am-root.md b/content/blog/i-am-root.md new file mode 100644 index 0000000..5bf7549 --- /dev/null +++ b/content/blog/i-am-root.md @@ -0,0 +1,30 @@ +--- +title: "I Am RooT!" +date: 2020-06-29T15:41:45+07:00 +author: root +--- + +i am root + +- i am root +- i am root + + +i am root +--- +```bash +~: echo "i am root" +i am root +~: +``` + +# I Am Root + +i am `root` + + i am root + + +## i am root + +i am root
\ No newline at end of file diff --git a/content/groot/_index.md b/content/groot/_index.md new file mode 100644 index 0000000..4b3e85a --- /dev/null +++ b/content/groot/_index.md @@ -0,0 +1,5 @@ +--- +title: Groot +weight: 2 +--- +I am Groot
\ No newline at end of file diff --git a/content/groot/i-am-groot.md b/content/groot/i-am-groot.md new file mode 100644 index 0000000..410cdd9 --- /dev/null +++ b/content/groot/i-am-groot.md @@ -0,0 +1,44 @@ +--- +title: "I Am Groot" +date: 2020-06-29T15:42:01+07:00 +categories: Groot +--- +i am groot? + +![i am groot](/groot/un8hm.jpg) + +i am groot [@https://imgflip.com/i/un8hm](https://imgflip.com/i/un8hm) + +I Am gROOT!! +--- + i am groot + ![i am groot](/groot/tenor.gif) + i am groot + +i am groot: + +i am groot +![i am groot](/groot/tenor.gif) +i am groot + + +i am groot [@https://tenor.com/view/real-groot-baby-groot-gif-7317011](https://tenor.com/view/real-groot-baby-groot-gif-7317011) + +**i am groot !!!** + + i am groot + + ![i am groot](/groot/tenor.gif) + + i am groot + +i am groot: + +i am groot + +![i am groot](/groot/tenor2.gif) + +i am groot + + +i am groot [@https://tenor.com/view/groot-happy-dance-oh-yeah-marvel-marvel-comics-gif-17641744](https://tenor.com/view/groot-happy-dance-oh-yeah-marvel-marvel-comics-gif-17641744) diff --git a/content/groot/tenor.gif b/content/groot/tenor.gif Binary files differnew file mode 100644 index 0000000..6428d3f --- /dev/null +++ b/content/groot/tenor.gif diff --git a/content/groot/tenor2.gif b/content/groot/tenor2.gif Binary files differnew file mode 100644 index 0000000..30f14c5 --- /dev/null +++ b/content/groot/tenor2.gif diff --git a/content/groot/un8hm.jpg b/content/groot/un8hm.jpg Binary files differnew file mode 100644 index 0000000..6441091 --- /dev/null +++ b/content/groot/un8hm.jpg diff --git a/content/i-am-root.md b/content/i-am-root.md new file mode 100644 index 0000000..bfda746 --- /dev/null +++ b/content/i-am-root.md @@ -0,0 +1,15 @@ +--- +title: "I Am Root" +date: 2020-06-29T15:42:16+07:00 +tags: [i,am,root] +--- + +i am / + +root! + +i am root, +i am root + + +i Am Root, [am i root?](/tags/)
\ No newline at end of file diff --git a/content/root/index.md b/content/root/index.md new file mode 100644 index 0000000..43659a3 --- /dev/null +++ b/content/root/index.md @@ -0,0 +1,7 @@ +--- +title: "Root" +date: 2020-06-29T15:47:22+07:00 +--- +i am root , i am root +![i-am-root](the-prequel_o_3726397.webp) +i am root [@ https://www.memecenter.com/fun/3726397/the-prequel/](https://www.memecenter.com/fun/3726397/the-prequel/)
\ No newline at end of file diff --git a/content/root/the-prequel_o_3726397.webp b/content/root/the-prequel_o_3726397.webp Binary files differnew file mode 100644 index 0000000..b763b34 --- /dev/null +++ b/content/root/the-prequel_o_3726397.webp diff --git a/themes/the-roots-home/LICENSE b/themes/the-roots-home/LICENSE new file mode 100644 index 0000000..a20d523 --- /dev/null +++ b/themes/the-roots-home/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2020 Rahmat Subekti + +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/themes/the-roots-home/README.md b/themes/the-roots-home/README.md new file mode 100644 index 0000000..77880f7 --- /dev/null +++ b/themes/the-roots-home/README.md @@ -0,0 +1,15 @@ +The Root's Home +--- +Well, I am not root. + +![screenshot](https://github.com/rmsubekti/the-roots-home/raw/master/screenshot.png) + + +Demo is right here [Root's Home](https://rmsubekti.github.io/the-roots-home/) + + +Built With GoHugo.io + +Icons By Ionicons.com + +[License](https://raw.githubusercontent.com/rmsubekti/the-roots-home/master/LICENSE)
\ No newline at end of file diff --git a/themes/the-roots-home/archetypes/default.md b/themes/the-roots-home/archetypes/default.md new file mode 100644 index 0000000..26f317f --- /dev/null +++ b/themes/the-roots-home/archetypes/default.md @@ -0,0 +1,5 @@ +--- +title: "{{ replace .Name "-" " " | title }}" +date: {{ .Date }} +draft: true +--- diff --git a/themes/the-roots-home/assets/_scss/base.scss b/themes/the-roots-home/assets/_scss/base.scss new file mode 100755 index 0000000..3f12da8 --- /dev/null +++ b/themes/the-roots-home/assets/_scss/base.scss @@ -0,0 +1,245 @@ +/** + * Reset some basic elements + */ + body, h1, h2, h3, h4, h5, h6, + p, blockquote, pre, hr, + dl, dd, ol, ul, figure { + margin: 0; + padding: 0; + } + + + + /** + * Basic styling + */ + body { + font: $base-font-weight #{$base-font-size}/#{$base-line-height} $base-font-family; + color: $text-color; + background-color: $background-color; + -webkit-text-size-adjust: 100%; + -webkit-font-feature-settings: "kern" 1; + -moz-font-feature-settings: "kern" 1; + -o-font-feature-settings: "kern" 1; + font-feature-settings: "kern" 1; + font-kerning: normal; + margin: 0 auto; + padding: 0 $spacing-unit / 2; + max-width: $content-width; + } + + + + /** + * Set `margin-bottom` to maintain vertical rhythm + */ + h1, h2, h3, h4, h5, h6, + p, blockquote, pre, + ul, ol, dl, figure, + %vertical-rhythm { + margin-bottom: $spacing-unit / 2; + } + + + + /** + * `main` element + */ + main { + display: block; /* Default value of `display` of `main` element is 'inline' in IE 11. */ + margin: $spacing-unit*.55 0; + } + + + + /** + * Images + */ + img { + max-width: 100%; + vertical-align: middle; + margin: 0 auto; + } + + + + /** + * Figures + */ + figure > img { + display: block; + } + + figcaption { + font-size: $small-font-size; + } + + + + /** + * Lists + */ + ul, ol { + margin-left: $spacing-unit; + } + + li { + > ul, + > ol { + margin-bottom: 0; + } + } + + + + /** + * Headings + */ + h1, h2, h3, h4, h5, h6 { + font-weight: $base-font-weight; + font-family: Cambria, Cochin, Georgia, Times, 'Times New Roman', serif; + } + + + + /** + * Links + */ + a { + color: $brand-color; + text-decoration: none; + + &:visited { + color: darken($brand-color, 15%); + } + + &:hover { + color: $text-color; + text-decoration: underline; + } + + .social-media-list &:hover { + text-decoration: none; + + .username { + text-decoration: underline; + } + } + } + + + /** + * Blockquotes + */ + blockquote { + color: $grey-color; + border-left: 4px solid $grey-color-light; + padding-left: $spacing-unit / 2; + @include relative-font-size(1.125); + letter-spacing: -1px; + font-style: italic; + + > :last-child { + margin-bottom: 0; + } + } + + + + /** + * Code formatting + */ + pre, + code { + @include relative-font-size(0.9375); + border: 1px solid #d4d4d4; + border-radius: 2px; + background-color: #eee4d0; + } + + code { + padding: 1px 5px; + } + + pre { + padding: 8px 12px; + overflow-x: auto; + + > code { + border: 0; + padding-right: 0; + padding-left: 0; + } + } + + + + /** + * Clearfix + */ + %clearfix:after { + content: ""; + display: table; + clear: both; + } + + + /** + * Hidden + */ +.hidden{ + display:none; + visibility: hidden; + width: 0; + height: 0; +} + + + /** + * Icons + */ + + .svg-icon { + width: 16px; + height: 16px; + display: inline-block; + fill: #{$grey-color}; + padding-right: 5px; + vertical-align: text-top; + } + + .social-media-list { + li + li { + padding-top: 5px; + } + } + + + + /** + * Tables + */ + table { + margin-bottom: $spacing-unit; + width: 100%; + text-align: $table-text-align; + color: lighten($text-color, 18%); + border-collapse: collapse; + border: 1px solid $grey-color-light; + tr { + &:nth-child(even) { + background-color: lighten($grey-color-light, 6%); + } + } + th, td { + padding: ($spacing-unit / 3) ($spacing-unit / 2); + } + th { + background-color: lighten($grey-color-light, 3%); + border: 1px solid darken($grey-color-light, 4%); + border-bottom-color: darken($grey-color-light, 12%); + } + td { + border: 1px solid $grey-color-light; + } + }
\ No newline at end of file diff --git a/themes/the-roots-home/assets/_scss/layout.scss b/themes/the-roots-home/assets/_scss/layout.scss new file mode 100644 index 0000000..2e33f56 --- /dev/null +++ b/themes/the-roots-home/assets/_scss/layout.scss @@ -0,0 +1,166 @@ +/** + * Site header + */ + .site-header { + border-bottom: 1px dashed $grey-color-light; + min-height: $spacing-unit * 1.865; + display: flex; + align-items: flex-end; + // Positioning context for the mobile navigation icon + position: relative; + } + + .site-nav { + font-family: Cambria, Cochin, Georgia, Times, 'Times New Roman', serif; + font-weight: bold; + display: inline; + vertical-align: bottom; + ol{ + margin: 0; + padding: 0; + list-style: none; + li{ + display: inline; + } + } + } + .page-description{ + @include relative-font-size(.87); + padding: 0; + margin: 0; + } + /** + * Site footer + */ + .site-footer { + font-size: 10px; + border-top: 1px dashed $grey-color-light; + margin-bottom: 20px; + .left{ + float: left; + } + .right{ + float: right; + } + } + + + /** + * Page content + */ + .page-content { + padding: $spacing-unit 0; + } + + .page-heading { + @include relative-font-size(2); + } + + + .post-meta { + font-size: $small-font-size; + font-family: 'Trebuchet MS', 'Lucida Sans Unicode', 'Lucida Grande', 'Lucida Sans', Arial, sans-serif; + color: $grey-color; + + ul{ + float: right; + li{ + display: inline-block; + } + } + } + + section.item-list { + .item{ + font-family: Cambria, Cochin, Georgia, Times, 'Times New Roman', serif; + font-weight: bold; + width: 100%; + display:flex; + flex-wrap: wrap; + h3{ + font-weight: bold; + width: 35%; + white-space: nowrap; + overflow: hidden; + text-align: left; + text-overflow: ellipsis; + flex:auto; + margin: 0 16px 0 0; + } + span{ + width: calc(60% - 128px); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + flex:auto; + margin-right: 16px; + } + time{ + box-sizing: border-box; + width: 96px; + text-align: right; + } + } + } + + + h3.item-title { + display: inline-block; + @include relative-font-size(1); + margin: .2em; + } + + .pagination{ + display:flex; + flex-wrap: nowrap; + justify-content: space-between; + margin-top: $spacing-unit; + } + + /** + * Posts + */ + .post-header { + margin-bottom: $spacing-unit/2; + border-bottom: 1px dotted $grey-color-light; + } + + .post-title { + @include relative-font-size(1.25); + letter-spacing: -1px; + line-height: 1; + } + #disqus_thread{ + @include relative-font-size(.89); + } + .post-content { + font-family: Tahoma, Arial, sans-serif; + margin-bottom: $spacing-unit; + p,li{ + @include relative-font-size(.89); + } + pre,code{ + @include relative-font-size(.82); + } + + h2 { + border-bottom: 1px dotted $grey-color-light; + @include relative-font-size(1.1); + font-weight: bold; + } + + h3 { + border-bottom: 1px dotted $grey-color-light; + font-weight: bold; + @include relative-font-size(1.075); + } + + h4 { + font-weight: bold; + @include relative-font-size(.925); + } + } + article~.pagination{ + padding: $spacing-unit 0; + border-top: 1px dashed $grey-color-light; + }
\ No newline at end of file diff --git a/themes/the-roots-home/assets/_scss/media.scss b/themes/the-roots-home/assets/_scss/media.scss new file mode 100644 index 0000000..9f92460 --- /dev/null +++ b/themes/the-roots-home/assets/_scss/media.scss @@ -0,0 +1,19 @@ +@include media-query($on-laptop) { + .post-title{ + @include relative-font-size(1.55); + } + .post-content { + h2 { + @include relative-font-size(1.25); + } + + h3 { + @include relative-font-size(1); + } + + h4 { + @include relative-font-size(.9); + } + } + +}
\ No newline at end of file diff --git a/themes/the-roots-home/assets/_scss/print.scss b/themes/the-roots-home/assets/_scss/print.scss new file mode 100644 index 0000000..ac32677 --- /dev/null +++ b/themes/the-roots-home/assets/_scss/print.scss @@ -0,0 +1,99 @@ +@media print { + @page { + margin: 1.2cm; + } + + body { + font: 12pt Georgia, "Times New Roman", Times, serif; + line-height: 1.3; + background: #fff !important; + -webkit-print-color-adjust: exact !important; + color-adjust: exact !important; + } + + p { + orphans: 2; + widows: 2; + } + + pre,code{ + font-size: inherit; + } + + + body > :not(main), main > :not(article), .pagination { + display: none; + } + + h1 { + column-span: all; + break-before: column; + break-inside: avoid-column; + break-after: avoid-column; + font-size: 24pt; + background: #5c5c5c; + color: #fff !important; + -moz-color: #fff !important; + padding: 0 5pt; + border: none; + line-height: 1.4; + display: inline; + } + + h2 { + font-size: 14pt; + margin-top: 25px; + break-after: avoid; + } + + blockquote, ul { + margin: 0; + } + + ul { + list-style: none; + } + + li { + content: "» "; + word-wrap: break-word; + } + + a { + color: #000; + word-wrap: break-word; + } + + p a[href^="http://"]:after, a[href^="https://"]:after { + content: " (" attr(href) ")"; + font-weight: normal; + font-size: 10pt; + font-style: italic; + border: none; + } + + abbr:after { + content: " (" attr(title) ")"; + font-weight: 100; + font-style: italic; + border: none; + } + + p a[href^="#"]:after { + display: none; + } + + .wrapper { + max-width: 100% !important; + float: none; + margin: 0; + padding: 0; + } + .post-meta { + margin: 0 0 .5cm 0; + } + img{ + display: block; + margin: 0 auto; + } +} diff --git a/themes/the-roots-home/assets/_scss/syntax-highlighting.scss b/themes/the-roots-home/assets/_scss/syntax-highlighting.scss new file mode 100644 index 0000000..ac01d75 --- /dev/null +++ b/themes/the-roots-home/assets/_scss/syntax-highlighting.scss @@ -0,0 +1,232 @@ +/** + * Syntax highlighting styles + */ +.highlight { + background:#eee4d0; + + @extend %vertical-rhythm; + + /* Background */ + + .chroma { + background-color: #eee4d0; + + /* Error */ + .err { + display: inline; + } + + /* LineTableTD */ + .lntd { + vertical-align: top; + padding: 0; + margin: 0; + border: 0; + } + + /* LineTable */ + .lntable { + border-spacing: 0; + padding: 0; + margin: 0; + border: 0; + width: auto; + overflow: auto; + display: block; + } + + /* LineHighlight */ + .hl { + display: block; + width: 100%; + background-color: #ffffcc; + } + + /* LineNumbersTable */ + .lnt { + margin-right: 0.4em; + padding: 0 0.4em 0 0.4em; + } + + /* LineNumbers */ + .ln { + margin-right: 0.4em; + padding: 0 0.4em 0 0.4em; + } + + /* Keyword */ + .k { + color: #0000ff; + } + + /* KeywordConstant */ + .kc { + color: #0000ff; + } + + /* KeywordDeclaration */ + .kd { + color: #0000ff; + } + + /* KeywordNamespace */ + .kn { + color: #0000ff; + } + + /* KeywordPseudo */ + .kp { + color: #0000ff; + } + + /* KeywordReserved */ + .kr { + color: #0000ff; + } + + /* KeywordType */ + .kt { + color: #2b91af; + } + + /* NameClass */ + .nc { + color: #2b91af; + } + + /* LiteralString */ + .s { + color: #a31515; + } + + /* LiteralStringAffix */ + .sa { + color: #a31515; + } + + /* LiteralStringBacktick */ + .sb { + color: #a31515; + } + + /* LiteralStringChar */ + .sc { + color: #a31515; + } + + /* LiteralStringDelimiter */ + .dl { + color: #a31515; + } + + /* LiteralStringDoc */ + .sd { + color: #a31515; + } + + /* LiteralStringDouble */ + .s2 { + color: #a31515; + } + + /* LiteralStringEscape */ + .se { + color: #a31515; + } + + /* LiteralStringHeredoc */ + .sh { + color: #a31515; + } + + /* LiteralStringInterpol */ + .si { + color: #a31515; + } + + /* LiteralStringOther */ + .sx { + color: #a31515; + } + + /* LiteralStringRegex */ + .sr { + color: #a31515; + } + + /* LiteralStringSingle */ + .s1 { + color: #a31515; + } + + /* LiteralStringSymbol */ + .ss { + color: #a31515; + } + + /* OperatorWord */ + .ow { + color: #0000ff; + } + + /* Comment */ + .c { + color: #008000; + } + + /* CommentHashbang */ + .ch { + color: #008000; + } + + /* CommentMultiline */ + .cm { + color: #008000; + } + + /* CommentSingle */ + .c1 { + color: #008000; + } + + /* CommentSpecial */ + .cs { + color: #008000; + } + + /* CommentPreproc */ + .cp { + color: #0000ff; + } + + /* CommentPreprocFile */ + .cpf { + color: #0000ff; + } + + /* GenericEmph */ + .ge { + font-style: italic; + } + + /* GenericHeading */ + .gh { + font-weight: bold; + } + + /* GenericPrompt */ + .gp { + font-weight: bold; + } + + /* GenericStrong */ + .gs { + font-weight: bold; + } + + /* GenericSubheading */ + .gu { + font-weight: bold; + } + } +} diff --git a/themes/the-roots-home/assets/app.js b/themes/the-roots-home/assets/app.js new file mode 100644 index 0000000..65051d4 --- /dev/null +++ b/themes/the-roots-home/assets/app.js @@ -0,0 +1,136 @@ +{{ $sw := resources.Get "sw.js" | resources.ExecuteAsTemplate "sw.js" . | minify }} +//Register service worker +if ('serviceWorker' in navigator) { + navigator.serviceWorker.register('{{ $sw.Permalink | relURL }}',{ + updateViaCache: 'none', + }) + /* + .then(() => { + return navigator.serviceWorker.ready; + }) + .then(reg => { + reg.pushManager.subscribe({ + userVisibleOnly:true + }) + .then(sub => console.log('endpoint : ', sub.endpoint)) + .catch(e => console.log('%c 😶 %c\n Ehhmp..\n','font-size:50px; color:#bcbcbc;','font-size:20px;',e)); + }) + */ + .then(function(reg) { + // Registration was successful + console.log(reg.scope); + + // updatefound is fired if service-worker.js changes. + reg.onupdatefound = function() { + var installingWorker = reg.installing; + + installingWorker.onstatechange = function() { + ga('send', 'event','Progressive Web App', 'Service Worker State', installingWorker.state); + /* + switch (installingWorker.state) { + case 'installed': + if (navigator.serviceWorker.controller) { + // At this point, the old content will have been purged and the fresh content will + // have been added to the cache. + // It's the perfect time to display a "New content is available; please refresh." + // message in the page's interface. + //console.log('New or updated content is available.'); + showToast(`New or updated content is available.`); + } else { + // At this point, everything has been precached. + // It's the perfect time to display a "Content is cached for offline use." message. + //console.log('Content is now available offline!'); + getCacheTotalSize().then(function (size) { + //console.log(size); + showToast(`Content is now available offline! [Cached: ${size} KB]`); + }); + } + break; + + case 'redundant': + console.error('The installing service worker became redundant.'); + break; + } + */ + }; + }; + }) + .catch(err => console.error('%c 😨\n', 'font-size:60px; color:red', err)); + + //Check to see whether the service worker is controlling the page. + if (navigator.serviceWorker.controller) { + // If .controller is set, then this page is being actively controlled by the service worker. + console.info('%c 🤘', 'font-size:70px; color: #bada55' /*,reg*/ ); + + } else { + // If .controller isn't set, then prompt the user to reload the page so that the service worker can take + // control. Until that happens, the service worker's fetch handler won't be used. + console.info('%c ⚓\n%cPlease reload this page to allow the service worker to handle network operations.', 'font-size:60px; color:green', 'background-color:#333;color:#fff;'); + } +} else { + // The current browser doesn't support service workers. + console.log('%c 🗿\n%cService workers are not supported.', 'font-size:50px;color:#bcbcbc;', 'background-color:#333;color:#fff;'); +} + +/* +function showToast(msg) { + let snackbar = document.getElementById('snackbar'); + snackbar.innerHTML = msg; + snackbar.classList.add('show', setTimeout(function() { + snackbar.className = snackbar.className.replace("show", "").trim(); + }, 6400)); +} +async function getCacheTotalSize() { + // Note: opaque (i.e. cross-domain, without CORS) responses in the cache will return a size of 0. + const cacheNames = await caches.keys(); + + let cacheSize = 0; + + const sizePromises = cacheNames.map(async cacheName => { + const cache = await caches.open(cacheName); + const keys = await cache.keys(); + + await Promise.all(keys.map(async key => { + const response = await cache.match(key); + const blob = await response.blob(); + cacheSize += blob.size; + })); + + //console.log(`Cache ${cacheName}: ${cacheSize} bytes`); + }); + + await Promise.all(sizePromises); + var total = Math.round(cacheSize/1e3) + return total; + } +let installPromptEvent; +var buttonInstall = document.querySelector('#install'); +window.addEventListener('beforeinstallprompt', (event) => { + // Prevent Chrome <= 67 from automatically showing the prompt + event.preventDefault(); + // Stash the event so it can be triggered later. + installPromptEvent = event; + // Update the install UI to notify the user app can be installed + buttonInstall.disabled = false; +}); +buttonInstall.addEventListener('click', () => { + // Update the install UI to remove the install button + buttonInstall.disabled = true; + // Show the modal add to home screen dialog + installPromptEvent.prompt(); + // Wait for the user to respond to the prompt + installPromptEvent.userChoice.then((choice) => { + ga('send', 'event','Progressive Web App', 'Add to homescreen', choice.outcome); + // Clear the saved prompt since it can't be used again + installPromptEvent = null; + }); +}); +*/ + +// Setup a listener to track Add to Homescreen events. +window.addEventListener('beforeinstallprompt', e => { let installPromptEvent; + e.userChoice.then(choice => { + //var buttonInstall = document.querySelector('#install'); + ga('send', 'event','Progressive Web App', 'Add to homescreen', choice.outcome); + }); +});
\ No newline at end of file diff --git a/themes/the-roots-home/assets/main.scss b/themes/the-roots-home/assets/main.scss new file mode 100644 index 0000000..5599173 --- /dev/null +++ b/themes/the-roots-home/assets/main.scss @@ -0,0 +1,59 @@ +@charset "utf-8"; + +// Define defaults for each variable. + +$base-font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol" !default; +$base-font-size: 16px !default; +$base-font-weight: 400 !default; +$small-font-size: $base-font-size * 0.875 !default; +$base-line-height: 1.5 !default; + +$spacing-unit: 30px !default; + +$text-color: rgb(56, 53, 47) !default; +$background-color: #ebe4d1 !default; +$brand-color: #2a7ae2 !default; + +$grey-color: #444444 !default; +$grey-color-light: lighten($grey-color, 40%) !default; +$grey-color-dark: darken($grey-color, 25%) !default; +$orange-color: #f66a0a !default; +$table-text-align: left !default; + +// Width of the content area +$content-width: 700px !default; + +$on-palm: 600px !default; +$on-laptop: 900px !default; + +$on-medium: $on-palm !default; +$on-large: $on-laptop !default; + +// Use media queries like this: +// @include media-query($on-palm) { +// .wrapper { +// padding-right: $spacing-unit / 2; +// padding-left: $spacing-unit / 2; +// } +// } +// Notice the following mixin uses max-width, in a deprecated, desktop-first +// approach, whereas media queries used elsewhere now use min-width. +@mixin media-query($device) { + @media screen and (min-width: $device) { + @content; + } +} + +@mixin relative-font-size($ratio) { + font-size: $base-font-size * $ratio; +} + + +// Import partials from `sass_dir` (defaults to `_sass`) +@import + "_scss/base", + "_scss/layout", + "_scss/syntax-highlighting", + "_scss/media", + "_scss/print" +; diff --git a/themes/the-roots-home/assets/sw.js b/themes/the-roots-home/assets/sw.js new file mode 100644 index 0000000..3656c18 --- /dev/null +++ b/themes/the-roots-home/assets/sw.js @@ -0,0 +1,210 @@ +"use strict"; +var CACHE_NAME = '{{ now.Unix }}'; +var urlsToCache = [ + '/?utm_source=homescreen' +]; +var idbDatabase; +var IDB_VERSION = {{ now.Unix }}; +var STOP_RETRYING_AFTER = 86400000; // One day, in milliseconds. +var STORE_NAME = 'urls'; + +// This is basic boilerplate for interacting with IndexedDB. Adapted from +// https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API/Using_IndexedDB +function openDatabaseAndReplayRequests() { + var indexedDBOpenRequest = indexedDB.open('offline-analytics', IDB_VERSION); + + // This top-level error handler will be invoked any time there's an IndexedDB-related error. + indexedDBOpenRequest.onerror = function(error) { + console.error('IndexedDB error:', error); + }; + + // This should only execute if there's a need to create a new database for the given IDB_VERSION. + indexedDBOpenRequest.onupgradeneeded = function() { + this.result.createObjectStore(STORE_NAME, {keyPath: 'url'}); + }; + + // This will execute each time the database is opened. + indexedDBOpenRequest.onsuccess = function() { + idbDatabase = this.result; + replayAnalyticsRequests(); + }; +} + +// Helper method to get the object store that we care about. +function getObjectStore(storeName, mode) { + return idbDatabase.transaction(storeName, mode).objectStore(storeName); +} + +function replayAnalyticsRequests() { + var savedRequests = []; + + getObjectStore(STORE_NAME).openCursor().onsuccess = function(event) { + // See https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API/Using_IndexedDB#Using_a_cursor + var cursor = event.target.result; + + if (cursor) { + // Keep moving the cursor forward and collecting saved requests. + savedRequests.push(cursor.value); + cursor.continue(); + } else { + // At this point, we have all the saved requests. + //console.log('About to replay %d saved Google Analytics requests...', + // savedRequests.length); + + savedRequests.forEach(function(savedRequest) { + var queueTime = Date.now() - savedRequest.timestamp; + if (queueTime > STOP_RETRYING_AFTER) { + getObjectStore(STORE_NAME, 'readwrite').delete(savedRequest.url); + //console.log(' Request has been queued for %d milliseconds. ' + + //'No longer attempting to replay.', queueTime); + } else { + // The qt= URL parameter specifies the time delta in between right now, and when the + // /collect request was initially intended to be sent. See + // https://developers.google.com/analytics/devguides/collection/protocol/v1/parameters#qt + var requestUrl = savedRequest.url + '&qt=' + queueTime; + + //console.log(' Replaying', requestUrl); + + fetch(requestUrl).then(function(response) { + if (response.status < 400) { + // If sending the /collect request was successful, then remove it from the IndexedDB. + getObjectStore(STORE_NAME, 'readwrite').delete(savedRequest.url); + //console.log(' Replaying succeeded.'); + } else { + // This will be triggered if, e.g., Google Analytics returns a HTTP 50x response. + // The request will be replayed the next time the service worker starts up. + //console.error(' Replaying failed:', response); + } + }).catch(function(error) { + // This will be triggered if the network is still down. The request will be replayed again + // the next time the service worker starts up. + //console.error(' Replaying failed:', error); + }); + } + }); + } + }; +} + +// Open the IndexedDB and check for requests to replay each time the service worker starts up. +// Since the service worker is terminated fairly frequently, it should start up again for most +// page navigations. It also might start up if it's used in a background sync or a push +// notification context. +openDatabaseAndReplayRequests(); + +self.addEventListener('install', event => { + event.waitUntil(caches.open(CACHE_NAME) + .then(cache => cache.addAll(urlsToCache)).then(() => { + return self.skipWaiting(); + }) + ); +}); + +self.addEventListener('fetch',event => { + event.respondWith( + caches.match(event.request) + .then(response => { + if (response) return response; + + var fetchRequest = event.request.clone(); + return fetch(fetchRequest).then(response => { + if (!response || response.status != 200 || response.type !== 'basic'){ + if (response.status >= 500) { + // If this is a Google Analytics ping then we want to retry it if a HTTP 5xx response + // was returned, just like we'd retry it if the network was down. + checkForAnalyticsRequest(event.request.url); + } + return response; + } + + var responseToCache = response.clone(); + caches.open(CACHE_NAME).then(cache => { + cache.put(event.request, responseToCache); + }); + return response; + }).catch(() => { + // The catch() will be triggered for network failures. Let's see if it was a request for + // a Google Analytics ping, and save it to be retried if it was. + checkForAnalyticsRequest(event.request.url); + return caches.match('/offline.html'); + }) + })); + }); + +self.addEventListener('activate',event => { + var chacheWhiteList=[CACHE_NAME]; + event.waitUntil( + caches.keys().then(keyList => { + return Promise.all(keyList.map(key => { + if (chacheWhiteList.indexOf(key) === -1) + return caches.delete(key); + })); + }).then(() => { + return self.clients.claim(); + }) + ); + }); + +/* +self.addEventListener('push', function(event) { + //console.log('Push message', event); + + var title = 'Ada postingan baru!'; + + event.waitUntil( + self.registration.showNotification(title, { + 'body': 'Cek postingan baru ane gan..', + 'vibrate': [200, 100, 200, 100, 200, 100, 400], + 'icon': 'assets/images/avatar.jpg' + })); +}); + +self.addEventListener('notificationclick', function(event) { + //console.log('Notification click: tag', event.notification.tag); + // Android doesn't close the notification when you click it + // See http://crbug.com/463146 + event.notification.close(); + var url = 'https://bekti.net/blog'; + // Check if there's already a tab open with this URL. + // If yes: focus on the tab. + // If no: open a tab with the URL. + event.waitUntil( + clients.matchAll({ + type: 'window' + }) + .then(function(windowClients) { + console.log('WindowClients', windowClients); + for (var i = 0; i < windowClients.length; i++) { + var client = windowClients[i]; + //console.log('WindowClient', client); + if (client.url === url && 'focus' in client) { + return client.focus(); + } + } + if (clients.openWindow) { + return clients.openWindow(url); + } + }) + ); + }); +*/ + + function checkForAnalyticsRequest(requestUrl) { + // Construct a URL object (https://developer.mozilla.org/en-US/docs/Web/API/URL.URL) + // to make it easier to check the various components without dealing with string parsing. + var url = new URL(requestUrl); + + if ((url.hostname === 'www.google-analytics.com' || + url.hostname === 'ssl.google-analytics.com') && + url.pathname === '/collect') { + //console.log(' Storing Google Analytics request in IndexedDB to be replayed later.'); + saveAnalyticsRequest(requestUrl); + } + } + + function saveAnalyticsRequest(requestUrl) { + getObjectStore(STORE_NAME, 'readwrite').add({ + url: requestUrl, + timestamp: Date.now() + }); + }
\ No newline at end of file diff --git a/themes/the-roots-home/layouts/404.html b/themes/the-roots-home/layouts/404.html new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/themes/the-roots-home/layouts/404.html diff --git a/themes/the-roots-home/layouts/_default/_markup/render-link.html b/themes/the-roots-home/layouts/_default/_markup/render-link.html new file mode 100644 index 0000000..122f0e2 --- /dev/null +++ b/themes/the-roots-home/layouts/_default/_markup/render-link.html @@ -0,0 +1,2 @@ + +<a href="{{ .Destination | safeURL }}"{{ with .Title}} title="{{ . }}"{{ end }}{{ if strings.HasPrefix .Destination "http" }} target="_blank" rel="nofollow noreferrer noopener"{{ end }}>{{ .Text | safeHTML }}</a>
\ No newline at end of file diff --git a/themes/the-roots-home/layouts/_default/baseof.html b/themes/the-roots-home/layouts/_default/baseof.html new file mode 100644 index 0000000..e5e4c49 --- /dev/null +++ b/themes/the-roots-home/layouts/_default/baseof.html @@ -0,0 +1,11 @@ +<!DOCTYPE html> +<html lang={{ .Site.LanguageCode }}> + {{- partial "head" . -}} + <body> + {{- partial "header" . -}} + <main id="content"> + {{- block "main" . }}{{- end }} + </main> + {{- partialCached "footer" . -}} + </body> +</html> diff --git a/themes/the-roots-home/layouts/_default/list.html b/themes/the-roots-home/layouts/_default/list.html new file mode 100644 index 0000000..d68affa --- /dev/null +++ b/themes/the-roots-home/layouts/_default/list.html @@ -0,0 +1,46 @@ +{{ define "main" }} +<section class="content item-list"> + {{if and (not .IsHome) .Parent }} + <div class="item"><ion-icon name="arrow-undo-sharp"></ion-icon> <a title="{{.Parent.Title}}" href="{{.Parent.Permalink}}">../</a></div> + {{ end }} + {{ range (.Paginate ( (.Pages.ByDate.Reverse).ByWeight) 100).Pages }} + <div class="item"> + <h3 class="item-title"> + {{ if eq .Kind "page" }} + <ion-icon name="document-text-outline"></ion-icon> + {{ else if eq .Kind "term"}} + <ion-icon name="bookmarks-outline"></ion-icon> + {{ else }} + <ion-icon name="folder-outline"></ion-icon> + {{ end }} + <a title="{{ .Title }}" href="{{ .Permalink }}"> + {{ $item := . }} + {{ with .File}} + {{if and (eq $item.Kind "page") (not (eq (path.Base .Path) "index.md")) }} + {{ path.Base .Path }}{{ else }}{{ path.Base $item.RelPermalink }} + {{end}} + {{ else }} + {{ path.Base $item.RelPermalink }} + {{end}} + </a> + </h3> + <span>{{with .GitInfo }} <em>@{{.AbbreviatedHash}}</em> {{.Subject }} {{ end }}</span> + <time datetime="2006-01-02">{{ .Lastmod.Format "2 Jan 2006" }}</time> + </div> + {{ end }} + {{ with .Paginator}} + <div class="pagination"> + <div class="next"> + {{ if .HasNext }} + <a href="{{.Next.URL}}">Oldest</a> + {{ end }} + </div> + <div class="prev"> + {{ if .HasPrev }} + <a href="{{.Prev.URL}}">Newest</a> + {{ end }} + </div> + </div> + {{ end }} +</section> +{{ end }}
\ No newline at end of file diff --git a/themes/the-roots-home/layouts/_default/single.html b/themes/the-roots-home/layouts/_default/single.html new file mode 100644 index 0000000..dd61457 --- /dev/null +++ b/themes/the-roots-home/layouts/_default/single.html @@ -0,0 +1,35 @@ +{{ define "main" }} +<article role="article" class="content post h-entry" itemscope="" itemtype="http://schema.org/BlogPosting"> + <header class="post-header"> + <h2 class="post-title" itemprop="name headline">{{ .Title }}</h2> + <span class="post-meta"> + <time class="date-published" datetime="{{ .Date.Format "2006-01-02T15:04:05+07:00" | safeHTML }}" itemprop="datePublished"> + {{ .Date.Format "Mon, 2 Jan 2006" }} + </time> + {{ with .Params.tags }} + <ul id="tags"> + {{ range . }} + <li> <a href="{{ "tags/" | absURL }}{{ . | urlize }}">#{{ . }}</a> </li> + {{ end }} + </ul> + {{ end }} + </span> + </header> + <div class="post-content" itemprop="articleBody"> + {{ .Content | safeHTML}} + </div> +</article> +<div class="pagination"> + <div class="prev"> + {{ if .PrevInSection }} + <a href="{{.PrevInSection.Permalink}}">Previous Post</a> + {{ end }} + </div> + <div class="next"> + {{ if .NextInSection }} + <a href="{{.NextInSection.Permalink}}">Next Post</a> + {{ end }} + </div> +</div> +{{ template "_internal/disqus.html" . }} +{{ end }}
\ No newline at end of file diff --git a/themes/the-roots-home/layouts/index.webmanifest b/themes/the-roots-home/layouts/index.webmanifest new file mode 100644 index 0000000..d30e77d --- /dev/null +++ b/themes/the-roots-home/layouts/index.webmanifest @@ -0,0 +1,65 @@ +{ + "lang": "{{site.Language.Lang}}", + "dir": "ltr", + "name": "{{site.Title}}", + "description": "{{ site.Params.description }}", + "short_name": "{{ site.Params.siteShortName }}", + "background_color": "#03a9f4", + "theme_color": "#3da3f7", + "display": "standalone", + "orientation": "portrait", + "start_url": "{{ .Site.BaseURL | absURL }}?utm_source=homescreen", + "scope": "{{ .Site.BaseURL | absURL }}", + "icons": [ + { + "src": "{{ .Site.BaseURL }}{{ "icons/36.png" }}", + "sizes": "36x36", + "type": "image/png", + "density": "0.75" + }, + { + "src": "{{ .Site.BaseURL }}{{ "icons/48.png" }}", + "sizes": "48x48", + "type": "image/png", + "density": "1.0" + }, + { + "src": "{{ .Site.BaseURL }}{{ "icons/72.png" }}", + "sizes": "72x72", + "type": "image/png", + "density": "1.5" + }, + { + "src": "{{ .Site.BaseURL }}{{ "icons/96.png" }}", + "sizes": "96x96", + "type": "image/png", + "density": "2.0" + }, + { + "src": "{{ .Site.BaseURL }}{{ "icons/144.png" }}", + "sizes": "144x144", + "type": "image/png", + "density": "3.0" + }, + { + "src": "{{ .Site.BaseURL }}{{ "icons/192.png" }}", + "sizes": "192x192", + "type": "image/png", + "density": "4.0" + }, + { + "src": "{{ .Site.BaseURL }}{{ "icons/256.png" }}", + "sizes": "256x256", + "type": "image/png" + }, + { + "src": "{{ .Site.BaseURL }}{{ "icons/512.png" }}", + "sizes": "512x512", + "type": "image/png" + }, + { + "src": "{{ .Site.BaseURL }}{{ "icons/icon.svg" }}", + "sizes": "any" + } + ] + }
\ No newline at end of file diff --git a/themes/the-roots-home/layouts/partials/footer.html b/themes/the-roots-home/layouts/partials/footer.html new file mode 100644 index 0000000..d4b2b48 --- /dev/null +++ b/themes/the-roots-home/layouts/partials/footer.html @@ -0,0 +1,11 @@ +{{ $app := resources.Get "app.js" | resources.ExecuteAsTemplate "app.js" . | minify }} +<footer class="site-footer"> + <span class="left">Gohugo/{{ hugo.Version }}</span> + <span class="right"> + <em>The Root's Home</em> By + <a href="https://github.com/rmsubekti" target="_blank" rel="noopener noreferrer">rmsubekti</a> + </span> +</footer> +{{ if ne hugo.Environment "development"}} +<script type="text/javascript" src="{{ $app.Permalink }}" integrity="{{ $app.Data.Integrity }}"></script> +{{ end }} diff --git a/themes/the-roots-home/layouts/partials/head.html b/themes/the-roots-home/layouts/partials/head.html new file mode 100644 index 0000000..271d574 --- /dev/null +++ b/themes/the-roots-home/layouts/partials/head.html @@ -0,0 +1,34 @@ +{{- $description := .Description | default .Summary | default .Site.Params.description | plainify | safeHTML -}} +{{- $style := resources.Get "main.scss" | resources.ExecuteAsTemplate "css/main.scss" . | toCSS | minify | fingerprint -}} + +{{- define "title" -}} +{{- if .p1.Parent -}} +{{- template "title" (dict "p1" .p1.Parent "p2" .p2 ) -}} +{{- else if not .p1.IsHome -}} +{{- template "title" (dict "p1" .p1.Site.Home "p2" .p2 ) -}} +{{- end -}} +{{- if .p1.IsHome -}}{{ .p1.Title -}}{{- if and (eq .p2 .p1) -}}/{{- end -}}{{- else -}}/{{- path.Base .p1.RelPermalink -}}{{- end -}} +{{- end -}} + +<head> + <meta charset="UTF-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <meta http-equiv="X-UA-Compatible" content="ie=edge"> + <title>{{if .IsPage }} {{.Title}} {{else}}{{ template "title" (dict "p1" . "p2" .) }} {{end}}- {{ .Site.Title -}}</title> + <meta name="description" content="{{ $description }}"> + <link rel="canonical" href="{{ .Permalink }}"> + <meta property="og:title" content="{{ .Title }}"> + <meta property="og:type" content="{{ if .IsPage }}article{{ else }}website{{ end }}"> + <meta property="og:url" content="{{ .Permalink }}"> + <meta property="og:description" content="{{ $description }}"> + <meta property="og:site_name" content="{{ .Site.Title }}"> + <link rel="stylesheet" href="{{ $style.Permalink }}" integrity="{{ $style.Data.Integrity }}"> + {{ range .AlternativeOutputFormats -}} + {{ printf `<link rel="%s" type="%s" href="%s" title="%s" />` .Rel .MediaType.Type .Permalink $.Site.Title | safeHTML }} + {{ end -}} + {{ partial "meta/icons" . }} + {{ partial "meta/json-ld" . }} + {{ hugo.Generator}} + <script type="module" src="https://unpkg.com/ionicons@5.1.2/dist/ionicons/ionicons.esm.js"></script> + <script nomodule="" src="https://unpkg.com/ionicons@5.1.2/dist/ionicons/ionicons.js"></script> +</head> diff --git a/themes/the-roots-home/layouts/partials/header.html b/themes/the-roots-home/layouts/partials/header.html new file mode 100644 index 0000000..b41b263 --- /dev/null +++ b/themes/the-roots-home/layouts/partials/header.html @@ -0,0 +1,27 @@ +<header class="site-header"> + <nav class="site-nav" role="navigation" aria-label="breadcrumb"> + <ol itemscope itemtype="https://schema.org/BreadcrumbList" class="breadcrumb"> + {{- template "breadcrumb" (dict "p1" . "p2" .) -}} + </ol> + </nav> + <h1 class="site-title hidden"> + <a href="{{ .Site.BaseURL}}">{{.Site.Title}}</a> + </h1> +</header> +{{if not .IsPage }}<h3 class="page-description">{{ cond .IsHome (.Site.Params.Description | default .Site.Title) (.Title | default .Content)}}</h3>{{ end }} +{{- define "breadcrumb" -}} +{{- if .p1.Parent -}} +{{- template "breadcrumb" (dict "p1" .p1.Parent "p2" .p2 ) -}} +{{- else if not .p1.IsHome -}} +{{- template "breadcrumb" (dict "p1" .p1.Site.Home "p2" .p2 ) -}} +{{- end -}} +{{- if (not .p1.IsHome ) -}}/{{- end -}} +<li class="breadcrumb-item {{ if eq .p1 .p2 -}}active{{- end}} {{if .p1.IsPage -}}hidden{{- end}}" {{ if eq .p1 .p2 -}}aria-current="page"{{- end}} + itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem"> + <a itemtype="https://schema.org/Thing" itemprop="item" href="{{- .p1.Permalink -}}"> + <span itemprop="name">{{ if .p1.IsHome }}{{- .p1.Title -}} {{ else }}{{- path.Base .p1.Permalink -}} {{ end }}</span> + </a> + <meta itemprop="position" content="{{- if .p1.IsPage -}}{{- add .p1.Parent.Weight 1 -}} {{- else -}} {{- .p1.Weight -}} {{- end -}}" /> +</li> +{{- if and (.p1.IsHome ) (eq .p1 .p2 ) -}}/{{- end -}} +{{- end -}}
\ No newline at end of file diff --git a/themes/the-roots-home/layouts/partials/meta/icons.html b/themes/the-roots-home/layouts/partials/meta/icons.html new file mode 100644 index 0000000..0b1c6b3 --- /dev/null +++ b/themes/the-roots-home/layouts/partials/meta/icons.html @@ -0,0 +1,38 @@ +<!-- See https://goo.gl/qRE0vM --> +<meta name="theme-color" content="#a2466c"> +<!-- Add to homescreen for Chrome on Android. Fallback for manifest.json --> +<meta name="mobile-web-app-capable" content="yes"> +<meta name="application-name" content="{{ .Site.Title }}"/> +<!-- Default icons --> +<link rel="icon" href="{{ .Site.BaseURL }}{{ "favicon.ico" }}" type="image/x-icon"> +<link rel="shortcut icon" href="{{ "favicon.ico" | relURL }}" type="image/x-icon"> +<link rel="icon" type="image/png" href="{{ "icons/32.png" | relURL }}" sizes="32x32"> +<link rel="icon" type="image/png" href="{{ "icons/192.png" | relURL }}" sizes="192x192"> +<link rel="icon" type="image/png" href="{{ "icons/96.png" | relURL }}" sizes="96x96"> +<link rel="icon" type="image/png" href="{{ "icons/16.png" | relURL }}" sizes="16x16"> +<link rel="mask-icon" href="{{ "icons/icon.svg" | relURL }}" color="#5bbad5"> +<!-- Homescreen icons --> +<link rel="apple-touch-icon" href="{{ "icons/48.png" | relURL }}"> +<link rel="apple-touch-icon" sizes="57x57" href="{{ "icons/57.png" | relURL }}"> +<link rel="apple-touch-icon" sizes="60x60" href="{{ "icons/60.png" | relURL }}"> +<link rel="apple-touch-icon" sizes="72x72" href="{{ "icons/72.png" | relURL }}"> +<link rel="apple-touch-icon" sizes="76x76" href="{{ "icons/76.png" | relURL }}"> +<link rel="apple-touch-icon" sizes="96x96" href="{{ "icons/96.png" | relURL }}"> +<link rel="apple-touch-icon" sizes="120x120" href="{{ "icons/120.png" | relURL }}"> +<link rel="apple-touch-icon" sizes="144x144" href="{{ "icons/144.png" | relURL }}"> +<link rel="apple-touch-icon" sizes="152x152" href="{{ "icons/152.png" | relURL }}"> +<link rel="apple-touch-icon" sizes="180x180" href="{{ "icons/180.png" | relURL }}"> +<link rel="apple-touch-icon" sizes="192x192" href="{{ "icons/192.png" | relURL }}"> +<!-- Add to homescreen for Safari on iOS --> +<meta name="apple-mobile-web-app-capable" content="yes"> +<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"> +<meta name="apple-mobile-web-app-title" content="{{ .Site.Title }}"> +<!-- specifying a startup image --> +<link rel="apple-touch-startup-image" href="{{ "icons/144.png" | relURL }}"> +<!-- enables or disables automatic detection of possible phone numbers --> +<meta name="format-detection" content="telephone=no"> +<!-- Tile icon for Windows 8 (144x144 + tile color) --> +<meta name="msapplication-TileImage" content="{{ "icons/144.png" | relURL }}"> +<meta name="msapplication-TileColor" content="#fff"> +<meta name="msapplication-tap-highlight" content="no"> +<meta name="msapplication-navbutton-color" content="#fff"> diff --git a/themes/the-roots-home/layouts/partials/meta/json-ld.html b/themes/the-roots-home/layouts/partials/meta/json-ld.html new file mode 100644 index 0000000..260c7cf --- /dev/null +++ b/themes/the-roots-home/layouts/partials/meta/json-ld.html @@ -0,0 +1,117 @@ +{{- define "breadcrumbld" -}} +{{- if .p01.Parent -}} + {{- template "breadcrumbld" (dict "p01" .p01.Parent "p02" .p02 ) -}} +{{- else if not .p01.IsHome -}} + {{- template "breadcrumbld" (dict "p01" .p01.Site.Home "p02" .p02 ) -}} +{{- end -}} +{ + "@type": "ListItem", + "position": {{- if .p01.IsPage -}}{{- add .p01.Parent.Weight 1 -}} {{- else -}} {{- .p01.Weight -}} {{- end -}}, + "item": { + "@type": "{{if .p01.IsHome}}WebSite{{else}}WebPage{{end}}", + "@id": "{{ .p01.Permalink | absURL }}", + {{ if .p01.Params.featuredImage }}"image": "{{ . }}", {{ end }} + "name": "{{.p01.Title}}" + } +}{{- if not (eq .p01 .p02 ) -}},{{- end -}} +{{- end -}} + +<script type="application/ld+json"> + { + "@context": "http://schema.org", + "@type": "BreadcrumbList", + "itemListElement": [ + {{- template "breadcrumbld" (dict "p01" . "p02" .) -}} + ] + }, + + {{ if .IsHome }} + { + "@context": "http://schema.org", + "@type": "WebSite", + "name": {{ .Site.Title }}, + "url": {{ .Site.BaseURL }}, + "sameAs": [ + "https://www.facebook.com/{{ .Site.Params.facebook }}", + "https://www.instagram.com/{{ .Site.Params.instagram }}", + "https://twitter.com/{{ .Site.Params.twitter }}", + "https://github.com/{{ .Site.Params.github }}" + ] + } + + {{ else }} + { + "@context": "https://schema.org", + "@type": "{{ if .IsPage }}BlogPosting{{ else }}WebPage{{ end }}", + "headline": {{ .Title }}, + "description": "{{ (.Params.Description | default (.Summary | truncate 200)) | safeHTML }}", + {{if or .Date .PublishDate }}"datePublished": {{ (.PublishDate.Format "2006-01-02T15:04:05-07:00" | default (.Date.Format "2006-01-02T15:04:05-07:00")) | safeHTML }},{{ end }} + {{ with .Lastmod }}"dateModified": {{ .Format "2006-01-02T15:04:05-07:00" | safeHTML }},{{ end }} + "mainEntityOfPage": { + "@type": "WebPage", + "@id": "{{ .Permalink | absURL }}" + }, + {{ with .Params.tags -}}"keywords": "{{ delimit . ", " }}",{{- end }} + {{ with .WordCount }}"wordcount": {{ . }},{{ end }} + "url": "{{ .Permalink | absURL }}", + {{ with .Params.featuredImage }} + "image": { + "@type": "imageObject", + "url": "{{ . | absURL }}", + "height": "{{ .height | default 600}}", + "width": "{{ .width | default 800}}", + }, + {{ end }} + {{ with .Site }} + "publisher": { + "@type": "Organization", + "name": "{{ .Title }}", + "logo": { + "@type": "imageObject", + "url": "{{ .Params.logo }}" + } + }, + {{ end }} + + {{ if .IsPage }} + "author": { + "@type": "Person", + "name": "{{ if .GitInfo }} {{.GitInfo.AuthorName}} {{else}} {{(.Params.Author | default .Site.Title ) }}{{end}}" + }, + {{ $posts := where (where .Site.RegularPages "Section" .Section ) ".Permalink" "!=" .Permalink }} + {{ if gt (len $posts) 1 }} + "sharedContent": [ + {{ range $i, $item:=(shuffle $posts | first 3) }} + { + "@type":"WebPage", + "headline": "{{ .Title }}", + "url": "{{ .Permalink | absURL }}", + "author":{ + "@type":"Person", + "name": "{{ if .GitInfo }} {{.GitInfo.AuthorName}} {{else}} {{(.Params.Author | default .Site.Title ) }}{{end}}" + } + }{{ if not (eq (add $i 1) 3)}},{{ end }} + {{ end }} + ], + {{ end }} + "articleBody": "{{ .Summary | safeHTML}}" + + {{ else }} + "sharedContent": [ + {{ range $i, $item:=(first 20 (where .Site.RegularPages "Section" .Section)) }} + { + "@type":"WebPage", + "headline": "{{ .Title }}", + "url": "{{ .Permalink | absURL }}", + "author":{ + "@type":"Person", + "name": "{{ if .GitInfo }} {{.GitInfo.AuthorName}} {{else}} {{(.Params.Author | default .Site.Title ) }}{{end}}" + } + }{{ if not (eq (add $i 1) 20)}},{{ end }} + {{ end }} + ] + {{ end }} + } + + {{ end }} + </script> diff --git a/themes/the-roots-home/layouts/robots.txt b/themes/the-roots-home/layouts/robots.txt new file mode 100644 index 0000000..7d329b1 --- /dev/null +++ b/themes/the-roots-home/layouts/robots.txt @@ -0,0 +1 @@ +User-agent: * diff --git a/themes/the-roots-home/layouts/shortcodes/indexdir.html b/themes/the-roots-home/layouts/shortcodes/indexdir.html new file mode 100644 index 0000000..4205d43 --- /dev/null +++ b/themes/the-roots-home/layouts/shortcodes/indexdir.html @@ -0,0 +1,13 @@ +{{- $pathURL := .Get "pathURL" -}} +{{- $path := .Get "path" -}} +{{- $files := readDir $path -}} +<table> + <th>Size in bytes</th> + <th>Name</th> +{{- range $files }} + <tr> + <td>{{ .Size }}</td> + <td><a href="{{ $pathURL }}{{ .Name | relURL }}"> {{ .Name }}</a></td> + </tr> +{{- end }} +</table>
\ No newline at end of file diff --git a/themes/the-roots-home/screenshot.png b/themes/the-roots-home/screenshot.png Binary files differnew file mode 100644 index 0000000..d2a91b2 --- /dev/null +++ b/themes/the-roots-home/screenshot.png diff --git a/themes/the-roots-home/static/favicon.ico b/themes/the-roots-home/static/favicon.ico Binary files differnew file mode 100644 index 0000000..db36262 --- /dev/null +++ b/themes/the-roots-home/static/favicon.ico diff --git a/themes/the-roots-home/static/icons/114.png b/themes/the-roots-home/static/icons/114.png Binary files differnew file mode 100644 index 0000000..bfef620 --- /dev/null +++ b/themes/the-roots-home/static/icons/114.png diff --git a/themes/the-roots-home/static/icons/120.png b/themes/the-roots-home/static/icons/120.png Binary files differnew file mode 100644 index 0000000..a3090b3 --- /dev/null +++ b/themes/the-roots-home/static/icons/120.png diff --git a/themes/the-roots-home/static/icons/144.png b/themes/the-roots-home/static/icons/144.png Binary files differnew file mode 100644 index 0000000..67e8bfe --- /dev/null +++ b/themes/the-roots-home/static/icons/144.png diff --git a/themes/the-roots-home/static/icons/150.png b/themes/the-roots-home/static/icons/150.png Binary files differnew file mode 100644 index 0000000..1a2ccf2 --- /dev/null +++ b/themes/the-roots-home/static/icons/150.png diff --git a/themes/the-roots-home/static/icons/152.png b/themes/the-roots-home/static/icons/152.png Binary files differnew file mode 100644 index 0000000..89ba7ca --- /dev/null +++ b/themes/the-roots-home/static/icons/152.png diff --git a/themes/the-roots-home/static/icons/16.png b/themes/the-roots-home/static/icons/16.png Binary files differnew file mode 100644 index 0000000..b53ec3f --- /dev/null +++ b/themes/the-roots-home/static/icons/16.png diff --git a/themes/the-roots-home/static/icons/180.png b/themes/the-roots-home/static/icons/180.png Binary files differnew file mode 100644 index 0000000..b7865ab --- /dev/null +++ b/themes/the-roots-home/static/icons/180.png diff --git a/themes/the-roots-home/static/icons/192.png b/themes/the-roots-home/static/icons/192.png Binary files differnew file mode 100644 index 0000000..cb87f7b --- /dev/null +++ b/themes/the-roots-home/static/icons/192.png diff --git a/themes/the-roots-home/static/icons/256.png b/themes/the-roots-home/static/icons/256.png Binary files differnew file mode 100644 index 0000000..60aa174 --- /dev/null +++ b/themes/the-roots-home/static/icons/256.png diff --git a/themes/the-roots-home/static/icons/310.png b/themes/the-roots-home/static/icons/310.png Binary files differnew file mode 100644 index 0000000..a7cf2e7 --- /dev/null +++ b/themes/the-roots-home/static/icons/310.png diff --git a/themes/the-roots-home/static/icons/32.png b/themes/the-roots-home/static/icons/32.png Binary files differnew file mode 100644 index 0000000..6def5b3 --- /dev/null +++ b/themes/the-roots-home/static/icons/32.png diff --git a/themes/the-roots-home/static/icons/36.png b/themes/the-roots-home/static/icons/36.png Binary files differnew file mode 100644 index 0000000..04250dc --- /dev/null +++ b/themes/the-roots-home/static/icons/36.png diff --git a/themes/the-roots-home/static/icons/48.png b/themes/the-roots-home/static/icons/48.png Binary files differnew file mode 100644 index 0000000..46e8b03 --- /dev/null +++ b/themes/the-roots-home/static/icons/48.png diff --git a/themes/the-roots-home/static/icons/512.png b/themes/the-roots-home/static/icons/512.png Binary files differnew file mode 100644 index 0000000..3694003 --- /dev/null +++ b/themes/the-roots-home/static/icons/512.png diff --git a/themes/the-roots-home/static/icons/57.png b/themes/the-roots-home/static/icons/57.png Binary files differnew file mode 100644 index 0000000..d62571d --- /dev/null +++ b/themes/the-roots-home/static/icons/57.png diff --git a/themes/the-roots-home/static/icons/60.png b/themes/the-roots-home/static/icons/60.png Binary files differnew file mode 100644 index 0000000..0ec964b --- /dev/null +++ b/themes/the-roots-home/static/icons/60.png diff --git a/themes/the-roots-home/static/icons/70.png b/themes/the-roots-home/static/icons/70.png Binary files differnew file mode 100644 index 0000000..4759ca4 --- /dev/null +++ b/themes/the-roots-home/static/icons/70.png diff --git a/themes/the-roots-home/static/icons/72.png b/themes/the-roots-home/static/icons/72.png Binary files differnew file mode 100644 index 0000000..1ba7148 --- /dev/null +++ b/themes/the-roots-home/static/icons/72.png diff --git a/themes/the-roots-home/static/icons/76.png b/themes/the-roots-home/static/icons/76.png Binary files differnew file mode 100644 index 0000000..4fdf362 --- /dev/null +++ b/themes/the-roots-home/static/icons/76.png diff --git a/themes/the-roots-home/static/icons/96.png b/themes/the-roots-home/static/icons/96.png Binary files differnew file mode 100644 index 0000000..19f8e90 --- /dev/null +++ b/themes/the-roots-home/static/icons/96.png diff --git a/themes/the-roots-home/static/icons/favicon.ico b/themes/the-roots-home/static/icons/favicon.ico Binary files differnew file mode 100644 index 0000000..db36262 --- /dev/null +++ b/themes/the-roots-home/static/icons/favicon.ico diff --git a/themes/the-roots-home/static/icons/icon.svg b/themes/the-roots-home/static/icons/icon.svg new file mode 100644 index 0000000..d158791 --- /dev/null +++ b/themes/the-roots-home/static/icons/icon.svg @@ -0,0 +1,31 @@ +<?xml version="1.0" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" + "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"> +<svg version="1.0" xmlns="http://www.w3.org/2000/svg" + width="512.000000pt" height="512.000000pt" viewBox="0 0 512.000000 512.000000" + preserveAspectRatio="xMidYMid meet"> +<metadata> +Created by potrace 1.13, written by Peter Selinger 2001-2015 +</metadata> +<g transform="translate(0.000000,512.000000) scale(0.100000,-0.100000)" +fill="#000000" stroke="none"> +<path d="M2292 4745 c-138 -48 -333 -155 -577 -318 -240 -160 -470 -347 -480 +-390 -12 -55 -46 -267 -69 -432 -47 -340 -85 -787 -106 -1230 -17 -378 -60 +-1825 -54 -1836 2 -4 35 -14 72 -24 l69 -18 17 -53 c36 -115 86 -145 246 -152 +l116 -5 92 52 c50 29 224 117 386 196 301 148 439 230 513 307 l42 43 16 180 +c9 99 29 301 45 448 41 375 58 589 66 833 l7 211 47 -56 c163 -195 346 -293 +595 -321 101 -12 232 -2 341 26 390 97 684 448 780 929 26 126 25 458 0 600 +-50 280 -160 491 -324 621 -80 63 -219 130 -337 161 -94 25 -114 27 -325 27 +-277 1 -384 -19 -583 -107 -31 -14 -61 -27 -65 -28 -4 0 -14 34 -22 77 l-15 +79 -72 13 -72 14 19 39 c11 21 20 44 20 52 0 8 -34 28 -82 47 -114 46 -204 51 +-306 15z m95 -447 c-6 -154 -28 -340 -60 -506 -10 -53 -11 -75 -3 -78 6 -2 37 +-13 68 -23 l58 -20 50 40 c60 47 149 129 322 296 186 179 286 237 464 268 363 +63 612 -64 703 -358 23 -76 25 -96 26 -292 0 -165 -4 -228 -18 -292 -70 -324 +-231 -574 -435 -676 -82 -40 -86 -41 -207 -45 -322 -11 -506 116 -546 378 -15 +96 -8 146 41 308 22 74 40 148 40 167 0 39 -26 75 -86 116 -52 36 -70 34 -151 +-12 -215 -123 -350 -353 -414 -709 -21 -117 -23 -163 -29 -750 -7 -648 -12 +-728 -55 -850 -26 -77 -37 -90 -120 -145 -179 -119 -739 -385 -762 -362 -7 7 +49 1234 87 1907 32 565 76 1127 96 1222 9 46 156 168 339 283 128 80 556 294 +589 295 5 0 6 -68 3 -162z"/> +</g> +</svg> diff --git a/themes/the-roots-home/theme.yml b/themes/the-roots-home/theme.yml new file mode 100644 index 0000000..df324fe --- /dev/null +++ b/themes/the-roots-home/theme.yml @@ -0,0 +1,21 @@ +# theme.toml template for a Hugo theme +# See https://github.com/gohugoio/hugoThemes#themetoml for an example + +name : "the-roots-home" +license : "MIT" +licenselink : "https://rmsubekti.mit-license.org/2020/license.txt" +description : "i Am ROOT!" +homepage : "https://github.com/rmsubekti/the-roots-home/" +tags : [light,simple, root] +features : [i, am, root] +min_version : "0.73.0" + +author: + name : "Rahmat Subekti" + homepage : "http://rmsubekti.github.io/" + +# If porting an existing theme +original: + name : "" + homepage : "" + repo : "" |