├── mundana.yaml
├── readme.jpg
├── thumbnail.jpg
├── assets
├── scss
│ └── vendor
│ │ └── bootstrap
│ │ ├── utilities
│ │ ├── _clearfix.scss
│ │ ├── _overflow.scss
│ │ ├── _interactions.scss
│ │ ├── _screenreaders.scss
│ │ ├── _visibility.scss
│ │ ├── _shadows.scss
│ │ ├── _float.scss
│ │ ├── _align.scss
│ │ ├── _background.scss
│ │ ├── _stretched-link.scss
│ │ ├── _position.scss
│ │ ├── _display.scss
│ │ ├── _sizing.scss
│ │ ├── _embed.scss
│ │ ├── _borders.scss
│ │ ├── _text.scss
│ │ ├── _spacing.scss
│ │ └── _flex.scss
│ │ ├── mixins
│ │ ├── _clearfix.scss
│ │ ├── _size.scss
│ │ ├── _lists.scss
│ │ ├── _text-truncate.scss
│ │ ├── _visibility.scss
│ │ ├── _resize.scss
│ │ ├── _alert.scss
│ │ ├── _text-hide.scss
│ │ ├── _badge.scss
│ │ ├── _nav-divider.scss
│ │ ├── _float.scss
│ │ ├── _list-group.scss
│ │ ├── _text-emphasis.scss
│ │ ├── _reset-text.scss
│ │ ├── _pagination.scss
│ │ ├── _box-shadow.scss
│ │ ├── _deprecate.scss
│ │ ├── _transition.scss
│ │ ├── _background-variant.scss
│ │ ├── _hover.scss
│ │ ├── _table-row.scss
│ │ ├── _screen-reader.scss
│ │ ├── _image.scss
│ │ ├── _caret.scss
│ │ ├── _border-radius.scss
│ │ ├── _gradients.scss
│ │ ├── _grid.scss
│ │ └── _grid-framework.scss
│ │ ├── _media.scss
│ │ ├── bootstrap-reboot.scss
│ │ ├── _jumbotron.scss
│ │ ├── _transitions.scss
│ │ ├── _utilities.scss
│ │ ├── _root.scss
│ │ ├── bootstrap-grid.scss
│ │ ├── bootstrap.scss
│ │ ├── _close.scss
│ │ ├── _code.scss
│ │ ├── _mixins.scss
│ │ ├── _toasts.scss
│ │ ├── _images.scss
│ │ ├── _badge.scss
│ │ ├── _progress.scss
│ │ ├── _alert.scss
│ │ ├── _breadcrumb.scss
│ │ ├── _spinners.scss
│ │ ├── _grid.scss
│ │ ├── _pagination.scss
│ │ ├── _type.scss
│ │ ├── _nav.scss
│ │ └── _tooltip.scss
├── webfonts
│ ├── fa-brands-400.eot
│ ├── fa-brands-400.ttf
│ ├── fa-solid-900.eot
│ ├── fa-solid-900.ttf
│ ├── fa-solid-900.woff
│ ├── fa-brands-400.woff
│ ├── fa-brands-400.woff2
│ ├── fa-regular-400.eot
│ ├── fa-regular-400.ttf
│ ├── fa-regular-400.woff
│ ├── fa-solid-900.woff2
│ └── fa-regular-400.woff2
├── fonts
│ ├── lora-v36-latin-700.woff2
│ ├── lora-v36-latin-italic.woff2
│ └── lora-v36-latin-regular.woff2
└── css
│ ├── google-fonts-local.css
│ └── bootstrap-reboot.min.css
├── screenshot.jpg
├── templates
├── partials
│ ├── tracking-footer.html.twig
│ ├── head
│ │ ├── tracking-header.html.twig
│ │ ├── favicon.html.twig
│ │ └── assets.html.twig
│ ├── blog
│ │ ├── avatar.html.twig
│ │ ├── page-summary.html.twig
│ │ ├── date.html.twig
│ │ ├── readingtime.html.twig
│ │ ├── disqus.html.twig
│ │ ├── author.html.twig
│ │ ├── mailchimp.html.twig
│ │ ├── share.html.twig
│ │ ├── footer_pagination.html.twig
│ │ └── relatedpages.html.twig
│ ├── head.html.twig
│ ├── page
│ │ ├── backtotop.html.twig
│ │ └── date.html.twig
│ ├── layout.html.twig
│ ├── sidebar
│ │ ├── random.html.twig
│ │ ├── feeds.html.twig
│ │ ├── taxonomylist.html.twig
│ │ ├── archives.html.twig
│ │ ├── featured.html.twig
│ │ ├── relatedpages.html.twig
│ │ └── categories.html.twig
│ ├── login-status.html.twig
│ ├── form-messages.html.twig
│ ├── langswitcher.html.twig
│ ├── shortcodes
│ │ ├── badge.html.twig
│ │ ├── sc-cards.html.twig
│ │ ├── alert.html.twig
│ │ ├── sc-collapse.html.twig
│ │ └── button.html.twig
│ ├── footer.html.twig
│ ├── simplesearch_item.html.twig
│ ├── messages.html.twig
│ ├── breadcrumbs.html.twig
│ ├── simplesearch_searchbox.html.twig
│ ├── forgot-form.html.twig
│ ├── pagination.html.twig
│ ├── sidebar.html.twig
│ ├── blog-list-item.html.twig
│ ├── navbar.html.twig
│ └── navigation.html.twig
├── form.html.twig
├── login.html.twig
├── forms
│ ├── form.html.twig
│ └── fields
│ │ └── checkbox
│ │ └── checkbox.html.twig
├── modular
│ ├── partials
│ │ ├── sidebar.html.twig
│ │ └── common_variables.html.twig
│ ├── sticky.html.twig
│ └── allstories.html.twig
├── error.html.twig
├── formdata.html.twig
├── macros
│ └── macros.html.twig
├── item.html.twig
├── simplesearch_results.html.twig
├── modular.html.twig
├── contact.html.twig
├── default.html.twig
└── blog.html.twig
├── images
├── favicon.png
├── contact_help.jpg
├── pedro_avataaars.png
├── lighthouse_mundana.png
└── logo
│ └── Grav_logo_white.png
├── _demo
├── pages
│ ├── 03.dropdown
│ │ ├── default.md
│ │ ├── 02.readme
│ │ │ ├── pic10.jpg
│ │ │ └── pic10.webp
│ │ └── 01.typography
│ │ │ ├── pic07.jpg
│ │ │ ├── pic07.webp
│ │ │ └── pedro_avataaars.webp
│ ├── 05.contact
│ │ ├── pic07.jpg
│ │ ├── pic07.webp
│ │ └── contact.md
│ ├── 02.blog
│ │ ├── headers
│ │ │ ├── 5.webp
│ │ │ └── ana_avataaars.webp
│ │ ├── page-editing
│ │ │ ├── 3.jpg
│ │ │ ├── 3.webp
│ │ │ └── ana_avataaars.webp
│ │ ├── taxonomy
│ │ │ ├── home.jpg
│ │ │ ├── home.webp
│ │ │ └── pedro_avataaars.webp
│ │ ├── twig-primer
│ │ │ ├── blog6.jpg
│ │ │ ├── blog6.webp
│ │ │ └── pedro_avataaars.webp
│ │ ├── markdown-sintax
│ │ │ ├── blog8.jpg
│ │ │ ├── blog8.webp
│ │ │ └── pedro_avataaars.webp
│ │ ├── welcome-to-grav
│ │ │ ├── demo1.jpg
│ │ │ ├── demo1.webp
│ │ │ ├── pedro_avataaars.webp
│ │ │ └── item.md
│ │ └── blog.md
│ ├── login
│ │ ├── secure_login.png
│ │ └── login.md
│ ├── 01.home
│ │ ├── 02._sticky
│ │ │ └── sticky.md
│ │ ├── 01._latest
│ │ │ └── latestposts.md
│ │ ├── 03._all-stories
│ │ │ └── allstories.md
│ │ └── modular.md
│ ├── thankyou
│ │ └── formdata.md
│ └── forgot_password
│ │ └── forgot.md
└── config
│ └── themes
│ └── mundana.yaml
├── blueprints
├── pages
│ ├── partials
│ │ ├── blog-url.yaml
│ │ ├── blog-bits.yaml
│ │ ├── blog-sidebar.yaml
│ │ └── item-bits.yaml
│ ├── modular
│ │ ├── sticky.yaml
│ │ ├── latestposts.yaml
│ │ └── allstories.yaml
│ ├── modular.yaml
│ ├── contact.yaml
│ ├── item.yaml
│ └── blog.yaml
└── theme
│ ├── footer.yaml
│ ├── share.yaml
│ └── blog.yaml
├── shortcodes
├── AlertShortcode.php
├── BadgeShortcode.php
├── ButtonShortcode.php
├── CollapseShortcode.php
└── CardsShortcode.php
├── LICENSE
└── blueprints.yaml
/mundana.yaml:
--------------------------------------------------------------------------------
1 | enabled: true
2 | production-mode: true
3 | blog-page: '/blog'
--------------------------------------------------------------------------------
/readme.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmoreno-rodriguez/grav-theme-mundana/HEAD/readme.jpg
--------------------------------------------------------------------------------
/thumbnail.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmoreno-rodriguez/grav-theme-mundana/HEAD/thumbnail.jpg
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/utilities/_clearfix.scss:
--------------------------------------------------------------------------------
1 | .clearfix {
2 | @include clearfix();
3 | }
4 |
--------------------------------------------------------------------------------
/screenshot.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmoreno-rodriguez/grav-theme-mundana/HEAD/screenshot.jpg
--------------------------------------------------------------------------------
/templates/partials/tracking-footer.html.twig:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/images/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmoreno-rodriguez/grav-theme-mundana/HEAD/images/favicon.png
--------------------------------------------------------------------------------
/_demo/pages/03.dropdown/default.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Dropdown
3 | hide_git_sync_repo_link: false
4 | ---
5 |
6 |
--------------------------------------------------------------------------------
/images/contact_help.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmoreno-rodriguez/grav-theme-mundana/HEAD/images/contact_help.jpg
--------------------------------------------------------------------------------
/images/pedro_avataaars.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmoreno-rodriguez/grav-theme-mundana/HEAD/images/pedro_avataaars.png
--------------------------------------------------------------------------------
/images/lighthouse_mundana.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmoreno-rodriguez/grav-theme-mundana/HEAD/images/lighthouse_mundana.png
--------------------------------------------------------------------------------
/_demo/pages/05.contact/pic07.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmoreno-rodriguez/grav-theme-mundana/HEAD/_demo/pages/05.contact/pic07.jpg
--------------------------------------------------------------------------------
/_demo/pages/05.contact/pic07.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmoreno-rodriguez/grav-theme-mundana/HEAD/_demo/pages/05.contact/pic07.webp
--------------------------------------------------------------------------------
/assets/webfonts/fa-brands-400.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmoreno-rodriguez/grav-theme-mundana/HEAD/assets/webfonts/fa-brands-400.eot
--------------------------------------------------------------------------------
/assets/webfonts/fa-brands-400.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmoreno-rodriguez/grav-theme-mundana/HEAD/assets/webfonts/fa-brands-400.ttf
--------------------------------------------------------------------------------
/assets/webfonts/fa-solid-900.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmoreno-rodriguez/grav-theme-mundana/HEAD/assets/webfonts/fa-solid-900.eot
--------------------------------------------------------------------------------
/assets/webfonts/fa-solid-900.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmoreno-rodriguez/grav-theme-mundana/HEAD/assets/webfonts/fa-solid-900.ttf
--------------------------------------------------------------------------------
/assets/webfonts/fa-solid-900.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmoreno-rodriguez/grav-theme-mundana/HEAD/assets/webfonts/fa-solid-900.woff
--------------------------------------------------------------------------------
/images/logo/Grav_logo_white.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmoreno-rodriguez/grav-theme-mundana/HEAD/images/logo/Grav_logo_white.png
--------------------------------------------------------------------------------
/templates/partials/head/tracking-header.html.twig:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/_demo/pages/02.blog/headers/5.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmoreno-rodriguez/grav-theme-mundana/HEAD/_demo/pages/02.blog/headers/5.webp
--------------------------------------------------------------------------------
/_demo/pages/login/secure_login.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmoreno-rodriguez/grav-theme-mundana/HEAD/_demo/pages/login/secure_login.png
--------------------------------------------------------------------------------
/assets/webfonts/fa-brands-400.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmoreno-rodriguez/grav-theme-mundana/HEAD/assets/webfonts/fa-brands-400.woff
--------------------------------------------------------------------------------
/assets/webfonts/fa-brands-400.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmoreno-rodriguez/grav-theme-mundana/HEAD/assets/webfonts/fa-brands-400.woff2
--------------------------------------------------------------------------------
/assets/webfonts/fa-regular-400.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmoreno-rodriguez/grav-theme-mundana/HEAD/assets/webfonts/fa-regular-400.eot
--------------------------------------------------------------------------------
/assets/webfonts/fa-regular-400.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmoreno-rodriguez/grav-theme-mundana/HEAD/assets/webfonts/fa-regular-400.ttf
--------------------------------------------------------------------------------
/assets/webfonts/fa-regular-400.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmoreno-rodriguez/grav-theme-mundana/HEAD/assets/webfonts/fa-regular-400.woff
--------------------------------------------------------------------------------
/assets/webfonts/fa-solid-900.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmoreno-rodriguez/grav-theme-mundana/HEAD/assets/webfonts/fa-solid-900.woff2
--------------------------------------------------------------------------------
/_demo/pages/02.blog/page-editing/3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmoreno-rodriguez/grav-theme-mundana/HEAD/_demo/pages/02.blog/page-editing/3.jpg
--------------------------------------------------------------------------------
/_demo/pages/02.blog/taxonomy/home.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmoreno-rodriguez/grav-theme-mundana/HEAD/_demo/pages/02.blog/taxonomy/home.jpg
--------------------------------------------------------------------------------
/_demo/pages/02.blog/taxonomy/home.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmoreno-rodriguez/grav-theme-mundana/HEAD/_demo/pages/02.blog/taxonomy/home.webp
--------------------------------------------------------------------------------
/assets/fonts/lora-v36-latin-700.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmoreno-rodriguez/grav-theme-mundana/HEAD/assets/fonts/lora-v36-latin-700.woff2
--------------------------------------------------------------------------------
/assets/webfonts/fa-regular-400.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmoreno-rodriguez/grav-theme-mundana/HEAD/assets/webfonts/fa-regular-400.woff2
--------------------------------------------------------------------------------
/_demo/pages/02.blog/page-editing/3.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmoreno-rodriguez/grav-theme-mundana/HEAD/_demo/pages/02.blog/page-editing/3.webp
--------------------------------------------------------------------------------
/assets/fonts/lora-v36-latin-italic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmoreno-rodriguez/grav-theme-mundana/HEAD/assets/fonts/lora-v36-latin-italic.woff2
--------------------------------------------------------------------------------
/_demo/pages/02.blog/twig-primer/blog6.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmoreno-rodriguez/grav-theme-mundana/HEAD/_demo/pages/02.blog/twig-primer/blog6.jpg
--------------------------------------------------------------------------------
/_demo/pages/02.blog/twig-primer/blog6.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmoreno-rodriguez/grav-theme-mundana/HEAD/_demo/pages/02.blog/twig-primer/blog6.webp
--------------------------------------------------------------------------------
/_demo/pages/03.dropdown/02.readme/pic10.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmoreno-rodriguez/grav-theme-mundana/HEAD/_demo/pages/03.dropdown/02.readme/pic10.jpg
--------------------------------------------------------------------------------
/assets/fonts/lora-v36-latin-regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmoreno-rodriguez/grav-theme-mundana/HEAD/assets/fonts/lora-v36-latin-regular.woff2
--------------------------------------------------------------------------------
/_demo/pages/02.blog/markdown-sintax/blog8.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmoreno-rodriguez/grav-theme-mundana/HEAD/_demo/pages/02.blog/markdown-sintax/blog8.jpg
--------------------------------------------------------------------------------
/_demo/pages/02.blog/welcome-to-grav/demo1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmoreno-rodriguez/grav-theme-mundana/HEAD/_demo/pages/02.blog/welcome-to-grav/demo1.jpg
--------------------------------------------------------------------------------
/_demo/pages/03.dropdown/02.readme/pic10.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmoreno-rodriguez/grav-theme-mundana/HEAD/_demo/pages/03.dropdown/02.readme/pic10.webp
--------------------------------------------------------------------------------
/_demo/pages/02.blog/headers/ana_avataaars.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmoreno-rodriguez/grav-theme-mundana/HEAD/_demo/pages/02.blog/headers/ana_avataaars.webp
--------------------------------------------------------------------------------
/_demo/pages/02.blog/markdown-sintax/blog8.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmoreno-rodriguez/grav-theme-mundana/HEAD/_demo/pages/02.blog/markdown-sintax/blog8.webp
--------------------------------------------------------------------------------
/_demo/pages/02.blog/welcome-to-grav/demo1.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmoreno-rodriguez/grav-theme-mundana/HEAD/_demo/pages/02.blog/welcome-to-grav/demo1.webp
--------------------------------------------------------------------------------
/_demo/pages/03.dropdown/01.typography/pic07.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmoreno-rodriguez/grav-theme-mundana/HEAD/_demo/pages/03.dropdown/01.typography/pic07.jpg
--------------------------------------------------------------------------------
/_demo/pages/03.dropdown/01.typography/pic07.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmoreno-rodriguez/grav-theme-mundana/HEAD/_demo/pages/03.dropdown/01.typography/pic07.webp
--------------------------------------------------------------------------------
/_demo/pages/02.blog/taxonomy/pedro_avataaars.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmoreno-rodriguez/grav-theme-mundana/HEAD/_demo/pages/02.blog/taxonomy/pedro_avataaars.webp
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/mixins/_clearfix.scss:
--------------------------------------------------------------------------------
1 | @mixin clearfix() {
2 | &::after {
3 | display: block;
4 | clear: both;
5 | content: "";
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/_demo/pages/02.blog/page-editing/ana_avataaars.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmoreno-rodriguez/grav-theme-mundana/HEAD/_demo/pages/02.blog/page-editing/ana_avataaars.webp
--------------------------------------------------------------------------------
/_demo/pages/02.blog/twig-primer/pedro_avataaars.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmoreno-rodriguez/grav-theme-mundana/HEAD/_demo/pages/02.blog/twig-primer/pedro_avataaars.webp
--------------------------------------------------------------------------------
/_demo/pages/02.blog/markdown-sintax/pedro_avataaars.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmoreno-rodriguez/grav-theme-mundana/HEAD/_demo/pages/02.blog/markdown-sintax/pedro_avataaars.webp
--------------------------------------------------------------------------------
/_demo/pages/02.blog/welcome-to-grav/pedro_avataaars.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmoreno-rodriguez/grav-theme-mundana/HEAD/_demo/pages/02.blog/welcome-to-grav/pedro_avataaars.webp
--------------------------------------------------------------------------------
/_demo/pages/03.dropdown/01.typography/pedro_avataaars.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmoreno-rodriguez/grav-theme-mundana/HEAD/_demo/pages/03.dropdown/01.typography/pedro_avataaars.webp
--------------------------------------------------------------------------------
/templates/form.html.twig:
--------------------------------------------------------------------------------
1 | {% extends 'partials/base.html.twig' %}
2 |
3 | {% block content %}
4 |
5 | {{ content|raw }}
6 | {{ include('forms/form.html.twig') }}
7 |
8 | {% endblock %}
9 |
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/utilities/_overflow.scss:
--------------------------------------------------------------------------------
1 | // stylelint-disable declaration-no-important
2 |
3 | @each $value in $overflows {
4 | .overflow-#{$value} { overflow: $value !important; }
5 | }
6 |
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/mixins/_size.scss:
--------------------------------------------------------------------------------
1 | // Sizing shortcuts
2 |
3 | @mixin size($width, $height: $width) {
4 | width: $width;
5 | height: $height;
6 | @include deprecate("`size()`", "v4.3.0", "v5");
7 | }
8 |
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/utilities/_interactions.scss:
--------------------------------------------------------------------------------
1 | // stylelint-disable declaration-no-important
2 |
3 | @each $value in $user-selects {
4 | .user-select-#{$value} { user-select: $value !important; }
5 | }
6 |
--------------------------------------------------------------------------------
/templates/login.html.twig:
--------------------------------------------------------------------------------
1 | {% extends 'partials/base.html.twig' %}
2 |
3 | {% block content %}
4 | {{ include('partials/messages.html.twig') }}
5 | {{ include('partials/login-form.html.twig') }}
6 | {% endblock %}
7 |
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/utilities/_screenreaders.scss:
--------------------------------------------------------------------------------
1 | //
2 | // Screenreaders
3 | //
4 |
5 | .sr-only {
6 | @include sr-only();
7 | }
8 |
9 | .sr-only-focusable {
10 | @include sr-only-focusable();
11 | }
12 |
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/mixins/_lists.scss:
--------------------------------------------------------------------------------
1 | // Lists
2 |
3 | // Unstyled keeps list items block level, just removes default browser padding and list-style
4 | @mixin list-unstyled() {
5 | padding-left: 0;
6 | list-style: none;
7 | }
8 |
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/mixins/_text-truncate.scss:
--------------------------------------------------------------------------------
1 | // Text truncate
2 | // Requires inline-block or block for proper styling
3 |
4 | @mixin text-truncate() {
5 | overflow: hidden;
6 | text-overflow: ellipsis;
7 | white-space: nowrap;
8 | }
9 |
--------------------------------------------------------------------------------
/templates/partials/blog/avatar.html.twig:
--------------------------------------------------------------------------------
1 | {# Avatar image #}
2 |
3 | {{ avatar.loading('lazy').attribute('decoding', 'async')
4 | .attribute('width', avatar_width)
5 | .attribute('height', '80')
6 | .html(author|raw, author|raw, 'h-auto rounded-circle')|raw }}
7 |
--------------------------------------------------------------------------------
/_demo/pages/01.home/02._sticky/sticky.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Sticky
3 | body_classes: modular
4 | show_pageimage: true
5 | image_width: 1038
6 | image_height: 437
7 | blog_url: /blog
8 | show_title: '0'
9 | subtitleLead: '1'
10 | show_image: true
11 | ---
12 |
13 |
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/mixins/_visibility.scss:
--------------------------------------------------------------------------------
1 | // stylelint-disable declaration-no-important
2 |
3 | // Visibility
4 |
5 | @mixin invisible($visibility) {
6 | visibility: $visibility !important;
7 | @include deprecate("`invisible()`", "v4.3.0", "v5");
8 | }
9 |
--------------------------------------------------------------------------------
/_demo/pages/thankyou/formdata.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 'Email sent'
3 | process:
4 | markdown: true
5 | twig: true
6 | cache_enable: false
7 | visible: false
8 | ---
9 |
10 | ## Your form has been sent successful
11 |
12 | ##### We will offer you a quickly response.
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/mixins/_resize.scss:
--------------------------------------------------------------------------------
1 | // Resize anything
2 |
3 | @mixin resizable($direction) {
4 | overflow: auto; // Per CSS3 UI, `resize` only applies when `overflow` isn't `visible`
5 | resize: $direction; // Options: horizontal, vertical, both
6 | }
7 |
--------------------------------------------------------------------------------
/_demo/pages/01.home/01._latest/latestposts.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 'Latest posts'
3 | body_classes: modular
4 | show_pageimage: true
5 | image_width: 1038
6 | image_height: 437
7 | blog_url: /blog
8 | show_image: true
9 | show_title: '0'
10 | subtitleLead: '1'
11 | ---
12 |
13 |
--------------------------------------------------------------------------------
/_demo/pages/01.home/03._all-stories/allstories.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 'All Stories'
3 | body_classes: modular
4 | show_pageimage: true
5 | image_width: 1038
6 | image_height: 437
7 | show_title: '1'
8 | show_image: true
9 | subtitleLead: '1'
10 | show_sidebar: true
11 | ---
12 |
13 |
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/utilities/_visibility.scss:
--------------------------------------------------------------------------------
1 | // stylelint-disable declaration-no-important
2 |
3 | //
4 | // Visibility utilities
5 | //
6 |
7 | .visible {
8 | visibility: visible !important;
9 | }
10 |
11 | .invisible {
12 | visibility: hidden !important;
13 | }
14 |
--------------------------------------------------------------------------------
/templates/partials/head.html.twig:
--------------------------------------------------------------------------------
1 |
2 |
3 | {{ include('partials/head/favicon.html.twig') }}
4 | {{ include('partials/head/seo.html.twig') }}
5 | {{ include('partials/head/assets.html.twig') }}
6 | {{ include('partials/head/tracking-header.html.twig') }}
7 |
8 |
9 |
--------------------------------------------------------------------------------
/templates/forms/form.html.twig:
--------------------------------------------------------------------------------
1 | {% extends 'forms/default/form.html.twig' %}
2 |
3 | {% block inner_markup_buttons_start %}
4 |
5 | {% endblock %}
6 |
7 | {% block button_classes %}
8 | class="{{ button.classes|default('btn-primary btn-block') }}"
9 | {% endblock %}
10 |
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/utilities/_shadows.scss:
--------------------------------------------------------------------------------
1 | // stylelint-disable declaration-no-important
2 |
3 | .shadow-sm { box-shadow: $box-shadow-sm !important; }
4 | .shadow { box-shadow: $box-shadow !important; }
5 | .shadow-lg { box-shadow: $box-shadow-lg !important; }
6 | .shadow-none { box-shadow: none !important; }
7 |
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/_media.scss:
--------------------------------------------------------------------------------
1 | .media {
2 | display: flex;
3 | align-items: flex-start;
4 | }
5 |
6 | .media-body {
7 | flex: 1;
8 | }
9 |
10 | @include media-breakpoint-down(sm) {
11 | .navbar-brand .media {
12 | display: flex;
13 | align-items: flex-start;
14 | flex-direction: column;
15 | }
16 | }
--------------------------------------------------------------------------------
/_demo/pages/01.home/modular.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Home
3 | content:
4 | items: '@self.modular'
5 | show_pageimage: true
6 | image_width: 1038
7 | image_height: 437
8 | show_title: '1'
9 | show_image: true
10 | onpage_menu: '0'
11 | body_classes: homefirstpage
12 | subtitleLead: '1'
13 | author: { }
14 | style: danger
15 | ---
16 |
17 |
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/mixins/_alert.scss:
--------------------------------------------------------------------------------
1 | @mixin alert-variant($background, $border, $color) {
2 | color: $color;
3 | @include gradient-bg($background);
4 | border-color: $border;
5 |
6 | hr {
7 | border-top-color: darken($border, 5%);
8 | }
9 |
10 | .alert-link {
11 | color: darken($color, 10%);
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/blueprints/pages/partials/blog-url.yaml:
--------------------------------------------------------------------------------
1 | form:
2 | fields:
3 |
4 | header.blog_url:
5 | type: text
6 | toggleable: true
7 | label: MUNDANA.ADMIN.BLOG.CONFIGURATION.BLOG_ROUTE
8 | help: MUNDANA.ADMIN.BLOG.CONFIGURATION.BLOG_ROUTE_HELP
9 | default: '/blog'
10 | placeholder: '/blog'
11 | size: medium
--------------------------------------------------------------------------------
/templates/partials/head/favicon.html.twig:
--------------------------------------------------------------------------------
1 | {% if theme_config.favicon %}
2 | {% set favicon = theme_config.favicon|first %}
3 | {% set favicon_file = favicon.name %}
4 | {% set favicon_type = favicon.type ? favicon.type : 'image/png' %}
5 |
6 | {% endif %}
7 |
--------------------------------------------------------------------------------
/templates/partials/page/backtotop.html.twig:
--------------------------------------------------------------------------------
1 |
2 | {% set back_to_top = theme_var('back_to_top_button')|defined(true) %}
3 |
4 | {% if back_to_top %}
5 |
7 |
8 | {% endif %}
9 |
--------------------------------------------------------------------------------
/templates/partials/layout.html.twig:
--------------------------------------------------------------------------------
1 | {% set item_col = show_sidebar ? 'col-md-8' : 'col-12' %}
2 | {% set sidebar_col = show_sidebar ? 'col-md-4' : 'col-12' %}
3 |
4 |
5 | {% block item %}{% endblock %}
6 |
7 |
8 | {% if show_sidebar %}
9 |
12 | {% endif %}
13 |
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/mixins/_text-hide.scss:
--------------------------------------------------------------------------------
1 | // CSS image replacement
2 | @mixin text-hide($ignore-warning: false) {
3 | // stylelint-disable-next-line font-family-no-missing-generic-family-keyword
4 | font: 0/0 a;
5 | color: transparent;
6 | text-shadow: none;
7 | background-color: transparent;
8 | border: 0;
9 |
10 | @include deprecate("`text-hide()`", "v4.1.0", "v5", $ignore-warning);
11 | }
12 |
--------------------------------------------------------------------------------
/templates/partials/blog/page-summary.html.twig:
--------------------------------------------------------------------------------
1 | {# PARTIAL PAGE SUMMARY #}
2 |
3 |
4 | {% if page.summary != page.content %}
5 | {{ page.summary|striptags|truncate(header.summary.size)|replace({'…': ''})|raw }}
6 | {% else %}
7 | {{ page.content|striptags|truncate(site.summary.size)|replace({'…': ''})|raw }}
8 | {% endif %}
9 |
10 |
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/mixins/_badge.scss:
--------------------------------------------------------------------------------
1 | @mixin badge-variant($bg) {
2 | color: color-yiq($bg);
3 | background-color: $bg;
4 |
5 | @at-root a#{&} {
6 | @include hover-focus() {
7 | color: color-yiq($bg);
8 | background-color: darken($bg, 10%);
9 | }
10 |
11 | &:focus,
12 | &.focus {
13 | outline: 0;
14 | box-shadow: 0 0 0 $badge-focus-width rgba($bg, .5);
15 | }
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/templates/partials/blog/date.html.twig:
--------------------------------------------------------------------------------
1 | {# PARTIAL DATE FOR PAGES #}
2 | {% set rawDate = page.header.publish_date ?: (page.date ?: page.modified) %}
3 | {% set datePublished = include('partials/page/date.html.twig') %}
4 |
5 |
6 |
7 | {{ datePublished }}
8 |
9 |
10 |
--------------------------------------------------------------------------------
/templates/partials/sidebar/random.html.twig:
--------------------------------------------------------------------------------
1 | {# RANDOM SECTION - SIDEBAR #}
2 |
3 |
12 |
--------------------------------------------------------------------------------
/_demo/pages/02.blog/blog.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Blog
3 | content:
4 | items:
5 | - '@self.children'
6 | limit: 4
7 | order:
8 | by: date
9 | dir: desc
10 | pagination: true
11 | url_taxonomy_filters: true
12 | show_pagination: true
13 | feed:
14 | limit: 10
15 | show_pageimage: true
16 | image_width: 1038
17 | image_height: 437
18 | show_title: '1'
19 | show_image: true
20 | subtitleLead: '1'
21 | ---
22 |
23 |
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/mixins/_nav-divider.scss:
--------------------------------------------------------------------------------
1 | // Horizontal dividers
2 | //
3 | // Dividers (basically an hr) within dropdowns and nav lists
4 |
5 | @mixin nav-divider($color: $nav-divider-color, $margin-y: $nav-divider-margin-y, $ignore-warning: false) {
6 | height: 0;
7 | margin: $margin-y 0;
8 | overflow: hidden;
9 | border-top: 1px solid $color;
10 | @include deprecate("The `nav-divider()` mixin", "v4.4.0", "v5", $ignore-warning);
11 | }
12 |
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/utilities/_float.scss:
--------------------------------------------------------------------------------
1 | // stylelint-disable declaration-no-important
2 |
3 | @each $breakpoint in map-keys($grid-breakpoints) {
4 | @include media-breakpoint-up($breakpoint) {
5 | $infix: breakpoint-infix($breakpoint, $grid-breakpoints);
6 |
7 | .float#{$infix}-left { float: left !important; }
8 | .float#{$infix}-right { float: right !important; }
9 | .float#{$infix}-none { float: none !important; }
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/utilities/_align.scss:
--------------------------------------------------------------------------------
1 | // stylelint-disable declaration-no-important
2 |
3 | .align-baseline { vertical-align: baseline !important; } // Browser default
4 | .align-top { vertical-align: top !important; }
5 | .align-middle { vertical-align: middle !important; }
6 | .align-bottom { vertical-align: bottom !important; }
7 | .align-text-bottom { vertical-align: text-bottom !important; }
8 | .align-text-top { vertical-align: text-top !important; }
9 |
--------------------------------------------------------------------------------
/templates/partials/login-status.html.twig:
--------------------------------------------------------------------------------
1 |
2 | {% if grav.user.authenticated %}
3 |
4 |
5 | {#
{{ grav.user.fullname ?: grav.user.username }} , #}
6 |
{{ 'PLUGIN_LOGIN.BTN_LOGOUT'|t }}
7 |
8 | {% endif %}
9 |
--------------------------------------------------------------------------------
/blueprints/theme/footer.yaml:
--------------------------------------------------------------------------------
1 | form:
2 | validation: loose
3 |
4 | fields:
5 | footer_text_left:
6 | type: textarea
7 | row: 3
8 | markdown: true
9 | label: MUNDANA.ADMIN.THEME.FOOTER.TEXT_LEFT
10 | help: MUNDANA.ADMIN.THEME.FOOTER.TEXT_LEFT_HELP
11 | footer_text_right:
12 | type: textarea
13 | row: 3
14 | markdown: true
15 | label: MUNDANA.ADMIN.THEME.FOOTER.TEXT_RIGHT
16 | help: MUNDANA.ADMIN.THEME.FOOTER.TEXT_RIGHT_HELP
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/mixins/_float.scss:
--------------------------------------------------------------------------------
1 | // stylelint-disable declaration-no-important
2 |
3 | @mixin float-left() {
4 | float: left !important;
5 | @include deprecate("The `float-left` mixin", "v4.3.0", "v5");
6 | }
7 | @mixin float-right() {
8 | float: right !important;
9 | @include deprecate("The `float-right` mixin", "v4.3.0", "v5");
10 | }
11 | @mixin float-none() {
12 | float: none !important;
13 | @include deprecate("The `float-none` mixin", "v4.3.0", "v5");
14 | }
15 |
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/bootstrap-reboot.scss:
--------------------------------------------------------------------------------
1 | /*
2 | * Bootstrap Reboot v4.6.2 (https://getbootstrap.com/)
3 | * Copyright 2011-2022 The Bootstrap Authors
4 | * Copyright 2011-2022 Twitter, Inc.
5 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
6 | * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
7 | */
8 |
9 | @import "functions";
10 | @import "variables";
11 | @import "mixins";
12 | @import "reboot";
13 |
--------------------------------------------------------------------------------
/templates/partials/blog/readingtime.html.twig:
--------------------------------------------------------------------------------
1 | {# PARTIAL READING TIME #}
2 | {# This code will work if the reading time plugin is enabled #}
3 | {% set min = page.content|readingtime({format: '{minutes_short_count}'}) %}
4 | {% set sec = page.content|readingtime({format: '{seconds_short_count}'}) %}
5 |
6 |
7 |
8 | {{ page.content|readingtime }}
9 |
10 |
11 |
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/_jumbotron.scss:
--------------------------------------------------------------------------------
1 | .jumbotron {
2 | padding: $jumbotron-padding ($jumbotron-padding * .5);
3 | margin-bottom: $jumbotron-padding;
4 | color: $jumbotron-color;
5 | background-color: $jumbotron-bg;
6 | @include border-radius($border-radius-lg);
7 |
8 | @include media-breakpoint-up(sm) {
9 | padding: ($jumbotron-padding * 2) $jumbotron-padding;
10 | }
11 | }
12 |
13 | .jumbotron-fluid {
14 | padding-right: 0;
15 | padding-left: 0;
16 | @include border-radius(0);
17 | }
18 |
--------------------------------------------------------------------------------
/templates/modular/partials/sidebar.html.twig:
--------------------------------------------------------------------------------
1 | {# SIDEBAR FOR MODULAR PAGE --> ALL STORIES #}
2 |
3 |
4 | {% if show_featured %}
5 | {{ include('partials/sidebar/featured.html.twig'
6 | , {block_title: 'MUNDANA.SIDEBAR.FEATURED'|t}) }}
7 | {% endif %}
8 | {% if show_categories %}
9 | {{ include('partials/sidebar/categories.html.twig'
10 | , {blog: blog, block_title: 'MUNDANA.SIDEBAR.CATEGORIES'|t}) }}
11 | {% endif %}
12 |
13 |
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/_transitions.scss:
--------------------------------------------------------------------------------
1 | .fade {
2 | @include transition($transition-fade);
3 |
4 | &:not(.show) {
5 | opacity: 0;
6 | }
7 | }
8 |
9 | .collapse {
10 | &:not(.show) {
11 | display: none;
12 | }
13 | }
14 |
15 | .collapsing {
16 | position: relative;
17 | height: 0;
18 | overflow: hidden;
19 | @include transition($transition-collapse);
20 |
21 | &.width {
22 | width: 0;
23 | height: auto;
24 | @include transition($transition-collapse-width);
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/templates/partials/form-messages.html.twig:
--------------------------------------------------------------------------------
1 | {% if form.message %}
2 | {% set inline_errors = form.inline_errors is not null ? form.inline_errors : config.plugins.form.inline_errors(false) %}
3 | {% set status_mapping = {success: 'primary', error: 'danger', warning: 'warning'} %}
4 | {% set message = inline_errors and form.messages ? 'GRAV.FORM.VALIDATION_FAIL'|t : form.message %}
5 |
{{ message|raw }}
6 | {% endif %}
7 |
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/utilities/_background.scss:
--------------------------------------------------------------------------------
1 | // stylelint-disable declaration-no-important
2 |
3 | @each $color, $value in $theme-colors {
4 | @include bg-variant(".bg-#{$color}", $value, true);
5 | }
6 |
7 | @if $enable-gradients {
8 | @each $color, $value in $theme-colors {
9 | @include bg-gradient-variant(".bg-gradient-#{$color}", $value, true);
10 | }
11 | }
12 |
13 | .bg-white {
14 | background-color: $white !important;
15 | }
16 |
17 | .bg-transparent {
18 | background-color: transparent !important;
19 | }
20 |
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/utilities/_stretched-link.scss:
--------------------------------------------------------------------------------
1 | //
2 | // Stretched link
3 | //
4 |
5 | .stretched-link {
6 | &::after {
7 | position: absolute;
8 | top: 0;
9 | right: 0;
10 | bottom: 0;
11 | left: 0;
12 | z-index: 1;
13 | // Just in case `pointer-events: none` is set on a parent
14 | pointer-events: auto;
15 | content: "";
16 | // IE10 bugfix, see https://stackoverflow.com/questions/16947967/ie10-hover-pseudo-class-doesnt-work-without-background-color
17 | background-color: rgba(0, 0, 0, 0);
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/mixins/_list-group.scss:
--------------------------------------------------------------------------------
1 | // List Groups
2 |
3 | @mixin list-group-item-variant($state, $background, $color) {
4 | .list-group-item-#{$state} {
5 | color: $color;
6 | background-color: $background;
7 |
8 | &.list-group-item-action {
9 | @include hover-focus() {
10 | color: $color;
11 | background-color: darken($background, 5%);
12 | }
13 |
14 | &.active {
15 | color: $white;
16 | background-color: $color;
17 | border-color: $color;
18 | }
19 | }
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/templates/error.html.twig:
--------------------------------------------------------------------------------
1 | {% extends 'partials/base.html.twig' %}
2 |
3 | {% block content %}
4 |
5 |
6 |
7 |
8 | {{ 'PLUGIN_ERROR.ERROR'|t }} {{ page.header.http_response_code }}
9 |
10 |
11 |
{{ page.content|raw }}
12 |
13 |
14 | {% endblock %}
15 |
--------------------------------------------------------------------------------
/_demo/pages/forgot_password/forgot.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Forgot password
3 | visible: false
4 | cache_control: private, no-cache, must-revalidate
5 |
6 | login_redirect_here: false
7 |
8 | form:
9 |
10 | fields:
11 | - name: email
12 | type: email
13 | label: PLUGIN_LOGIN.EMAIL
14 | autofocus: true
15 | classes: form-control
16 | outerclasses: form-group
17 | validate:
18 | required: true
19 | type: email
20 | ---
21 | ## Recovery your password
22 |
23 | Enter your email to recover your password
24 |
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/mixins/_text-emphasis.scss:
--------------------------------------------------------------------------------
1 | // stylelint-disable declaration-no-important
2 |
3 | // Typography
4 |
5 | @mixin text-emphasis-variant($parent, $color, $ignore-warning: false) {
6 | #{$parent} {
7 | color: $color !important;
8 | }
9 | @if $emphasized-link-hover-darken-percentage != 0 {
10 | a#{$parent} {
11 | @include hover-focus() {
12 | color: darken($color, $emphasized-link-hover-darken-percentage) !important;
13 | }
14 | }
15 | }
16 | @include deprecate("`text-emphasis-variant()`", "v4.4.0", "v5", $ignore-warning);
17 | }
18 |
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/mixins/_reset-text.scss:
--------------------------------------------------------------------------------
1 | @mixin reset-text() {
2 | font-family: $font-family-base;
3 | // We deliberately do NOT reset font-size or word-wrap.
4 | font-style: normal;
5 | font-weight: $font-weight-normal;
6 | line-height: $line-height-base;
7 | text-align: left; // Fallback for where `start` is not supported
8 | text-align: start;
9 | text-decoration: none;
10 | text-shadow: none;
11 | text-transform: none;
12 | letter-spacing: normal;
13 | word-break: normal;
14 | white-space: normal;
15 | word-spacing: normal;
16 | line-break: auto;
17 | }
18 |
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/mixins/_pagination.scss:
--------------------------------------------------------------------------------
1 | // Pagination
2 |
3 | @mixin pagination-size($padding-y, $padding-x, $font-size, $line-height, $border-radius) {
4 | .page-link {
5 | padding: $padding-y $padding-x;
6 | @include font-size($font-size);
7 | line-height: $line-height;
8 | }
9 |
10 | .page-item {
11 | &:first-child {
12 | .page-link {
13 | @include border-left-radius($border-radius);
14 | }
15 | }
16 | &:last-child {
17 | .page-link {
18 | @include border-right-radius($border-radius);
19 | }
20 | }
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/templates/modular/partials/common_variables.html.twig:
--------------------------------------------------------------------------------
1 | {% set themeBlog = theme_var('blog_route')|defined('/blog') %}
2 | {% set blog = page.find(header_var('blog_url')|defined(themeBlog)) %}
3 | {% set collection = blog.collection().order('date', 'desc') %}
4 | {% set page_title = page.title %}
5 | {% set show_title = page.header.show_title|defined(false) %}
6 | {% set override_style = theme_var('override_page_style')|defined(false) %}
7 | {% set color_style = override_style ? theme_var('default_page_style')|default('primary') : page.parent.header.style|defined('primary') %}
8 |
9 | {% block module_content %}{% endblock %}
10 |
--------------------------------------------------------------------------------
/templates/partials/langswitcher.html.twig:
--------------------------------------------------------------------------------
1 | {% extends 'partials/langswitcher-logic.html.twig' %}
2 |
3 | {% block language_block_start %}
4 |
5 | {% endblock %}
6 |
7 | {% block language_block_end %}
8 |
9 | {% endblock %}
10 |
11 | {% block language_item %}
12 | {% if show_language %}
13 |
{{ include('partials/langswitcher-' ~ display_format ~ '.html.twig') }}
14 | {% endif %}
15 | {% endblock %}
16 |
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/_utilities.scss:
--------------------------------------------------------------------------------
1 | @import "utilities/align";
2 | @import "utilities/background";
3 | @import "utilities/borders";
4 | @import "utilities/clearfix";
5 | @import "utilities/display";
6 | @import "utilities/embed";
7 | @import "utilities/flex";
8 | @import "utilities/float";
9 | @import "utilities/interactions";
10 | @import "utilities/overflow";
11 | @import "utilities/position";
12 | @import "utilities/screenreaders";
13 | @import "utilities/shadows";
14 | @import "utilities/sizing";
15 | @import "utilities/spacing";
16 | @import "utilities/stretched-link";
17 | @import "utilities/text";
18 | @import "utilities/visibility";
19 |
--------------------------------------------------------------------------------
/shortcodes/AlertShortcode.php:
--------------------------------------------------------------------------------
1 | shortcode->getHandlers()->add('sc-alert', function (ShortcodeInterface $sc) {
11 | // Render the Twig template with shortcode parameters
12 | $output = $this->grav['twig']->processTemplate(
13 | 'partials/shortcodes/alert.html.twig',
14 | ['shortcode' => $sc]
15 | );
16 |
17 | return $output;
18 | });
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/shortcodes/BadgeShortcode.php:
--------------------------------------------------------------------------------
1 | shortcode->getHandlers()->add('sc-badge', function(ShortcodeInterface $sc) {
11 | // Render the Twig template with shortcode parameters
12 | $output = $this->grav['twig']->processTemplate(
13 | 'partials/shortcodes/badge.html.twig',
14 | ['shortcode' => $sc]
15 | );
16 |
17 | return $output;
18 | });
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/shortcodes/ButtonShortcode.php:
--------------------------------------------------------------------------------
1 | shortcode->getHandlers()->add('sc-button', function(ShortcodeInterface $sc) {
11 | // Render the Twig template with shortcode parameters
12 | $output = $this->grav['twig']->processTemplate(
13 | 'partials/shortcodes/button.html.twig',
14 | ['shortcode' => $sc]
15 | );
16 |
17 | return $output;
18 | });
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/mixins/_box-shadow.scss:
--------------------------------------------------------------------------------
1 | @mixin box-shadow($shadow...) {
2 | @if $enable-shadows {
3 | $result: ();
4 |
5 | @if (length($shadow) == 1) {
6 | // We can pass `@include box-shadow(none);`
7 | $result: $shadow;
8 | } @else {
9 | // Filter to avoid invalid properties for example `box-shadow: none, 1px 1px black;`
10 | @for $i from 1 through length($shadow) {
11 | @if nth($shadow, $i) != "none" {
12 | $result: append($result, nth($shadow, $i), "comma");
13 | }
14 | }
15 | }
16 | @if (length($result) > 0) {
17 | box-shadow: $result;
18 | }
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/templates/formdata.html.twig:
--------------------------------------------------------------------------------
1 | {% extends 'partials/base.html.twig' %}
2 |
3 | {% if form is null %}
4 | {% set form = grav.session.getFlashObject('form') %}
5 | {% endif %}
6 |
7 | {% block content %}
8 | {{ content|raw }}
9 |
10 | {% if form %}
11 | {{ include('partials/form-messages.html.twig') }}
12 |
13 |
{{ 'PLUGIN_FORM.DATA_SUMMARY'|t }}
14 | {{ include('forms/data.html.twig') }}
15 |
16 | {% else %}
17 |
{{ 'PLUGIN_FORM.NO_FORM_DATA'|t }}
18 | {% endif %}
19 |
20 | {% endblock %}
21 |
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/utilities/_position.scss:
--------------------------------------------------------------------------------
1 | // stylelint-disable declaration-no-important
2 |
3 | // Common values
4 | @each $position in $positions {
5 | .position-#{$position} { position: $position !important; }
6 | }
7 |
8 | // Shorthand
9 |
10 | .fixed-top {
11 | position: fixed;
12 | top: 0;
13 | right: 0;
14 | left: 0;
15 | z-index: $zindex-fixed;
16 | }
17 |
18 | .fixed-bottom {
19 | position: fixed;
20 | right: 0;
21 | bottom: 0;
22 | left: 0;
23 | z-index: $zindex-fixed;
24 | }
25 |
26 | .sticky-top {
27 | @supports (position: sticky) {
28 | position: sticky;
29 | top: 0;
30 | z-index: $zindex-sticky;
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/utilities/_display.scss:
--------------------------------------------------------------------------------
1 | // stylelint-disable declaration-no-important
2 |
3 | //
4 | // Utilities for common `display` values
5 | //
6 |
7 | @each $breakpoint in map-keys($grid-breakpoints) {
8 | @include media-breakpoint-up($breakpoint) {
9 | $infix: breakpoint-infix($breakpoint, $grid-breakpoints);
10 |
11 | @each $value in $displays {
12 | .d#{$infix}-#{$value} { display: $value !important; }
13 | }
14 | }
15 | }
16 |
17 |
18 | //
19 | // Utilities for toggling `display` in print
20 | //
21 |
22 | @media print {
23 | @each $value in $displays {
24 | .d-print-#{$value} { display: $value !important; }
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/_root.scss:
--------------------------------------------------------------------------------
1 | :root {
2 | // Custom variable values only support SassScript inside `#{}`.
3 | @each $color, $value in $colors {
4 | --#{$color}: #{$value};
5 | }
6 |
7 | @each $color, $value in $theme-colors {
8 | --#{$color}: #{$value};
9 | }
10 |
11 | @each $bp, $value in $grid-breakpoints {
12 | --breakpoint-#{$bp}: #{$value};
13 | }
14 |
15 | // Use `inspect` for lists so that quoted items keep the quotes.
16 | // See https://github.com/sass/sass/issues/2383#issuecomment-336349172
17 | --font-family-sans-serif: #{inspect($font-family-sans-serif)};
18 | --font-family-monospace: #{inspect($font-family-monospace)};
19 | }
20 |
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/mixins/_deprecate.scss:
--------------------------------------------------------------------------------
1 | // Deprecate mixin
2 | //
3 | // This mixin can be used to deprecate mixins or functions.
4 | // `$enable-deprecation-messages` is a global variable, `$ignore-warning` is a variable that can be passed to
5 | // some deprecated mixins to suppress the warning (for example if the mixin is still be used in the current version of Bootstrap)
6 | @mixin deprecate($name, $deprecate-version, $remove-version, $ignore-warning: false) {
7 | @if ($enable-deprecation-messages != false and $ignore-warning != true) {
8 | @warn "#{$name} has been deprecated as of #{$deprecate-version}. It will be removed entirely in #{$remove-version}.";
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/templates/partials/shortcodes/badge.html.twig:
--------------------------------------------------------------------------------
1 | {# SHORTCODE TEMPLATE FOR BOOTSTRAP BADGES #}
2 |
3 | {% set badgeClass = shortcode.getParameter('class', 'secondary') %}
4 | {% set badgeLabel = shortcode.getParameter('label', '') %}
5 | {% set badgeUrl = shortcode.getParameter('url', '') %}
6 | {% set badgeTarget = shortcode.getParameter('target', '_self') %}
7 |
8 | {% if badgeLabel is not empty %}
9 | {% if badgeUrl is not empty %}
10 |
{{ badgeLabel }}
11 | {% else %}
12 |
{{ badgeLabel }}
13 | {% endif %}
14 | {% endif %}
15 |
--------------------------------------------------------------------------------
/templates/partials/sidebar/feeds.html.twig:
--------------------------------------------------------------------------------
1 | {# FEEDS SECTION - SIDEBAR #}
2 |
3 |
19 |
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/bootstrap-grid.scss:
--------------------------------------------------------------------------------
1 | /*
2 | * Bootstrap Grid v4.6.2 (https://getbootstrap.com/)
3 | * Copyright 2011-2022 The Bootstrap Authors
4 | * Copyright 2011-2022 Twitter, Inc.
5 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
6 | */
7 |
8 | html {
9 | box-sizing: border-box;
10 | -ms-overflow-style: scrollbar;
11 | }
12 |
13 | *,
14 | *::before,
15 | *::after {
16 | box-sizing: inherit;
17 | }
18 |
19 | @import "functions";
20 | @import "variables";
21 |
22 | @import "mixins/deprecate";
23 | @import "mixins/breakpoints";
24 | @import "mixins/grid-framework";
25 | @import "mixins/grid";
26 |
27 | @import "grid";
28 | @import "utilities/display";
29 | @import "utilities/flex";
30 | @import "utilities/spacing";
31 |
--------------------------------------------------------------------------------
/blueprints/pages/modular/sticky.yaml:
--------------------------------------------------------------------------------
1 | title: Sticky
2 | '@extends': default
3 |
4 | form:
5 | fields:
6 | tabs:
7 | fields:
8 | content:
9 | fields:
10 | _Headings:
11 | fields:
12 | _TitleToggle:
13 | fields:
14 | header.show_title:
15 | replace-options@: true
16 | default: 0
17 | highlight: 0
18 | options:
19 | 1: PLUGIN_ADMIN.YES
20 | 0: PLUGIN_ADMIN.NO
21 | options:
22 | fields:
23 | PageOptions:
24 | import@:
25 | type: partials/blog-url
26 | context: blueprints://pages
--------------------------------------------------------------------------------
/templates/partials/sidebar/taxonomylist.html.twig:
--------------------------------------------------------------------------------
1 | {# TAXONOMY LIST SECTION - SIDEBAR #}
2 |
3 | {% set taxlist = children_only is defined ? taxonomylist.getChildPagesTags(of_page, children_only) : taxonomylist.get() %}
4 |
5 | {% if taxlist %}
6 |
7 |
8 | {{ block_title }}
9 |
10 |
11 |
12 | {% for tax, value in taxlist[taxonomy] %}
13 | {% if value is not empty %}
14 | {{ tax|e }}
15 | {% endif %}
16 | {% endfor %}
17 |
18 |
19 |
20 | {% endif %}
21 |
--------------------------------------------------------------------------------
/blueprints/pages/modular/latestposts.yaml:
--------------------------------------------------------------------------------
1 | title: Latest posts
2 | '@extends': default
3 |
4 | form:
5 | fields:
6 | tabs:
7 | fields:
8 | content:
9 | fields:
10 | _Headings:
11 | fields:
12 | _TitleToggle:
13 | fields:
14 | header.show_title:
15 | replace-options@: true
16 | default: 0
17 | highlight: 0
18 | options:
19 | 1: PLUGIN_ADMIN.YES
20 | 0: PLUGIN_ADMIN.NO
21 | options:
22 | fields:
23 | PageOptions:
24 | import@:
25 | type: partials/blog-url
26 | context: blueprints://pages
27 |
28 |
--------------------------------------------------------------------------------
/templates/macros/macros.html.twig:
--------------------------------------------------------------------------------
1 | {# Macro to show filtered title in blog searches #}
2 | {% macro generateFilteredTitle(uri) %}
3 | {% if uri.param('category') %}
4 | {% set title = theme_config.listing_title.taxonomy.category|default('MUNDANA.BLOG.LISTING_TITLE_CATEGORY'|t) ~ uri.param('category') %}
5 | {% elseif uri.param('tag') %}
6 | {% set title = theme_config.listing_title.taxonomy.tag|default('MUNDANA.BLOG.LISTING_TITLE_TAG'|t) ~ uri.param('tag') %}
7 | {% elseif uri.param('author') %}
8 | {% set title = theme_config.listing_title.taxonomy.author|default('MUNDANA.BLOG.LISTING_TITLE_AUTHOR'|t) ~ uri.param('author') %}
9 | {% else %}
10 | {% set title = theme_config.listing_title.blog|default('Blog') %}
11 | {% endif %}
12 |
13 | {{ title }}
14 | {% endmacro %}
15 |
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/mixins/_transition.scss:
--------------------------------------------------------------------------------
1 | // stylelint-disable property-disallowed-list
2 | @mixin transition($transition...) {
3 | @if length($transition) == 0 {
4 | $transition: $transition-base;
5 | }
6 |
7 | @if length($transition) > 1 {
8 | @each $value in $transition {
9 | @if $value == null or $value == none {
10 | @warn "The keyword 'none' or 'null' must be used as a single argument.";
11 | }
12 | }
13 | }
14 |
15 | @if $enable-transitions {
16 | @if nth($transition, 1) != null {
17 | transition: $transition;
18 | }
19 |
20 | @if $enable-prefers-reduced-motion-media-query and nth($transition, 1) != null and nth($transition, 1) != none {
21 | @media (prefers-reduced-motion: reduce) {
22 | transition: none;
23 | }
24 | }
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/mixins/_background-variant.scss:
--------------------------------------------------------------------------------
1 | // stylelint-disable declaration-no-important
2 |
3 | // Contextual backgrounds
4 |
5 | @mixin bg-variant($parent, $color, $ignore-warning: false) {
6 | #{$parent} {
7 | background-color: $color !important;
8 | }
9 | a#{$parent},
10 | button#{$parent} {
11 | @include hover-focus() {
12 | background-color: darken($color, 10%) !important;
13 | }
14 | }
15 | @include deprecate("The `bg-variant` mixin", "v4.4.0", "v5", $ignore-warning);
16 | }
17 |
18 | @mixin bg-gradient-variant($parent, $color, $ignore-warning: false) {
19 | #{$parent} {
20 | background: $color linear-gradient(180deg, mix($body-bg, $color, 15%), $color) repeat-x !important;
21 | }
22 | @include deprecate("The `bg-gradient-variant` mixin", "v4.5.0", "v5", $ignore-warning);
23 | }
24 |
--------------------------------------------------------------------------------
/blueprints/pages/partials/blog-bits.yaml:
--------------------------------------------------------------------------------
1 | form:
2 | fields:
3 |
4 | _configTitle:
5 | type: section
6 | title: MUNDANA.ADMIN.BLOG.CONFIGURATION.LABEL
7 | import@:
8 | type: partials/blog-url
9 | context: blueprints://pages
10 |
11 | header.show_breadcrumbs:
12 | type: toggle
13 | toggleable: true
14 | label: MUNDANA.ADMIN.BLOG.CONFIGURATION.SHOW_BREADCRUMBS
15 | highlight: 1
16 | options:
17 | 1: PLUGIN_ADMIN.ENABLED
18 | 0: PLUGIN_ADMIN.DISABLED
19 | validate:
20 | type: bool
21 |
22 | _configSidebar:
23 | type: section
24 | title: MUNDANA.ADMIN.BLOG.CONFIGURATION.SIDEBAR_SETTINGS
25 | import@:
26 | type: partials/blog-sidebar
27 | context: blueprints://pages
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/templates/partials/footer.html.twig:
--------------------------------------------------------------------------------
1 | {% set footerTextLeft = theme_var('footer_text_left') %}
2 | {% set footerTextRight = theme_var('footer_text_right') %}
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | {{ site.title|e }}
12 |
13 |
14 | {{ footerTextLeft|markdown(false) }}
15 |
16 |
17 |
18 |
19 | {{ footerTextRight|markdown(false) }}
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/templates/partials/sidebar/archives.html.twig:
--------------------------------------------------------------------------------
1 | {# ARCHIVES SECTION - SIDEBAR #}
2 |
3 |
22 |
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/utilities/_sizing.scss:
--------------------------------------------------------------------------------
1 | // stylelint-disable declaration-no-important
2 |
3 | // Width and height
4 |
5 | @each $prop, $abbrev in (width: w, height: h) {
6 | @each $size, $length in $sizes {
7 | .#{$abbrev}-#{$size} { #{$prop}: $length !important; }
8 | }
9 | }
10 |
11 | .mw-100 { max-width: 100% !important; }
12 | .mh-100 { max-height: 100% !important; }
13 |
14 | // Viewport additional helpers
15 |
16 | .min-vw-100 { min-width: 100vw !important; }
17 | .min-vh-100 { min-height: 100vh !important; }
18 |
19 | .vw-100 { width: 100vw !important; }
20 | .vh-100 { height: 100vh !important; }
21 |
22 | .vw-75 { width: 75vw !important; }
23 | .vh-75 { height: 75vh !important; }
24 |
25 | .vw-50 { width: 50vw !important; }
26 | .vh-50 { height: 50vh !important; }
27 |
28 | .vw-25 { width: 25vw !important; }
29 | .vh-25 { height: 25vh !important; }
30 |
--------------------------------------------------------------------------------
/templates/partials/simplesearch_item.html.twig:
--------------------------------------------------------------------------------
1 |
2 |
3 | {% set blog_image = page.media.images[page.header.featuredImage] ?: page.media.images|filter((v, k) => k != page.header.author.avatarImage)|first %}
4 |
5 | {% if blog_image %}
6 |
9 | {% endif %}
10 |
11 |
14 |
15 |
16 | {{ page.date|date(config.system.pages.dateformat.short) }}
17 |
18 |
19 |
{{ page.summary|striptags|raw }}
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/mixins/_hover.scss:
--------------------------------------------------------------------------------
1 | // Hover mixin and `$enable-hover-media-query` are deprecated.
2 | //
3 | // Originally added during our alphas and maintained during betas, this mixin was
4 | // designed to prevent `:hover` stickiness on iOS-an issue where hover styles
5 | // would persist after initial touch.
6 | //
7 | // For backward compatibility, we've kept these mixins and updated them to
8 | // always return their regular pseudo-classes instead of a shimmed media query.
9 | //
10 | // Issue: https://github.com/twbs/bootstrap/issues/25195
11 |
12 | @mixin hover() {
13 | &:hover { @content; }
14 | }
15 |
16 | @mixin hover-focus() {
17 | &:hover,
18 | &:focus {
19 | @content;
20 | }
21 | }
22 |
23 | @mixin plain-hover-focus() {
24 | &,
25 | &:hover,
26 | &:focus {
27 | @content;
28 | }
29 | }
30 |
31 | @mixin hover-focus-active() {
32 | &:hover,
33 | &:focus,
34 | &:active {
35 | @content;
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/templates/partials/blog/disqus.html.twig:
--------------------------------------------------------------------------------
1 | {# PARTIAL DISQUS #}
2 |
3 |
4 |
5 |
23 |
--------------------------------------------------------------------------------
/templates/partials/messages.html.twig:
--------------------------------------------------------------------------------
1 | {% set type_mapping = {info: 'success', error: 'danger', warning: 'warning'} %}
2 | {% set icon_mapping = {info: 'check', error: 'times', warning: 'exclamation'} %}
3 | {% block content %}
4 |
5 | {% if grav.messages.all %}
6 |
7 |
8 | {% for message in grav.messages.fetch %}
9 |
10 | {% set scope = message.scope|e %}
11 | {% set type = type_mapping[scope] %}
12 | {% set icon = icon_mapping[scope] %}
13 |
14 |
15 | {{ message.message|raw }}
16 |
17 | ×
18 |
19 |
20 | {% endfor %}
21 |
22 |
23 | {% endif %}
24 |
25 | {% endblock %}
26 |
--------------------------------------------------------------------------------
/blueprints/pages/partials/blog-sidebar.yaml:
--------------------------------------------------------------------------------
1 | form:
2 | fields:
3 |
4 | header.show_sidebar:
5 | type: toggle
6 | toggleable: true
7 | label: MUNDANA.ADMIN.BLOG.CONFIGURATION.SHOW_SIDEBAR
8 | highlight: 1
9 | options:
10 | 1: PLUGIN_ADMIN.ENABLED
11 | 0: PLUGIN_ADMIN.DISABLED
12 | validate:
13 | type: bool
14 |
15 | header.show_featured:
16 | type: toggle
17 | toggleable: true
18 | label: MUNDANA.ADMIN.BLOG.CONFIGURATION.SHOW_FEATURED_POSTS
19 | highlight: 1
20 | options:
21 | 1: PLUGIN_ADMIN.ENABLED
22 | 0: PLUGIN_ADMIN.DISABLED
23 | validate:
24 | type: bool
25 | header.show_categories:
26 | type: toggle
27 | toggleable: true
28 | label: MUNDANA.ADMIN.BLOG.CONFIGURATION.SHOW_CATEGORIES
29 | highlight: 1
30 | options:
31 | 1: PLUGIN_ADMIN.ENABLED
32 | 0: PLUGIN_ADMIN.DISABLED
33 | validate:
34 | type: bool
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/mixins/_table-row.scss:
--------------------------------------------------------------------------------
1 | // Tables
2 |
3 | @mixin table-row-variant($state, $background, $border: null) {
4 | // Exact selectors below required to override `.table-striped` and prevent
5 | // inheritance to nested tables.
6 | .table-#{$state} {
7 | &,
8 | > th,
9 | > td {
10 | background-color: $background;
11 | }
12 |
13 | @if $border != null {
14 | th,
15 | td,
16 | thead th,
17 | tbody + tbody {
18 | border-color: $border;
19 | }
20 | }
21 | }
22 |
23 | // Hover states for `.table-hover`
24 | // Note: this is not available for cells or rows within `thead` or `tfoot`.
25 | .table-hover {
26 | $hover-background: darken($background, 5%);
27 |
28 | .table-#{$state} {
29 | @include hover() {
30 | background-color: $hover-background;
31 |
32 | > td,
33 | > th {
34 | background-color: $hover-background;
35 | }
36 | }
37 | }
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/mixins/_screen-reader.scss:
--------------------------------------------------------------------------------
1 | // Only display content to screen readers
2 | //
3 | // See: https://www.a11yproject.com/posts/2013-01-11-how-to-hide-content/
4 | // See: https://kittygiraudel.com/2016/10/13/css-hide-and-seek/
5 |
6 | @mixin sr-only() {
7 | position: absolute;
8 | width: 1px;
9 | height: 1px;
10 | padding: 0;
11 | margin: -1px; // Fix for https://github.com/twbs/bootstrap/issues/25686
12 | overflow: hidden;
13 | clip: rect(0, 0, 0, 0);
14 | white-space: nowrap;
15 | border: 0;
16 | }
17 |
18 | // Use in conjunction with .sr-only to only display content when it's focused.
19 | //
20 | // Useful for "Skip to main content" links; see https://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1
21 | //
22 | // Credit: HTML5 Boilerplate
23 |
24 | @mixin sr-only-focusable() {
25 | &:active,
26 | &:focus {
27 | position: static;
28 | width: auto;
29 | height: auto;
30 | overflow: visible;
31 | clip: auto;
32 | white-space: normal;
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/utilities/_embed.scss:
--------------------------------------------------------------------------------
1 | // Credit: Nicolas Gallagher and SUIT CSS.
2 |
3 | .embed-responsive {
4 | position: relative;
5 | display: block;
6 | width: 100%;
7 | padding: 0;
8 | overflow: hidden;
9 |
10 | &::before {
11 | display: block;
12 | content: "";
13 | }
14 |
15 | .embed-responsive-item,
16 | iframe,
17 | embed,
18 | object,
19 | video {
20 | position: absolute;
21 | top: 0;
22 | bottom: 0;
23 | left: 0;
24 | width: 100%;
25 | height: 100%;
26 | border: 0;
27 | }
28 | }
29 |
30 | @each $embed-responsive-aspect-ratio in $embed-responsive-aspect-ratios {
31 | $embed-responsive-aspect-ratio-x: nth($embed-responsive-aspect-ratio, 1);
32 | $embed-responsive-aspect-ratio-y: nth($embed-responsive-aspect-ratio, 2);
33 |
34 | .embed-responsive-#{$embed-responsive-aspect-ratio-x}by#{$embed-responsive-aspect-ratio-y} {
35 | &::before {
36 | padding-top: percentage(divide($embed-responsive-aspect-ratio-y, $embed-responsive-aspect-ratio-x));
37 | }
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/templates/item.html.twig:
--------------------------------------------------------------------------------
1 | {% extends 'partials/base.html.twig' %}
2 |
3 | {# Set blog settings #}
4 | {% set themeBlog = theme_var('blog_route')|defined('/blog') %}
5 | {% set blog = page.find(header_var('blog_url')|defined(themeBlog)) %}
6 | {# Set sidebar option for page #}
7 | {% set show_sidebar = header_var('show_sidebar', [page, blog])|defined(false) %}
8 | {# Set breadcrumbs option for page #}
9 | {% set show_breadcrumbs = header_var('show_breadcrumbs', [page, blog])|defined(true) %}
10 |
11 | {% block content %}
12 |
13 |
14 | {% embed 'partials/layout.html.twig' %}
15 | {% block item %}
16 | {% if show_breadcrumbs and config.plugins.breadcrumbs.enabled %}
17 | {{ include('partials/breadcrumbs.html.twig') }}
18 | {% endif %}
19 |
20 | {{ include('partials/blog-item.html.twig', {blog: blog, title_level: 'h1'}) }}
21 | {% endblock %}
22 |
23 | {% block sidebar %}
24 | {{ include('partials/sidebar.html.twig') }}
25 | {% endblock %}
26 | {% endembed %}
27 |
28 |
29 | {% endblock %}
30 |
--------------------------------------------------------------------------------
/templates/partials/blog/author.html.twig:
--------------------------------------------------------------------------------
1 | {# PARTIAL AUTHOR FOR PAGES #}
2 |
3 |
4 |
5 |
6 | {% if (avatar ?? null) %}
7 | {{ include('partials/blog/avatar.html.twig', {avatar_width: 80}) }}
8 | {% endif %}
9 |
10 |
11 |
{{ 'MUNDANA.ITEM.WRITTEN_BY'|t }}
12 | {% if page.taxonomy.author %}
13 | {{ author|raw }}
14 | {% else %}
15 | {{ author|raw }}
16 | {% endif %}
17 | {% if author_twitter %}{{ 'MUNDANA.MISC.FOLLOW'|t }} {% endif %}
18 | {% if author_bio %}{{ author_bio|markdown }}{% endif %}
19 |
20 |
21 |
--------------------------------------------------------------------------------
/blueprints/pages/modular/allstories.yaml:
--------------------------------------------------------------------------------
1 | title: AllStories
2 | '@extends': default
3 |
4 | form:
5 | fields:
6 | tabs:
7 | fields:
8 | content:
9 | fields:
10 | _Headings:
11 | fields:
12 | _TitleToggle:
13 | fields:
14 | header.show_title:
15 | replace-options@: true
16 | default: 0
17 | highlight: 0
18 | options:
19 | 1: PLUGIN_ADMIN.YES
20 | 0: PLUGIN_ADMIN.NO
21 | options:
22 | fields:
23 | PageOptions:
24 | import@:
25 | type: partials/blog-url
26 | context: blueprints://pages
27 | _configSidebar:
28 | type: section
29 | title: MUNDANA.ADMIN.BLOG.CONFIGURATION.SIDEBAR_SETTINGS
30 | ordering@: -2
31 | import@:
32 | type: partials/blog-sidebar
33 | context: blueprints://pages
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/bootstrap.scss:
--------------------------------------------------------------------------------
1 | /*
2 | * Bootstrap v4.6.2 (https://getbootstrap.com/)
3 | * Copyright 2011-2022 The Bootstrap Authors
4 | * Copyright 2011-2022 Twitter, Inc.
5 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
6 | */
7 |
8 | @import "functions";
9 | @import "variables";
10 | @import "mixins";
11 | @import "root";
12 | @import "reboot";
13 | @import "type";
14 | @import "images";
15 | @import "code";
16 | @import "grid";
17 | @import "tables";
18 | @import "forms";
19 | @import "buttons";
20 | @import "transitions";
21 | @import "dropdown";
22 | @import "button-group";
23 | @import "input-group";
24 | @import "custom-forms";
25 | @import "nav";
26 | @import "navbar";
27 | @import "card";
28 | @import "breadcrumb";
29 | @import "pagination";
30 | @import "badge";
31 | @import "jumbotron";
32 | @import "alert";
33 | @import "progress";
34 | @import "media";
35 | @import "list-group";
36 | @import "close";
37 | @import "toasts";
38 | @import "modal";
39 | @import "tooltip";
40 | @import "popover";
41 | @import "carousel";
42 | @import "spinners";
43 | @import "utilities";
44 | @import "print";
45 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2023 pmoreno.rodriguez
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/templates/partials/breadcrumbs.html.twig:
--------------------------------------------------------------------------------
1 | {% set breadcrumbs_config = config.plugins.breadcrumbs %}
2 | {% set crumbs = breadcrumbs.get() %}
3 |
4 | {% if crumbs|length > 1 %}
5 |
6 |
7 |
8 | {% if breadcrumbs_config.icon_home %}
9 |
10 | {% endif %}
11 | {% for crumb in crumbs %}
12 | {% set active = loop.last ? 'active' : '' %}
13 | {% set arialabel = loop.last ? 'aria-current=page' : '' %}
14 |
15 | {%- if not loop.last or config.plugins.breadcrumbs.link_trailing -%}
16 | {{ crumb.menu }}
17 | {%- else -%}
18 | {{ crumb.menu }}
19 | {%- endif -%}
20 |
21 | {% endfor %}
22 |
23 |
24 |
25 | {% endif %}
26 |
--------------------------------------------------------------------------------
/templates/partials/blog/mailchimp.html.twig:
--------------------------------------------------------------------------------
1 | {# PARTIAL MAILCHIMP #}
2 |
3 |
4 |
5 |
6 |
{{ mailchimpTitle|raw }}
7 | {{ mailchimpDescription|raw }}
8 |
9 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/templates/partials/shortcodes/sc-cards.html.twig:
--------------------------------------------------------------------------------
1 | {# SHORTCODE TEMPLATE FOR BOOTSTRAP CARDS #}
2 |
3 |
4 | {% for card in cards %}
5 | {% set columnSize = card.getParameter('column-size', 'col-sm-6') %}
6 |
7 |
8 |
9 |
{{ card.getParameter('title') }}
10 |
11 | {{ card.getContent()|replace({'
': '', '
': ''})|raw }}
12 |
13 | {% if card.getParameter('button-text') and card.getParameter('button-url') %}
14 | {% set buttonColor = card.getParameter('button-color', 'primary') %}
15 |
{{ card.getParameter('button-text') }}
16 | {% endif %}
17 | {# Add other card components as needed #}
18 |
19 |
20 |
21 | {% endfor %}
22 |
23 |
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/_close.scss:
--------------------------------------------------------------------------------
1 | .close {
2 | float: right;
3 | @include font-size($close-font-size);
4 | font-weight: $close-font-weight;
5 | line-height: 1;
6 | color: $close-color;
7 | text-shadow: $close-text-shadow;
8 | opacity: .5;
9 |
10 | // Override
's hover style
11 | @include hover() {
12 | color: invert($close-color);
13 | text-decoration: none;
14 | }
15 |
16 | &:not(:disabled):not(.disabled) {
17 | @include hover-focus() {
18 | opacity: .75;
19 | }
20 | }
21 | }
22 |
23 | // Additional properties for button version
24 | // iOS requires the button element instead of an anchor tag.
25 | // If you want the anchor version, it requires `href="#"`.
26 | // See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile
27 |
28 | // stylelint-disable-next-line selector-no-qualifying-type
29 | button.close {
30 | padding: 0;
31 | background-color: transparent;
32 | border: 0;
33 | }
34 |
35 | // Future-proof disabling of clicks on ` ` elements
36 |
37 | // stylelint-disable-next-line selector-no-qualifying-type
38 | a.close.disabled {
39 | pointer-events: none;
40 | }
41 |
--------------------------------------------------------------------------------
/assets/css/google-fonts-local.css:
--------------------------------------------------------------------------------
1 | /* lora-regular - latin */
2 | @font-face {
3 | font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */
4 | font-family: 'Lora';
5 | font-style: normal;
6 | font-weight: 400;
7 | src: url('../fonts/lora-v36-latin-regular.woff2') format('woff2'); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */
8 | }
9 |
10 | /* lora-italic - latin */
11 | @font-face {
12 | font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */
13 | font-family: 'Lora';
14 | font-style: italic;
15 | font-weight: 400;
16 | src: url('../fonts/lora-v36-latin-italic.woff2') format('woff2'); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */
17 | }
18 |
19 | /* lora-700 - latin */
20 | @font-face {
21 | font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */
22 | font-family: 'Lora';
23 | font-style: normal;
24 | font-weight: 700;
25 | src: url('../fonts/lora-v36-latin-700.woff2') format('woff2'); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */
26 | }
--------------------------------------------------------------------------------
/templates/partials/shortcodes/alert.html.twig:
--------------------------------------------------------------------------------
1 | {# SHORTCODE TEMPLATE FOR BOOTSTRAP ALERTS #}
2 |
3 | {% set alertClass = shortcode.getParameter('class', 'primary') %}
4 | {% set alertDismissible = shortcode.getParameter('dismissible', 'false') %}
5 | {% set alertHeading = shortcode.getParameter('heading') %}
6 | {% set alertText = shortcode.getContent() %}
7 |
8 | {% set classDismissible = '' %}
9 | {% set closeButton = '' %}
10 |
11 | {% if alertDismissible == 'true' %}
12 | {% set classDismissible = 'alert-dismissible fade show' %}
13 | {% set closeButton = '
14 |
15 | ×
16 | ' %}
17 | {% endif %}
18 |
19 | {% if alertHeading is not empty %}
20 |
21 |
{{ alertHeading }}
22 | {{ alertText|raw }}{{ closeButton|raw }}
23 |
24 | {% else %}
25 |
26 | {{ alertText|raw }}{{ closeButton|raw }}
27 |
28 | {% endif %}
29 |
--------------------------------------------------------------------------------
/shortcodes/CollapseShortcode.php:
--------------------------------------------------------------------------------
1 | shortcode->getHandlers()->add('sc-collapse', function(ShortcodeInterface $sc) {
12 |
13 | // Get the ID provided in the shortcode
14 | $hash = $sc->getParameter('id');
15 |
16 | $output = $this->twig->processTemplate(
17 | 'partials/shortcodes/sc-collapse.html.twig',
18 | [
19 | 'hash' => $hash,
20 | 'open' => $sc->getParameter('open'),
21 | 'collapse_items' => $this->shortcode->getStates($hash),
22 | ]
23 | );
24 |
25 | return $output;
26 | });
27 |
28 | $this->shortcode->getHandlers()->add('sc-collapse-item', function(ShortcodeInterface $sc) {
29 | // Get the ID of the parent shortcode
30 | $hash = $sc->getParent()->getParameter('id');
31 |
32 | $this->shortcode->setStates($hash, $sc);
33 |
34 | return '';
35 | });
36 | }
37 | }
38 |
39 |
40 |
41 |
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/_code.scss:
--------------------------------------------------------------------------------
1 | // Inline code
2 | code {
3 | @include font-size($code-font-size);
4 | color: $code-color;
5 | word-wrap: break-word;
6 |
7 | // Streamline the style when inside anchors to avoid broken underline and more
8 | a > & {
9 | color: inherit;
10 | }
11 | }
12 |
13 | // User input typically entered via keyboard
14 | kbd {
15 | padding: $kbd-padding-y $kbd-padding-x;
16 | @include font-size($kbd-font-size);
17 | color: $kbd-color;
18 | background-color: $kbd-bg;
19 | @include border-radius($border-radius-sm);
20 | @include box-shadow($kbd-box-shadow);
21 |
22 | kbd {
23 | padding: 0;
24 | @include font-size(100%);
25 | font-weight: $nested-kbd-font-weight;
26 | @include box-shadow(none);
27 | }
28 | }
29 |
30 | // Blocks of code
31 | pre {
32 | display: block;
33 | @include font-size($code-font-size);
34 | color: $pre-color;
35 |
36 | // Account for some code outputs that place code tags in pre tags
37 | code {
38 | @include font-size(inherit);
39 | color: inherit;
40 | word-break: normal;
41 | }
42 | }
43 |
44 | // Enable scrollable blocks of code
45 | .pre-scrollable {
46 | max-height: $pre-scrollable-max-height;
47 | overflow-y: scroll;
48 | }
49 |
--------------------------------------------------------------------------------
/templates/partials/blog/share.html.twig:
--------------------------------------------------------------------------------
1 | {# PARTIAL SHARE ICONS #}
2 |
3 |
4 | {% set color_mapping = {
5 | primary: '#007bff',
6 | secondary: '#6c757d',
7 | success: '#28a745',
8 | info: '#17a2b8',
9 | warning: '#ffc107',
10 | danger: '#dc3545',
11 | light: '#f8f9fa',
12 | dark: '#212529',
13 | } %}
14 | {% set a2a_icon_color = color_mapping[color_style] %}
15 |
16 |
17 |
18 |
19 | {{ 'MUNDANA.MISC.SHARE_THIS'|t }}
20 |
21 |
22 |
23 |
24 | {% for item in theme_config.share_icons %}
25 |
26 | {% endfor %}
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/_mixins.scss:
--------------------------------------------------------------------------------
1 | // Toggles
2 | //
3 | // Used in conjunction with global variables to enable certain theme features.
4 |
5 | // Vendor
6 | @import "vendor/rfs";
7 |
8 | // Deprecate
9 | @import "mixins/deprecate";
10 |
11 | // Utilities
12 | @import "mixins/breakpoints";
13 | @import "mixins/hover";
14 | @import "mixins/image";
15 | @import "mixins/badge";
16 | @import "mixins/resize";
17 | @import "mixins/screen-reader";
18 | @import "mixins/size";
19 | @import "mixins/reset-text";
20 | @import "mixins/text-emphasis";
21 | @import "mixins/text-hide";
22 | @import "mixins/text-truncate";
23 | @import "mixins/visibility";
24 |
25 | // Components
26 | @import "mixins/alert";
27 | @import "mixins/buttons";
28 | @import "mixins/caret";
29 | @import "mixins/pagination";
30 | @import "mixins/lists";
31 | @import "mixins/list-group";
32 | @import "mixins/nav-divider";
33 | @import "mixins/forms";
34 | @import "mixins/table-row";
35 |
36 | // Skins
37 | @import "mixins/background-variant";
38 | @import "mixins/border-radius";
39 | @import "mixins/box-shadow";
40 | @import "mixins/gradients";
41 | @import "mixins/transition";
42 |
43 | // Layout
44 | @import "mixins/clearfix";
45 | @import "mixins/grid-framework";
46 | @import "mixins/grid";
47 | @import "mixins/float";
48 |
--------------------------------------------------------------------------------
/shortcodes/CardsShortcode.php:
--------------------------------------------------------------------------------
1 | shortcode->getHandlers()->add('sc-cards', function(ShortcodeInterface $sc) {
12 | // Get unique identifier for the cards
13 | $hash = $this->shortcode->getId($sc);
14 |
15 | // Process the template
16 | $output = $this->twig->processTemplate(
17 | 'partials/shortcodes/sc-cards.html.twig',
18 | [
19 | 'hash' => $hash,
20 | 'cards' => $this->shortcode->getStates($hash),
21 | ]
22 | );
23 |
24 | return $output;
25 | });
26 |
27 | $this->shortcode->getHandlers()->add('sc-card', function(ShortcodeInterface $sc) {
28 | // Get the unique identifier of the parent ui-cards shortcode
29 | $hash = $this->shortcode->getId($sc->getParent());
30 |
31 | // Add the current card to the states of the parent ui-cards shortcode
32 | $this->shortcode->setStates($hash, $sc);
33 |
34 | return '';
35 | });
36 | }
37 | }
38 |
39 |
--------------------------------------------------------------------------------
/templates/partials/page/date.html.twig:
--------------------------------------------------------------------------------
1 | {# Set page datePublished in folowing order with support for translations #}
2 | {# FIRST: Page publication date #}
3 | {# SECOND: Page date #}
4 | {# LAST: Page modification date #}
5 |
6 | {# SET DEFAULT GRAV LANGUAGE #}
7 | {% apply spaceless %}
8 |
9 | {% set lang = grav.language.getActive ?: grav.config.site.default_lang %}
10 |
11 | {% set default_format = system.pages.dateformat.default %}
12 | {% set short_format = system.pages.dateformat.short %}
13 | {% if config.plugins['translate-date'].enabled %}
14 | {% set datePublished = (page.header.publish_date) ? (page.header.publish_date|td(lang, default_format)) : (page.date ? page.date|td(lang, default_format) : page.modified|td(lang, default_format)) %}
15 | {% elseif config.plugins['twig-extensions'].enabled %}
16 | {% set datePublished = (page.header.publish_date) ? (page.header.publish_date|localizeddate('medium', 'none', lang)) : (page.date ? page.date|localizeddate('medium', 'none', lang) : page.modified|localizeddate('medium', 'none', lang)) %}
17 | {% else %}
18 | {% set datePublished = (page.header.publish_date) ? (page.header.publish_date|date(short_format)) : (page.date ? page.date|date(short_format) : page.modified|date(short_format)) %}
19 | {% endif %}
20 |
21 | {{ datePublished }}
22 |
23 | {% endapply %}
24 |
--------------------------------------------------------------------------------
/templates/partials/shortcodes/sc-collapse.html.twig:
--------------------------------------------------------------------------------
1 | {# SHORTCODE TEMPLATE FOR BOOTSTRAP ACCORDION #}
2 |
3 | {% if hash ?? null %}
4 |
5 | {% for item in collapse_items %}
6 | {% set isOpen = item.getParameter('open') == true %}
7 | {% set opened = isOpen ? 'show' : '' %}
8 |
9 |
16 |
17 |
18 | {{ item.content|raw }}
19 |
20 |
21 |
22 | {% endfor %}
23 |
24 | {% endif %}
25 |
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/mixins/_image.scss:
--------------------------------------------------------------------------------
1 | // Image Mixins
2 | // - Responsive image
3 | // - Retina image
4 |
5 |
6 | // Responsive image
7 | //
8 | // Keep images from scaling beyond the width of their parents.
9 |
10 | @mixin img-fluid() {
11 | // Part 1: Set a maximum relative to the parent
12 | max-width: 100%;
13 | // Part 2: Override the height to auto, otherwise images will be stretched
14 | // when setting a width and height attribute on the img element.
15 | height: auto;
16 | }
17 |
18 |
19 | // Retina image
20 | //
21 | // Short retina mixin for setting background-image and -size.
22 |
23 | @mixin img-retina($file-1x, $file-2x, $width-1x, $height-1x) {
24 | background-image: url($file-1x);
25 |
26 | // Autoprefixer takes care of adding -webkit-min-device-pixel-ratio and -o-min-device-pixel-ratio,
27 | // but doesn't convert dppx=>dpi.
28 | // There's no such thing as unprefixed min-device-pixel-ratio since it's nonstandard.
29 | // Compatibility info: https://caniuse.com/css-media-resolution
30 | @media only screen and (min-resolution: 192dpi), // IE9-11 don't support dppx
31 | only screen and (min-resolution: 2dppx) { // Standardized
32 | background-image: url($file-2x);
33 | background-size: $width-1x $height-1x;
34 | }
35 | @include deprecate("`img-retina()`", "v4.3.0", "v5");
36 | }
37 |
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/_toasts.scss:
--------------------------------------------------------------------------------
1 | .toast {
2 | // Prevents from shrinking in IE11, when in a flex container
3 | // See https://github.com/twbs/bootstrap/issues/28341
4 | flex-basis: $toast-max-width;
5 | max-width: $toast-max-width;
6 | @include font-size($toast-font-size);
7 | color: $toast-color;
8 | background-color: $toast-background-color;
9 | background-clip: padding-box;
10 | border: $toast-border-width solid $toast-border-color;
11 | box-shadow: $toast-box-shadow;
12 | opacity: 0;
13 | @include border-radius($toast-border-radius);
14 |
15 | &:not(:last-child) {
16 | margin-bottom: $toast-padding-x;
17 | }
18 |
19 | &.showing {
20 | opacity: 1;
21 | }
22 |
23 | &.show {
24 | display: block;
25 | opacity: 1;
26 | }
27 |
28 | &.hide {
29 | display: none;
30 | }
31 | }
32 |
33 | .toast-header {
34 | display: flex;
35 | align-items: center;
36 | padding: $toast-padding-y $toast-padding-x;
37 | color: $toast-header-color;
38 | background-color: $toast-header-background-color;
39 | background-clip: padding-box;
40 | border-bottom: $toast-border-width solid $toast-header-border-color;
41 | @include border-top-radius(subtract($toast-border-radius, $toast-border-width));
42 | }
43 |
44 | .toast-body {
45 | padding: $toast-padding-x; // apply to both vertical and horizontal
46 | }
47 |
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/_images.scss:
--------------------------------------------------------------------------------
1 | // Responsive images (ensure images don't scale beyond their parents)
2 | //
3 | // This is purposefully opt-in via an explicit class rather than being the default for all ` `s.
4 | // We previously tried the "images are responsive by default" approach in Bootstrap v2,
5 | // and abandoned it in Bootstrap v3 because it breaks lots of third-party widgets (including Google Maps)
6 | // which weren't expecting the images within themselves to be involuntarily resized.
7 | // See also https://github.com/twbs/bootstrap/issues/18178
8 | .img-fluid {
9 | @include img-fluid();
10 | }
11 |
12 |
13 | // Image thumbnails
14 | .img-thumbnail {
15 | padding: $thumbnail-padding;
16 | background-color: $thumbnail-bg;
17 | border: $thumbnail-border-width solid $thumbnail-border-color;
18 | @include border-radius($thumbnail-border-radius);
19 | @include box-shadow($thumbnail-box-shadow);
20 |
21 | // Keep them at most 100% wide
22 | @include img-fluid();
23 | }
24 |
25 | //
26 | // Figures
27 | //
28 |
29 | .figure {
30 | // Ensures the caption's text aligns with the image.
31 | display: inline-block;
32 | }
33 |
34 | .figure-img {
35 | margin-bottom: $spacer * .5;
36 | line-height: 1;
37 | }
38 |
39 | .figure-caption {
40 | @include font-size($figure-caption-font-size);
41 | color: $figure-caption-color;
42 | }
43 |
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/_badge.scss:
--------------------------------------------------------------------------------
1 | // Base class
2 | //
3 | // Requires one of the contextual, color modifier classes for `color` and
4 | // `background-color`.
5 |
6 | .badge {
7 | display: inline-block;
8 | padding: $badge-padding-y $badge-padding-x;
9 | @include font-size($badge-font-size);
10 | font-weight: $badge-font-weight;
11 | line-height: 1;
12 | text-align: center;
13 | white-space: nowrap;
14 | vertical-align: baseline;
15 | @include border-radius($badge-border-radius);
16 | @include transition($badge-transition);
17 |
18 | @at-root a#{&} {
19 | @include hover-focus() {
20 | text-decoration: none;
21 | }
22 | }
23 |
24 | // Empty badges collapse automatically
25 | &:empty {
26 | display: none;
27 | }
28 | }
29 |
30 | // Quick fix for badges in buttons
31 | .btn .badge {
32 | position: relative;
33 | top: -1px;
34 | }
35 |
36 | // Pill badges
37 | //
38 | // Make them extra rounded with a modifier to replace v3's badges.
39 |
40 | .badge-pill {
41 | padding-right: $badge-pill-padding-x;
42 | padding-left: $badge-pill-padding-x;
43 | @include border-radius($badge-pill-border-radius);
44 | }
45 |
46 | // Colors
47 | //
48 | // Contextual variations (linked badges get darker on :hover).
49 |
50 | @each $color, $value in $theme-colors {
51 | .badge-#{$color} {
52 | @include badge-variant($value);
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/blueprints/pages/modular.yaml:
--------------------------------------------------------------------------------
1 | title: PLUGIN_ADMIN.MODULE
2 | extends@: default
3 |
4 | form:
5 | fields:
6 | tabs:
7 | type: tabs
8 | active: 1
9 |
10 | fields:
11 | content:
12 | fields:
13 | modular_title:
14 | type: spacer
15 | title: PLUGIN_ADMIN.MODULE_SETUP
16 |
17 | header.onpage_menu:
18 | type: toggle
19 | style: vertical
20 | label: MUNDANA.ADMIN.MODULAR.SHOW_ONPAGE_MENU
21 | help: MUNDANA.ADMIN.MODULAR.SHOW_ONPAGE_MENU_HELP
22 | default: 0
23 | highlight: 0
24 | options:
25 | 1: PLUGIN_ADMIN.YES
26 | 0: PLUGIN_ADMIN.NO
27 |
28 | header.content.items:
29 | type: text
30 | label: PLUGIN_ADMIN.ITEMS
31 | default: "@self.modular"
32 | size: medium
33 |
34 | header.content.order.by:
35 | type: text
36 | label: PLUGIN_ADMIN.ORDER_BY
37 | placeholder: date
38 | help:
39 | size: small
40 |
41 | header.content.order.dir:
42 | type: text
43 | label: PLUGIN_ADMIN.ORDER
44 | help: MUNDANA.ADMIN.MODULAR.ORDER_DIR_HELP
45 | placeholder: desc
46 | size: small
47 |
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/_progress.scss:
--------------------------------------------------------------------------------
1 | // Disable animation if transitions are disabled
2 | @if $enable-transitions {
3 | @keyframes progress-bar-stripes {
4 | from { background-position: $progress-height 0; }
5 | to { background-position: 0 0; }
6 | }
7 | }
8 |
9 | .progress {
10 | display: flex;
11 | height: $progress-height;
12 | overflow: hidden; // force rounded corners by cropping it
13 | line-height: 0;
14 | @include font-size($progress-font-size);
15 | background-color: $progress-bg;
16 | @include border-radius($progress-border-radius);
17 | @include box-shadow($progress-box-shadow);
18 | }
19 |
20 | .progress-bar {
21 | display: flex;
22 | flex-direction: column;
23 | justify-content: center;
24 | overflow: hidden;
25 | color: $progress-bar-color;
26 | text-align: center;
27 | white-space: nowrap;
28 | background-color: $progress-bar-bg;
29 | @include transition($progress-bar-transition);
30 | }
31 |
32 | .progress-bar-striped {
33 | @include gradient-striped();
34 | background-size: $progress-height $progress-height;
35 | }
36 |
37 | @if $enable-transitions {
38 | .progress-bar-animated {
39 | animation: $progress-bar-animation-timing progress-bar-stripes;
40 |
41 | @if $enable-prefers-reduced-motion-media-query {
42 | @media (prefers-reduced-motion: reduce) {
43 | animation: none;
44 | }
45 | }
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/templates/simplesearch_results.html.twig:
--------------------------------------------------------------------------------
1 | {% extends 'partials/simplesearch_base.html.twig' %}
2 |
3 | {% block content %}
4 |
5 |
6 |
7 |
8 |
9 | {{ include('partials/simplesearch_searchbox.html.twig') }}
10 |
11 |
12 | {% if query %}
13 | {% set count = search_results ? search_results.count : 0 %}
14 | {% if count is same as(1) %}
15 | {{ 'PLUGIN_SIMPLESEARCH.SEARCH_RESULTS_SUMMARY_SINGULAR'|t(query|e)|raw }}
16 | {% else %}
17 | {{ 'PLUGIN_SIMPLESEARCH.SEARCH_RESULTS_SUMMARY_PLURAL'|t(query|e, count)|raw }}
18 | {% endif %}
19 | {% endif %}
20 |
21 | {% for page in search_results %}
22 | {{ include('partials/simplesearch_item.html.twig', {page: page, page_title: page.title}) }}
23 | {% endfor %}
24 |
25 |
26 |
31 |
32 | {% endblock %}
33 |
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/_alert.scss:
--------------------------------------------------------------------------------
1 | //
2 | // Base styles
3 | //
4 |
5 | .alert {
6 | position: relative;
7 | padding: $alert-padding-y $alert-padding-x;
8 | margin-bottom: $alert-margin-bottom;
9 | border: $alert-border-width solid transparent;
10 | @include border-radius($alert-border-radius);
11 | }
12 |
13 | // Headings for larger alerts
14 | .alert-heading {
15 | // Specified to prevent conflicts of changing $headings-color
16 | color: inherit;
17 | }
18 |
19 | // Provide class for links that match alerts
20 | .alert-link {
21 | font-weight: $alert-link-font-weight;
22 | }
23 |
24 |
25 | // Dismissible alerts
26 | //
27 | // Expand the right padding and account for the close button's positioning.
28 |
29 | .alert-dismissible {
30 | padding-right: $close-font-size + $alert-padding-x * 2;
31 |
32 | // Adjust close link position
33 | .close {
34 | position: absolute;
35 | top: 0;
36 | right: 0;
37 | z-index: 2;
38 | padding: $alert-padding-y $alert-padding-x;
39 | color: inherit;
40 | }
41 | }
42 |
43 |
44 | // Alternate styles
45 | //
46 | // Generate contextual modifier classes for colorizing the alert.
47 |
48 | @each $color, $value in $theme-colors {
49 | .alert-#{$color} {
50 | @include alert-variant(theme-color-level($color, $alert-bg-level), theme-color-level($color, $alert-border-level), theme-color-level($color, $alert-color-level));
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/templates/partials/sidebar/featured.html.twig:
--------------------------------------------------------------------------------
1 | {# FEATURED SECTION - SIDEBAR #}
2 |
3 | {% set featured_posts = page.evaluate({'@taxonomy.tag': featuredposts_tag}).order('date', 'desc').slice(0, featuredposts_number) %}
4 |
5 | {% if featured_posts.count() > 0 %}
6 |
31 | {% endif %}
32 |
--------------------------------------------------------------------------------
/templates/partials/shortcodes/button.html.twig:
--------------------------------------------------------------------------------
1 | {# SHORTCODE TEMPLATE FOR BOOTSTRAP BUTTONS #}
2 |
3 | {% set buttonUrl = shortcode.getParameter('url', '') %}
4 | {% set buttonTarget = shortcode.getParameter('target', '') %}
5 | {% set buttonType = shortcode.getParameter('type', '') %}
6 | {% set buttonSize = shortcode.getParameter('size', '') %}
7 | {% set buttonClasses = shortcode.getParameter('classes', '') %}
8 | {% set buttonLabel = shortcode.getParameter('label', '') %}
9 | {% set buttonOutline = shortcode.getParameter('outline', 'false') %}
10 |
11 | {% set buttonAttributes = 'btn' %}
12 |
13 | {% if buttonType %}
14 | {% if buttonOutline == 'true' %}
15 | {% set buttonAttributes = buttonAttributes ~ ' btn-outline-' ~ buttonType %}
16 | {% else %}
17 | {% set buttonAttributes = buttonAttributes ~ ' btn-' ~ buttonType %}
18 | {% endif %}
19 | {% endif %}
20 |
21 | {% if buttonSize %}
22 | {% set buttonAttributes = buttonAttributes ~ ' btn-' ~ buttonSize %}
23 | {% endif %}
24 |
25 | {% if buttonClasses %}
26 | {% set buttonAttributes = buttonAttributes ~ ' ' ~ buttonClasses %}
27 | {% endif %}
28 |
29 | {% set targetAttribute = buttonTarget ? 'target="_' ~ buttonTarget ~ '"' : '' %}
30 |
31 | {% if buttonUrl and buttonLabel %}
32 | {{ buttonLabel }}
33 | {% elseif buttonLabel %}
34 |
{{ buttonLabel }}
35 | {% endif %}
36 |
--------------------------------------------------------------------------------
/templates/partials/simplesearch_searchbox.html.twig:
--------------------------------------------------------------------------------
1 | {% set min_chars = config.get('plugins.simplesearch.min_query_length', 3) %}
2 |
26 |
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/_breadcrumb.scss:
--------------------------------------------------------------------------------
1 | .breadcrumb {
2 | display: flex;
3 | flex-wrap: wrap;
4 | padding: $breadcrumb-padding-y $breadcrumb-padding-x;
5 | margin-bottom: $breadcrumb-margin-bottom;
6 | @include font-size($breadcrumb-font-size);
7 | list-style: none;
8 | background-color: $breadcrumb-bg;
9 | @include border-radius($breadcrumb-border-radius);
10 | }
11 |
12 | .breadcrumb-item {
13 | // The separator between breadcrumbs (by default, a forward-slash: "/")
14 | + .breadcrumb-item {
15 | padding-left: $breadcrumb-item-padding;
16 |
17 | &::before {
18 | float: left; // Suppress inline spacings and underlining of the separator
19 | padding-right: $breadcrumb-item-padding;
20 | color: $breadcrumb-divider-color;
21 | content: escape-svg($breadcrumb-divider);
22 | }
23 | }
24 |
25 | // IE9-11 hack to properly handle hyperlink underlines for breadcrumbs built
26 | // without `
`s. The `::before` pseudo-element generates an element
27 | // *within* the .breadcrumb-item and thereby inherits the `text-decoration`.
28 | //
29 | // To trick IE into suppressing the underline, we give the pseudo-element an
30 | // underline and then immediately remove it.
31 | + .breadcrumb-item:hover::before {
32 | text-decoration: underline;
33 | }
34 | // stylelint-disable-next-line no-duplicate-selectors
35 | + .breadcrumb-item:hover::before {
36 | text-decoration: none;
37 | }
38 |
39 | &.active {
40 | color: $breadcrumb-active-color;
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/_demo/pages/login/login.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Login
3 | cache_control: 'private, no-cache, must-revalidate'
4 | login_redirect_here: false
5 | forms:
6 | login:
7 | action: null
8 | method: post
9 | fields:
10 | username:
11 | type: text
12 | id: username
13 | placeholder: PLUGIN_LOGIN.USERNAME_EMAIL
14 | label: PLUGIN_LOGIN.USERNAME_EMAIL
15 | autofocus: true
16 | classes: 'form-control form-control-lg'
17 | outerclasses: 'form-outline mb-4'
18 | password:
19 | type: password
20 | id: password
21 | placeholder: PLUGIN_LOGIN.PASSWORD
22 | label: PLUGIN_LOGIN.PASSWORD
23 | classes: 'form-control form-control-lg'
24 | outerclasses: 'form-outline mb-4'
25 | login-twofa:
26 | action: null
27 | method: post
28 | fields:
29 | 2fa_instructions:
30 | type: display
31 | markdown: true
32 | content: PLUGIN_LOGIN.2FA_INSTRUCTIONS
33 | 2fa_code:
34 | type: text
35 | id: twofa-code
36 | autofocus: true
37 | placeholder: PLUGIN_LOGIN.2FA_CODE_INPUT
38 | permissions:
39 | inherit: true
40 | visible: false
41 | show_title: '1'
42 | subtitleLead: '1'
43 | media_order: secure_login.png
44 | show_image: true
45 | image_width: 1000
46 | image_height: 300
47 | ---
48 |
49 |
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/_spinners.scss:
--------------------------------------------------------------------------------
1 | //
2 | // Rotating border
3 | //
4 |
5 | @keyframes spinner-border {
6 | to { transform: rotate(360deg); }
7 | }
8 |
9 | .spinner-border {
10 | display: inline-block;
11 | width: $spinner-width;
12 | height: $spinner-height;
13 | vertical-align: $spinner-vertical-align;
14 | border: $spinner-border-width solid currentcolor;
15 | border-right-color: transparent;
16 | // stylelint-disable-next-line property-disallowed-list
17 | border-radius: 50%;
18 | animation: .75s linear infinite spinner-border;
19 | }
20 |
21 | .spinner-border-sm {
22 | width: $spinner-width-sm;
23 | height: $spinner-height-sm;
24 | border-width: $spinner-border-width-sm;
25 | }
26 |
27 | //
28 | // Growing circle
29 | //
30 |
31 | @keyframes spinner-grow {
32 | 0% {
33 | transform: scale(0);
34 | }
35 | 50% {
36 | opacity: 1;
37 | transform: none;
38 | }
39 | }
40 |
41 | .spinner-grow {
42 | display: inline-block;
43 | width: $spinner-width;
44 | height: $spinner-height;
45 | vertical-align: $spinner-vertical-align;
46 | background-color: currentcolor;
47 | // stylelint-disable-next-line property-disallowed-list
48 | border-radius: 50%;
49 | opacity: 0;
50 | animation: .75s linear infinite spinner-grow;
51 | }
52 |
53 | .spinner-grow-sm {
54 | width: $spinner-width-sm;
55 | height: $spinner-height-sm;
56 | }
57 |
58 | @if $enable-prefers-reduced-motion-media-query {
59 | @media (prefers-reduced-motion: reduce) {
60 | .spinner-border,
61 | .spinner-grow {
62 | animation-duration: 1.5s;
63 | }
64 | }
65 | }
66 |
--------------------------------------------------------------------------------
/templates/partials/forgot-form.html.twig:
--------------------------------------------------------------------------------
1 | {% set layout = layout ?? form.layout ?? 'default' %}
2 | {% set field_layout = layout %}
3 |
4 | {% set client_side_validation = form.client_side_validation is not null ? form.client_side_validation : config.plugins.form.client_side_validation|default(true) %}
5 | {% set inline_errors = form.inline_errors is not null ? form.inline_errors : config.plugins.form.inline_errors(false) %}
6 |
7 |
8 |
9 |
10 | {{ content|raw }}
11 |
12 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/templates/partials/pagination.html.twig:
--------------------------------------------------------------------------------
1 | {% set pagination = pagination|default(page.collection.params.pagination) %}
2 | {% set base_url = base_url|default(page.url) %}
3 |
4 | {% if pagination|length > 1 %}
5 |
6 |
34 | {% endif %}
35 |
--------------------------------------------------------------------------------
/blueprints.yaml:
--------------------------------------------------------------------------------
1 | name: Mundana
2 | slug: mundana
3 | type: theme
4 | version: 2.2.2
5 | description: Mundana Jekyll Theme ported to Grav
6 | icon: microchip
7 | author:
8 | name: Pedro Moreno
9 | email: pmoreno@pmdesign.dev
10 | url:
11 | homepage: https://github.com/pmoreno-rodriguez/grav-theme-mundana
12 | demo: https://mundana.pmdesign.dev/
13 | docs: https://github.com/pmoreno-rodriguez/grav-theme-mundana/blob/main/README.md
14 | keywords: theme, core, modern, fast, responsive, html5, css3
15 | bugs: https://github.com/pmoreno-rodriguez/grav-theme-mundana/issues
16 | license: MIT
17 |
18 | dependencies:
19 | - { name: grav, version: '>=1.7.49.5' }
20 |
21 | form:
22 | validation: loose
23 |
24 | fields:
25 | tabs:
26 | type: tabs
27 | active: 1
28 | fields:
29 | theme_info:
30 | type: tab
31 | title: MUNDANA.ADMIN.THEME.OPTIONS
32 | import@:
33 | type: theme/settings.yaml
34 | context: blueprints://
35 |
36 | blog_info:
37 | type: tab
38 | title: MUNDANA.ADMIN.THEME.BLOG.TAB
39 | import@:
40 | type: theme/blog.yaml
41 | context: blueprints://
42 |
43 | share_options:
44 | type: tab
45 | title: MUNDANA.ADMIN.THEME.SHARE.TAB
46 | import@:
47 | type: theme/share.yaml
48 | context: blueprints://
49 |
50 | footer_options:
51 | type: tab
52 | title: MUNDANA.ADMIN.THEME.FOOTER.TAB
53 | import@:
54 | type: theme/footer.yaml
55 | context: blueprints://
56 |
57 |
58 |
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/mixins/_caret.scss:
--------------------------------------------------------------------------------
1 | @mixin caret-down() {
2 | border-top: $caret-width solid;
3 | border-right: $caret-width solid transparent;
4 | border-bottom: 0;
5 | border-left: $caret-width solid transparent;
6 | }
7 |
8 | @mixin caret-up() {
9 | border-top: 0;
10 | border-right: $caret-width solid transparent;
11 | border-bottom: $caret-width solid;
12 | border-left: $caret-width solid transparent;
13 | }
14 |
15 | @mixin caret-right() {
16 | border-top: $caret-width solid transparent;
17 | border-right: 0;
18 | border-bottom: $caret-width solid transparent;
19 | border-left: $caret-width solid;
20 | }
21 |
22 | @mixin caret-left() {
23 | border-top: $caret-width solid transparent;
24 | border-right: $caret-width solid;
25 | border-bottom: $caret-width solid transparent;
26 | }
27 |
28 | @mixin caret($direction: down) {
29 | @if $enable-caret {
30 | &::after {
31 | display: inline-block;
32 | margin-left: $caret-spacing;
33 | vertical-align: $caret-vertical-align;
34 | content: "";
35 | @if $direction == down {
36 | @include caret-down();
37 | } @else if $direction == up {
38 | @include caret-up();
39 | } @else if $direction == right {
40 | @include caret-right();
41 | }
42 | }
43 |
44 | @if $direction == left {
45 | &::after {
46 | display: none;
47 | }
48 |
49 | &::before {
50 | display: inline-block;
51 | margin-right: $caret-spacing;
52 | vertical-align: $caret-vertical-align;
53 | content: "";
54 | @include caret-left();
55 | }
56 | }
57 |
58 | &:empty::after {
59 | margin-left: 0;
60 | }
61 | }
62 | }
63 |
--------------------------------------------------------------------------------
/templates/modular.html.twig:
--------------------------------------------------------------------------------
1 | {% extends 'partials/base.html.twig' %}
2 |
3 | {% set show_onpage_menu = header_var('onpage_menu')|defined(false) %}
4 |
5 | {% block header %}
6 | {% embed 'partials/navbar.html.twig' %}
7 | {% block navigation %}
8 | {% if show_onpage_menu == true %}
9 |
27 | {% else %}
28 | {{ include('partials/navigation.html.twig') }}
29 | {% endif %}
30 | {% endblock %}
31 | {% endembed %}
32 | {% endblock %}
33 | {% block content %}
34 |
35 | {{ page.content|raw }}
36 |
37 | {% for module in page.collection() %}
38 | {% if show_onpage_menu == true %}
39 |
40 | {% endif %}
41 | {{ module.content|raw }}
42 | {% endfor %}
43 | {% endblock %}
44 |
--------------------------------------------------------------------------------
/templates/partials/sidebar.html.twig:
--------------------------------------------------------------------------------
1 | {# Start of sticky sidebar #}
2 |
3 |
4 | {# Featured posts #}
5 | {% if show_featured %}
6 | {{ include('partials/sidebar/featured.html.twig'
7 | , {block_title: 'MUNDANA.SIDEBAR.FEATURED'|t}) }}
8 | {% endif %}
9 |
10 | {# Taxonomy list (if taxonomylist plugin is enabled) #}
11 | {% if showTaxonomyList %}
12 | {{ include('partials/sidebar/taxonomylist.html.twig'
13 | , {base_url: new_base_url, taxonomy: 'tag', block_title: 'MUNDANA.SIDEBAR.TAXONOMYLIST'|t}) }}
14 | {% endif %}
15 |
16 | {# Related pages (if relatedpages plugin is enabled) #}
17 | {% if showRelatedPages %}
18 | {{ include('partials/sidebar/relatedpages.html.twig'
19 | , {base_url: new_base_url, block_title: 'MUNDANA.SIDEBAR.RELATEDPAGES'|t}) }}
20 | {% endif %}
21 |
22 | {# Random page (if random plugin is enabled) #}
23 | {% if random %}
24 | {{ include('partials/sidebar/random.html.twig'
25 | , {block_title: 'MUNDANA.SIDEBAR.RANDOM_ARTICLE.LABEL'|t}) }}
26 | {% endif %}
27 |
28 | {# Archived posts (if archives plugin is enabled) #}
29 | {% if archives %}
30 | {{ include('partials/sidebar/archives.html.twig'
31 | , {base_url: new_base_url, block_title: 'MUNDANA.SIDEBAR.ARCHIVES'|t}) }}
32 | {% endif %}
33 |
34 | {# Grav Syndication (if feed plugin is enabled) #}
35 | {% if feeds %}
36 | {{ include('partials/sidebar/feeds.html.twig'
37 | , {feed_url: feed_url, block_title: 'MUNDANA.SIDEBAR.FEEDS'|t}) }}
38 | {% endif %}
39 |
40 | {# Blog Categories block #}
41 | {% if show_categories %}
42 | {{ include('partials/sidebar/categories.html.twig'
43 | , {blog: blog, block_title: 'MUNDANA.SIDEBAR.CATEGORIES'|t}) }}
44 | {% endif %}
45 |
46 |
47 |
--------------------------------------------------------------------------------
/blueprints/pages/contact.yaml:
--------------------------------------------------------------------------------
1 | title: Contact Page
2 | '@extends':
3 | type: default
4 | context: blueprints://pages
5 |
6 | form:
7 | fields:
8 | tabs:
9 | type: tabs
10 | fields:
11 | contact:
12 | type: tab
13 | title: MUNDANA.ADMIN.CONTACT.TAB
14 | fields:
15 |
16 | columns:
17 | type: columns
18 | fields:
19 |
20 | column_address:
21 | type: column
22 | fields:
23 | header.address:
24 | type: list
25 | style: vertical
26 | label: MUNDANA.ADMIN.CONTACT.ADDRESS.LABEL
27 | help: MUNDANA.ADMIN.CONTACT.ADDRESS.HELP
28 | fields:
29 | .addressField:
30 | type: text
31 | label: MUNDANA.ADMIN.CONTACT.ADDRESS.FIELD
32 | .fieldIcon:
33 | type: text
34 | size: small
35 | label: MUNDANA.ADMIN.CONTACT.ADDRESS.ICON
36 | description: MUNDANA.ADMIN.CONTACT.ADDRESS.ICON_DESCRIPTION
37 | column_instructions:
38 | type: column
39 | fields:
40 | _contactHelp:
41 | type: display
42 | label: MUNDANA.ADMIN.CONTACT.ADDRESS.INSTRUCTIONS
43 | style: vertical
44 | markdown: true
45 | content: "The contact page is ready to accept a featured image and the fields you want to enter on the contact card, for example, address, phone, email, etc.\n\nEach field has two possible values, 'Field', which is the text you want to display and 'Icon' which is the icon displayed next to the Field text."
--------------------------------------------------------------------------------
/templates/partials/sidebar/relatedpages.html.twig:
--------------------------------------------------------------------------------
1 | {# RELATED SECTION - SIDEBAR #}
2 |
3 |
45 |
--------------------------------------------------------------------------------
/blueprints/pages/partials/item-bits.yaml:
--------------------------------------------------------------------------------
1 | form:
2 | fields:
3 |
4 | _togglesTitle:
5 | type: section
6 | title: MUNDANA.ADMIN.BLOG.CONFIGURATION.LABEL
7 |
8 | header.isSticky:
9 | type: toggle
10 | toggleable: true
11 | label: MUNDANA.ADMIN.ITEM.CONFIGURATION.STICKY
12 | help: MUNDANA.ADMIN.ITEM.CONFIGURATION.STICKY_HELP
13 | highlight: 0
14 | default: 0
15 | options:
16 | 1: PLUGIN_ADMIN.ENABLED
17 | 0: PLUGIN_ADMIN.DISABLED
18 | validate:
19 | type: bool
20 | header.show_sidebar:
21 | type: toggle
22 | toggleable: true
23 | label: MUNDANA.ADMIN.BLOG.CONFIGURATION.SHOW_SIDEBAR
24 | highlight: 0
25 | options:
26 | 1: PLUGIN_ADMIN.ENABLED
27 | 0: PLUGIN_ADMIN.DISABLED
28 | validate:
29 | type: bool
30 |
31 | header.show_breadcrumbs:
32 | type: toggle
33 | toggleable: true
34 | label: MUNDANA.ADMIN.BLOG.CONFIGURATION.SHOW_BREADCRUMBS
35 | highlight: 1
36 | options:
37 | 1: PLUGIN_ADMIN.ENABLED
38 | 0: PLUGIN_ADMIN.DISABLED
39 | validate:
40 | type: bool
41 |
42 | _Author_Section:
43 | type: section
44 | title: MUNDANA.ADMIN.ITEM.AUTHOR_OPTIONS.LABEL
45 | header.author.name:
46 | type: text
47 | toggleable: true
48 | size: medium
49 | label: MUNDANA.ADMIN.ITEM.AUTHOR_OPTIONS.NAME
50 | header.author.twitter:
51 | type: text
52 | toggleable: true
53 | size: medium
54 | label: MUNDANA.ADMIN.ITEM.AUTHOR_OPTIONS.TWITTER
55 | header.author.bio:
56 | type: textarea
57 | toggleable: true
58 | rows: 3
59 | label: MUNDANA.ADMIN.ITEM.AUTHOR_OPTIONS.BIOGRAPHY
60 | header.author.avatarImage:
61 | type: pagemediaselect
62 | toggleable: true
63 | size: medium
64 | label: MUNDANA.ADMIN.ITEM.AUTHOR_OPTIONS.AVATAR
65 | preview_images: true
--------------------------------------------------------------------------------
/templates/partials/blog-list-item.html.twig:
--------------------------------------------------------------------------------
1 |
2 |
3 | {# Page post title #}
4 | <{{ title_level }} class="font-weight-bold mb-1">
5 |
{{ page_title|e }}
6 | {{ title_level }}>
7 | {# If summary is enabled it will displayed #}
8 | {% if page.header.summary.enabled ?? true %}
9 | {{ include('partials/blog/page-summary.html.twig') }}
10 | {% endif %}
11 | {# Show categories #}
12 |
13 | {{ 'MUNDANA.MISC.IN'|t }}
14 | {% for category in page.taxonomy.category %}
15 | {{ category|e }} {% if not loop.last %}, {% endif %}
16 | {% endfor %}
17 |
18 |
19 | {# Show post date #}
20 |
21 | {{ include('partials/blog/date.html.twig') }}
22 |
23 |
24 | {# Show featured image if it's defined and show_image is true #}
25 | {% if featuredImage and show_image %}
26 |
37 | {% endif %}
38 |
39 |
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/_grid.scss:
--------------------------------------------------------------------------------
1 | // Container widths
2 | //
3 | // Set the container width, and override it for fixed navbars in media queries.
4 |
5 | @if $enable-grid-classes {
6 | // Single container class with breakpoint max-widths
7 | .container,
8 | // 100% wide container at all breakpoints
9 | .container-fluid {
10 | @include make-container();
11 | }
12 |
13 | // Responsive containers that are 100% wide until a breakpoint
14 | @each $breakpoint, $container-max-width in $container-max-widths {
15 | .container-#{$breakpoint} {
16 | @extend .container-fluid;
17 | }
18 |
19 | @include media-breakpoint-up($breakpoint, $grid-breakpoints) {
20 | %responsive-container-#{$breakpoint} {
21 | max-width: $container-max-width;
22 | }
23 |
24 | // Extend each breakpoint which is smaller or equal to the current breakpoint
25 | $extend-breakpoint: true;
26 |
27 | @each $name, $width in $grid-breakpoints {
28 | @if ($extend-breakpoint) {
29 | .container#{breakpoint-infix($name, $grid-breakpoints)} {
30 | @extend %responsive-container-#{$breakpoint};
31 | }
32 |
33 | // Once the current breakpoint is reached, stop extending
34 | @if ($breakpoint == $name) {
35 | $extend-breakpoint: false;
36 | }
37 | }
38 | }
39 | }
40 | }
41 | }
42 |
43 |
44 | // Row
45 | //
46 | // Rows contain your columns.
47 |
48 | @if $enable-grid-classes {
49 | .row {
50 | @include make-row();
51 | }
52 |
53 | // Remove the negative margin from default .row, then the horizontal padding
54 | // from all immediate children columns (to prevent runaway style inheritance).
55 | .no-gutters {
56 | margin-right: 0;
57 | margin-left: 0;
58 |
59 | > .col,
60 | > [class*="col-"] {
61 | padding-right: 0;
62 | padding-left: 0;
63 | }
64 | }
65 | }
66 |
67 | // Columns
68 | //
69 | // Common styles for small and large grid columns
70 |
71 | @if $enable-grid-classes {
72 | @include make-grid-columns();
73 | }
74 |
--------------------------------------------------------------------------------
/_demo/pages/02.blog/welcome-to-grav/item.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 'Welcome to Grav!'
3 | taxonomy:
4 | category:
5 | - editors
6 | tag:
7 | - featured
8 | media_order: 'demo1.jpg,demo1.webp,pedro_avataaars.webp'
9 | feed:
10 | limit: 10
11 | summary: { }
12 | image_width: 1038
13 | image_height: 437
14 | author:
15 | name: 'Pedro Moreno'
16 | avatarImage: pedro_avataaars.webp
17 | twitter: '#'
18 | bio: 'In my free time, I like to design web pages and create and modify themes for Grav CMS. I love Grav, it''s easy to maintain, flexible, with multiple possibilities'
19 | featuredImage: demo1.webp
20 | show_title: '1'
21 | show_image: true
22 | subtitleLead: '1'
23 | ---
24 |
25 | Grav is a Fast, Simple, and Flexible file-based Web-platform. There is Zero installation required. Just extract the ZIP archive, and you are already up and running. Although Grav follows principles similar to other flat-file CMS platforms, it has a different design philosophy than most.
26 |
27 | The name Grav is just a shortened version of the word Gravity. The shared namespace of our platform and a movie starring Sandra Bullock is pure coincidence! More importantly, gravity is also a fundamental physical principle that describes the forces of attraction between objects. Frankly, the name was chosen as a temporary "codename" for the project, and it just stuck.
28 |
29 | The underlying architecture of Grav is built using well established and best-in-class technologies. This is to ensure that Grav is simple to use and easy to extend. Some of these key technologies include:
30 |
31 | * Twig Templating: for powerful control of the user interface
32 | * Markdown: for easy content creation
33 | * YAML: for simple configuration
34 | * Parsedown: for fast Markdown and Markdown Extra support
35 | * Doctrine Cache: for performance
36 | * Pimple Dependency Injection Container: for extensibility and maintainability
37 | * Symfony Event Dispatcher: for plugin event handling
38 | * Symfony Console: for CLI interface
39 | * Gregwar Image Library: for dynamic image manipulation
40 |
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/utilities/_borders.scss:
--------------------------------------------------------------------------------
1 | // stylelint-disable property-disallowed-list, declaration-no-important
2 |
3 | //
4 | // Border
5 | //
6 |
7 | .border { border: $border-width solid $border-color !important; }
8 | .border-top { border-top: $border-width solid $border-color !important; }
9 | .border-right { border-right: $border-width solid $border-color !important; }
10 | .border-bottom { border-bottom: $border-width solid $border-color !important; }
11 | .border-left { border-left: $border-width solid $border-color !important; }
12 |
13 | .border-0 { border: 0 !important; }
14 | .border-top-0 { border-top: 0 !important; }
15 | .border-right-0 { border-right: 0 !important; }
16 | .border-bottom-0 { border-bottom: 0 !important; }
17 | .border-left-0 { border-left: 0 !important; }
18 |
19 | @each $color, $value in $theme-colors {
20 | .border-#{$color} {
21 | border-color: $value !important;
22 | }
23 | }
24 |
25 | .border-white {
26 | border-color: $white !important;
27 | }
28 |
29 | //
30 | // Border-radius
31 | //
32 |
33 | .rounded-sm {
34 | border-radius: $border-radius-sm !important;
35 | }
36 |
37 | .rounded {
38 | border-radius: $border-radius !important;
39 | }
40 |
41 | .rounded-top {
42 | border-top-left-radius: $border-radius !important;
43 | border-top-right-radius: $border-radius !important;
44 | }
45 |
46 | .rounded-right {
47 | border-top-right-radius: $border-radius !important;
48 | border-bottom-right-radius: $border-radius !important;
49 | }
50 |
51 | .rounded-bottom {
52 | border-bottom-right-radius: $border-radius !important;
53 | border-bottom-left-radius: $border-radius !important;
54 | }
55 |
56 | .rounded-left {
57 | border-top-left-radius: $border-radius !important;
58 | border-bottom-left-radius: $border-radius !important;
59 | }
60 |
61 | .rounded-lg {
62 | border-radius: $border-radius-lg !important;
63 | }
64 |
65 | .rounded-circle {
66 | border-radius: 50% !important;
67 | }
68 |
69 | .rounded-pill {
70 | border-radius: $rounded-pill !important;
71 | }
72 |
73 | .rounded-0 {
74 | border-radius: 0 !important;
75 | }
76 |
--------------------------------------------------------------------------------
/_demo/config/themes/mundana.yaml:
--------------------------------------------------------------------------------
1 | enabled: true
2 | production-mode: false
3 | blog-page: /blog
4 | dropdown:
5 | enabled: true
6 | back_to_top_button: true
7 | custom_logo_enabled: true
8 | custom_logo_width: 45
9 | custom_css: '1'
10 | custom_js: '1'
11 | menu_langswitcher: true
12 | menu_search: true
13 | menu_login: true
14 | override_page_style: false
15 | navbar:
16 | container_fluid: false
17 | display_site_name: true
18 | icon_group: fas
19 | style: dark
20 | bgcolor: danger
21 | height: 70
22 | icon_size: null
23 | icon: home
24 | custom_menu_enabled: true
25 | sidebar_showtaxonomy: '0'
26 | sidebar_showarchives: '0'
27 | sidebar_showrelatedpages: '1'
28 | sidebar_showfeeds: '0'
29 | sidebar_showrandom: '0'
30 | blog_route: /blog
31 | featuredposts: true
32 | featuredposts_category: featured
33 | featuredposts_number: 4
34 | share_enable: true
35 | mailchimp_enable: true
36 | mailchimp_address: 'https://wowthemes.us11.list-manage.com/subscribe/post?u=8aeb20a530e124561927d3bd8&id=8c3d2d214b'
37 | disqus_enable: true
38 | disqus_name: demowebsite
39 | footer_text_left: '© 2023 All rights reserved.Fork on Github '
40 | footer_text_right: 'Mundana Grav Theme ported from Mundana Jekyll Theme '
41 | custom_logo:
42 | user/themes/mundana/images/logo/Grav_logo_white.png:
43 | name: Grav_logo_white.png
44 | full_path: Grav_logo_white.png
45 | type: image/png
46 | size: 25654
47 | path: user/themes/mundana/images/logo/Grav_logo_white.png
48 | custom_logo_mobile: { }
49 | share_icons:
50 | -
51 | name: facebook
52 | -
53 | name: twitter
54 | -
55 | name: mastodon
56 | mailchimp_title: 'Join Newsletter'
57 | mailchimp_description: 'Get the latest news right in your inbox. We never spam! '
58 | custom_menu_items:
59 | -
60 | text: Grav
61 | icon: 'fab fa-grav'
62 | url: 'https://getgrav.org'
63 | target: _blank
64 |
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/_pagination.scss:
--------------------------------------------------------------------------------
1 | .pagination {
2 | display: flex;
3 | @include list-unstyled();
4 | @include border-radius();
5 | }
6 |
7 | .page-link {
8 | position: relative;
9 | display: block;
10 | padding: $pagination-padding-y $pagination-padding-x;
11 | margin-left: -$pagination-border-width;
12 | line-height: $pagination-line-height;
13 | color: $pagination-color;
14 | text-decoration: if($link-decoration == none, null, none);
15 | background-color: $pagination-bg;
16 | border: $pagination-border-width solid $pagination-border-color;
17 |
18 | &:hover {
19 | z-index: 2;
20 | color: $pagination-hover-color;
21 | text-decoration: none;
22 | background-color: $pagination-hover-bg;
23 | border-color: $pagination-hover-border-color;
24 | }
25 |
26 | &:focus {
27 | z-index: 3;
28 | outline: $pagination-focus-outline;
29 | box-shadow: $pagination-focus-box-shadow;
30 | }
31 | }
32 |
33 | .page-item {
34 | &:first-child {
35 | .page-link {
36 | margin-left: 0;
37 | @include border-left-radius($border-radius);
38 | }
39 | }
40 | &:last-child {
41 | .page-link {
42 | @include border-right-radius($border-radius);
43 | }
44 | }
45 |
46 | &.active .page-link {
47 | z-index: 3;
48 | color: $pagination-active-color;
49 | background-color: $pagination-active-bg;
50 | border-color: $pagination-active-border-color;
51 | }
52 |
53 | &.disabled .page-link {
54 | color: $pagination-disabled-color;
55 | pointer-events: none;
56 | // Opinionated: remove the "hand" cursor set previously for .page-link
57 | cursor: auto;
58 | background-color: $pagination-disabled-bg;
59 | border-color: $pagination-disabled-border-color;
60 | }
61 | }
62 |
63 |
64 | //
65 | // Sizing
66 | //
67 |
68 | .pagination-lg {
69 | @include pagination-size($pagination-padding-y-lg, $pagination-padding-x-lg, $font-size-lg, $line-height-lg, $pagination-border-radius-lg);
70 | }
71 |
72 | .pagination-sm {
73 | @include pagination-size($pagination-padding-y-sm, $pagination-padding-x-sm, $font-size-sm, $line-height-sm, $pagination-border-radius-sm);
74 | }
75 |
--------------------------------------------------------------------------------
/templates/modular/sticky.html.twig:
--------------------------------------------------------------------------------
1 | {# MODULAR PAGE - STICKY POST #}
2 | {% embed 'modular/partials/common_variables.html.twig' %}
3 | {% block module_content %}
4 | {% if page_title and show_title %}
5 |
6 | {{ page_title|e }}
7 |
8 | {% endif %}
9 | {% if page.content is not empty %}
10 |
11 | {{ page.content|raw }}
12 |
13 | {% endif %}
14 |
15 | {% for post in collection if post.header.isSticky %}
16 | {% set blog_image = post.media.images[post.header.featuredImage] ?: post.media.images|filter((v, k) => k != post.header.author.avatarImage)|first %}
17 | {% set is_even = loop.index is even %}
18 |
19 |
20 |
21 |
22 |
29 | {% if (blog_image ?? null) %}
30 |
31 | {% endif %}
32 |
33 |
34 |
35 | {% endfor %}
36 | {% endblock %}
37 | {% endembed %}
38 |
--------------------------------------------------------------------------------
/blueprints/theme/share.yaml:
--------------------------------------------------------------------------------
1 | form:
2 | validation: loose
3 |
4 | fields:
5 | share_section:
6 | type: section
7 | title: MUNDANA.ADMIN.THEME.SHARE.SECTION
8 | underline: true
9 | share_enable:
10 | type: toggle
11 | label: MUNDANA.ADMIN.THEME.SHARE.ENABLED
12 | highlight: 1
13 | default: 1
14 | options:
15 | 1: PLUGIN_ADMIN.ENABLED
16 | 0: PLUGIN_ADMIN.DISABLED
17 | validate:
18 | type: bool
19 | share_icons:
20 | type: list
21 | markdown: true
22 | label: MUNDANA.ADMIN.THEME.SHARE.ICONS
23 | help: MUNDANA.ADMIN.THEME.SHARE.ICONS_HELP
24 | description: MUNDANA.ADMIN.THEME.SHARE.ICONS_DESCRIPTION
25 | fields:
26 | .name:
27 | type: text
28 | label: MUNDANA.ADMIN.THEME.SHARE.ICON_NAME
29 | mailchimp_section:
30 | type: section
31 | title: MUNDANA.ADMIN.THEME.MAILCHIMP.SECTION
32 | underline: true
33 | mailchimp_enable:
34 | type: toggle
35 | label: MUNDANA.ADMIN.THEME.MAILCHIMP.ENABLED
36 | highlight: 1
37 | default: 1
38 | options:
39 | 1: PLUGIN_ADMIN.ENABLED
40 | 0: PLUGIN_ADMIN.DISABLED
41 | validate:
42 | type: bool
43 | mailchimp_title:
44 | type: text
45 | label: MUNDANA.ADMIN.THEME.MAILCHIMP.TITLE
46 | help: MUNDANA.ADMIN.THEME.MAILCHIMP.TITLE_HELP
47 | mailchimp_description:
48 | type: text
49 | label: MUNDANA.ADMIN.THEME.MAILCHIMP.DESCRIPTION
50 | help: MUNDANA.ADMIN.THEME.MAILCHIMP.DESCRIPTION_HELP
51 | mailchimp_address:
52 | type: text
53 | label: MUNDANA.ADMIN.THEME.MAILCHIMP.ADDRESS
54 | disqus:
55 | type: section
56 | title: MUNDANA.ADMIN.THEME.DISQUS.SECTION
57 | underline: true
58 | disqus_enable:
59 | type: toggle
60 | label: MUNDANA.ADMIN.THEME.DISQUS.ENABLED
61 | highlight: 1
62 | default: 1
63 | options:
64 | 1: PLUGIN_ADMIN.ENABLED
65 | 0: PLUGIN_ADMIN.DISABLED
66 | validate:
67 | type: bool
68 | disqus_name:
69 | type: text
70 | label: MUNDANA.ADMIN.THEME.DISQUS.SHORT_NAME
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/mixins/_border-radius.scss:
--------------------------------------------------------------------------------
1 | // stylelint-disable property-disallowed-list
2 | // Single side border-radius
3 |
4 | // Helper function to replace negative values with 0
5 | @function valid-radius($radius) {
6 | $return: ();
7 | @each $value in $radius {
8 | @if type-of($value) == number {
9 | $return: append($return, max($value, 0));
10 | } @else {
11 | $return: append($return, $value);
12 | }
13 | }
14 | @return $return;
15 | }
16 |
17 | @mixin border-radius($radius: $border-radius, $fallback-border-radius: false) {
18 | @if $enable-rounded {
19 | border-radius: valid-radius($radius);
20 | }
21 | @else if $fallback-border-radius != false {
22 | border-radius: $fallback-border-radius;
23 | }
24 | }
25 |
26 | @mixin border-top-radius($radius) {
27 | @if $enable-rounded {
28 | border-top-left-radius: valid-radius($radius);
29 | border-top-right-radius: valid-radius($radius);
30 | }
31 | }
32 |
33 | @mixin border-right-radius($radius) {
34 | @if $enable-rounded {
35 | border-top-right-radius: valid-radius($radius);
36 | border-bottom-right-radius: valid-radius($radius);
37 | }
38 | }
39 |
40 | @mixin border-bottom-radius($radius) {
41 | @if $enable-rounded {
42 | border-bottom-right-radius: valid-radius($radius);
43 | border-bottom-left-radius: valid-radius($radius);
44 | }
45 | }
46 |
47 | @mixin border-left-radius($radius) {
48 | @if $enable-rounded {
49 | border-top-left-radius: valid-radius($radius);
50 | border-bottom-left-radius: valid-radius($radius);
51 | }
52 | }
53 |
54 | @mixin border-top-left-radius($radius) {
55 | @if $enable-rounded {
56 | border-top-left-radius: valid-radius($radius);
57 | }
58 | }
59 |
60 | @mixin border-top-right-radius($radius) {
61 | @if $enable-rounded {
62 | border-top-right-radius: valid-radius($radius);
63 | }
64 | }
65 |
66 | @mixin border-bottom-right-radius($radius) {
67 | @if $enable-rounded {
68 | border-bottom-right-radius: valid-radius($radius);
69 | }
70 | }
71 |
72 | @mixin border-bottom-left-radius($radius) {
73 | @if $enable-rounded {
74 | border-bottom-left-radius: valid-radius($radius);
75 | }
76 | }
77 |
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/mixins/_gradients.scss:
--------------------------------------------------------------------------------
1 | // Gradients
2 |
3 | @mixin gradient-bg($color) {
4 | @if $enable-gradients {
5 | background: $color linear-gradient(180deg, mix($body-bg, $color, 15%), $color) repeat-x;
6 | } @else {
7 | background-color: $color;
8 | }
9 | }
10 |
11 | // Horizontal gradient, from left to right
12 | //
13 | // Creates two color stops, start and end, by specifying a color and position for each color stop.
14 | @mixin gradient-x($start-color: $gray-700, $end-color: $gray-800, $start-percent: 0%, $end-percent: 100%) {
15 | background-image: linear-gradient(to right, $start-color $start-percent, $end-color $end-percent);
16 | background-repeat: repeat-x;
17 | }
18 |
19 | // Vertical gradient, from top to bottom
20 | //
21 | // Creates two color stops, start and end, by specifying a color and position for each color stop.
22 | @mixin gradient-y($start-color: $gray-700, $end-color: $gray-800, $start-percent: 0%, $end-percent: 100%) {
23 | background-image: linear-gradient(to bottom, $start-color $start-percent, $end-color $end-percent);
24 | background-repeat: repeat-x;
25 | }
26 |
27 | @mixin gradient-directional($start-color: $gray-700, $end-color: $gray-800, $deg: 45deg) {
28 | background-image: linear-gradient($deg, $start-color, $end-color);
29 | background-repeat: repeat-x;
30 | }
31 | @mixin gradient-x-three-colors($start-color: $blue, $mid-color: $purple, $color-stop: 50%, $end-color: $red) {
32 | background-image: linear-gradient(to right, $start-color, $mid-color $color-stop, $end-color);
33 | background-repeat: no-repeat;
34 | }
35 | @mixin gradient-y-three-colors($start-color: $blue, $mid-color: $purple, $color-stop: 50%, $end-color: $red) {
36 | background-image: linear-gradient($start-color, $mid-color $color-stop, $end-color);
37 | background-repeat: no-repeat;
38 | }
39 | @mixin gradient-radial($inner-color: $gray-700, $outer-color: $gray-800) {
40 | background-image: radial-gradient(circle, $inner-color, $outer-color);
41 | background-repeat: no-repeat;
42 | }
43 | @mixin gradient-striped($color: rgba($white, .15), $angle: 45deg) {
44 | background-image: linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent);
45 | }
46 |
--------------------------------------------------------------------------------
/templates/forms/fields/checkbox/checkbox.html.twig:
--------------------------------------------------------------------------------
1 | {% extends 'forms/field.html.twig' %}
2 |
3 | {% block label %}
4 | {% endblock %}
5 |
6 | {% block input %}
7 | {% set id = field.id|default(field.name)|hyphenize %}
8 |
9 |
37 |
38 | {% if field.markdown %}
39 | {{ field.label|t|markdown(false) }}
40 | {% else %}
41 | {{ field.label|t|e }}
42 | {% endif %}
43 | {{ field.validate.required in ['on', 'true', 1] ? '* ' }}
44 |
45 |
46 | {% endblock %}
47 |
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/mixins/_grid.scss:
--------------------------------------------------------------------------------
1 | /// Grid system
2 | //
3 | // Generate semantic grid columns with these mixins.
4 |
5 | @mixin make-container($gutter: $grid-gutter-width) {
6 | width: 100%;
7 | padding-right: $gutter * .5;
8 | padding-left: $gutter * .5;
9 | margin-right: auto;
10 | margin-left: auto;
11 | }
12 |
13 | @mixin make-row($gutter: $grid-gutter-width) {
14 | display: flex;
15 | flex-wrap: wrap;
16 | margin-right: -$gutter * .5;
17 | margin-left: -$gutter * .5;
18 | }
19 |
20 | // For each breakpoint, define the maximum width of the container in a media query
21 | @mixin make-container-max-widths($max-widths: $container-max-widths, $breakpoints: $grid-breakpoints) {
22 | @each $breakpoint, $container-max-width in $max-widths {
23 | @include media-breakpoint-up($breakpoint, $breakpoints) {
24 | max-width: $container-max-width;
25 | }
26 | }
27 | @include deprecate("The `make-container-max-widths` mixin", "v4.5.2", "v5");
28 | }
29 |
30 | @mixin make-col-ready($gutter: $grid-gutter-width) {
31 | position: relative;
32 | // Prevent columns from becoming too narrow when at smaller grid tiers by
33 | // always setting `width: 100%;`. This works because we use `flex` values
34 | // later on to override this initial width.
35 | width: 100%;
36 | padding-right: $gutter * .5;
37 | padding-left: $gutter * .5;
38 | }
39 |
40 | @mixin make-col($size, $columns: $grid-columns) {
41 | flex: 0 0 percentage(divide($size, $columns));
42 | // Add a `max-width` to ensure content within each column does not blow out
43 | // the width of the column. Applies to IE10+ and Firefox. Chrome and Safari
44 | // do not appear to require this.
45 | max-width: percentage(divide($size, $columns));
46 | }
47 |
48 | @mixin make-col-auto() {
49 | flex: 0 0 auto;
50 | width: auto;
51 | max-width: 100%; // Reset earlier grid tiers
52 | }
53 |
54 | @mixin make-col-offset($size, $columns: $grid-columns) {
55 | $num: divide($size, $columns);
56 | margin-left: if($num == 0, 0, percentage($num));
57 | }
58 |
59 | // Row columns
60 | //
61 | // Specify on a parent element(e.g., .row) to force immediate children into NN
62 | // numberof columns. Supports wrapping to new lines, but does not do a Masonry
63 | // style grid.
64 | @mixin row-cols($count) {
65 | > * {
66 | flex: 0 0 divide(100%, $count);
67 | max-width: divide(100%, $count);
68 | }
69 | }
70 |
--------------------------------------------------------------------------------
/blueprints/pages/item.yaml:
--------------------------------------------------------------------------------
1 | extends@: default
2 |
3 | form:
4 | fields:
5 | tabs:
6 |
7 | fields:
8 | content:
9 | type: tab
10 | fields:
11 | _Headings:
12 | type: columns
13 | fields:
14 | _Title:
15 | type: column
16 | fields:
17 | header.show_title:
18 | unset@: true
19 | blog:
20 | type: tab
21 | title: MUNDANA.ADMIN.ITEM.TAB
22 |
23 | fields:
24 | _summaryConfig:
25 | type: section
26 | title: MUNDANA.ADMIN.ITEM.CONTENT.SUMMARY.LABEL
27 | header.show_summary:
28 | type: toggle
29 | toggleable: true
30 | label: MUNDANA.ADMIN.ITEM.CONTENT.SUMMARY.SHOW
31 | help: MUNDANA.ADMIN.ITEM.CONTENT.SUMMARY.SHOW_HELP
32 | highlight: 1
33 | options:
34 | 1: PLUGIN_ADMIN.ENABLED
35 | 0: PLUGIN_ADMIN.DISABLED
36 | header.summary.enabled:
37 | type: toggle
38 | toggleable: true
39 | label: MUNDANA.ADMIN.ITEM.CONTENT.SUMMARY.ENABLED
40 | highlight: 1
41 | options:
42 | 1: PLUGIN_ADMIN.ENABLED
43 | 0: PLUGIN_ADMIN.DISABLED
44 | header.summary.format:
45 | type: select
46 | toggleable: true
47 | label: MUNDANA.ADMIN.ITEM.CONTENT.SUMMARY.FORMAT.LABEL
48 | classes: fancy
49 | options:
50 | 'short': MUNDANA.ADMIN.ITEM.CONTENT.SUMMARY.FORMAT.SHORT
51 | 'long': MUNDANA.ADMIN.ITEM.CONTENT.SUMMARY.FORMAT.LONG
52 | header.summary.size:
53 | type: text
54 | toggleable: true
55 | label: MUNDANA.ADMIN.ITEM.CONTENT.SUMMARY.SIZE
56 | classes: large
57 | placeholder: 300
58 | validate:
59 | type: int
60 | min: 1
61 | header.summary.delimiter:
62 | type: text
63 | toggleable: true
64 | label: MUNDANA.ADMIN.ITEM.CONTENT.SUMMARY.DELIMITER
65 | classes: large
66 | placeholder: ===
67 | import@:
68 | type: partials/item-bits
69 |
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/utilities/_text.scss:
--------------------------------------------------------------------------------
1 | // stylelint-disable declaration-no-important
2 |
3 | //
4 | // Text
5 | //
6 |
7 | .text-monospace { font-family: $font-family-monospace !important; }
8 |
9 | // Alignment
10 |
11 | .text-justify { text-align: justify !important; }
12 | .text-wrap { white-space: normal !important; }
13 | .text-nowrap { white-space: nowrap !important; }
14 | .text-truncate { @include text-truncate(); }
15 |
16 | // Responsive alignment
17 |
18 | @each $breakpoint in map-keys($grid-breakpoints) {
19 | @include media-breakpoint-up($breakpoint) {
20 | $infix: breakpoint-infix($breakpoint, $grid-breakpoints);
21 |
22 | .text#{$infix}-left { text-align: left !important; }
23 | .text#{$infix}-right { text-align: right !important; }
24 | .text#{$infix}-center { text-align: center !important; }
25 | }
26 | }
27 |
28 | // Transformation
29 |
30 | .text-lowercase { text-transform: lowercase !important; }
31 | .text-uppercase { text-transform: uppercase !important; }
32 | .text-capitalize { text-transform: capitalize !important; }
33 |
34 | // Weight and italics
35 |
36 | .font-weight-light { font-weight: $font-weight-light !important; }
37 | .font-weight-lighter { font-weight: $font-weight-lighter !important; }
38 | .font-weight-normal { font-weight: $font-weight-normal !important; }
39 | .font-weight-bold { font-weight: $font-weight-bold !important; }
40 | .font-weight-bolder { font-weight: $font-weight-bolder !important; }
41 | .font-italic { font-style: italic !important; }
42 |
43 | // Contextual colors
44 |
45 | .text-white { color: $white !important; }
46 |
47 | @each $color, $value in $theme-colors {
48 | @include text-emphasis-variant(".text-#{$color}", $value, true);
49 | }
50 |
51 | .text-body { color: $body-color !important; }
52 | .text-muted { color: $text-muted !important; }
53 |
54 | .text-black-50 { color: rgba($black, .5) !important; }
55 | .text-white-50 { color: rgba($white, .5) !important; }
56 |
57 | // Misc
58 |
59 | .text-hide {
60 | @include text-hide($ignore-warning: true);
61 | }
62 |
63 | .text-decoration-none { text-decoration: none !important; }
64 |
65 | .text-break {
66 | word-break: break-word !important; // Deprecated, but avoids issues with flex containers
67 | word-wrap: break-word !important; // Used instead of `overflow-wrap` for IE & Edge Legacy
68 | }
69 |
70 | // Reset
71 |
72 | .text-reset { color: inherit !important; }
73 |
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/utilities/_spacing.scss:
--------------------------------------------------------------------------------
1 | // stylelint-disable declaration-no-important
2 |
3 | // Margin and Padding
4 |
5 | @each $breakpoint in map-keys($grid-breakpoints) {
6 | @include media-breakpoint-up($breakpoint) {
7 | $infix: breakpoint-infix($breakpoint, $grid-breakpoints);
8 |
9 | @each $prop, $abbrev in (margin: m, padding: p) {
10 | @each $size, $length in $spacers {
11 | .#{$abbrev}#{$infix}-#{$size} { #{$prop}: $length !important; }
12 | .#{$abbrev}t#{$infix}-#{$size},
13 | .#{$abbrev}y#{$infix}-#{$size} {
14 | #{$prop}-top: $length !important;
15 | }
16 | .#{$abbrev}r#{$infix}-#{$size},
17 | .#{$abbrev}x#{$infix}-#{$size} {
18 | #{$prop}-right: $length !important;
19 | }
20 | .#{$abbrev}b#{$infix}-#{$size},
21 | .#{$abbrev}y#{$infix}-#{$size} {
22 | #{$prop}-bottom: $length !important;
23 | }
24 | .#{$abbrev}l#{$infix}-#{$size},
25 | .#{$abbrev}x#{$infix}-#{$size} {
26 | #{$prop}-left: $length !important;
27 | }
28 | }
29 | }
30 |
31 | // Negative margins (e.g., where `.mb-n1` is negative version of `.mb-1`)
32 | @each $size, $length in $spacers {
33 | @if "#{$size}" != "0" {
34 | .m#{$infix}-n#{$size} { margin: -$length !important; }
35 | .mt#{$infix}-n#{$size},
36 | .my#{$infix}-n#{$size} {
37 | margin-top: -$length !important;
38 | }
39 | .mr#{$infix}-n#{$size},
40 | .mx#{$infix}-n#{$size} {
41 | margin-right: -$length !important;
42 | }
43 | .mb#{$infix}-n#{$size},
44 | .my#{$infix}-n#{$size} {
45 | margin-bottom: -$length !important;
46 | }
47 | .ml#{$infix}-n#{$size},
48 | .mx#{$infix}-n#{$size} {
49 | margin-left: -$length !important;
50 | }
51 | }
52 | }
53 |
54 | // Some special margin utils
55 | .m#{$infix}-auto { margin: auto !important; }
56 | .mt#{$infix}-auto,
57 | .my#{$infix}-auto {
58 | margin-top: auto !important;
59 | }
60 | .mr#{$infix}-auto,
61 | .mx#{$infix}-auto {
62 | margin-right: auto !important;
63 | }
64 | .mb#{$infix}-auto,
65 | .my#{$infix}-auto {
66 | margin-bottom: auto !important;
67 | }
68 | .ml#{$infix}-auto,
69 | .mx#{$infix}-auto {
70 | margin-left: auto !important;
71 | }
72 | }
73 | }
74 |
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/mixins/_grid-framework.scss:
--------------------------------------------------------------------------------
1 | // Framework grid generation
2 | //
3 | // Used only by Bootstrap to generate the correct number of grid classes given
4 | // any value of `$grid-columns`.
5 |
6 | @mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {
7 | // Common properties for all breakpoints
8 | %grid-column {
9 | position: relative;
10 | width: 100%;
11 | padding-right: $gutter * .5;
12 | padding-left: $gutter * .5;
13 | }
14 |
15 | @each $breakpoint in map-keys($breakpoints) {
16 | $infix: breakpoint-infix($breakpoint, $breakpoints);
17 |
18 | @if $columns > 0 {
19 | // Allow columns to stretch full width below their breakpoints
20 | @for $i from 1 through $columns {
21 | .col#{$infix}-#{$i} {
22 | @extend %grid-column;
23 | }
24 | }
25 | }
26 |
27 | .col#{$infix},
28 | .col#{$infix}-auto {
29 | @extend %grid-column;
30 | }
31 |
32 | @include media-breakpoint-up($breakpoint, $breakpoints) {
33 | // Provide basic `.col-{bp}` classes for equal-width flexbox columns
34 | .col#{$infix} {
35 | flex-basis: 0;
36 | flex-grow: 1;
37 | max-width: 100%;
38 | }
39 |
40 | @if $grid-row-columns > 0 {
41 | @for $i from 1 through $grid-row-columns {
42 | .row-cols#{$infix}-#{$i} {
43 | @include row-cols($i);
44 | }
45 | }
46 | }
47 |
48 | .col#{$infix}-auto {
49 | @include make-col-auto();
50 | }
51 |
52 | @if $columns > 0 {
53 | @for $i from 1 through $columns {
54 | .col#{$infix}-#{$i} {
55 | @include make-col($i, $columns);
56 | }
57 | }
58 | }
59 |
60 | .order#{$infix}-first { order: -1; }
61 |
62 | .order#{$infix}-last { order: $columns + 1; }
63 |
64 | @for $i from 0 through $columns {
65 | .order#{$infix}-#{$i} { order: $i; }
66 | }
67 |
68 | @if $columns > 0 {
69 | // `$columns - 1` because offsetting by the width of an entire row isn't possible
70 | @for $i from 0 through ($columns - 1) {
71 | @if not ($infix == "" and $i == 0) { // Avoid emitting useless .offset-0
72 | .offset#{$infix}-#{$i} {
73 | @include make-col-offset($i, $columns);
74 | }
75 | }
76 | }
77 | }
78 | }
79 | }
80 | }
81 |
--------------------------------------------------------------------------------
/templates/contact.html.twig:
--------------------------------------------------------------------------------
1 | {% extends 'partials/base.html.twig' %}
2 |
3 | {% block content %}
4 |
5 |
6 |
{{ page_title|raw }}
7 | {% if page_subtitle %}
{{ page_subtitle|markdown }}
{% endif %}
8 |
9 | {% if page.header.address is not empty %}
10 |
11 |
12 |
13 | {% if featuredImage and show_image %}
14 | {{ featuredImage.loading('eager')
15 | .decoding('async')
16 | .attribute('width', '672')
17 | .attribute('height', '504')
18 | .derivatives(320, 672, 320)
19 | .sizes('(max-width: 768px) 100vw, 50vw')
20 | .html(page_title, page_title, 'h-auto w-100 card-img-top')|raw }}
21 | {% endif %}
22 |
23 |
{{ 'MUNDANA.CONTACT.ADDRESS'|t }}
24 |
25 | {% for item in page.header.address %}
26 | {% if item.addressField ?? null %}
27 |
28 | {% if item.fieldIcon ?? null %}
29 |
30 | {% endif %}
31 | {{ item.addressField|e }}
32 |
33 | {% endif %}
34 | {% endfor %}
35 |
36 |
37 |
38 |
39 |
40 |
41 | {% else %}
42 |
43 |
44 | {% endif %}
45 | {{ include('forms/form.html.twig', {form: forms('contact-form')}) }}
46 |
47 |
48 |
49 | {% endblock %}
50 |
--------------------------------------------------------------------------------
/templates/default.html.twig:
--------------------------------------------------------------------------------
1 | {% extends 'partials/base.html.twig' %}
2 |
3 | {% block content %}
4 |
5 |
6 |
7 |
8 |
{{ page_title|e }}
9 | {% if page_subtitle %}
{{ page_subtitle|markdown }}
{% endif %}
10 |
11 | {# Avatar and author fields moved to blog templates only for better content separation #}
12 | {# {% if avatar %}
13 | {% include 'partials/blog/avatar.html.twig' with {'avatar_width': 60} %}
14 | {% endif %} #}
15 |
16 | {# {% if author %}{{ author|raw }} {% endif %}
17 | {% if author_twitter %}Follow {% endif %} #}
18 | {{ include('partials/blog/date.html.twig') }}
19 | {% if config.plugins.readingtime.enabled %}
20 | {{ include('partials/blog/readingtime.html.twig') }}
21 | {% endif %}
22 |
23 |
24 |
25 | {% if featuredImage and show_image %}
26 |
27 | {{ featuredImage.loading('eager')
28 | .decoding('async')
29 | .attribute('width', img_width)
30 | .attribute('height', img_height)
31 | .derivatives(320, 672, 320)
32 | .sizes('(max-width: 768px) 100vw, 50vw')
33 | .html(page_title, page_title, 'w-100 h-auto rounded')|raw }}
34 |
35 | {% endif %}
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 | {{ page.content|raw }}
44 |
45 |
46 | {% if author %}
47 | {{ include('partials/blog/author.html.twig') }}
48 | {% endif %}
49 |
50 |
51 |
52 | {% endblock %}
53 |
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/_type.scss:
--------------------------------------------------------------------------------
1 | // stylelint-disable selector-list-comma-newline-after
2 |
3 | //
4 | // Headings
5 | //
6 |
7 | h1, h2, h3, h4, h5, h6,
8 | .h1, .h2, .h3, .h4, .h5, .h6 {
9 | margin-bottom: $headings-margin-bottom;
10 | font-family: $headings-font-family;
11 | font-weight: $headings-font-weight;
12 | line-height: $headings-line-height;
13 | color: $headings-color;
14 | }
15 |
16 | h1, .h1 { @include font-size($h1-font-size); }
17 | h2, .h2 { @include font-size($h2-font-size); }
18 | h3, .h3 { @include font-size($h3-font-size); }
19 | h4, .h4 { @include font-size($h4-font-size); }
20 | h5, .h5 { @include font-size($h5-font-size); }
21 | h6, .h6 { @include font-size($h6-font-size); }
22 |
23 | .lead {
24 | @include font-size($lead-font-size);
25 | font-weight: $lead-font-weight;
26 | }
27 |
28 | // Type display classes
29 | .display-1 {
30 | @include font-size($display1-size);
31 | font-weight: $display1-weight;
32 | line-height: $display-line-height;
33 | }
34 | .display-2 {
35 | @include font-size($display2-size);
36 | font-weight: $display2-weight;
37 | line-height: $display-line-height;
38 | }
39 | .display-3 {
40 | @include font-size($display3-size);
41 | font-weight: $display3-weight;
42 | line-height: $display-line-height;
43 | }
44 | .display-4 {
45 | @include font-size($display4-size);
46 | font-weight: $display4-weight;
47 | line-height: $display-line-height;
48 | }
49 |
50 |
51 | //
52 | // Horizontal rules
53 | //
54 |
55 | hr {
56 | margin-top: $hr-margin-y;
57 | margin-bottom: $hr-margin-y;
58 | border: 0;
59 | border-top: $hr-border-width solid $hr-border-color;
60 | }
61 |
62 |
63 | //
64 | // Emphasis
65 | //
66 |
67 | small,
68 | .small {
69 | @include font-size($small-font-size);
70 | font-weight: $font-weight-normal;
71 | }
72 |
73 | mark,
74 | .mark {
75 | padding: $mark-padding;
76 | background-color: $mark-bg;
77 | }
78 |
79 |
80 | //
81 | // Lists
82 | //
83 |
84 | .list-unstyled {
85 | @include list-unstyled();
86 | }
87 |
88 | // Inline turns list items into inline-block
89 | .list-inline {
90 | @include list-unstyled();
91 | }
92 | .list-inline-item {
93 | display: inline-block;
94 |
95 | &:not(:last-child) {
96 | margin-right: $list-inline-padding;
97 | }
98 | }
99 |
100 |
101 | //
102 | // Misc
103 | //
104 |
105 | // Builds on `abbr`
106 | .initialism {
107 | @include font-size(90%);
108 | text-transform: uppercase;
109 | }
110 |
111 | // Blockquotes
112 | .blockquote {
113 | margin-bottom: $spacer;
114 | @include font-size($blockquote-font-size);
115 | }
116 |
117 | .blockquote-footer {
118 | display: block;
119 | @include font-size($blockquote-small-font-size);
120 | color: $blockquote-small-color;
121 |
122 | &::before {
123 | content: "\2014\00A0"; // em dash, nbsp
124 | }
125 | }
126 |
--------------------------------------------------------------------------------
/templates/blog.html.twig:
--------------------------------------------------------------------------------
1 | {% extends 'partials/base.html.twig' %}
2 |
3 | {# Set blog settings #}
4 | {% set themeBlog = theme_var('blog_route')|defined('/blog') %}
5 | {% set blog = page.find(header_var('blog_url')|defined(themeBlog)) %}
6 | {% set feed_url = blog.url == '/' or blog.url == base_url_relative ? (base_url_relative ~ '/' ~ blog.slug) : blog.url %}
7 | {% set new_base_url = blog.url == '/' ? '' : blog.url %}
8 | {% set collection = page.collection() %}
9 | {# Set sidebar option for page #}
10 | {% set show_sidebar = header_var('show_sidebar', [page, blog])|defined(true) %}
11 | {# Set pagination option for page #}
12 | {% set show_pagination = header_var('show_pagination', [page, blog])|defined(true) %}
13 |
14 | {# Set page filtered #}
15 | {% import 'macros/macros.html.twig' as filters %}
16 | {% set titleFiltered = filters.generateFilteredTitle(uri) %}
17 |
18 | {% block content %}
19 |
20 |
21 | {% embed 'partials/layout.html.twig' with {blog: page} %}
22 | {% block item %}
23 |
24 | {{ titleFiltered|e }}
25 |
26 | {% if page_subtitle %}
{{ subtitle|markdown }}
{% endif %}
27 |
28 | {# isFirstItem is used to pass loading attribute to blog list #}
29 | {# Loading the first item as "eager" in the blog list greatly improves page speed #}
30 | {% set isFirstItem = true %}
31 | {% for child in collection %}
32 | {% set childImage = child.media.images[child.header.featuredImage] ?: child.media.images|filter((v, k) => k != child.header.author.avatarImage)|first %}
33 | {% set childTitle = child.title %}
34 | {% set child_showImage = child.header.show_image|defined(true) %}
35 | {% set datePublished = include('partials/page/date.html.twig', {page: child}) %}
36 | {% set loadLazy = not isFirstItem %}
37 | {{ include('partials/blog-list-item.html.twig', {
38 | blog: page,
39 | page: child,
40 | show_image: child_showImage,
41 | featuredImage: childImage,
42 | page_title: childTitle,
43 | title_level: 'h3',
44 | loadLazy: loadLazy,
45 | }) }}
46 | {% set isFirstItem = false %}
47 | {% endfor %}
48 |
49 | {% if show_pagination and config.plugins.pagination.enabled and collection.params.pagination %}
50 |
51 |
52 | {{ include('partials/pagination.html.twig', {base_url: page.url, pagination: collection.params.pagination}) }}
53 |
54 | {% endif %}
55 | {% endblock %}
56 |
57 | {% block sidebar %}
58 | {{ include('partials/sidebar.html.twig') }}
59 | {% endblock %}
60 | {% endembed %}
61 |
62 | {% endblock %}
63 |
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/utilities/_flex.scss:
--------------------------------------------------------------------------------
1 | // stylelint-disable declaration-no-important
2 |
3 | // Flex variation
4 | //
5 | // Custom styles for additional flex alignment options.
6 |
7 | @each $breakpoint in map-keys($grid-breakpoints) {
8 | @include media-breakpoint-up($breakpoint) {
9 | $infix: breakpoint-infix($breakpoint, $grid-breakpoints);
10 |
11 | .flex#{$infix}-row { flex-direction: row !important; }
12 | .flex#{$infix}-column { flex-direction: column !important; }
13 | .flex#{$infix}-row-reverse { flex-direction: row-reverse !important; }
14 | .flex#{$infix}-column-reverse { flex-direction: column-reverse !important; }
15 |
16 | .flex#{$infix}-wrap { flex-wrap: wrap !important; }
17 | .flex#{$infix}-nowrap { flex-wrap: nowrap !important; }
18 | .flex#{$infix}-wrap-reverse { flex-wrap: wrap-reverse !important; }
19 | .flex#{$infix}-fill { flex: 1 1 auto !important; }
20 | .flex#{$infix}-grow-0 { flex-grow: 0 !important; }
21 | .flex#{$infix}-grow-1 { flex-grow: 1 !important; }
22 | .flex#{$infix}-shrink-0 { flex-shrink: 0 !important; }
23 | .flex#{$infix}-shrink-1 { flex-shrink: 1 !important; }
24 |
25 | .justify-content#{$infix}-start { justify-content: flex-start !important; }
26 | .justify-content#{$infix}-end { justify-content: flex-end !important; }
27 | .justify-content#{$infix}-center { justify-content: center !important; }
28 | .justify-content#{$infix}-between { justify-content: space-between !important; }
29 | .justify-content#{$infix}-around { justify-content: space-around !important; }
30 |
31 | .align-items#{$infix}-start { align-items: flex-start !important; }
32 | .align-items#{$infix}-end { align-items: flex-end !important; }
33 | .align-items#{$infix}-center { align-items: center !important; }
34 | .align-items#{$infix}-baseline { align-items: baseline !important; }
35 | .align-items#{$infix}-stretch { align-items: stretch !important; }
36 |
37 | .align-content#{$infix}-start { align-content: flex-start !important; }
38 | .align-content#{$infix}-end { align-content: flex-end !important; }
39 | .align-content#{$infix}-center { align-content: center !important; }
40 | .align-content#{$infix}-between { align-content: space-between !important; }
41 | .align-content#{$infix}-around { align-content: space-around !important; }
42 | .align-content#{$infix}-stretch { align-content: stretch !important; }
43 |
44 | .align-self#{$infix}-auto { align-self: auto !important; }
45 | .align-self#{$infix}-start { align-self: flex-start !important; }
46 | .align-self#{$infix}-end { align-self: flex-end !important; }
47 | .align-self#{$infix}-center { align-self: center !important; }
48 | .align-self#{$infix}-baseline { align-self: baseline !important; }
49 | .align-self#{$infix}-stretch { align-self: stretch !important; }
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/blueprints/theme/blog.yaml:
--------------------------------------------------------------------------------
1 | form:
2 | validation: loose
3 |
4 | fields:
5 | sidebar_section:
6 | type: section
7 | title: MUNDANA.ADMIN.THEME.BLOG.SIDEBAR.LABEL
8 | underline: true
9 | sidebar_showtaxonomy:
10 | type: toggle
11 | label: MUNDANA.ADMIN.THEME.BLOG.SIDEBAR.SHOW_TAXONOMY
12 | help: MUNDANA.ADMIN.THEME.BLOG.SIDEBAR.SHOW_TAXONOMY_HELP
13 | highlight: 1
14 | default: 1
15 | options:
16 | 1: PLUGIN_ADMIN.ENABLED
17 | 0: PLUGIN_ADMIN.DISABLED
18 | sidebar_showarchives:
19 | type: toggle
20 | label: MUNDANA.ADMIN.THEME.BLOG.SIDEBAR.SHOW_ARCHIVES
21 | help: MUNDANA.ADMIN.THEME.BLOG.SIDEBAR.SHOW_ARCHIVES_HELP
22 | highlight: 1
23 | default: 1
24 | options:
25 | 1: PLUGIN_ADMIN.ENABLED
26 | 0: PLUGIN_ADMIN.DISABLED
27 | sidebar_showrelatedpages:
28 | type: toggle
29 | label: MUNDANA.ADMIN.THEME.BLOG.SIDEBAR.SHOW_RELATED_PAGES
30 | help: MUNDANA.ADMIN.THEME.BLOG.SIDEBAR.SHOW_RELATED_PAGES_HELP
31 | highlight: 1
32 | default: 1
33 | options:
34 | 1: PLUGIN_ADMIN.ENABLED
35 | 0: PLUGIN_ADMIN.DISABLED
36 | sidebar_showfeeds:
37 | type: toggle
38 | label: MUNDANA.ADMIN.THEME.BLOG.SIDEBAR.SHOW_FEEDS
39 | help: MUNDANA.ADMIN.THEME.BLOG.SIDEBAR.SHOW_FEEDS_HELP
40 | highlight: 1
41 | default: 1
42 | options:
43 | 1: PLUGIN_ADMIN.ENABLED
44 | 0: PLUGIN_ADMIN.DISABLED
45 | sidebar_showrandom:
46 | type: toggle
47 | label: MUNDANA.ADMIN.THEME.BLOG.SIDEBAR.SHOW_RANDOM
48 | help: MUNDANA.ADMIN.THEME.BLOG.SIDEBAR.SHOW_RANDOM_HELP
49 | highlight: 1
50 | default: 1
51 | options:
52 | 1: PLUGIN_ADMIN.ENABLED
53 | 0: PLUGIN_ADMIN.DISABLED
54 | blog_section:
55 | type: section
56 | title: MUNDANA.ADMIN.THEME.BLOG.CONFIGURATION.LABEL
57 | underline: true
58 | blog_route:
59 | type: text
60 | label: MUNDANA.ADMIN.THEME.BLOG.CONFIGURATION.BLOG_ROUTE
61 | help: MUNDANA.ADMIN.THEME.BLOG.CONFIGURATION.BLOG_ROUTE_HELP
62 | size: medium
63 | default: '/blog'
64 | featuredposts:
65 | type: toggle
66 | label: MUNDANA.ADMIN.THEME.BLOG.CONFIGURATION.FEATURED_POSTS.LABEL
67 | highlight: 1
68 | default: 1
69 | options:
70 | 1: PLUGIN_ADMIN.ENABLED
71 | 0: PLUGIN_ADMIN.DISABLED
72 | validate:
73 | type: bool
74 | featuredposts_tag:
75 | type: text
76 | label: MUNDANA.ADMIN.THEME.BLOG.CONFIGURATION.FEATURED_POSTS.TAG
77 | help: MUNDANA.ADMIN.THEME.BLOG.CONFIGURATION.FEATURED_POSTS.TAG_HELP
78 | size: medium
79 | default: 'featured'
80 |
81 | featuredposts_number:
82 | type: range
83 | label: MUNDANA.ADMIN.THEME.BLOG.CONFIGURATION.FEATURED_POSTS.NUMBER
84 | help: MUNDANA.ADMIN.THEME.BLOG.CONFIGURATION.FEATURED_POSTS.NUMBER_HELP
85 | default: 3
86 | validate:
87 | min: 1
88 | max: 5
--------------------------------------------------------------------------------
/templates/partials/blog/footer_pagination.html.twig:
--------------------------------------------------------------------------------
1 | {# PARTIAL PAGINATION IN FOOTER #}
2 |
3 | {% set blog_image_prev = page.prevSibling.media[page.prevSibling.header.featuredImage] ?: (page.prevSibling.media.images is not null ? page.prevSibling.media.images|filter((v, k) => k != page.prevSibling.header.author.avatarImage)|first : null) %}
4 | {% set blog_image_next = page.nextSibling.media[page.nextSibling.header.featuredImage] ?: (page.nextSibling.media.images is not null ? page.nextSibling.media.images|filter((v, k) => k != page.nextSibling.header.author.avatarImage)|first : null) %}
5 |
6 |
7 |
8 |
9 | {% if not page.isLast %}
10 |
29 | {% endif %}
30 | {% if not page.isFirst %}
31 |
50 | {% endif %}
51 |
52 |
53 |
54 |
--------------------------------------------------------------------------------
/templates/partials/navbar.html.twig:
--------------------------------------------------------------------------------
1 | {# Set logo image #}
2 | {% set logo = theme_var('custom_logo_mobile') ?: theme_var('custom_logo') %}
3 | {% set logo_enabled = theme_var('custom_logo_enabled')|defined(false) %}
4 |
5 | {# Set searchbox in navbar #}
6 | {% set menu_search = theme_var('menu_search')|defined(true) %}
7 |
8 | {# Navigation bar #}
9 |
10 |
58 |
59 |
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/_nav.scss:
--------------------------------------------------------------------------------
1 | // Base class
2 | //
3 | // Kickstart any navigation component with a set of style resets. Works with
4 | // `
`s, ``s or ``s.
5 |
6 | .nav {
7 | display: flex;
8 | flex-wrap: wrap;
9 | padding-left: 0;
10 | margin-bottom: 0;
11 | list-style: none;
12 | }
13 |
14 | .nav-link {
15 | display: block;
16 | padding: $nav-link-padding-y $nav-link-padding-x;
17 | text-decoration: if($link-decoration == none, null, none);
18 |
19 | @include hover-focus() {
20 | text-decoration: none;
21 | }
22 |
23 | // Disabled state lightens text
24 | &.disabled {
25 | color: $nav-link-disabled-color;
26 | pointer-events: none;
27 | cursor: default;
28 | }
29 | }
30 |
31 | //
32 | // Tabs
33 | //
34 |
35 | .nav-tabs {
36 | border-bottom: $nav-tabs-border-width solid $nav-tabs-border-color;
37 |
38 | .nav-link {
39 | margin-bottom: -$nav-tabs-border-width;
40 | background-color: transparent;
41 | border: $nav-tabs-border-width solid transparent;
42 | @include border-top-radius($nav-tabs-border-radius);
43 |
44 | @include hover-focus() {
45 | // Prevents active .nav-link tab overlapping focus outline of previous/next .nav-link
46 | isolation: isolate;
47 | border-color: $nav-tabs-link-hover-border-color;
48 | }
49 |
50 | &.disabled {
51 | color: $nav-link-disabled-color;
52 | background-color: transparent;
53 | border-color: transparent;
54 | }
55 | }
56 |
57 | .nav-link.active,
58 | .nav-item.show .nav-link {
59 | color: $nav-tabs-link-active-color;
60 | background-color: $nav-tabs-link-active-bg;
61 | border-color: $nav-tabs-link-active-border-color;
62 | }
63 |
64 | .dropdown-menu {
65 | // Make dropdown border overlap tab border
66 | margin-top: -$nav-tabs-border-width;
67 | // Remove the top rounded corners here since there is a hard edge above the menu
68 | @include border-top-radius(0);
69 | }
70 | }
71 |
72 |
73 | //
74 | // Pills
75 | //
76 |
77 | .nav-pills {
78 | .nav-link {
79 | background: none;
80 | border: 0;
81 | @include border-radius($nav-pills-border-radius);
82 | }
83 |
84 | .nav-link.active,
85 | .show > .nav-link {
86 | color: $nav-pills-link-active-color;
87 | background-color: $nav-pills-link-active-bg;
88 | }
89 | }
90 |
91 |
92 | //
93 | // Justified variants
94 | //
95 |
96 | .nav-fill {
97 | > .nav-link,
98 | .nav-item {
99 | flex: 1 1 auto;
100 | text-align: center;
101 | }
102 | }
103 |
104 | .nav-justified {
105 | > .nav-link,
106 | .nav-item {
107 | flex-basis: 0;
108 | flex-grow: 1;
109 | text-align: center;
110 | }
111 | }
112 |
113 |
114 | // Tabbable tabs
115 | //
116 | // Hide tabbable panes to start, show them when `.active`
117 |
118 | .tab-content {
119 | > .tab-pane {
120 | display: none;
121 | }
122 | > .active {
123 | display: block;
124 | }
125 | }
126 |
--------------------------------------------------------------------------------
/blueprints/pages/blog.yaml:
--------------------------------------------------------------------------------
1 | extends@: default
2 | child_type: item
3 |
4 | rules:
5 | slug:
6 | pattern: "[a-z][a-z0-9_-]+"
7 | min: 2
8 | max: 80
9 |
10 | form:
11 | fields:
12 | tabs:
13 | type: tabs
14 | active: 1
15 |
16 | fields:
17 | advanced:
18 | fields:
19 | overrides:
20 | fields:
21 | header.child_type:
22 | default: item
23 | blog:
24 | type: tab
25 | title: MUNDANA.ADMIN.BLOG.TAB
26 | import@:
27 | type: partials/blog-bits
28 | context: blueprints://pages
29 |
30 | fields:
31 |
32 | _contentTitle:
33 | type: section
34 | title: MUNDANA.ADMIN.BLOG.CONTENT.LABEL
35 |
36 | header.content.items:
37 | type: textarea
38 | yaml: true
39 | label: MUNDANA.ADMIN.BLOG.CONTENT.ITEMS.LABEL
40 | default: '@self.children'
41 | validate:
42 | type: yaml
43 |
44 | header.content.limit:
45 | type: text
46 | label: MUNDANA.ADMIN.BLOG.CONTENT.ITEMS.LIMIT
47 | default: 5
48 | size: small
49 | validate:
50 | required: true
51 | type: int
52 | min: 1
53 |
54 | header.content.order.by:
55 | type: select
56 | label: MUNDANA.ADMIN.BLOG.CONTENT.ITEMS.ORDER.BY
57 | default: date
58 | size: medium
59 | options:
60 | folder: MUNDANA.ADMIN.BLOG.CONTENT.ITEMS.ORDER.BY_FOLDER
61 | title: MUNDANA.ADMIN.BLOG.CONTENT.ITEMS.ORDER.BY_TITLE
62 | date: MUNDANA.ADMIN.BLOG.CONTENT.ITEMS.ORDER.BY_DATE
63 | default: MUNDANA.ADMIN.BLOG.CONTENT.ITEMS.ORDER.BY_DEFAULT
64 |
65 | header.content.order.dir:
66 | type: select
67 | label: MUNDANA.ADMIN.BLOG.CONTENT.ITEMS.ORDER.DIR
68 | default: desc
69 | size: medium
70 | options:
71 | asc: MUNDANA.ADMIN.BLOG.CONTENT.ITEMS.ORDER.DIR_ASC
72 | desc: MUNDANA.ADMIN.BLOG.CONTENT.ITEMS.ORDER.DIR_DESC
73 |
74 | header.content.pagination:
75 | type: toggle
76 | label: MUNDANA.ADMIN.BLOG.CONTENT.ITEMS.PAGINATION
77 | highlight: 1
78 | default: 1
79 | options:
80 | 1: PLUGIN_ADMIN.ENABLED
81 | 0: PLUGIN_ADMIN.DISABLED
82 | validate:
83 | type: bool
84 |
85 | header.content.url_taxonomy_filters:
86 | type: toggle
87 | label: MUNDANA.ADMIN.BLOG.CONTENT.ITEMS.URL_TAXONOMY_FILTERS
88 | highlight: 1
89 | default: 1
90 | options:
91 | 1: PLUGIN_ADMIN.ENABLED
92 | 0: PLUGIN_ADMIN.DISABLED
93 | validate:
94 | type: bool
95 |
96 |
97 |
--------------------------------------------------------------------------------
/templates/modular/allstories.html.twig:
--------------------------------------------------------------------------------
1 | {# MODULAR PAGE - ALL STORIES #}
2 |
3 | {% embed 'modular/partials/common_variables.html.twig' %}
4 | {% block module_content %}
5 |
6 | {% set new_base_url = blog.url == '/' ? '' : blog.url %}
7 | {% set show_sidebar = header_var('show_sidebar', [page, blog])|defined(true) %}
8 | {% set featuredposts_number = theme_var('featuredposts_number')|defined(5) %}
9 | {% set featuredposts_tag = theme_var('featuredposts_tag')|defined('featured') %}
10 | {# Code for backward compatibility with posts with featuredposts_category #}
11 | {% if config.theme_var('featuredposts_category') %}
12 | {% set featuredposts_tag = config.theme_var('featuredposts_category') %}
13 | {% endif %}
14 | {% set show_featured = header_var('show_featured')|defined(true) %}
15 | {% set show_categories = header_var('show_categories')|defined(true) %}
16 |
17 | {% if blog ?? null %}
18 |
19 | {% embed 'partials/layout.html.twig' %}
20 | {% block item %}
21 | {% if page_title and show_title %}
22 |
23 | {{ page_title|e }}
24 |
25 | {% endif %}
26 | {% if page.content is not empty %}
27 |
28 | {{ page.content|raw }}
29 |
30 | {% endif %}
31 | {# isFirstItem is used to pass loading attribute to blog list #}
32 | {# Loading the first item as "eager" in the blog list greatly improves page speed #}
33 | {% set isFirstItem = true %}
34 | {% for child in collection.slice(0, 5) %}
35 | {% set childImage = child.media.images[child.header.featuredImage] ?: child.media.images|filter((v, k) => k != child.header.author.avatarImage)|first %}
36 | {% set childTitle = child.title %}
37 | {% set loadLazy = not isFirstItem %}
38 | {{ include('partials/blog-list-item.html.twig', {
39 | base_url: new_base_url,
40 | page: child,
41 | title_level: 'h3',
42 | featuredImage: childImage,
43 | page_title: childTitle,
44 | show_image: true,
45 | loadLazy: loadLazy,
46 | }) }}
47 | {% set isFirstItem = false %}
48 | {% endfor %}
49 |
{{ 'MUNDANA.BLOG.ALL_POSTS'|t }}
50 | {% endblock %}
51 |
52 | {% if show_sidebar %}
53 | {% block sidebar %}
54 | {{ include('modular/partials/sidebar.html.twig') }}
55 | {% endblock %}
56 | {% endif %}
57 | {% endembed %}
58 |
59 | {% endif %}
60 | {% endblock %}
61 | {% endembed %}
62 |
--------------------------------------------------------------------------------
/templates/partials/head/assets.html.twig:
--------------------------------------------------------------------------------
1 | {% set compress = theme_var('production-mode') ? '.min.css' : '.css' %}
2 |
3 | {% block stylesheets %}
4 | {# Bootstrap 4.6.2 #}
5 | {% do assets.addCss('theme://assets/css/bootstrap' ~ compress, 12, {rel: 'stylesheet'}) %}
6 | {# Theme Stylesheet #}
7 | {% do assets.addCss('theme://assets/css/theme' ~ compress, 11, {rel: 'stylesheet'}) %}
8 | {# Font Awesome Icons #}
9 | {% if theme_var('font_awesome_local') %}
10 | {% do assets.addCSS('theme://assets/css/fontawesome-all.min.css', {rel: 'stylesheet'}) %}
11 | {% else %}
12 | {% do assets.addCSS('https://use.fontawesome.com/releases/v5.15.4/css/all.css', {rel: 'stylesheet'}) %}
13 | {% endif %}
14 | {# Google Fonts #}
15 | {% if theme_var('google_fonts_local') %}
16 | {% do assets.addCSS('theme://assets/css/google-fonts-local.css', {rel: 'stylesheet'}) %}
17 | {% else %}
18 | {% do assets.addCSS('https://fonts.googleapis.com/css?family=Lora:400,400i,700&display=swap', {rel: 'stylesheet'}) %}
19 | {% endif %}
20 | {% set styles %}
21 | {# CSS styles to change hover color on links dynamically #}
22 | a.text-dark:hover {
23 | color: {{ hover_color_mapping[color_style] }} !important;
24 | }
25 | {# Custom styles for navbar #}
26 | .navbarCustomStyles {
27 | {{ navbarCustomBgcolor ? 'background: ' ~ navbarCustomBgcolor ~ ';' : '' }}
28 | {{ navbarHeight ? 'min-height: ' ~ navbarHeight ~ 'px;' : '' }}
29 | }
30 | .w_logo {
31 | {{ widthLogo ? 'width: ' ~ widthLogo ~ 'px;' : '' }}
32 | }
33 | @media (max-width: 768px) {
34 | .navbarCustomStyles {
35 | {{ navbarHeight ? 'min-height: auto;' : '' }}
36 | }
37 | }
38 | @media (max-width: 480px) {
39 | .w_logo {
40 | {{ widthLogo ? 'width: ' ~ (widthLogo * 0.60) ~ 'px;' : '' }}
41 | }
42 | }
43 | {% endset %}
44 | {% do assets.addInlineCss(styles, 1) %}
45 | {% endblock %}
46 |
47 | {% block javascripts %}
48 | {% do assets.addJs('jquery', 101) %}
49 | {% do assets.addJs('theme://assets/js/theme.js', {group: 'bottom'}) %}
50 | {# Bootstrap 4.6.2 #}
51 | {% if theme_var('bootstrap_local') %}
52 | {% do assets.addJs('theme://assets/js/popper.min.js', {group: 'bottom'}) %}
53 | {% do assets.addJs('theme://assets/js/bootstrap.min.js', {group: 'bottom'}) %}
54 | {% else %}
55 | {% do assets.addJs('https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js', {group: 'bottom', integrity: 'sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN', crossorigin: 'anonymous'}) %}
56 | {% do assets.addJs('https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.min.js', {group: 'bottom', integrity: 'sha384-+sLIOodYLS7CIrQpBjl+C7nPvqq+FbNUBDunl/OZv93DB7Ln/533i8e/mZXLi/P+', crossorigin: 'anonymous'}) %}
57 | {% endif %}
58 | {% endblock %}
59 |
60 | {% block assets deferred %}
61 | {{ assets.css()|raw }}
62 | {{ assets.js()|raw }}
63 | {% endblock %}
64 |
--------------------------------------------------------------------------------
/assets/scss/vendor/bootstrap/_tooltip.scss:
--------------------------------------------------------------------------------
1 | // Base class
2 | .tooltip {
3 | position: absolute;
4 | z-index: $zindex-tooltip;
5 | display: block;
6 | margin: $tooltip-margin;
7 | // Our parent element can be arbitrary since tooltips are by default inserted as a sibling of their target element.
8 | // So reset our font and text properties to avoid inheriting weird values.
9 | @include reset-text();
10 | @include font-size($tooltip-font-size);
11 | // Allow breaking very long words so they don't overflow the tooltip's bounds
12 | word-wrap: break-word;
13 | opacity: 0;
14 |
15 | &.show { opacity: $tooltip-opacity; }
16 |
17 | .arrow {
18 | position: absolute;
19 | display: block;
20 | width: $tooltip-arrow-width;
21 | height: $tooltip-arrow-height;
22 |
23 | &::before {
24 | position: absolute;
25 | content: "";
26 | border-color: transparent;
27 | border-style: solid;
28 | }
29 | }
30 | }
31 |
32 | .bs-tooltip-top {
33 | padding: $tooltip-arrow-height 0;
34 |
35 | .arrow {
36 | bottom: 0;
37 |
38 | &::before {
39 | top: 0;
40 | border-width: $tooltip-arrow-height ($tooltip-arrow-width * .5) 0;
41 | border-top-color: $tooltip-arrow-color;
42 | }
43 | }
44 | }
45 |
46 | .bs-tooltip-right {
47 | padding: 0 $tooltip-arrow-height;
48 |
49 | .arrow {
50 | left: 0;
51 | width: $tooltip-arrow-height;
52 | height: $tooltip-arrow-width;
53 |
54 | &::before {
55 | right: 0;
56 | border-width: ($tooltip-arrow-width * .5) $tooltip-arrow-height ($tooltip-arrow-width * .5) 0;
57 | border-right-color: $tooltip-arrow-color;
58 | }
59 | }
60 | }
61 |
62 | .bs-tooltip-bottom {
63 | padding: $tooltip-arrow-height 0;
64 |
65 | .arrow {
66 | top: 0;
67 |
68 | &::before {
69 | bottom: 0;
70 | border-width: 0 ($tooltip-arrow-width * .5) $tooltip-arrow-height;
71 | border-bottom-color: $tooltip-arrow-color;
72 | }
73 | }
74 | }
75 |
76 | .bs-tooltip-left {
77 | padding: 0 $tooltip-arrow-height;
78 |
79 | .arrow {
80 | right: 0;
81 | width: $tooltip-arrow-height;
82 | height: $tooltip-arrow-width;
83 |
84 | &::before {
85 | left: 0;
86 | border-width: ($tooltip-arrow-width * .5) 0 ($tooltip-arrow-width * .5) $tooltip-arrow-height;
87 | border-left-color: $tooltip-arrow-color;
88 | }
89 | }
90 | }
91 |
92 | .bs-tooltip-auto {
93 | &[x-placement^="top"] {
94 | @extend .bs-tooltip-top;
95 | }
96 | &[x-placement^="right"] {
97 | @extend .bs-tooltip-right;
98 | }
99 | &[x-placement^="bottom"] {
100 | @extend .bs-tooltip-bottom;
101 | }
102 | &[x-placement^="left"] {
103 | @extend .bs-tooltip-left;
104 | }
105 | }
106 |
107 | // Wrapper for the tooltip content
108 | .tooltip-inner {
109 | max-width: $tooltip-max-width;
110 | padding: $tooltip-padding-y $tooltip-padding-x;
111 | color: $tooltip-color;
112 | text-align: center;
113 | background-color: $tooltip-bg;
114 | @include border-radius($tooltip-border-radius);
115 | }
116 |
--------------------------------------------------------------------------------
/templates/partials/blog/relatedpages.html.twig:
--------------------------------------------------------------------------------
1 | {# PARTIAL RELATED PAGES #}
2 | {# Show at the bottom of the page, the Related Pages section if it is disabled show them in the sidebar #}
3 |
4 |
5 | {{ block_title }}
6 |
7 |
8 | {% for related_path, score in related_pages|slice(0, 3) %}
9 | {% set related = grav['pages'].get(related_path) %}
10 | {% set related_title = related.title %}
11 | {% set related_author = related.header.author.name ?? related.taxonomy.author[0] %}
12 | {% set related_image = related.media.images[related.header.featuredImage] ?: related.media.images|filter((v, k) => k != related.header.author.avatarImage)|first %}
13 | {% if related %}
14 |
15 |
16 |
17 | {{ related_image.loading('lazy')
18 | .decoding('async')
19 | .attribute('width', img_width)
20 | .attribute('height', img_height)
21 | .derivatives(320, 672, 320)
22 | .sizes('(max-width: 768px) 100vw, 50vw')
23 | .html(related_title, related_title, 'w-100 h-auto mr-2 rounded')|raw }}
24 |
25 |
26 |
27 |
28 | {{ related_title|e }}
29 |
30 |
31 |
32 | {% if related_author %}
33 |
34 |
35 | {{ related_author }}
36 |
37 |
38 | {% endif %}
39 | {{ 'MUNDANA.MISC.IN'|t }}
40 | {% for category in related.taxonomy.category %}
41 | {{ category|e }} {% if not loop.last %}, {% endif %}
42 | {% endfor %}
43 |
44 |
45 |
46 | {{ include('partials/blog/date.html.twig', {page: related}) }}
47 |
48 | {% if config.plugins.readingtime.enabled %}
49 | {{ include('partials/blog/readingtime.html.twig', {page: related}) }}
50 | {% endif %}
51 |
52 |
53 |
54 |
55 |
56 |
57 | {% endif %}
58 | {% endfor %}
59 |
60 |
--------------------------------------------------------------------------------
/templates/partials/sidebar/categories.html.twig:
--------------------------------------------------------------------------------
1 | {# CATEGORIES SECTION - SIDEBAR #}
2 |
3 | {% set published_posts = blog.children.published(true) %}
4 | {% if published_posts|length > 0 %}
5 |
6 |
7 | {{ block_title }}
8 |
9 |
10 | {% set terms = [] %}
11 | {% for item in blog.children %}
12 | {% for term in item.taxonomy.category %}
13 | {% if term not in terms %}
14 | {% set terms = terms|merge([term]) %}
15 | {% endif %}
16 | {% endfor %}
17 | {% endfor %}
18 |
19 | {% set catItemsCounts = [] %}
20 | {% for item in published_posts %}
21 | {% for cat in item.taxonomy.category %}
22 | {% set catItemsCounts = catItemsCounts|merge({(cat): (catItemsCounts[cat]|default(0)) + 1}) %}
23 | {% endfor %}
24 | {% endfor %}
25 |
26 | {% for term in terms %}
27 | {# Only show categories that have published posts #}
28 | {% if catItemsCounts[term] is defined and catItemsCounts[term] > 0 %}
29 | {% set blog_image = null %}
30 | {% set category_posts = taxonomy.findTaxonomy({category: term}).published(true).order('date', 'desc') %}
31 |
32 | {# Check that the category collection is not empty before using random #}
33 | {% if category_posts|length > 0 %}
34 | {% for p in category_posts.random(1) %}
35 | {% set blog_image = p.media.images[p.header.featuredImage] ?: p.media.images|filter((v, k) => k != p.header.author.avatarImage)|first %}
36 | {% endfor %}
37 | {% endif %}
38 |
39 |
40 | {% if blog_image %}
41 |
42 | {{ blog_image.loading('lazy')
43 | .decoding('async')
44 | .attribute('width', '100')
45 | .attribute('height', '60')
46 | .html(('MUNDANA.SIDEBAR.CATEGORIES.POSTS_IN'|t|capitalize) ~ ' ' ~ term|raw, ('MUNDANA.SIDEBAR.CATEGORIES.POSTS_IN'|t|capitalize) ~ ' ' ~ term|raw, 'w-100 h-auto mr-2 rounded')|raw }}
47 |
48 | {% endif %}
49 |
61 |
62 | {% endif %}
63 | {% endfor %}
64 | {% endif %}
65 |
--------------------------------------------------------------------------------
/templates/partials/navigation.html.twig:
--------------------------------------------------------------------------------
1 | {# Set login and lang links in navbar #}
2 | {% set menu_login = theme_var('menu_login')|defined(true) %}
3 | {% set menu_lang = theme_var('menu_langswitcher')|defined(true) %}
4 |
5 | {# Initialize settings for custom menu #}
6 | {% set dropdown = theme.dropdown.enabled|defined(true) %}
7 | {% set c_menu_items = theme_var('custom_menu_items') %}
8 | {% set c_menu_enabled = theme_var('custom_menu_enabled')|defined(true) %}
9 |
10 | {# Navigation menu #}
11 |
68 |
69 | {# Langswitcher (If langswitcher plugin is installed) #}
70 | {% if config.plugins.langswitcher.enabled and menu_lang and system.languages.supported is not null %}
71 | {{ include('partials/langswitcher.html.twig') }}
72 | {% endif %}
73 |
--------------------------------------------------------------------------------
/_demo/pages/05.contact/contact.md:
--------------------------------------------------------------------------------
1 | ---
2 | form:
3 | name: contact-form
4 | template: form-messages
5 | refresh_prevention: true
6 | classes: row
7 | fields:
8 | -
9 | name: Name
10 | label: Name
11 | placeholder: Name
12 | validate:
13 | required: true
14 | message: 'This field is required'
15 | autofocus: 'off'
16 | autocomplete: 'on'
17 | type: text
18 | outerclasses: 'col-md-6 py-2'
19 | classes: null
20 | -
21 | name: Email
22 | label: Email
23 | placeholder: Email
24 | validate:
25 | required: true
26 | message: 'This field is required'
27 | type: email
28 | outerclasses: 'col-md-6 py-2'
29 | classes: null
30 | -
31 | name: Subject
32 | label: Subject
33 | type: text
34 | placeholder: Subject
35 | validate:
36 | required: true
37 | message: 'This field is required'
38 | outerclasses: 'col-12 py-2'
39 | classes: null
40 | -
41 | name: Message
42 | label: Message
43 | placeholder: Message
44 | validate:
45 | required: true
46 | message: 'This field is required'
47 | type: textarea
48 | outerclasses: 'col-12 py-2'
49 | classes: null
50 | rows: 5
51 | -
52 | name: Privacy
53 | type: checkbox
54 | markdown: true
55 | label: 'By using this form you agree with our Privacy Policy '
56 | classes: null
57 | outerclasses: 'col-12 py-2'
58 | validate:
59 | required: false
60 | message: 'This field is required'
61 | buttons:
62 | -
63 | type: submit
64 | value: Submit
65 | classes: 'btn-outline-primary my-2'
66 | -
67 | type: reset
68 | value: Reset
69 | classes: 'btn-danger my-2'
70 | process:
71 | captcha: false
72 | save:
73 | fileprefix: contact-
74 | dateformat: dmY-His-u
75 | extension: txt
76 | body: '{% include ''forms/data.txt.twig'' %}'
77 | email:
78 | subject: '[Form example from Mundana] {{ form.value.name|e }}'
79 | body: '{% include ''forms/data.html.twig'' %}'
80 | display: /thankyou
81 | reset: false
82 | title: Contact
83 | subtitle: 'Elit aliquam vulputate egestas euismod nunc semper vehicula lorem blandit'
84 | show_title: '1'
85 | show_image: true
86 | image_width: 1000
87 | image_height: 300
88 | media_order: pic07.webp
89 | subtitleLead: '1'
90 | address:
91 | -
92 | addressField: 'Mundana Grav Street, 5'
93 | fieldIcon: 'fas fa-map-marker-alt'
94 | -
95 | addressField: 'Phone number: +34111222333'
96 | fieldIcon: 'fas fa-phone'
97 | -
98 | addressField: 'E-mail: demo@pmdesign.dev'
99 | fieldIcon: 'fas fa-envelope'
100 | icon_menu: 'fas fa-map-marker-alt'
101 | ---
102 |
103 |
--------------------------------------------------------------------------------
/assets/css/bootstrap-reboot.min.css:
--------------------------------------------------------------------------------
1 | *,*::before,*::after{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus:not(:focus-visible){outline:0 !important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[title],abbr[data-original-title]{text-decoration:underline;text-decoration:underline dotted;cursor:help;border-bottom:0;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}a{color:#007bff;text-decoration:none;background-color:rgba(0,0,0,0)}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([class]){color:inherit;text-decoration:none}a:not([href]):not([class]):hover{color:inherit;text-decoration:none}pre,code,kbd,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit;text-align:-webkit-match-parent}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus:not(:focus-visible){outline:0}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button:not(:disabled),[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled){cursor:pointer}button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{padding:0;border-style:none}input[type=radio],input[type=checkbox]{box-sizing:border-box;padding:0}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none !important}
--------------------------------------------------------------------------------