├── .gitignore
├── .gitlab-ci.yml
├── .hugo_build.lock
├── .jshintrc
├── .markdownlint.json
├── .prettierrc
├── .vscode
└── extensions.json
├── README.md
├── archetypes
└── default.md
├── assets
├── js
│ ├── bootstrap.js
│ └── script.js
├── plugins
│ ├── bootstrap
│ │ ├── bootstrap.min.css
│ │ └── bootstrap.min.js
│ ├── instagram-feed
│ │ └── instagram-feed.js
│ ├── jquery
│ │ └── jquery.min.js
│ └── line-awesome
│ │ └── css
│ │ └── line-awesome.min.css
└── scss
│ ├── _buttons.scss
│ ├── _common.scss
│ ├── _mixins.scss
│ ├── _typography.scss
│ ├── style.scss
│ └── templates
│ ├── _bootstrap.scss
│ ├── _main.scss
│ └── _navigation.scss
├── exampleSite
├── .hugo_build.lock
├── assets
│ ├── images
│ │ ├── about.jpg
│ │ ├── author
│ │ │ ├── author-2.jpg
│ │ │ └── author.jpg
│ │ ├── favicon.png
│ │ ├── logo.png
│ │ └── post
│ │ │ ├── 01.jpg
│ │ │ ├── 02.jpg
│ │ │ ├── 03.jpg
│ │ │ ├── 04.jpg
│ │ │ ├── 05.jpg
│ │ │ ├── 06.jpg
│ │ │ └── 07.jpg
│ └── scss
│ │ └── custom.scss
├── config
│ └── _default
│ │ ├── hugo.toml
│ │ ├── languages.toml
│ │ ├── menus.en.toml
│ │ ├── module.toml
│ │ └── params.toml
├── content
│ └── english
│ │ ├── about.md
│ │ ├── author
│ │ ├── _index.md
│ │ ├── henara-colii.md
│ │ └── lubana-era.md
│ │ ├── blog
│ │ ├── _index.md
│ │ ├── post-1.md
│ │ ├── post-2.md
│ │ ├── post-3.md
│ │ ├── post-4.md
│ │ ├── post-5.md
│ │ ├── post-6.md
│ │ ├── post-7.md
│ │ └── post-8.md
│ │ ├── contact.md
│ │ ├── elements.md
│ │ ├── privacy.md
│ │ ├── search.md
│ │ └── terms-conditions.md
├── go.mod
├── hugo.toml
├── i18n
│ └── en.yaml
└── postcss.config.js
├── layouts
├── 404.html
├── _default
│ ├── about.html
│ ├── baseof.html
│ ├── contact.html
│ ├── list.html
│ ├── post.html
│ ├── single.html
│ └── terms.html
├── author
│ ├── list.html
│ └── single.html
├── index.html
└── partials
│ ├── components
│ ├── page-header.html
│ └── social-share.html
│ ├── essentials
│ ├── footer.html
│ ├── head.html
│ ├── header.html
│ ├── script.html
│ └── style.html
│ ├── post-share.html
│ └── widgets
│ ├── categories.html
│ ├── search.html
│ ├── social.html
│ ├── tags.html
│ └── widget-wrapper.html
├── netlify.toml
├── package.json
├── scripts
├── clearModules.js
├── projectSetup.js
└── themeSetup.js
├── vercel-build.sh
└── vercel.json
/.gitignore:
--------------------------------------------------------------------------------
1 | Thumbs.db
2 | .DS_Store
3 | .dist
4 | .tmp
5 | .lock
6 | .sass-cache
7 | npm-debug.log
8 | node_modules
9 | builds
10 | package-lock.json
11 | public
12 | resources
13 | .hugo_build.lock
14 | jsconfig.json
15 | hugo_stats.json
16 | go.sum
17 | yarn.lock
--------------------------------------------------------------------------------
/.gitlab-ci.yml:
--------------------------------------------------------------------------------
1 | stages:
2 | - build
3 |
4 | variables:
5 | HUGO_ENV: production
6 | HUGO_VERSION: "0.115.1"
7 | GO_VERSION: "1.20.5"
8 | NODE_VERSION: "18.16.1"
9 |
10 | cache:
11 | paths:
12 | - node_modules/
13 |
14 | default:
15 | image: node:${NODE_VERSION}
16 | before_script:
17 | - echo "USING NODE ${NODE_VERSION}"
18 | - apt-get update && apt-get install -y curl
19 | - curl -LO "https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_Linux-64bit.tar.gz"
20 | - tar -xvf hugo_extended_${HUGO_VERSION}_Linux-64bit.tar.gz
21 | - mv hugo /usr/local/bin/
22 | - rm hugo_extended_${HUGO_VERSION}_Linux-64bit.tar.gz
23 | - echo "HUGO ${HUGO_VERSION} INSTALLED"
24 | - curl -LO "https://dl.google.com/go/go${GO_VERSION}.linux-amd64.tar.gz"
25 | - tar -C /usr/local -xzf go${GO_VERSION}.linux-amd64.tar.gz
26 | - export PATH=$PATH:/usr/local/go/bin
27 | - rm go${GO_VERSION}.linux-amd64.tar.gz
28 | - echo "GO ${GO_VERSION} INSTALLED"
29 | - npm install
30 |
31 | pages:
32 | stage: build
33 | script:
34 | - npm run project-setup
35 | - npm run build
36 | - echo "SITE BUILT SUCCESSFULLY! LIVE AT https://$GITLAB_USER_LOGIN.gitlab.io/$CI_PROJECT_NAME/"
37 | artifacts:
38 | paths:
39 | - public
40 |
--------------------------------------------------------------------------------
/.hugo_build.lock:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gethugothemes/bookworm-light-hugo/c495cf0dbfbee5c00a7818c6dc380f18e957bdd0/.hugo_build.lock
--------------------------------------------------------------------------------
/.jshintrc:
--------------------------------------------------------------------------------
1 | {
2 | "maxerr": 50,
3 | "bitwise": true,
4 | "camelcase": false,
5 | "curly": true,
6 | "eqeqeq": true,
7 | "forin": true,
8 | "freeze": true,
9 | "immed": true,
10 | "indent": 2,
11 | "latedef": true,
12 | "newcap": false,
13 | "noarg": true,
14 | "noempty": true,
15 | "nonbsp": true,
16 | "nonew": true,
17 | "plusplus": false,
18 | "undef": true,
19 | "unused": false,
20 | "strict": true,
21 | "maxparams": false,
22 | "maxdepth": 4,
23 | "maxstatements": false,
24 | "maxcomplexity": false,
25 | "maxlen": 400,
26 | "browser": true,
27 | "devel": true,
28 | "asi": false,
29 | "boss": false,
30 | "debug": false,
31 | "eqnull": false,
32 | "es3": false,
33 | "es5": false,
34 | "esversion": 12,
35 | "moz": false,
36 | "evil": true,
37 | "expr": true,
38 | "funcscope": false,
39 | "globalstrict": false,
40 | "iterator": false,
41 | "lastsemic": false,
42 | "laxbreak": false,
43 | "laxcomma": false,
44 | "loopfunc": true,
45 | "multistr": true,
46 | "noyield": false,
47 | "notypeof": false,
48 | "proto": false,
49 | "scripturl": false,
50 | "shadow": false,
51 | "sub": false,
52 | "supernew": false,
53 | "validthis": false,
54 | "globals": {
55 | "jQuery": false,
56 | "google": false,
57 | "$": false
58 | }
59 | }
60 |
--------------------------------------------------------------------------------
/.markdownlint.json:
--------------------------------------------------------------------------------
1 | {
2 | "MD033": false,
3 | "MD034": false,
4 | "MD013": false
5 | }
6 |
--------------------------------------------------------------------------------
/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "overrides": [
3 | {
4 | "files": ["*.html"],
5 | "options": {
6 | "parser": "go-template",
7 | "goTemplateBracketSpacing": true,
8 | "bracketSameLine": true
9 | }
10 | }
11 | ]
12 | }
13 |
--------------------------------------------------------------------------------
/.vscode/extensions.json:
--------------------------------------------------------------------------------
1 | {
2 | "recommendations": [
3 | "budparr.language-hugo-vscode",
4 | "tamasfe.even-better-toml"
5 | ]
6 | }
7 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
Bookworm Light
3 | This modern Hugo blog theme is perfect for creating any kind of blog website, including food, recipes, beauty, lifestyle, photography, travel, health, fitness, and more.
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
23 |
24 |
25 | ---
26 |
27 |
28 |
29 |
30 |
31 | ---
32 |
33 | ## 🔑Discover Free & Premium Features
34 |
35 | Featurees | [Bookworm Light](https://github.com/gethugothemes/bookworm-light) | [Bookworm Premium](https://gethugothemes.com/products/bookworm/?ref=github) |
36 | :------------ | :----: | :----: |
37 | Google analytics support |  |  |
38 | CSS and Js bundle with hugo pipe |  |  |
39 | Netlify settings predefine |  |  |
40 | Contact form Support (formspree) |  |  |
41 | Search by fuse.js and mark.js |  |  |
42 | GDPR consent enable |  |  |
43 | Color and fonts variable in config file |  |  |
44 | Mailchimp integrate |  |  |
45 | Instagram feed available |  |  |
46 | Google page speed optimized |  |  |
47 | Open graph meta tag |  |  |
48 | Twitter card meta tag |  |  |
49 | Multiple language support (Fr, En) |  |  |
50 | Menu alignment customized (left, right, or center ) |  |  |
51 | Multiple post layout ( grid or list) |  |  |
52 | Sidebar option (left, right or false) |  |  |
53 | 4+ Premium Pages |  |  |
54 | Priority Support |  |  |
55 | Get It Now | [](https://github.com/gethugothemes/bookworm-light/archive/refs/heads/master.zip) | [](https://gethugothemes.com/products/bookworm/?ref=github)
56 |
57 | ## 🔧Local development
58 |
59 | ```bash
60 | # clone the repository
61 | git clone git@github.com:gethugothemes/bookworm-light-hugo.git
62 |
63 | #Install all the necessary dependencies using the following command:
64 | npm install
65 |
66 | # Start local dev server
67 | $ npm run dev:example
68 | ```
69 |
70 | Or Check out [Full Documentation](https://docs.gethugothemes.com/bookworm/?ref=github).
71 |
72 |
73 | ## ⚙️Deployment and hosting
74 |
75 | [](https://app.netlify.com/start/deploy?repository=https://github.com/gethugothemes/bookworm-light)
77 |
78 | Follow the steps.
79 |
80 |
81 | ## 🐞Reporting Issues
82 |
83 | We use GitHub Issues as the official bug tracker for the bookworm Template. Please Search [existing
84 | issues](https://github.com/gethugothemes/bookworm-light/issues). Someone may have already reported the same problem.
85 | If your problem or idea has not been addressed yet, feel free to [open a new
86 | issue](https://github.com/gethugothemes/bookworm-light/issues).
87 |
88 | ## 📱Submit Your Website To Our Showcase
89 |
90 | Are you using Bookworm Hugo theme? Submit it to our [showcase](https://gethugothemes.com/showcase).
91 |
92 | Our showcase aims to demonstrate to the world what amazing websites people like you have created utilizing our Hugo themes and to show that Hugo has tremendous capabilities as a Static Site Generator.
93 |
94 | View all the websites powered by Bookworm Hugo from [here](https://gethugothemes.com/showcase?theme=bookworm).
95 |
96 | [Submit](https://gethugothemes.com/showcase?submit=show) your Bookworm Hugo powered website.
97 |
98 |
99 | ## 📄License
100 |
101 | Copyright © Designed by [Themefisher](https://themefisher.com) & Developed by
102 | [Gethugothemes](https://gethugothemes.com)
103 |
104 | **Code License:** Released under the [MIT](https://github.com/gethugothemes/bookworm-light/blob/master/LICENSE) license.
105 |
106 | **Image license:** The images are only for demonstration purposes. They have their licenses. We don't have permission to
107 | share those images.
108 |
109 |
110 | ## 🙏Special Thanks
111 |
112 | - [Bootstrap](https://getbootstrap.com)
113 | - [Jquery](https://jquery.com)
114 | - [Line awesome](https://icons8.com/line-awesome)
115 | - [Instafeed](https://instafeedjs.com/)
116 | - [Google Fonts](https://fonts.google.com/)
117 | - [All Contributors](https://github.com/gethugothemes/bookworm-light/graphs/contributors)
118 |
119 | ## 👨💻Hire Us
120 |
121 | Besides developing unique, blazing-fast Hugo themes, we also provide customized services. We specialize in creating affordable, high-quality static websites based on Hugo.
122 |
123 | If you need to customize the theme or complete website development from scratch, you can hire us.
124 | **Check Our
125 | [Services](https://gethugothemes.com/services/?utm_source=bookworm_github&utm_medium=referral&utm_campaign=github_theme_readme)**
126 |
127 |
128 | ## 💎Premium Themes By Us
129 |
130 | | [](https://gethugothemes.com/bundle/?utm_source=bookworm_github&utm_medium=referral&utm_campaign=github_theme_readme) | [](https://gethugothemes.com/products/logbook/) | [](https://gethugothemes.com/products/parsa/) |
131 | |:---:|:---:|:---:|
132 | | **Get 55+ Premium Hugo Themes Bundle** | **Logbook** | **Parsa** |
133 |
--------------------------------------------------------------------------------
/archetypes/default.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "{{ replace .Name "-" " " | title }}"
3 | date: {{ .Date }}
4 | # meta keywords
5 | keywords: []
6 | # meta description
7 | description: "This is meta description"
8 | # save as draft
9 | draft: false
10 | ---
--------------------------------------------------------------------------------
/assets/js/bootstrap.js:
--------------------------------------------------------------------------------
1 | // bootstrap js components
2 | // import Alert from "js/bootstrap/src/alert";
3 | // import Button from "js/bootstrap/src/button";
4 | // import Carousel from "js/bootstrap/src/carousel";
5 | import Collapse from "js/bootstrap/src/collapse";
6 | import Dropdown from "js/bootstrap/src/dropdown";
7 | import Modal from "js/bootstrap/src/modal";
8 | // import Offcanvas from "js/bootstrap/src/offcanvas";
9 | // import Popover from "js/bootstrap/src/popover";
10 | // import ScrollSpy from "js/bootstrap/src/scrollspy";
11 | import Tab from "js/bootstrap/src/tab";
12 | // import Toast from "js/bootstrap/src/toast";
13 | // import Tooltip from "js/bootstrap/src/tooltip";
14 |
15 | // bootstrap popover and toats
16 | // (function () {
17 | // "use strict";
18 | // let toastElList = [].slice.call(document.querySelectorAll(".toast"));
19 | // let toastList = toastElList.map(function (toastEl) {
20 | // return new Toast(toastEl);
21 | // });
22 |
23 | // toastList.forEach(function (toast) {
24 | // toast.show();
25 | // });
26 |
27 | // let popoverTriggerList = [].slice.call(
28 | // document.querySelectorAll('[data-bs-toggle="popover"]')
29 | // );
30 | // popoverTriggerList.map(function (popoverTriggerEl) {
31 | // return new Popover(popoverTriggerEl);
32 | // });
33 | // })();
34 |
--------------------------------------------------------------------------------
/assets/js/script.js:
--------------------------------------------------------------------------------
1 | (function () {
2 | 'use strict';
3 |
4 | // header sticky
5 | // ==========================================
6 | const headerNav = document.querySelector('.header-nav');
7 | window.addEventListener('scroll', function () {
8 | if (window.scrollY >= 50) {
9 | headerNav.classList.add('header-sticky-top');
10 | } else {
11 | headerNav.classList.remove('header-sticky-top');
12 | }
13 | });
14 |
15 | window.addEventListener('load', function () {
16 |
17 | // instafeed
18 | // ==========================================
19 | var instafeed = document.getElementById('instafeed');
20 | if (instafeed) {
21 | var accessToken = instafeed.getAttribute('data-accessToken');
22 | var userFeed = new window.Instafeed({
23 | get: 'user',
24 | limit: 6,
25 | resolution: 'low_resolution',
26 | accessToken: accessToken,
27 | template: ' '
28 | });
29 | userFeed.run();
30 | }
31 | });
32 | })();
--------------------------------------------------------------------------------
/assets/plugins/bootstrap/bootstrap.min.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * Bootstrap v4.5.0 (https://getbootstrap.com/)
3 | * Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5 | */
6 | !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("jquery"),require("popper.js")):"function"==typeof define&&define.amd?define(["exports","jquery","popper.js"],e):e((t=t||self).bootstrap={},t.jQuery,t.Popper)}(this,(function(t,e,n){"use strict";function i(t,e){for(var n=0;n=4)throw new Error("Bootstrap's JavaScript requires at least jQuery v1.9.1 but less than v4.0.0")}};c.jQueryDetection(),e.fn.emulateTransitionEnd=l,e.event.special[c.TRANSITION_END]={bindType:"transitionend",delegateType:"transitionend",handle:function(t){if(e(t.target).is(this))return t.handleObj.handler.apply(this,arguments)}};var h="alert",u=e.fn[h],d=function(){function t(t){this._element=t}var n=t.prototype;return n.close=function(t){var e=this._element;t&&(e=this._getRootElement(t)),this._triggerCloseEvent(e).isDefaultPrevented()||this._removeElement(e)},n.dispose=function(){e.removeData(this._element,"bs.alert"),this._element=null},n._getRootElement=function(t){var n=c.getSelectorFromElement(t),i=!1;return n&&(i=document.querySelector(n)),i||(i=e(t).closest(".alert")[0]),i},n._triggerCloseEvent=function(t){var n=e.Event("close.bs.alert");return e(t).trigger(n),n},n._removeElement=function(t){var n=this;if(e(t).removeClass("show"),e(t).hasClass("fade")){var i=c.getTransitionDurationFromElement(t);e(t).one(c.TRANSITION_END,(function(e){return n._destroyElement(t,e)})).emulateTransitionEnd(i)}else this._destroyElement(t)},n._destroyElement=function(t){e(t).detach().trigger("closed.bs.alert").remove()},t._jQueryInterface=function(n){return this.each((function(){var i=e(this),o=i.data("bs.alert");o||(o=new t(this),i.data("bs.alert",o)),"close"===n&&o[n](this)}))},t._handleDismiss=function(t){return function(e){e&&e.preventDefault(),t.close(this)}},o(t,null,[{key:"VERSION",get:function(){return"4.5.0"}}]),t}();e(document).on("click.bs.alert.data-api",'[data-dismiss="alert"]',d._handleDismiss(new d)),e.fn[h]=d._jQueryInterface,e.fn[h].Constructor=d,e.fn[h].noConflict=function(){return e.fn[h]=u,d._jQueryInterface};var f=e.fn.button,g=function(){function t(t){this._element=t}var n=t.prototype;return n.toggle=function(){var t=!0,n=!0,i=e(this._element).closest('[data-toggle="buttons"]')[0];if(i){var o=this._element.querySelector('input:not([type="hidden"])');if(o){if("radio"===o.type)if(o.checked&&this._element.classList.contains("active"))t=!1;else{var s=i.querySelector(".active");s&&e(s).removeClass("active")}t&&("checkbox"!==o.type&&"radio"!==o.type||(o.checked=!this._element.classList.contains("active")),e(o).trigger("change")),o.focus(),n=!1}}this._element.hasAttribute("disabled")||this._element.classList.contains("disabled")||(n&&this._element.setAttribute("aria-pressed",!this._element.classList.contains("active")),t&&e(this._element).toggleClass("active"))},n.dispose=function(){e.removeData(this._element,"bs.button"),this._element=null},t._jQueryInterface=function(n){return this.each((function(){var i=e(this).data("bs.button");i||(i=new t(this),e(this).data("bs.button",i)),"toggle"===n&&i[n]()}))},o(t,null,[{key:"VERSION",get:function(){return"4.5.0"}}]),t}();e(document).on("click.bs.button.data-api",'[data-toggle^="button"]',(function(t){var n=t.target,i=n;if(e(n).hasClass("btn")||(n=e(n).closest(".btn")[0]),!n||n.hasAttribute("disabled")||n.classList.contains("disabled"))t.preventDefault();else{var o=n.querySelector('input:not([type="hidden"])');if(o&&(o.hasAttribute("disabled")||o.classList.contains("disabled")))return void t.preventDefault();"LABEL"===i.tagName&&o&&"checkbox"===o.type&&t.preventDefault(),g._jQueryInterface.call(e(n),"toggle")}})).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',(function(t){var n=e(t.target).closest(".btn")[0];e(n).toggleClass("focus",/^focus(in)?$/.test(t.type))})),e(window).on("load.bs.button.data-api",(function(){for(var t=[].slice.call(document.querySelectorAll('[data-toggle="buttons"] .btn')),e=0,n=t.length;e0,this._pointerEvent=Boolean(window.PointerEvent||window.MSPointerEvent),this._addEventListeners()}var n=t.prototype;return n.next=function(){this._isSliding||this._slide("next")},n.nextWhenVisible=function(){!document.hidden&&e(this._element).is(":visible")&&"hidden"!==e(this._element).css("visibility")&&this.next()},n.prev=function(){this._isSliding||this._slide("prev")},n.pause=function(t){t||(this._isPaused=!0),this._element.querySelector(".carousel-item-next, .carousel-item-prev")&&(c.triggerTransitionEnd(this._element),this.cycle(!0)),clearInterval(this._interval),this._interval=null},n.cycle=function(t){t||(this._isPaused=!1),this._interval&&(clearInterval(this._interval),this._interval=null),this._config.interval&&!this._isPaused&&(this._interval=setInterval((document.visibilityState?this.nextWhenVisible:this.next).bind(this),this._config.interval))},n.to=function(t){var n=this;this._activeElement=this._element.querySelector(".active.carousel-item");var i=this._getItemIndex(this._activeElement);if(!(t>this._items.length-1||t<0))if(this._isSliding)e(this._element).one("slid.bs.carousel",(function(){return n.to(t)}));else{if(i===t)return this.pause(),void this.cycle();var o=t>i?"next":"prev";this._slide(o,this._items[t])}},n.dispose=function(){e(this._element).off(p),e.removeData(this._element,"bs.carousel"),this._items=null,this._config=null,this._element=null,this._interval=null,this._isPaused=null,this._isSliding=null,this._activeElement=null,this._indicatorsElement=null},n._getConfig=function(t){return t=a(a({},v),t),c.typeCheckConfig(m,t,b),t},n._handleSwipe=function(){var t=Math.abs(this.touchDeltaX);if(!(t<=40)){var e=t/this.touchDeltaX;this.touchDeltaX=0,e>0&&this.prev(),e<0&&this.next()}},n._addEventListeners=function(){var t=this;this._config.keyboard&&e(this._element).on("keydown.bs.carousel",(function(e){return t._keydown(e)})),"hover"===this._config.pause&&e(this._element).on("mouseenter.bs.carousel",(function(e){return t.pause(e)})).on("mouseleave.bs.carousel",(function(e){return t.cycle(e)})),this._config.touch&&this._addTouchEventListeners()},n._addTouchEventListeners=function(){var t=this;if(this._touchSupported){var n=function(e){t._pointerEvent&&y[e.originalEvent.pointerType.toUpperCase()]?t.touchStartX=e.originalEvent.clientX:t._pointerEvent||(t.touchStartX=e.originalEvent.touches[0].clientX)},i=function(e){t._pointerEvent&&y[e.originalEvent.pointerType.toUpperCase()]&&(t.touchDeltaX=e.originalEvent.clientX-t.touchStartX),t._handleSwipe(),"hover"===t._config.pause&&(t.pause(),t.touchTimeout&&clearTimeout(t.touchTimeout),t.touchTimeout=setTimeout((function(e){return t.cycle(e)}),500+t._config.interval))};e(this._element.querySelectorAll(".carousel-item img")).on("dragstart.bs.carousel",(function(t){return t.preventDefault()})),this._pointerEvent?(e(this._element).on("pointerdown.bs.carousel",(function(t){return n(t)})),e(this._element).on("pointerup.bs.carousel",(function(t){return i(t)})),this._element.classList.add("pointer-event")):(e(this._element).on("touchstart.bs.carousel",(function(t){return n(t)})),e(this._element).on("touchmove.bs.carousel",(function(e){return function(e){e.originalEvent.touches&&e.originalEvent.touches.length>1?t.touchDeltaX=0:t.touchDeltaX=e.originalEvent.touches[0].clientX-t.touchStartX}(e)})),e(this._element).on("touchend.bs.carousel",(function(t){return i(t)})))}},n._keydown=function(t){if(!/input|textarea/i.test(t.target.tagName))switch(t.which){case 37:t.preventDefault(),this.prev();break;case 39:t.preventDefault(),this.next()}},n._getItemIndex=function(t){return this._items=t&&t.parentNode?[].slice.call(t.parentNode.querySelectorAll(".carousel-item")):[],this._items.indexOf(t)},n._getItemByDirection=function(t,e){var n="next"===t,i="prev"===t,o=this._getItemIndex(e),s=this._items.length-1;if((i&&0===o||n&&o===s)&&!this._config.wrap)return e;var r=(o+("prev"===t?-1:1))%this._items.length;return-1===r?this._items[this._items.length-1]:this._items[r]},n._triggerSlideEvent=function(t,n){var i=this._getItemIndex(t),o=this._getItemIndex(this._element.querySelector(".active.carousel-item")),s=e.Event("slide.bs.carousel",{relatedTarget:t,direction:n,from:o,to:i});return e(this._element).trigger(s),s},n._setActiveIndicatorElement=function(t){if(this._indicatorsElement){var n=[].slice.call(this._indicatorsElement.querySelectorAll(".active"));e(n).removeClass("active");var i=this._indicatorsElement.children[this._getItemIndex(t)];i&&e(i).addClass("active")}},n._slide=function(t,n){var i,o,s,r=this,a=this._element.querySelector(".active.carousel-item"),l=this._getItemIndex(a),h=n||a&&this._getItemByDirection(t,a),u=this._getItemIndex(h),d=Boolean(this._interval);if("next"===t?(i="carousel-item-left",o="carousel-item-next",s="left"):(i="carousel-item-right",o="carousel-item-prev",s="right"),h&&e(h).hasClass("active"))this._isSliding=!1;else if(!this._triggerSlideEvent(h,s).isDefaultPrevented()&&a&&h){this._isSliding=!0,d&&this.pause(),this._setActiveIndicatorElement(h);var f=e.Event("slid.bs.carousel",{relatedTarget:h,direction:s,from:l,to:u});if(e(this._element).hasClass("slide")){e(h).addClass(o),c.reflow(h),e(a).addClass(i),e(h).addClass(i);var g=parseInt(h.getAttribute("data-interval"),10);g?(this._config.defaultInterval=this._config.defaultInterval||this._config.interval,this._config.interval=g):this._config.interval=this._config.defaultInterval||this._config.interval;var m=c.getTransitionDurationFromElement(a);e(a).one(c.TRANSITION_END,(function(){e(h).removeClass(i+" "+o).addClass("active"),e(a).removeClass("active "+o+" "+i),r._isSliding=!1,setTimeout((function(){return e(r._element).trigger(f)}),0)})).emulateTransitionEnd(m)}else e(a).removeClass("active"),e(h).addClass("active"),this._isSliding=!1,e(this._element).trigger(f);d&&this.cycle()}},t._jQueryInterface=function(n){return this.each((function(){var i=e(this).data("bs.carousel"),o=a(a({},v),e(this).data());"object"==typeof n&&(o=a(a({},o),n));var s="string"==typeof n?n:o.slide;if(i||(i=new t(this,o),e(this).data("bs.carousel",i)),"number"==typeof n)i.to(n);else if("string"==typeof s){if("undefined"==typeof i[s])throw new TypeError('No method named "'+s+'"');i[s]()}else o.interval&&o.ride&&(i.pause(),i.cycle())}))},t._dataApiClickHandler=function(n){var i=c.getSelectorFromElement(this);if(i){var o=e(i)[0];if(o&&e(o).hasClass("carousel")){var s=a(a({},e(o).data()),e(this).data()),r=this.getAttribute("data-slide-to");r&&(s.interval=!1),t._jQueryInterface.call(e(o),s),r&&e(o).data("bs.carousel").to(r),n.preventDefault()}}},o(t,null,[{key:"VERSION",get:function(){return"4.5.0"}},{key:"Default",get:function(){return v}}]),t}();e(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",E._dataApiClickHandler),e(window).on("load.bs.carousel.data-api",(function(){for(var t=[].slice.call(document.querySelectorAll('[data-ride="carousel"]')),n=0,i=t.length;n0&&(this._selector=r,this._triggerArray.push(s))}this._parent=this._config.parent?this._getParent():null,this._config.parent||this._addAriaAndCollapsedClass(this._element,this._triggerArray),this._config.toggle&&this.toggle()}var n=t.prototype;return n.toggle=function(){e(this._element).hasClass("show")?this.hide():this.show()},n.show=function(){var n,i,o=this;if(!this._isTransitioning&&!e(this._element).hasClass("show")&&(this._parent&&0===(n=[].slice.call(this._parent.querySelectorAll(".show, .collapsing")).filter((function(t){return"string"==typeof o._config.parent?t.getAttribute("data-parent")===o._config.parent:t.classList.contains("collapse")}))).length&&(n=null),!(n&&(i=e(n).not(this._selector).data("bs.collapse"))&&i._isTransitioning))){var s=e.Event("show.bs.collapse");if(e(this._element).trigger(s),!s.isDefaultPrevented()){n&&(t._jQueryInterface.call(e(n).not(this._selector),"hide"),i||e(n).data("bs.collapse",null));var r=this._getDimension();e(this._element).removeClass("collapse").addClass("collapsing"),this._element.style[r]=0,this._triggerArray.length&&e(this._triggerArray).removeClass("collapsed").attr("aria-expanded",!0),this.setTransitioning(!0);var a="scroll"+(r[0].toUpperCase()+r.slice(1)),l=c.getTransitionDurationFromElement(this._element);e(this._element).one(c.TRANSITION_END,(function(){e(o._element).removeClass("collapsing").addClass("collapse show"),o._element.style[r]="",o.setTransitioning(!1),e(o._element).trigger("shown.bs.collapse")})).emulateTransitionEnd(l),this._element.style[r]=this._element[a]+"px"}}},n.hide=function(){var t=this;if(!this._isTransitioning&&e(this._element).hasClass("show")){var n=e.Event("hide.bs.collapse");if(e(this._element).trigger(n),!n.isDefaultPrevented()){var i=this._getDimension();this._element.style[i]=this._element.getBoundingClientRect()[i]+"px",c.reflow(this._element),e(this._element).addClass("collapsing").removeClass("collapse show");var o=this._triggerArray.length;if(o>0)for(var s=0;s0},i._getOffset=function(){var t=this,e={};return"function"==typeof this._config.offset?e.fn=function(e){return e.offsets=a(a({},e.offsets),t._config.offset(e.offsets,t._element)||{}),e}:e.offset=this._config.offset,e},i._getPopperConfig=function(){var t={placement:this._getPlacement(),modifiers:{offset:this._getOffset(),flip:{enabled:this._config.flip},preventOverflow:{boundariesElement:this._config.boundary}}};return"static"===this._config.display&&(t.modifiers.applyStyle={enabled:!1}),a(a({},t),this._config.popperConfig)},t._jQueryInterface=function(n){return this.each((function(){var i=e(this).data("bs.dropdown");if(i||(i=new t(this,"object"==typeof n?n:null),e(this).data("bs.dropdown",i)),"string"==typeof n){if("undefined"==typeof i[n])throw new TypeError('No method named "'+n+'"');i[n]()}}))},t._clearMenus=function(n){if(!n||3!==n.which&&("keyup"!==n.type||9===n.which))for(var i=[].slice.call(document.querySelectorAll('[data-toggle="dropdown"]')),o=0,s=i.length;o0&&r--,40===n.which&&rdocument.documentElement.clientHeight;!this._isBodyOverflowing&&t&&(this._element.style.paddingLeft=this._scrollbarWidth+"px"),this._isBodyOverflowing&&!t&&(this._element.style.paddingRight=this._scrollbarWidth+"px")},n._resetAdjustments=function(){this._element.style.paddingLeft="",this._element.style.paddingRight=""},n._checkScrollbar=function(){var t=document.body.getBoundingClientRect();this._isBodyOverflowing=Math.round(t.left+t.right)
',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent",sanitize:!0,sanitizeFn:null,whiteList:F,popperConfig:null},Y={HIDE:"hide.bs.tooltip",HIDDEN:"hidden.bs.tooltip",SHOW:"show.bs.tooltip",SHOWN:"shown.bs.tooltip",INSERTED:"inserted.bs.tooltip",CLICK:"click.bs.tooltip",FOCUSIN:"focusin.bs.tooltip",FOCUSOUT:"focusout.bs.tooltip",MOUSEENTER:"mouseenter.bs.tooltip",MOUSELEAVE:"mouseleave.bs.tooltip"},$=function(){function t(t,e){if("undefined"==typeof n)throw new TypeError("Bootstrap's tooltips require Popper.js (https://popper.js.org/)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=t,this.config=this._getConfig(e),this.tip=null,this._setListeners()}var i=t.prototype;return i.enable=function(){this._isEnabled=!0},i.disable=function(){this._isEnabled=!1},i.toggleEnabled=function(){this._isEnabled=!this._isEnabled},i.toggle=function(t){if(this._isEnabled)if(t){var n=this.constructor.DATA_KEY,i=e(t.currentTarget).data(n);i||(i=new this.constructor(t.currentTarget,this._getDelegateConfig()),e(t.currentTarget).data(n,i)),i._activeTrigger.click=!i._activeTrigger.click,i._isWithActiveTrigger()?i._enter(null,i):i._leave(null,i)}else{if(e(this.getTipElement()).hasClass("show"))return void this._leave(null,this);this._enter(null,this)}},i.dispose=function(){clearTimeout(this._timeout),e.removeData(this.element,this.constructor.DATA_KEY),e(this.element).off(this.constructor.EVENT_KEY),e(this.element).closest(".modal").off("hide.bs.modal",this._hideModalHandler),this.tip&&e(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,this._activeTrigger=null,this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},i.show=function(){var t=this;if("none"===e(this.element).css("display"))throw new Error("Please use show on visible elements");var i=e.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){e(this.element).trigger(i);var o=c.findShadowRoot(this.element),s=e.contains(null!==o?o:this.element.ownerDocument.documentElement,this.element);if(i.isDefaultPrevented()||!s)return;var r=this.getTipElement(),a=c.getUID(this.constructor.NAME);r.setAttribute("id",a),this.element.setAttribute("aria-describedby",a),this.setContent(),this.config.animation&&e(r).addClass("fade");var l="function"==typeof this.config.placement?this.config.placement.call(this,r,this.element):this.config.placement,h=this._getAttachment(l);this.addAttachmentClass(h);var u=this._getContainer();e(r).data(this.constructor.DATA_KEY,this),e.contains(this.element.ownerDocument.documentElement,this.tip)||e(r).appendTo(u),e(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new n(this.element,r,this._getPopperConfig(h)),e(r).addClass("show"),"ontouchstart"in document.documentElement&&e(document.body).children().on("mouseover",null,e.noop);var d=function(){t.config.animation&&t._fixTransition();var n=t._hoverState;t._hoverState=null,e(t.element).trigger(t.constructor.Event.SHOWN),"out"===n&&t._leave(null,t)};if(e(this.tip).hasClass("fade")){var f=c.getTransitionDurationFromElement(this.tip);e(this.tip).one(c.TRANSITION_END,d).emulateTransitionEnd(f)}else d()}},i.hide=function(t){var n=this,i=this.getTipElement(),o=e.Event(this.constructor.Event.HIDE),s=function(){"show"!==n._hoverState&&i.parentNode&&i.parentNode.removeChild(i),n._cleanTipClass(),n.element.removeAttribute("aria-describedby"),e(n.element).trigger(n.constructor.Event.HIDDEN),null!==n._popper&&n._popper.destroy(),t&&t()};if(e(this.element).trigger(o),!o.isDefaultPrevented()){if(e(i).removeClass("show"),"ontouchstart"in document.documentElement&&e(document.body).children().off("mouseover",null,e.noop),this._activeTrigger.click=!1,this._activeTrigger.focus=!1,this._activeTrigger.hover=!1,e(this.tip).hasClass("fade")){var r=c.getTransitionDurationFromElement(i);e(i).one(c.TRANSITION_END,s).emulateTransitionEnd(r)}else s();this._hoverState=""}},i.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},i.isWithContent=function(){return Boolean(this.getTitle())},i.addAttachmentClass=function(t){e(this.getTipElement()).addClass("bs-tooltip-"+t)},i.getTipElement=function(){return this.tip=this.tip||e(this.config.template)[0],this.tip},i.setContent=function(){var t=this.getTipElement();this.setElementContent(e(t.querySelectorAll(".tooltip-inner")),this.getTitle()),e(t).removeClass("fade show")},i.setElementContent=function(t,n){"object"!=typeof n||!n.nodeType&&!n.jquery?this.config.html?(this.config.sanitize&&(n=H(n,this.config.whiteList,this.config.sanitizeFn)),t.html(n)):t.text(n):this.config.html?e(n).parent().is(t)||t.empty().append(n):t.text(e(n).text())},i.getTitle=function(){var t=this.element.getAttribute("data-original-title");return t||(t="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),t},i._getPopperConfig=function(t){var e=this;return a(a({},{placement:t,modifiers:{offset:this._getOffset(),flip:{behavior:this.config.fallbackPlacement},arrow:{element:".arrow"},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){return e._handlePopperPlacementChange(t)}}),this.config.popperConfig)},i._getOffset=function(){var t=this,e={};return"function"==typeof this.config.offset?e.fn=function(e){return e.offsets=a(a({},e.offsets),t.config.offset(e.offsets,t.element)||{}),e}:e.offset=this.config.offset,e},i._getContainer=function(){return!1===this.config.container?document.body:c.isElement(this.config.container)?e(this.config.container):e(document).find(this.config.container)},i._getAttachment=function(t){return K[t.toUpperCase()]},i._setListeners=function(){var t=this;this.config.trigger.split(" ").forEach((function(n){if("click"===n)e(t.element).on(t.constructor.Event.CLICK,t.config.selector,(function(e){return t.toggle(e)}));else if("manual"!==n){var i="hover"===n?t.constructor.Event.MOUSEENTER:t.constructor.Event.FOCUSIN,o="hover"===n?t.constructor.Event.MOUSELEAVE:t.constructor.Event.FOCUSOUT;e(t.element).on(i,t.config.selector,(function(e){return t._enter(e)})).on(o,t.config.selector,(function(e){return t._leave(e)}))}})),this._hideModalHandler=function(){t.element&&t.hide()},e(this.element).closest(".modal").on("hide.bs.modal",this._hideModalHandler),this.config.selector?this.config=a(a({},this.config),{},{trigger:"manual",selector:""}):this._fixTitle()},i._fixTitle=function(){var t=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==t)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},i._enter=function(t,n){var i=this.constructor.DATA_KEY;(n=n||e(t.currentTarget).data(i))||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),e(t.currentTarget).data(i,n)),t&&(n._activeTrigger["focusin"===t.type?"focus":"hover"]=!0),e(n.getTipElement()).hasClass("show")||"show"===n._hoverState?n._hoverState="show":(clearTimeout(n._timeout),n._hoverState="show",n.config.delay&&n.config.delay.show?n._timeout=setTimeout((function(){"show"===n._hoverState&&n.show()}),n.config.delay.show):n.show())},i._leave=function(t,n){var i=this.constructor.DATA_KEY;(n=n||e(t.currentTarget).data(i))||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),e(t.currentTarget).data(i,n)),t&&(n._activeTrigger["focusout"===t.type?"focus":"hover"]=!1),n._isWithActiveTrigger()||(clearTimeout(n._timeout),n._hoverState="out",n.config.delay&&n.config.delay.hide?n._timeout=setTimeout((function(){"out"===n._hoverState&&n.hide()}),n.config.delay.hide):n.hide())},i._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},i._getConfig=function(t){var n=e(this.element).data();return Object.keys(n).forEach((function(t){-1!==V.indexOf(t)&&delete n[t]})),"number"==typeof(t=a(a(a({},this.constructor.Default),n),"object"==typeof t&&t?t:{})).delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),c.typeCheckConfig(U,t,this.constructor.DefaultType),t.sanitize&&(t.template=H(t.template,t.whiteList,t.sanitizeFn)),t},i._getDelegateConfig=function(){var t={};if(this.config)for(var e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t},i._cleanTipClass=function(){var t=e(this.getTipElement()),n=t.attr("class").match(W);null!==n&&n.length&&t.removeClass(n.join(""))},i._handlePopperPlacementChange=function(t){this.tip=t.instance.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},i._fixTransition=function(){var t=this.getTipElement(),n=this.config.animation;null===t.getAttribute("x-placement")&&(e(t).removeClass("fade"),this.config.animation=!1,this.hide(),this.show(),this.config.animation=n)},t._jQueryInterface=function(n){return this.each((function(){var i=e(this).data("bs.tooltip"),o="object"==typeof n&&n;if((i||!/dispose|hide/.test(n))&&(i||(i=new t(this,o),e(this).data("bs.tooltip",i)),"string"==typeof n)){if("undefined"==typeof i[n])throw new TypeError('No method named "'+n+'"');i[n]()}}))},o(t,null,[{key:"VERSION",get:function(){return"4.5.0"}},{key:"Default",get:function(){return X}},{key:"NAME",get:function(){return U}},{key:"DATA_KEY",get:function(){return"bs.tooltip"}},{key:"Event",get:function(){return Y}},{key:"EVENT_KEY",get:function(){return".bs.tooltip"}},{key:"DefaultType",get:function(){return z}}]),t}();e.fn[U]=$._jQueryInterface,e.fn[U].Constructor=$,e.fn[U].noConflict=function(){return e.fn[U]=M,$._jQueryInterface};var J="popover",G=e.fn[J],Z=new RegExp("(^|\\s)bs-popover\\S+","g"),tt=a(a({},$.Default),{},{placement:"right",trigger:"click",content:"",template:''}),et=a(a({},$.DefaultType),{},{content:"(string|element|function)"}),nt={HIDE:"hide.bs.popover",HIDDEN:"hidden.bs.popover",SHOW:"show.bs.popover",SHOWN:"shown.bs.popover",INSERTED:"inserted.bs.popover",CLICK:"click.bs.popover",FOCUSIN:"focusin.bs.popover",FOCUSOUT:"focusout.bs.popover",MOUSEENTER:"mouseenter.bs.popover",MOUSELEAVE:"mouseleave.bs.popover"},it=function(t){var n,i;function s(){return t.apply(this,arguments)||this}i=t,(n=s).prototype=Object.create(i.prototype),n.prototype.constructor=n,n.__proto__=i;var r=s.prototype;return r.isWithContent=function(){return this.getTitle()||this._getContent()},r.addAttachmentClass=function(t){e(this.getTipElement()).addClass("bs-popover-"+t)},r.getTipElement=function(){return this.tip=this.tip||e(this.config.template)[0],this.tip},r.setContent=function(){var t=e(this.getTipElement());this.setElementContent(t.find(".popover-header"),this.getTitle());var n=this._getContent();"function"==typeof n&&(n=n.call(this.element)),this.setElementContent(t.find(".popover-body"),n),t.removeClass("fade show")},r._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},r._cleanTipClass=function(){var t=e(this.getTipElement()),n=t.attr("class").match(Z);null!==n&&n.length>0&&t.removeClass(n.join(""))},s._jQueryInterface=function(t){return this.each((function(){var n=e(this).data("bs.popover"),i="object"==typeof t?t:null;if((n||!/dispose|hide/.test(t))&&(n||(n=new s(this,i),e(this).data("bs.popover",n)),"string"==typeof t)){if("undefined"==typeof n[t])throw new TypeError('No method named "'+t+'"');n[t]()}}))},o(s,null,[{key:"VERSION",get:function(){return"4.5.0"}},{key:"Default",get:function(){return tt}},{key:"NAME",get:function(){return J}},{key:"DATA_KEY",get:function(){return"bs.popover"}},{key:"Event",get:function(){return nt}},{key:"EVENT_KEY",get:function(){return".bs.popover"}},{key:"DefaultType",get:function(){return et}}]),s}($);e.fn[J]=it._jQueryInterface,e.fn[J].Constructor=it,e.fn[J].noConflict=function(){return e.fn[J]=G,it._jQueryInterface};var ot="scrollspy",st=e.fn[ot],rt={offset:10,method:"auto",target:""},at={offset:"number",method:"string",target:"(string|element)"},lt=function(){function t(t,n){var i=this;this._element=t,this._scrollElement="BODY"===t.tagName?window:t,this._config=this._getConfig(n),this._selector=this._config.target+" .nav-link,"+this._config.target+" .list-group-item,"+this._config.target+" .dropdown-item",this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,e(this._scrollElement).on("scroll.bs.scrollspy",(function(t){return i._process(t)})),this.refresh(),this._process()}var n=t.prototype;return n.refresh=function(){var t=this,n=this._scrollElement===this._scrollElement.window?"offset":"position",i="auto"===this._config.method?n:this._config.method,o="position"===i?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),[].slice.call(document.querySelectorAll(this._selector)).map((function(t){var n,s=c.getSelectorFromElement(t);if(s&&(n=document.querySelector(s)),n){var r=n.getBoundingClientRect();if(r.width||r.height)return[e(n)[i]().top+o,s]}return null})).filter((function(t){return t})).sort((function(t,e){return t[0]-e[0]})).forEach((function(e){t._offsets.push(e[0]),t._targets.push(e[1])}))},n.dispose=function(){e.removeData(this._element,"bs.scrollspy"),e(this._scrollElement).off(".bs.scrollspy"),this._element=null,this._scrollElement=null,this._config=null,this._selector=null,this._offsets=null,this._targets=null,this._activeTarget=null,this._scrollHeight=null},n._getConfig=function(t){if("string"!=typeof(t=a(a({},rt),"object"==typeof t&&t?t:{})).target&&c.isElement(t.target)){var n=e(t.target).attr("id");n||(n=c.getUID(ot),e(t.target).attr("id",n)),t.target="#"+n}return c.typeCheckConfig(ot,t,at),t},n._getScrollTop=function(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop},n._getScrollHeight=function(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)},n._getOffsetHeight=function(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height},n._process=function(){var t=this._getScrollTop()+this._config.offset,e=this._getScrollHeight(),n=this._config.offset+e-this._getOffsetHeight();if(this._scrollHeight!==e&&this.refresh(),t>=n){var i=this._targets[this._targets.length-1];this._activeTarget!==i&&this._activate(i)}else{if(this._activeTarget&&t0)return this._activeTarget=null,void this._clear();for(var o=this._offsets.length;o--;){this._activeTarget!==this._targets[o]&&t>=this._offsets[o]&&("undefined"==typeof this._offsets[o+1]||t li > .active":".active";i=(i=e.makeArray(e(o).find(r)))[i.length-1]}var a=e.Event("hide.bs.tab",{relatedTarget:this._element}),l=e.Event("show.bs.tab",{relatedTarget:i});if(i&&e(i).trigger(a),e(this._element).trigger(l),!l.isDefaultPrevented()&&!a.isDefaultPrevented()){s&&(n=document.querySelector(s)),this._activate(this._element,o);var h=function(){var n=e.Event("hidden.bs.tab",{relatedTarget:t._element}),o=e.Event("shown.bs.tab",{relatedTarget:i});e(i).trigger(n),e(t._element).trigger(o)};n?this._activate(n,n.parentNode,h):h()}}},n.dispose=function(){e.removeData(this._element,"bs.tab"),this._element=null},n._activate=function(t,n,i){var o=this,s=(!n||"UL"!==n.nodeName&&"OL"!==n.nodeName?e(n).children(".active"):e(n).find("> li > .active"))[0],r=i&&s&&e(s).hasClass("fade"),a=function(){return o._transitionComplete(t,s,i)};if(s&&r){var l=c.getTransitionDurationFromElement(s);e(s).removeClass("show").one(c.TRANSITION_END,a).emulateTransitionEnd(l)}else a()},n._transitionComplete=function(t,n,i){if(n){e(n).removeClass("active");var o=e(n.parentNode).find("> .dropdown-menu .active")[0];o&&e(o).removeClass("active"),"tab"===n.getAttribute("role")&&n.setAttribute("aria-selected",!1)}if(e(t).addClass("active"),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!0),c.reflow(t),t.classList.contains("fade")&&t.classList.add("show"),t.parentNode&&e(t.parentNode).hasClass("dropdown-menu")){var s=e(t).closest(".dropdown")[0];if(s){var r=[].slice.call(s.querySelectorAll(".dropdown-toggle"));e(r).addClass("active")}t.setAttribute("aria-expanded",!0)}i&&i()},t._jQueryInterface=function(n){return this.each((function(){var i=e(this),o=i.data("bs.tab");if(o||(o=new t(this),i.data("bs.tab",o)),"string"==typeof n){if("undefined"==typeof o[n])throw new TypeError('No method named "'+n+'"');o[n]()}}))},o(t,null,[{key:"VERSION",get:function(){return"4.5.0"}}]),t}();e(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',(function(t){t.preventDefault(),ht._jQueryInterface.call(e(this),"show")})),e.fn.tab=ht._jQueryInterface,e.fn.tab.Constructor=ht,e.fn.tab.noConflict=function(){return e.fn.tab=ct,ht._jQueryInterface};var ut=e.fn.toast,dt={animation:"boolean",autohide:"boolean",delay:"number"},ft={animation:!0,autohide:!0,delay:500},gt=function(){function t(t,e){this._element=t,this._config=this._getConfig(e),this._timeout=null,this._setListeners()}var n=t.prototype;return n.show=function(){var t=this,n=e.Event("show.bs.toast");if(e(this._element).trigger(n),!n.isDefaultPrevented()){this._config.animation&&this._element.classList.add("fade");var i=function(){t._element.classList.remove("showing"),t._element.classList.add("show"),e(t._element).trigger("shown.bs.toast"),t._config.autohide&&(t._timeout=setTimeout((function(){t.hide()}),t._config.delay))};if(this._element.classList.remove("hide"),c.reflow(this._element),this._element.classList.add("showing"),this._config.animation){var o=c.getTransitionDurationFromElement(this._element);e(this._element).one(c.TRANSITION_END,i).emulateTransitionEnd(o)}else i()}},n.hide=function(){if(this._element.classList.contains("show")){var t=e.Event("hide.bs.toast");e(this._element).trigger(t),t.isDefaultPrevented()||this._close()}},n.dispose=function(){clearTimeout(this._timeout),this._timeout=null,this._element.classList.contains("show")&&this._element.classList.remove("show"),e(this._element).off("click.dismiss.bs.toast"),e.removeData(this._element,"bs.toast"),this._element=null,this._config=null},n._getConfig=function(t){return t=a(a(a({},ft),e(this._element).data()),"object"==typeof t&&t?t:{}),c.typeCheckConfig("toast",t,this.constructor.DefaultType),t},n._setListeners=function(){var t=this;e(this._element).on("click.dismiss.bs.toast",'[data-dismiss="toast"]',(function(){return t.hide()}))},n._close=function(){var t=this,n=function(){t._element.classList.add("hide"),e(t._element).trigger("hidden.bs.toast")};if(this._element.classList.remove("show"),this._config.animation){var i=c.getTransitionDurationFromElement(this._element);e(this._element).one(c.TRANSITION_END,n).emulateTransitionEnd(i)}else n()},t._jQueryInterface=function(n){return this.each((function(){var i=e(this),o=i.data("bs.toast");if(o||(o=new t(this,"object"==typeof n&&n),i.data("bs.toast",o)),"string"==typeof n){if("undefined"==typeof o[n])throw new TypeError('No method named "'+n+'"');o[n](this)}}))},o(t,null,[{key:"VERSION",get:function(){return"4.5.0"}},{key:"DefaultType",get:function(){return dt}},{key:"Default",get:function(){return ft}}]),t}();e.fn.toast=gt._jQueryInterface,e.fn.toast.Constructor=gt,e.fn.toast.noConflict=function(){return e.fn.toast=ut,gt._jQueryInterface},t.Alert=d,t.Button=g,t.Carousel=E,t.Collapse=D,t.Dropdown=j,t.Modal=R,t.Popover=it,t.Scrollspy=lt,t.Tab=ht,t.Toast=gt,t.Tooltip=$,t.Util=c,Object.defineProperty(t,"__esModule",{value:!0})}));
--------------------------------------------------------------------------------
/assets/plugins/instagram-feed/instagram-feed.js:
--------------------------------------------------------------------------------
1 | !function(e,t){"function"==typeof define&&define.amd?define([],t):"object"==typeof exports&&"string"!=typeof exports.nodeName?module.exports=t():e.Instafeed=t()}(this,function(){function e(e,t){if(!e)throw new Error(t)}function t(t){e(!t||"object"==typeof t,"options must be an object, got "+t+" ("+typeof t+")");var o={accessToken:null,accessTokenTimeout:1e4,after:null,apiTimeout:1e4,before:null,debug:!1,error:null,filter:null,limit:null,mock:!1,render:null,sort:null,success:null,target:"instafeed",template:' ',templateBoundaries:["{{","}}"],transform:null};if(t)for(var n in o)void 0!==t[n]&&(o[n]=t[n]);e("string"==typeof o.target||"object"==typeof o.target,"target must be a string or DOM node, got "+o.target+" ("+typeof o.target+")"),e("string"==typeof o.accessToken||"function"==typeof o.accessToken,"accessToken must be a string or function, got "+o.accessToken+" ("+typeof o.accessToken+")"),e("number"==typeof o.accessTokenTimeout,"accessTokenTimeout must be a number, got "+o.accessTokenTimeout+" ("+typeof o.accessTokenTimeout+")"),e("number"==typeof o.apiTimeout,"apiTimeout must be a number, got "+o.apiTimeout+" ("+typeof o.apiTimeout+")"),e("boolean"==typeof o.debug,"debug must be true or false, got "+o.debug+" ("+typeof o.debug+")"),e("boolean"==typeof o.mock,"mock must be true or false, got "+o.mock+" ("+typeof o.mock+")"),e("object"==typeof o.templateBoundaries&&2===o.templateBoundaries.length&&"string"==typeof o.templateBoundaries[0]&&"string"==typeof o.templateBoundaries[1],"templateBoundaries must be an array of 2 strings, got "+o.templateBoundaries+" ("+typeof o.templateBoundaries+")"),e(!o.template||"string"==typeof o.template,"template must null or string, got "+o.template+" ("+typeof o.template+")"),e(!o.error||"function"==typeof o.error,"error must be null or function, got "+o.error+" ("+typeof o.error+")"),e(!o.before||"function"==typeof o.before,"before must be null or function, got "+o.before+" ("+typeof o.before+")"),e(!o.after||"function"==typeof o.after,"after must be null or function, got "+o.after+" ("+typeof o.after+")"),e(!o.success||"function"==typeof o.success,"success must be null or function, got "+o.success+" ("+typeof o.success+")"),e(!o.filter||"function"==typeof o.filter,"filter must be null or function, got "+o.filter+" ("+typeof o.filter+")"),e(!o.transform||"function"==typeof o.transform,"transform must be null or function, got "+o.transform+" ("+typeof o.transform+")"),e(!o.sort||"function"==typeof o.sort,"sort must be null or function, got "+o.sort+" ("+typeof o.sort+")"),e(!o.render||"function"==typeof o.render,"render must be null or function, got "+o.render+" ("+typeof o.render+")"),e(!o.limit||"number"==typeof o.limit,"limit must be null or number, got "+o.limit+" ("+typeof o.limit+")"),this._state={running:!1},this._options=o}return t.prototype.run=function(){var e=this,t=null,o=null,n=null,r=null;return this._debug("run","options",this._options),this._debug("run","state",this._state),this._state.running?(this._debug("run","already running, skipping"),!1):(this._start(),this._debug("run","getting dom node"),(t="string"==typeof this._options.target?document.getElementById(this._options.target):this._options.target)?(this._debug("run","got dom node",t),this._debug("run","getting access token"),this._getAccessToken(function(s,i){if(s)return e._debug("onTokenReceived","error",s),void e._fail(new Error("error getting access token: "+s.message));o="https://graph.instagram.com/me/media?fields=caption,id,media_type,media_url,permalink,thumbnail_url,timestamp,username&access_token="+i,e._debug("onTokenReceived","request url",o),e._makeApiRequest(o,function(o,s){if(o)return e._debug("onResponseReceived","error",o),void e._fail(new Error("api request error: "+o.message));e._debug("onResponseReceived","data",s),e._success(s);try{n=e._processData(s),e._debug("onResponseReceived","processed data",n)}catch(t){return void e._fail(t)}if(e._options.mock)e._debug("onResponseReceived","mock enabled, skipping render");else{try{r=e._renderData(n),e._debug("onResponseReceived","html content",r)}catch(t){return void e._fail(t)}t.innerHTML=r}e._finish()})}),!0):(this._fail(new Error("no element found with ID "+this._options.target)),!1))},t.prototype._processData=function(e){var t="function"==typeof this._options.transform,o="function"==typeof this._options.filter,n="function"==typeof this._options.sort,r="number"==typeof this._options.limit,s=[],i=null,a=null,u=null,c=null;if(this._debug("processData","hasFilter",o,"hasTransform",t,"hasSort",n,"hasLimit",r),"object"!=typeof e||"object"!=typeof e.data||e.data.length<=0)return null;for(var l=0;l0&&s.splice(s.length-i,i)),s},t.prototype._extractTags=function(e){var t=/#([^\s]+)/gi,o=/[~`!@#$%^&*\(\)\-\+={}\[\]:;"'<>\?,\.\/|\\\s]+/i,n=[];if("string"==typeof e)for(;null!==(match=t.exec(e));)!1===o.test(match[1])&&n.push(match[1]);return n},t.prototype._getItemData=function(e){var t=null,o=null;switch(e.media_type){case"IMAGE":t="image",o=e.media_url;break;case"VIDEO":t="video",o=e.thumbnail_url;break;case"CAROUSEL_ALBUM":t="album",o=e.media_url}return{caption:e.caption,tags:this._extractTags(e.caption),id:e.id,image:o,link:e.permalink,model:e,timestamp:e.timestamp,type:t,username:e.username}},t.prototype._renderData=function(e){var t="string"==typeof this._options.template,o="function"==typeof this._options.render,n=null,r=null,s="";if(this._debug("renderData","hasTemplate",t,"hasRender",o),"object"!=typeof e||e.length<=0)return null;for(var i=0;i=0)try{o=JSON.parse(r.responseText)}catch(e){return n._debug("apiRequestOnLoad","json parsing error",e,r.responseText),void s(new Error("error parsing response json"))}200===r.status?s(null,o):o&&o.error?s(new Error(o.error.code+" "+o.error.message)):s(new Error("status code "+r.status))},r.open("GET",e,!0),r.timeout=this._options.apiTimeout,r.send()},t.prototype._getAccessToken=function(e){var t=!1,o=this,n=null,r=function(o,r){t||(t=!0,clearTimeout(n),e(o,r))};if("function"==typeof this._options.accessToken){this._debug("getAccessToken","calling accessToken as function"),n=setTimeout(function(){o._debug("getAccessToken","timeout check",t),r(new Error("accessToken timed out"),null)},this._options.accessTokenTimeout);try{this._options.accessToken(function(e,n){o._debug("getAccessToken","received accessToken callback",t,e,n),r(e,n)})}catch(e){this._debug("getAccessToken","error invoking the accessToken as function",e),r(e,null)}}else this._debug("getAccessToken","treating accessToken as static",typeof this._options.accessToken),r(null,this._options.accessToken)},t.prototype._debug=function(){var e=null;this._options.debug&&console&&"function"==typeof console.log&&((e=[].slice.call(arguments))[0]="[Instafeed] ["+e[0]+"]",console.log.apply(null,e))},t.prototype._runHook=function(e,t){var o=!1;if("function"==typeof this._options[e])try{this._options[e](t),o=!0}catch(t){this._debug("runHook","error calling hook",e,t)}return o},t});
--------------------------------------------------------------------------------
/assets/scss/_buttons.scss:
--------------------------------------------------------------------------------
1 | /* Button style */
2 | // ====================================
3 | .btn {
4 | font-size: 1rem;
5 | font-family: $font-primary;
6 | text-transform: capitalize;
7 | padding: .75em 1.75em;
8 | border-radius: 8px;
9 | border: 1px solid;
10 | position: relative;
11 | z-index: 1;
12 | transition: .2s ease;
13 | @include desktop-lg {
14 | font-size: 0.9rem;
15 | }
16 |
17 | &:active,
18 | &:focus {
19 | border: 0;
20 | box-shadow: none !important;
21 | }
22 |
23 | &:hover {
24 | box-shadow: 0px 10px 25px rgba($black, 0.1);
25 | border-color: inherit !important;
26 | }
27 |
28 | &.btn-sm {
29 | padding: 0.625em 1.125;
30 | }
31 |
32 | &.btn-lg {
33 | padding: 1em 2em;
34 | @include desktop-lg {
35 | padding: .75em 1.75em;
36 | }
37 | }
38 |
39 | &.btn-primary {
40 | background-color: $color-primary !important;
41 | border: 2px solid $color-primary;
42 | &:hover,
43 | &:active,
44 | &:focus {
45 | color: $white;
46 | }
47 | }
48 |
49 | &.btn-outline-primary {
50 | color: $color-primary;
51 | border: 1px solid $color-primary;
52 | background-color: transparent !important;
53 | &::after {
54 | background-color: $color-primary !important;
55 | }
56 | &:hover,
57 | &:active,
58 | &:focus {
59 | color: $white;
60 | background-color: $color-primary !important;
61 | }
62 | }
63 | }
--------------------------------------------------------------------------------
/assets/scss/_common.scss:
--------------------------------------------------------------------------------
1 | body {
2 | color: $gray;
3 | background-color: $white;
4 | font-family: $font-primary;
5 | font-weight: 500;
6 | font-size: 16px;
7 | line-height: 1.65;
8 | }
9 |
10 | ::selection {
11 | color: $white;
12 | background-color: darken($color-primary, 5);
13 | text-shadow: none;
14 | }
15 |
16 | :focus {
17 | outline: 0;
18 | }
19 |
20 | .mark,
21 | mark {
22 | border-bottom: 1px dashed rgba($color-primary, 0.4);
23 | background: transparent;
24 | padding: 0;
25 | color: $color-primary;
26 | }
27 |
28 | a:focus,
29 | button:focus {
30 | outline: 0;
31 | }
32 |
33 | a {
34 | color: $gray;
35 | transition: all .3s;
36 | text-decoration: none;
37 |
38 | &:hover {
39 | text-decoration: none;
40 | color: $color-primary;
41 | }
42 | }
43 |
44 | ul,
45 | li {
46 | padding: 0;
47 | margin: 0;
48 | list-style-position: inside;
49 | }
50 |
51 | p {
52 | color: $gray;
53 | }
54 |
55 | // preloader
56 | // ====================================
57 | .preloader {
58 | position: fixed;
59 | top: 0;
60 | left: 0;
61 | background-color: $white;
62 | z-index: 9999;
63 | height: 100%;
64 | width: 100%;
65 | }
66 |
67 | // default styles
68 | // ====================================
69 | .section {
70 | padding: 120px 0;
71 |
72 | &-sm {
73 | padding: 90px 0;
74 | }
75 | }
76 |
77 |
78 | // social-links
79 | // ====================================
80 | .social-links {
81 | a {
82 | font-size: 18px;
83 | padding: 7px;
84 | color: rgba($black, .8);
85 | display: inline-block;
86 |
87 | &:hover {
88 | color: $color-primary;
89 | }
90 | }
91 |
92 | &.icon-box li a {
93 | height: 45px;
94 | width: 45px;
95 | line-height: 45px;
96 | border: 1px solid #ddd;
97 | padding: 0;
98 | @extend .rounded;
99 | }
100 | }
101 |
102 |
103 | // card style
104 | // ====================================
105 | .card.post-card {
106 | border-radius: 0px;
107 | border: 0;
108 | margin-bottom: 70px;
109 |
110 | .card-body {
111 | margin-top: 30px;
112 | padding: 0;
113 | }
114 | }
115 |
116 | .post-title {
117 | font-weight: 800;
118 | color: $dark;
119 | display: inline-block;
120 | }
121 |
122 | a.post-title:hover,
123 | .post-title:hover a {
124 | color: $color-primary;
125 | }
126 |
127 | .card-meta {
128 | font-weight: 500;
129 |
130 | > li {
131 | line-height: 1;
132 | vertical-align: middle;
133 | span {
134 | color: $gray;
135 | }
136 | }
137 |
138 | .list-inline-item:not(:last-child) {
139 | margin-right: 1rem;
140 | }
141 |
142 | .card-meta-author {
143 | display: inline-block;
144 |
145 | &:hover span {
146 | color: $color-primary;
147 | }
148 |
149 | img {
150 | border-radius: 50%;
151 | width: 26px;
152 | height: 26px;
153 | margin-right: 6px;
154 | object-fit: cover;
155 | }
156 |
157 | span {
158 | vertical-align: middle;
159 | }
160 | }
161 |
162 | .card-meta-tag {
163 | .list-inline-item:not(:last-child) {
164 | margin-right: .5rem;
165 | }
166 |
167 | a {
168 | color: $gray;
169 |
170 | &::before {
171 | content: "#";
172 | }
173 |
174 | &:hover {
175 | color: $color-primary;
176 | }
177 | }
178 | }
179 | }
180 |
181 | // taxonomies-list
182 | // ====================================
183 | .taxonomies-list {
184 | li a:hover {
185 | background-color: $color-primary !important;
186 | color: $white;
187 | }
188 | }
189 |
190 | // widget
191 | // ====================================
192 | .widget {
193 | margin-bottom: 35px;
194 |
195 | &-title {
196 | margin-bottom: 15px;
197 | font-size: 20px;
198 | font-weight: 600;
199 | color: #000;
200 | text-decoration-color: #999;
201 | }
202 |
203 | .widget-list li a {
204 | padding: 10px 15px;
205 | margin-bottom: 2px;
206 | border-radius: 8px;
207 | background-color: #f8f8f8;
208 | }
209 |
210 | .widget-list-inline li {
211 | margin-right: 3px;
212 |
213 | a {
214 | display: inline-block;
215 | padding: 5px 15px !important;
216 | margin-bottom: 5px !important;
217 | }
218 | }
219 | }
220 |
221 | // content style
222 | // ====================================
223 | .cookie-box {
224 | border-radius: 10px !important;
225 | .btn {
226 | border-radius: 8px;
227 | padding: 8px 20px;
228 | }
229 | }
230 |
231 | .content {
232 |
233 | * {
234 | word-break: break-word;
235 | overflow-wrap: break-word;
236 | }
237 |
238 | details.table-of-content {
239 | padding: 12px 15px;
240 | border: 1px solid rgba(0, 0, 0, 0.2);
241 | margin-bottom: 20px;
242 | border-radius: 7px;
243 |
244 | ul {
245 | margin-top: 10px;
246 | }
247 | }
248 |
249 | .accordion {
250 | margin-bottom: 10px;
251 | border-radius: 6px;
252 | border-color: $border-color;
253 | &-collapse {
254 | border-top-color: $border-color;
255 | }
256 | }
257 |
258 | img {
259 | border-radius: 8px;
260 | }
261 |
262 | h1,
263 | h2,
264 | h3,
265 | h4,
266 | h5,
267 | h6 {
268 | font-weight: 600;
269 | }
270 |
271 | strong {
272 | font-weight: 600;
273 | }
274 |
275 | a {
276 | color: $text-color;
277 | border-bottom: 1px dotted $border-color;
278 |
279 | &:hover {
280 | color: $color-primary;
281 | }
282 | }
283 |
284 | ol,
285 | ul {
286 | padding-left: 1.25rem;
287 |
288 | li {
289 | margin-bottom: 0.62rem;
290 | }
291 | }
292 |
293 | ul {
294 | padding-left: 0;
295 | margin-bottom: 1.25rem;
296 | list-style-type: none;
297 |
298 | li {
299 | padding-left: 1.25rem;
300 | position: relative;
301 |
302 | &::before {
303 | position: absolute;
304 | content: '';
305 | height: 0.5rem;
306 | width: 0.5rem;
307 | border-radius: 50%;
308 | background: $color-primary;
309 | left: 3px;
310 | top: 0.5rem;
311 | }
312 | }
313 |
314 | }
315 |
316 | .quote i {
317 | font-size: 30px;
318 | margin-right: 20px;
319 | }
320 |
321 | table {
322 | width: 100%;
323 | max-width: 100%;
324 | margin-bottom: 1rem;
325 | border: 1px solid $border-color;
326 | border-collapse: initial;
327 | border-spacing: 0;
328 | border-radius: 8px;
329 | overflow: hidden;
330 | }
331 |
332 | table td,
333 | table th {
334 | padding: .75rem;
335 | vertical-align: top;
336 | margin-bottom: 0;
337 | &:not(:last-child) {
338 | border-right: 1px solid $border-color !important;
339 | }
340 | }
341 |
342 | th {
343 | color: $black;
344 | }
345 |
346 | thead {
347 | background: $light;
348 | margin-bottom: 0;
349 | }
350 |
351 | tbody {
352 | background: lighten($color: $light, $amount: 5);
353 | margin-bottom: 0;
354 | td {
355 | border-top: 1px solid $border-color !important;
356 | }
357 | }
358 |
359 | .notices {
360 | margin: 2rem 0;
361 | position: relative;
362 | overflow: hidden;
363 | border-radius: 8px;
364 | }
365 |
366 | .notices p {
367 | padding: 0.62rem;
368 | margin-bottom: 0;
369 | }
370 |
371 | .notices p::before {
372 | content: "\f05a";
373 | top: 2px;
374 | left: 0.62rem;
375 | color: $white;
376 | font-weight: 900;
377 | position: absolute;
378 | font-family: $font-icon;
379 | border: none;
380 | }
381 |
382 | .notices p::after {
383 | left: 2.2rem !important;
384 | }
385 |
386 | .notices.note p {
387 | border-top: 30px solid #6ab0de;
388 | background: $light;
389 | }
390 |
391 | .notices.note p::after {
392 | content: 'Note';
393 | position: absolute;
394 | top: 2px;
395 | color: $white;
396 | left: 2rem;
397 | }
398 |
399 | .notices.tip p {
400 | border-top: 30px solid #78C578;
401 | background: $light;
402 | }
403 |
404 | .notices.tip p::after {
405 | content: 'Tip';
406 | position: absolute;
407 | top: 2px;
408 | color: $white;
409 | left: 2rem;
410 | }
411 |
412 | .notices.info p {
413 | border-top: 30px solid #F0B37E;
414 | background: $light;
415 | }
416 |
417 | .notices.info p::after {
418 | content: 'Info';
419 | position: absolute;
420 | top: 2px;
421 | color: $white;
422 | left: 2rem;
423 | }
424 |
425 |
426 | .notices.warning p {
427 | border-top: 30px solid #E06F6C;
428 | background: $light;
429 | }
430 |
431 | .notices.warning p::after {
432 | content: 'Warning';
433 | position: absolute;
434 | top: 2px;
435 | color: #fff;
436 | left: 2rem;
437 | }
438 |
439 | blockquote {
440 | color: $text-color;
441 | padding: 1.25rem 2.5rem;
442 | border-left: 2px solid $color-primary;
443 | margin: 2.5rem 0;
444 | font-weight: bold;
445 | background: $light;
446 |
447 | p {
448 | font-size: 1.25rem !important;
449 | margin-bottom: 0 !important;
450 | }
451 | }
452 |
453 | pre {
454 | display: block;
455 | padding: 10px 16px;
456 | margin: 10px 0px 0.62rem;
457 | white-space: pre-wrap;
458 | border-radius: 8px;
459 | }
460 |
461 | code {
462 | margin-bottom: 0 !important;
463 | font-size: 100%;
464 | }
465 | }
466 |
467 | .tab-panel {
468 | border: 1px solid $border-color;
469 | border-radius: 8px;
470 | overflow: hidden;
471 |
472 | .tab-nav {
473 | button {
474 | border: none;
475 | }
476 | }
477 | .tab-content {
478 | border: 0;
479 | border-top: 1px solid #e5e5e5;
480 | padding: 10px 15px;
481 | }
482 | }
483 |
484 | .glightbox img,
485 | video,
486 | iframe,
487 | .embed-responsive {
488 | border-radius: 8px;
489 | }
490 |
491 | // pagination
492 | // ====================================
493 | .pagination {
494 | .page-link {
495 | padding: 0;
496 | margin-left: 0;
497 | color: $dark;
498 | border: 0;
499 | margin: 0 4px;
500 | height: 48px;
501 | width: 48px;
502 | line-height: 48px;
503 | text-align: center;
504 | font-weight: 700;
505 |
506 | &.active,
507 | &:focus,
508 | &:hover {
509 | box-shadow: none;
510 | color: $white;
511 | background-color: $color-primary;
512 | }
513 |
514 | &.arrow {
515 | font-size: 26px;
516 | width: auto;
517 |
518 | &:hover {
519 | color: $color-primary;
520 | background-color: $white;
521 | }
522 | }
523 | }
524 |
525 | .page-item.active {
526 | .page-link {
527 | box-shadow: none;
528 | color: $white;
529 | background-color: $color-primary;
530 | }
531 | }
532 | }
533 |
534 | // breadcrumb
535 | // ====================================
536 | .breadcrumb-menu {
537 | display: inline-block;
538 | padding-top: 18px;
539 | border-top: 1px solid $color-primary;
540 | }
541 |
542 | // form-control
543 | // ====================================
544 | .form-control {
545 | padding: 0;
546 | border: 0;
547 | border: 1px solid #e6e6e6;
548 | border-radius: 0 !important;
549 | height: 50px;
550 | padding: 12px 16px;
551 | font-size: 17px;
552 | font-weight: 500;
553 | transition: .3s ease;
554 |
555 | &:focus {
556 | box-shadow: none;
557 | color: $dark;
558 | border-color: $color-primary;
559 |
560 | ~.input-group-append {
561 | .input-group-text {
562 | border-color: $color-primary;
563 | }
564 | }
565 | }
566 | }
567 |
568 | textarea {
569 | resize: none;
570 | min-height: 150px !important;
571 | }
572 |
573 | .input-group-text {
574 | background-color: transparent;
575 | border-bottom: 1px solid #999;
576 | border-radius: 0 !important;
577 | transition: .3s ease;
578 |
579 | .icon {
580 | font-size: 22px;
581 | }
582 | }
583 |
584 | button {
585 | line-height: 1.75;
586 | }
587 |
588 | button.input-group-text {
589 | &:hover {
590 | color: $color-primary;
591 | }
592 | }
593 |
594 | .custom-control-label {
595 | user-select: none;
596 | cursor: text;
597 | line-height: 1.45;
598 |
599 | &::before {
600 | cursor: pointer;
601 | border-radius: 0;
602 | box-shadow: none !important;
603 | }
604 | }
605 |
606 | .custom-checkbox {
607 | margin-top: 15px;
608 |
609 | .custom-control-label::before {
610 | border-radius: 0;
611 | }
612 |
613 | .custom-control-input:checked~.custom-control-label::before,
614 | .custom-control-input:not(:disabled):active~.custom-control-label::before {
615 | background-color: $color-primary;
616 | border-color: $color-primary;
617 | }
618 |
619 | .custom-control-input:focus:not(:checked)~.custom-control-label::before {
620 | border-color: transparent;
621 | }
622 |
623 | .custom-control-input:disabled:checked~.custom-control-label::before {
624 | background-color: rgba($color-primary, .5);
625 | border-color: rgba($color-primary, .2);
626 | }
627 | }
628 |
629 | /*------------------------------------------------------------------
630 | # helper classes
631 | -------------------------------------------------------------------*/
632 | .font-primary {
633 | font-family: $font-primary
634 | }
635 |
636 | .rounded {
637 | border-radius: 10px !important;
638 | overflow: hidden;
639 | }
640 |
641 | .fw-500 {
642 | font-weight: 500
643 | }
644 |
645 | .fw-700 {
646 | font-weight: 700
647 | }
648 |
649 | .fw-800 {
650 | font-weight: 800
651 | }
652 |
653 | .text-primary {
654 | color: $color-primary !important
655 | }
656 |
657 | a.text-primary:hover {
658 | color: darken($color-primary, 10) !important
659 | }
660 |
661 | .bg-primary {
662 | background-color: $color-primary !important
663 | }
664 |
665 | .text-dark {
666 | color: $dark
667 | }
668 |
669 | a.text-dark:hover {
670 | color: $color-primary !important
671 | }
672 |
673 | .bg-light {
674 | background-color: $light !important
675 | }
676 |
677 | .bg-dark {
678 | background-color: $dark !important
679 | }
680 |
681 | .text-gray:hover {
682 | color: $color-primary;
683 | }
684 |
685 | // footer
686 | // ====================================
687 | footer {
688 | background-color: $dark;
689 |
690 | .icon-box a {
691 | color: rgba($white, .7);
692 |
693 | &:hover {
694 | color: $white;
695 | background-color: $color-primary;
696 | border-color: $color-primary;
697 | }
698 | }
699 | }
700 |
701 | .footer-menu {
702 | li a {
703 | color: rgba($white, .7);
704 |
705 | &:hover {
706 | color: $color-primary;
707 | text-decoration: underline;
708 | }
709 | }
710 | }
711 |
712 | .copyright-text {
713 | color: rgba($white, .7);
714 |
715 | a {
716 | color: rgba($white, .7);
717 | }
718 | }
719 |
720 | // Accordions
721 | // ====================================
722 | .accordion {
723 | --bs-accordion-active-color: $text-dark;
724 | --bs-accordion-active-bg: transparent;
725 | --bs-accordion-active-color: $text-dark;
726 | --bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='var%28--bs-body-color%29'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");
727 |
728 | border-radius: 0px;
729 | background-color: transparent;
730 | box-shadow: none;
731 | margin-bottom: -1px;
732 | border: 1px solid rgba($text-dark, 0.5);
733 |
734 | &-button {
735 | box-shadow: none !important;
736 | padding: 10px 14px !important;
737 | }
738 |
739 | &-button::after {
740 | transform: scale(0.8);
741 | }
742 |
743 | &-button:not(.collapsed)::after {
744 | transform: scale(0.8) rotate(180deg);
745 | }
746 |
747 | &-item {
748 | border: none;
749 | }
750 |
751 | &-collapse {
752 | border-top: 1px solid $border-color;
753 | }
754 | }
755 |
756 | // Tab
757 | .tab-nav .tab-nav-button {
758 | background-color: $light;
759 | margin-bottom: 0px;
760 | margin-left: 0px;
761 | border-bottom: 0px;
762 | }
763 |
764 | .tab-content {
765 | border: 1px solid $border-color;
766 | padding: 20px;
767 | }
768 |
769 | // Gallery
770 | // ====================================
771 | .gallery a {
772 | border: 0px;
773 | }
774 |
775 | // Remove Cross Icon form input type search
776 | input[type="search"]::-webkit-search-decoration,
777 | input[type="search"]::-webkit-search-cancel-button,
778 | input[type="search"]::-webkit-search-results-button,
779 | input[type="search"]::-webkit-search-results-decoration {
780 | display: none;
781 | }
--------------------------------------------------------------------------------
/assets/scss/_mixins.scss:
--------------------------------------------------------------------------------
1 | @mixin mobile-xs{
2 | @media(max-width:400px){
3 | @content;
4 | }
5 | }
6 | @mixin mobile{
7 | @media(max-width:575px){
8 | @content;
9 | }
10 | }
11 | @mixin tablet{
12 | @media(max-width:767px){
13 | @content;
14 | }
15 | }
16 | @mixin desktop{
17 | @media(max-width:991px){
18 | @content;
19 | }
20 | }
21 | @mixin desktop-lg{
22 | @media(max-width:1200px){
23 | @content;
24 | }
25 | }
26 | @mixin desktop-xl {
27 | @media(max-width:1466px) {
28 | @content;
29 | }
30 | }
31 |
32 | @mixin size($size){
33 | width: $size; height: $size;
34 | }
--------------------------------------------------------------------------------
/assets/scss/_typography.scss:
--------------------------------------------------------------------------------
1 | /* typography */
2 |
3 | html {
4 | font-size: $font-size;
5 | }
6 |
7 | body {
8 | font-family: $font-primary;
9 | font-weight: 400;
10 | line-height: 1.75;
11 | color: $text-color;
12 | }
13 |
14 | p {
15 | margin-bottom: 1rem;
16 | }
17 |
18 | h1,
19 | h2,
20 | h3,
21 | h4,
22 | h5,
23 | h6 {
24 | font-family: $font-primary;
25 | font-weight: 100;
26 | color: $text-dark;
27 | }
28 |
29 | small,
30 | .small {
31 | font-size: 0.8rem;
32 | }
33 |
34 | // List in descending order to prevent extra sort function
35 | $type-levels: 6,5,4,3,2,1;
36 |
37 | @each $level in $type-levels {
38 | $font-size: $font-size * $font-scale;
39 |
40 | // Output heading styles
41 | h#{$level},
42 | .h#{$level} {
43 | font-size: $font-size;
44 | line-height: calc(10px + 2ex + 2px);
45 | margin-bottom: 0.65em;
46 |
47 | // responsive for h1, h2, h3, h4
48 | &:not(h5, .h5, h6, .h6) {
49 |
50 | @include desktop {
51 | font-size: calc(#{$font-size} * .90);
52 | margin-bottom: 0.55em;
53 | }
54 |
55 | @include tablet {
56 | font-size: calc(#{$font-size} * .80);
57 | }
58 | }
59 |
60 |
61 | // responsive for h5, h6
62 | @include desktop {
63 | font-size: calc(#{$font-size} * .95);
64 | margin-bottom: 0.55em;
65 | }
66 |
67 | @include tablet {
68 | font-size: calc(#{$font-size} * .90);
69 | }
70 | }
71 | }
--------------------------------------------------------------------------------
/assets/scss/style.scss:
--------------------------------------------------------------------------------
1 | // Color Variables
2 | {{ with site.Params.variables }}
3 | $color-primary: {{.color_primary | default "#777"}};
4 | $color-secondary: {{.color_secondary | default "#0AA8A7"}};
5 | $text-color: {{.text_color | default "#777"}};
6 | $text-dark: {{.text_dark | default "#222"}};
7 | $text-light: {{.text_light | default "#999"}};
8 | $body-bg: {{.body_color | default "#fff"}};
9 | $border-color: {{.border_color | default "#ECECEC"}};
10 | $black: {{.black | default "#000"}};
11 | $white: {{.white | default "#fff"}};
12 | $dark: {{.dark | default "#222"}};
13 | $light: {{.light | default "#EDF6F5"}};
14 | $gray: {{.gray | default "#EDF6F5"}};
15 |
16 |
17 | // Font Variables
18 | $font-size: {{.font_size | default "16px"}};
19 | $font-scale: {{.font_scale | default "1.25"}};
20 | $font-primary: '{{replace (replaceRE ":[ital,]*[ital@]*[wght@]*[0-9,;]+" "" .font_primary | default "Lato") "+" " "}}', {{.font_primary_type | default "sans-serif"}};
21 | $font-secondary: '{{replace (replaceRE ":[ital,]*[ital@]*[wght@]*[0-9,;]+" "" .font_secondary | default "Lato") "+" " "}}', {{.font_secondary_type | default "sans-serif"}};
22 | $font-icon: '{{.font_icon | default "Font Awesome 5 Free"}}';
23 | {{ end }}
24 |
25 | @import 'templates/bootstrap';
26 | @import 'mixins';
27 | @import 'typography';
28 | @import 'common';
29 | @import 'tabs';
30 | @import 'gallery-slider';
31 | @import 'preloader';
32 | @import "images";
33 | @import 'notice';
34 | @import 'search';
35 |
36 | @import 'templates/navigation';
37 | @import 'templates/main';
38 |
39 | @import 'custom';
--------------------------------------------------------------------------------
/assets/scss/templates/_bootstrap.scss:
--------------------------------------------------------------------------------
1 | // bootstrap@v5.3.0-alpha1
2 |
3 | @import "../bootstrap/mixins/banner";
4 | @include bsBanner("");
5 |
6 | // scss-docs-start import-stack
7 | // Configuration
8 | @import "../bootstrap/functions";
9 | @import "../bootstrap/variables";
10 | @import "../bootstrap/variables-dark";
11 | @import "../bootstrap/maps";
12 | @import "../bootstrap/mixins";
13 | @import "../bootstrap/utilities";
14 |
15 | // Layout & components
16 | @import "../bootstrap/root";
17 | @import "../bootstrap/reboot";
18 | @import "../bootstrap/type";
19 | @import "../bootstrap/images";
20 | @import "../bootstrap/containers";
21 | @import "../bootstrap/grid";
22 | @import "../bootstrap/tables";
23 | @import "../bootstrap/forms";
24 | @import "../bootstrap/buttons";
25 | @import "../bootstrap/transitions";
26 | @import "../bootstrap/dropdown";
27 | // @import "../bootstrap/button-group";
28 | @import "../bootstrap/nav";
29 | @import "../bootstrap/navbar";
30 | @import "../bootstrap/card";
31 | @import "../bootstrap/accordion";
32 | @import "../bootstrap/breadcrumb";
33 | @import "../bootstrap/pagination";
34 | @import "../bootstrap/badge";
35 | // @import "../bootstrap/alert";
36 | // @import "../bootstrap/progress";
37 | // @import "../bootstrap/list-group";
38 | // @import "../bootstrap/close";
39 | // @import "../bootstrap/toasts";
40 | // @import "../bootstrap/modal";
41 | // @import "../bootstrap/tooltip";
42 | // @import "../bootstrap/popover";
43 | // @import "../bootstrap/carousel";
44 | // @import "../bootstrap/spinners";
45 | // @import "../bootstrap/offcanvas";
46 | // @import "../bootstrap/placeholders";
47 |
48 | // Helpers
49 | @import "../bootstrap/helpers";
50 |
51 | // Utilities
52 | @import "../bootstrap/utilities/api";
53 | // scss-docs-end import-stack
--------------------------------------------------------------------------------
/assets/scss/templates/_main.scss:
--------------------------------------------------------------------------------
1 | // post-image
2 | // ====================================
3 | .post-image {
4 | img {
5 | transition: 0.3s ease-in-out;
6 | }
7 | &:hover {
8 | img {
9 | transform: scale(1.1);
10 | opacity: 0.85;
11 | }
12 | }
13 | }
14 |
15 | // newsletter-block
16 | // ====================================
17 | .newsletter-block {
18 | color: $white;
19 |
20 | .input-group-text,
21 | .form-control {
22 | background-color: transparent;
23 | color: $white;
24 | border-color: #999;
25 | }
26 |
27 | .form-control {
28 | border-top-left-radius: 10px !important;
29 | border-bottom-left-radius: 10px !important;
30 | }
31 |
32 | .input-group-text {
33 | padding: 0.375rem 1rem;
34 | border-top-right-radius: 10px !important;
35 | border-bottom-right-radius: 10px !important;
36 | }
37 |
38 | .form-control {
39 | &:focus {
40 | border-color: $color-primary;
41 |
42 | ~ .input-group-append {
43 | .input-group-text {
44 | border-color: $color-primary;
45 | background-color: $color-primary;
46 | color: $white;
47 | }
48 | }
49 | }
50 | }
51 |
52 | ::-webkit-input-placeholder {
53 | color: rgba($white, 0.7);
54 | }
55 |
56 | :-ms-input-placeholder {
57 | color: rgba($white, 0.7);
58 | }
59 |
60 | ::placeholder {
61 | color: rgba($white, 0.7);
62 | }
63 |
64 | button.input-group-text {
65 | color: rgba($white, 0.7);
66 |
67 | &:hover {
68 | color: $white;
69 | }
70 | }
71 | }
72 |
73 | // instagram-feed
74 | // ====================================
75 | .instagram_feed {
76 | .instagram-post:hover {
77 | opacity: 0.8;
78 | }
79 | }
80 |
81 | // blog post
82 | // ====================================
83 | .single-post-meta,
84 | .single-post-similer {
85 | margin-top: 70px;
86 | }
87 |
88 | .single-post-author {
89 | margin-top: 100px;
90 | }
91 |
92 | .post-meta-tags {
93 | a {
94 | display: inline-block;
95 | background-color: #f7f8fa;
96 | color: $dark;
97 | padding: 6px 13px;
98 | font-weight: 700;
99 | font-size: 15px;
100 | @extend .rounded;
101 |
102 | &:hover {
103 | background-color: transparent;
104 | color: $color-primary;
105 | }
106 | }
107 | }
108 |
109 | .widget-search {
110 | cursor: pointer;
111 | user-select: none;
112 | * {
113 | pointer-events: none;
114 | }
115 | }
--------------------------------------------------------------------------------
/assets/scss/templates/_navigation.scss:
--------------------------------------------------------------------------------
1 | // header style
2 | // ====================================
3 | header {
4 | position: sticky;
5 | width: 100%;
6 | top: 0;
7 | left: 0;
8 | z-index: 1000;
9 | background-color: $white;
10 | padding: 30px 0;
11 | transition: 0.25s ease;
12 |
13 | .navbar-toggler {
14 | .close {
15 | display: none;
16 | }
17 |
18 | &[aria-expanded="true"] {
19 | .close {
20 | display: block;
21 | }
22 |
23 | .open {
24 | display: none;
25 | }
26 | }
27 | }
28 |
29 | @include tablet {
30 | padding: 40px 0;
31 | }
32 |
33 | &.header-sticky-top {
34 | box-shadow: 0 0 50px -30px rgba($color-primary, 0.5);
35 | }
36 |
37 | .navbar-brand {
38 | img {
39 | height: auto !important;
40 | }
41 | @include tablet {
42 | img {
43 | width: auto !important;
44 | height: 30px !important;
45 | }
46 | }
47 | }
48 |
49 | .nav-item {
50 | &.active .nav-link {
51 | color: $color-primary !important;
52 | }
53 |
54 | &.dropdown .nav-link {
55 | position: relative;
56 | padding-right: 30px !important;
57 |
58 | @include desktop {
59 | padding-right: 20px !important;
60 | }
61 | }
62 |
63 | &.dropdown .nav-link::after {
64 | display: none;
65 | }
66 |
67 | &.dropdown .nav-link::before {
68 | position: absolute;
69 | right: 14px;
70 |
71 | @include desktop {
72 | right: 0;
73 | }
74 |
75 | top: calc(50% - 7px);
76 | display: inline-block;
77 | vertical-align: 0.255em;
78 | content: "";
79 | height: 9px;
80 | width: 9px;
81 | border: 2px solid;
82 | border-left: 0;
83 | border-top: 0;
84 | border-color: inherit;
85 | border-radius: 2px;
86 | transform: rotate(45deg);
87 | transition: 0s;
88 | }
89 |
90 | .nav-link {
91 | font-size: 18px;
92 | color: $dark !important;
93 | padding: 15px !important;
94 | font-weight: 500;
95 | &:hover {
96 | color: $color-primary !important;
97 | }
98 | }
99 | }
100 |
101 | @media (min-width: 991px) {
102 | .dropdown-menu {
103 | display: block;
104 | opacity: 0;
105 | visibility: hidden;
106 | width: 220px;
107 | transition: 0.2s;
108 | left: 50%;
109 | border-radius: 8px;
110 | transform: translate(-50%, 15px);
111 | }
112 |
113 | .dropdown:hover .dropdown-menu {
114 | opacity: 1;
115 | visibility: visible;
116 | box-shadow: 0 10px 30px rgba(22, 28, 45, 0.1);
117 | transform: translate(-50%, -6px);
118 | }
119 |
120 | .dropdown-menu[data-bs-popper] {
121 | top: 100%;
122 | left: 50%;
123 | transform: translateX(-50%);
124 | margin-top: 0;
125 | }
126 | }
127 |
128 | .dropdown-menu {
129 | border: 0;
130 | padding: 16px 25px;
131 | }
132 |
133 | .dropdown-item {
134 | font-size: 16px;
135 | padding: 6px 0;
136 | }
137 |
138 | .dropdown-item.active,
139 | .dropdown-item:active {
140 | color: $color-primary;
141 | background-color: transparent;
142 | }
143 |
144 | .dropdown-item:focus,
145 | .dropdown-item:hover {
146 | color: $color-primary;
147 | background-color: transparent;
148 | }
149 |
150 | .navbar-light .navbar-toggler {
151 | border-color: transparent;
152 | padding: 0;
153 | font-size: 38px;
154 | color: $dark;
155 | transition: 0.3s ease;
156 |
157 | &:focus {
158 | box-shadow: none;
159 | }
160 |
161 | @include tablet {
162 | font-size: 32px;
163 | }
164 |
165 | &:hover {
166 | color: $color-primary;
167 | }
168 | }
169 |
170 | @include desktop {
171 | .navbar-nav {
172 | max-width: 300px;
173 | text-align: center;
174 | padding-top: 20px;
175 | }
176 |
177 | .dropdown-toggle {
178 | margin-right: 12px;
179 | }
180 |
181 | .navbar-right {
182 | text-align: center;
183 | margin-top: 20px;
184 | padding-bottom: 30px;
185 | }
186 |
187 | .dropdown-menu {
188 | padding: 5px;
189 | text-align: center;
190 | background: rgba($color-primary, 0.05);
191 | }
192 |
193 | .nav-item .nav-link {
194 | padding: 5px 20px !important;
195 | }
196 | }
197 | }
198 |
199 | // search block style
200 | // ====================================
201 | // .search-toggle {
202 | // background-color: transparent;
203 | // border: 0;
204 | // transition: .3s ease;
205 | // padding: 5px;
206 |
207 | // &:hover {
208 | // color: $color-primary;
209 | // }
210 | // }
211 |
212 | // .search-modal-content {
213 | // width: 650px;
214 | // .search-input-body label {
215 | // line-height: 1.4;
216 | // }
217 | // }
218 |
219 | // .search-title {
220 | // transition: 0s;
221 | // }
222 |
223 | // search block style
224 | .search-toggle {
225 | background-color: transparent;
226 | border: 0;
227 | transition: 0.3s ease;
228 | padding: 10px;
229 | font-size: 22px;
230 |
231 | &:hover {
232 | color: $color-primary;
233 | }
234 | }
235 |
236 | .search-block {
237 | position: fixed;
238 | top: 0;
239 | left: 0;
240 | height: 100vh;
241 | width: 100vw;
242 | background-color: $white;
243 | z-index: 9999988999889;
244 | padding: 0 50px;
245 | display: none;
246 |
247 | form {
248 | position: relative;
249 | top: 50%;
250 | left: 50%;
251 | transform: translate(-50%, -50%);
252 | text-align: center;
253 | }
254 |
255 | input {
256 | border: 0;
257 | border-bottom: 1px solid #ddd;
258 | font-size: 22px;
259 | width: 500px;
260 | max-width: 100%;
261 | padding: 15px 0;
262 | margin: auto;
263 | letter-spacing: -1px;
264 | transition: 0.3s ease;
265 | }
266 |
267 | &.is-visible {
268 | input {
269 | border-bottom-color: $color-primary;
270 | }
271 | }
272 |
273 | [data-toggle="search-close"] {
274 | font-size: 34px;
275 | cursor: pointer;
276 | position: absolute;
277 | top: 20px;
278 | right: 40px;
279 | }
280 | }
281 |
--------------------------------------------------------------------------------
/exampleSite/.hugo_build.lock:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gethugothemes/bookworm-light-hugo/c495cf0dbfbee5c00a7818c6dc380f18e957bdd0/exampleSite/.hugo_build.lock
--------------------------------------------------------------------------------
/exampleSite/assets/images/about.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gethugothemes/bookworm-light-hugo/c495cf0dbfbee5c00a7818c6dc380f18e957bdd0/exampleSite/assets/images/about.jpg
--------------------------------------------------------------------------------
/exampleSite/assets/images/author/author-2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gethugothemes/bookworm-light-hugo/c495cf0dbfbee5c00a7818c6dc380f18e957bdd0/exampleSite/assets/images/author/author-2.jpg
--------------------------------------------------------------------------------
/exampleSite/assets/images/author/author.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gethugothemes/bookworm-light-hugo/c495cf0dbfbee5c00a7818c6dc380f18e957bdd0/exampleSite/assets/images/author/author.jpg
--------------------------------------------------------------------------------
/exampleSite/assets/images/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gethugothemes/bookworm-light-hugo/c495cf0dbfbee5c00a7818c6dc380f18e957bdd0/exampleSite/assets/images/favicon.png
--------------------------------------------------------------------------------
/exampleSite/assets/images/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gethugothemes/bookworm-light-hugo/c495cf0dbfbee5c00a7818c6dc380f18e957bdd0/exampleSite/assets/images/logo.png
--------------------------------------------------------------------------------
/exampleSite/assets/images/post/01.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gethugothemes/bookworm-light-hugo/c495cf0dbfbee5c00a7818c6dc380f18e957bdd0/exampleSite/assets/images/post/01.jpg
--------------------------------------------------------------------------------
/exampleSite/assets/images/post/02.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gethugothemes/bookworm-light-hugo/c495cf0dbfbee5c00a7818c6dc380f18e957bdd0/exampleSite/assets/images/post/02.jpg
--------------------------------------------------------------------------------
/exampleSite/assets/images/post/03.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gethugothemes/bookworm-light-hugo/c495cf0dbfbee5c00a7818c6dc380f18e957bdd0/exampleSite/assets/images/post/03.jpg
--------------------------------------------------------------------------------
/exampleSite/assets/images/post/04.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gethugothemes/bookworm-light-hugo/c495cf0dbfbee5c00a7818c6dc380f18e957bdd0/exampleSite/assets/images/post/04.jpg
--------------------------------------------------------------------------------
/exampleSite/assets/images/post/05.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gethugothemes/bookworm-light-hugo/c495cf0dbfbee5c00a7818c6dc380f18e957bdd0/exampleSite/assets/images/post/05.jpg
--------------------------------------------------------------------------------
/exampleSite/assets/images/post/06.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gethugothemes/bookworm-light-hugo/c495cf0dbfbee5c00a7818c6dc380f18e957bdd0/exampleSite/assets/images/post/06.jpg
--------------------------------------------------------------------------------
/exampleSite/assets/images/post/07.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gethugothemes/bookworm-light-hugo/c495cf0dbfbee5c00a7818c6dc380f18e957bdd0/exampleSite/assets/images/post/07.jpg
--------------------------------------------------------------------------------
/exampleSite/assets/scss/custom.scss:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gethugothemes/bookworm-light-hugo/c495cf0dbfbee5c00a7818c6dc380f18e957bdd0/exampleSite/assets/scss/custom.scss
--------------------------------------------------------------------------------
/exampleSite/config/_default/hugo.toml:
--------------------------------------------------------------------------------
1 | ######################## default configuration ####################
2 | baseURL = "https://demo.gethugothemes.com/bookworm-light/site/"
3 | title = "Bookworm Light - HUGO Blog Theme"
4 | theme = "bookworm-light-hugo"
5 | # Default time zone for time stamps; use any valid tz database name: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List
6 | timeZone = "America/New_York"
7 | # post pagination
8 | pagination.pagerSize = 5 # see https://gohugo.io/extras/pagination/
9 | # post excerpt
10 | summaryLength = 10 # see https://gohugo.io/content-management/excerpts/
11 |
12 | ############################# Modules ############################
13 | [module]
14 | [[module.mounts]]
15 | source = "assets"
16 | target = "assets"
17 |
18 | [[module.mounts]]
19 | source = "hugo_stats.json"
20 | target = "assets/watching/hugo_stats.json"
21 |
22 |
23 | ############################# Build ##############################
24 | [build]
25 | noJSConfigInAssets = false
26 | useResourceCacheWhen = 'fallback'
27 | [build.buildStats]
28 | enable = true
29 | [[build.cachebusters]]
30 | source = 'assets/.*\.(js|ts|jsx|tsx)'
31 | target = '(js|scripts|javascript)'
32 | [[build.cachebusters]]
33 | source = 'assets/.*\.(css|sass|scss)$'
34 | target = '(css|styles|scss|sass)'
35 | [[build.cachebusters]]
36 | source = '(postcss|tailwind)\.config\.js'
37 | target = '(css|styles|scss|sass)'
38 | [[build.cachebusters]]
39 | source = 'assets/.*\.(.*)$'
40 | target = '$1'
41 |
42 |
43 | ############################# Outputs ##############################
44 | [outputs]
45 | home = ["HTML", "RSS", "WebAppManifest", "SearchIndex"]
46 |
47 | ############################# Imaging ##############################
48 | [imaging]
49 | # See https://github.com/disintegration/imaging
50 | # Default JPEG or WebP quality setting. Default is 75.
51 | quality = 90
52 | resampleFilter = "lanczos"
53 |
54 | ############################# Caches ###############################
55 | [caches]
56 | [caches.images]
57 | dir = ":resourceDir/_gen"
58 | maxAge = "720h"
59 |
60 | [caches.assets]
61 | dir = ":resourceDir/_gen"
62 | maxAge = "720h"
63 |
64 |
65 | ############################# Markup ###############################
66 | [markup]
67 | [markup.goldmark.renderer]
68 | unsafe = true
69 |
70 | [markup.highlight]
71 | style = 'monokai' # see https://xyproto.github.io/splash/docs/all.html
72 |
73 |
74 | ############################ Media types ############################
75 | [mediaTypes]
76 | [mediaTypes."application/manifest+json"]
77 | suffixes = ["webmanifest"]
78 |
79 | ############################ Output Format ###########################
80 | [outputFormats]
81 | [outputFormats.WebAppManifest]
82 | mediaType = "application/manifest+json"
83 | rel = "manifest"
84 |
85 | [outputFormats.SearchIndex]
86 | mediaType = "application/json"
87 | baseName = "searchindex"
88 | isPlainText = true
89 | notAlternative = true
90 |
91 |
--------------------------------------------------------------------------------
/exampleSite/config/_default/languages.toml:
--------------------------------------------------------------------------------
1 | ################ English language ##################
2 | [en]
3 | languageName = "En"
4 | languageCode = "en-us"
5 | contentDir = "content/english"
6 | weight = 1
7 |
8 |
--------------------------------------------------------------------------------
/exampleSite/config/_default/menus.en.toml:
--------------------------------------------------------------------------------
1 |
2 | ############################# Main Menu ########################
3 | [[main]]
4 | name = "Home"
5 | url = "/"
6 | weight = 1
7 |
8 | [[main]]
9 | name = "About"
10 | url = "about/"
11 | weight = 3
12 |
13 | [[main]]
14 | name = "Contact"
15 | url = "contact/"
16 | weight = 4
17 |
18 | [[main]]
19 | name = "Buy Premium"
20 | url = "https://gethugothemes.com/products/bookworm/"
21 | weight = 5
22 |
23 | [[main]]
24 | weight = 6
25 | url = "#"
26 | name = "Pages"
27 | hasChildren = true
28 |
29 | [[main]]
30 | parent = "Pages"
31 | name = "Author"
32 | url = "author/"
33 | weight = 1
34 |
35 | [[main]]
36 | parent = "Pages"
37 | name = "Tags"
38 | url = "tags/"
39 | weight = 2
40 |
41 | [[main]]
42 | parent = "Pages"
43 | name = "Category"
44 | url = "categories/"
45 | weight = 3
46 |
47 | [[main]]
48 | parent = "Pages"
49 | name = "Elements"
50 | weight = 4
51 | url = "elements/"
52 |
53 | [[main]]
54 | parent = "Pages"
55 | name = "Privacy"
56 | url = "privacy/"
57 | weight = 5
58 |
59 | [[main]]
60 | parent = "Pages"
61 | name = "Terms & Conditions"
62 | url = "terms-conditions/"
63 | weight = 6
64 |
65 | ############################# Footer Menu ########################
66 | [[footer]]
67 | name = "About"
68 | url = "about/"
69 | weight = 1
70 |
71 | [[footer]]
72 | name = "Authors"
73 | url = "author/"
74 | weight = 2
75 |
76 | [[footer]]
77 | name = "Privacy"
78 | url = "privacy/"
79 | weight = 3
80 |
81 | [[footer]]
82 | name = "Terms & Conditions"
83 | url = "terms-conditions/"
84 | weight = 4
85 |
--------------------------------------------------------------------------------
/exampleSite/config/_default/module.toml:
--------------------------------------------------------------------------------
1 | [hugoVersion]
2 | extended = true
3 | min = "0.115.1"
4 |
5 | [[imports]]
6 | path = "github.com/gohugoio/hugo-mod-bootstrap-scss/v5"
7 |
8 | [[imports]]
9 | path = "github.com/gethugothemes/hugo-modules/search"
10 |
11 | [[imports]]
12 | path = "github.com/gethugothemes/hugo-modules/components/preloader"
13 |
14 | [[imports]]
15 | path = "github.com/gethugothemes/hugo-modules/images"
16 |
17 | [[imports]]
18 | path = "github.com/gethugothemes/hugo-modules/gallery-slider"
19 |
20 | [[imports]]
21 | path = "github.com/gethugothemes/hugo-modules/videos"
22 |
23 | [[imports]]
24 | path = "github.com/gethugothemes/hugo-modules/components/cookie-consent"
25 |
26 | [[imports]]
27 | path = "github.com/gethugothemes/hugo-modules/components/custom-script"
28 |
29 | [[imports]]
30 | path = "github.com/gethugothemes/hugo-modules/components/render-link"
31 |
32 | [[imports]]
33 | path = "github.com/gethugothemes/hugo-modules/pwa"
34 |
35 | [[imports]]
36 | path = "github.com/gethugothemes/hugo-modules/shortcodes/collapse"
37 |
38 | [[imports]]
39 | path = "github.com/gethugothemes/hugo-modules/shortcodes/notice"
40 |
41 | [[imports]]
42 | path = "github.com/gethugothemes/hugo-modules/shortcodes/tabs"
43 |
44 |
--------------------------------------------------------------------------------
/exampleSite/config/_default/params.toml:
--------------------------------------------------------------------------------
1 | #################### default parameters ################################
2 | # favicon
3 | favicon = "images/favicon.png"
4 | # logo
5 | logo = "images/logo.png"
6 | # use `px` or `x` with logo_width, example: "100px".
7 | # Note: logo_width is not work with .svg file
8 | logo_width = "208px"
9 | # if logo_webp set false, will not generate WEBP version of logo | default is true
10 | logo_webp = true
11 | # logo text will only show when logo is missing.
12 | logo_text = "Bookworm"
13 | # purgeCSS
14 | purge_css = true
15 |
16 | # Menu align
17 | menu_align = "center" # Menu-align value "left", "right" or "center" (if Search is disable/false Menu will align in Right)
18 | # Main section
19 | mainSections = ["blog"]
20 | # Post layout
21 | post_layout = "list" # Post-Layout value ("grid" or "list")
22 | # Blog-details page sidebar
23 | sidebar = "false" # Sidebar value ("left", "right" or false)
24 |
25 | # image gallery shortcode
26 | image_gallery = true
27 |
28 | # copyright
29 | theme_copyright = true
30 | copyright = "Copyright by your company"
31 |
32 | # google tag manager, see https://developers.google.com/tag-manager/
33 | google_tag_manager = "" # example: G-XXXXXXXXXX
34 | # custom script on header, example: custom_script= ""
35 | custom_script= ""
36 |
37 | # contact form action
38 | contact_form_action = "#" # contact form works with https://formspree.io
39 |
40 | # Preloader
41 | [preloader]
42 | enable = false
43 | preloader = "images/favicon.png" # use jpg, png, svg or gif format.
44 |
45 | [search]
46 | enable = true # (if Search is false Menu will align in Right)
47 | primary_color = "#01AD9F"
48 | include_sections = [] # if `include_sections` is empty then section are come from `mainSections`
49 | show_image = true
50 | show_description = true
51 | show_tags = true
52 | show_categories = true
53 |
54 | ######################## sidebar widgets #########################
55 | [widgets]
56 | sidebar = ["search", "categories", "tags", "social"]
57 |
58 | # Instagram feed
59 | [params.instafeed]
60 | enable = false
61 | instagram_user = "bookworm"
62 | access_token = "IGQVJYeUk4YWNIY1h4OWZANeS1wRHZARdjJ5QmdueXN2RFR6NF9iYUtfcGp1NmpxZA3RTbnU1MXpDNVBHTzZAMOFlxcGlkVHBKdjhqSnUybERhNWdQSE5hVmtXT013MEhOQVJJRGJBRURn"
63 |
64 | # Subscription
65 | [subscription]
66 | enable = true
67 | # mailchimp subsciption
68 | mailchimp_form_action = "https://gmail.us4.list-manage.com/subscribe/post?u=463ee871f45d2d93748e77cad&id=a0a2c6d074" # replace this url with yours
69 | mailchimp_form_name = "b_463ee871f45d2d93748e77cad_a0a2c6d074" # replace this code with yours
70 | title = "Subscribe for our monthly newsletter."
71 | input_placeholder = "Enter your email"
72 |
73 | # Crisp Chat
74 | [crisp_chat]
75 | enable = false
76 | crisp_website_id = "75ea92c2-a135-4f5c-8b44-54f9ddc30745" # replace this code with yours
77 | # Check this video tutorial to get your crisp website ID - https://www.youtube.com/watch?v=nW5UX6iVdFc
78 |
79 | # seo meta data for OpenGraph / Twitter Card
80 | [metadata]
81 | keywords = ["Boilerplate", "Hugo", "Themefisher", "GetHugoThemes"]
82 | description = "This is meta description"
83 | author = "Themefisher"
84 | image = "images/favicon.png" # this image will be used as fallback if a page has no image of its own
85 |
86 |
87 | # baidu analytics: see https://tongji.baidu.com/
88 | [baidu]
89 | enable = false
90 | analytics_id = "" # Your ID
91 |
92 | # plausible analytics: see https://plausible.io/
93 | [plausible]
94 | enable = false
95 | domain = "" # yourdomain.com
96 |
97 | # counter analytics: see https://counter.dev/setup.html
98 | [counter]
99 | enable = false
100 | username = "" # your username
101 |
102 | # site verifications
103 | [site_verification]
104 | google = "" # Your verification code
105 | bing = "" # Your verification code
106 | baidu = "" # Your verification code
107 | facebook = "" # Your verification code
108 |
109 | # cookies
110 | [cookies]
111 | enable = true
112 | expire_days = 2
113 | content = "This site uses cookies. By continuing to use this website, you agree to their use."
114 | button = "I Accept"
115 |
116 |
117 | # Social Icons
118 | [[social]]
119 | icon = "lab la-facebook-f" # https://icons8.com/line-awesome
120 | url = "https://www.facebook.com/"
121 |
122 | [[social]]
123 | icon = "lab la-twitter" # https://icons8.com/line-awesome
124 | url = "https://www.twitter.com/"
125 |
126 | [[social]]
127 | icon = "lab la-instagram" # https://icons8.com/line-awesome
128 | url = "https://www.instagram.com/"
129 |
130 | [[social]]
131 | icon = "lab la-linkedin-in" # https://icons8.com/line-awesome
132 | url = "https://www.linkedin.com/"
133 |
--------------------------------------------------------------------------------
/exampleSite/content/english/about.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "About"
3 | layout: "about"
4 | image: "images/about.jpg"
5 | draft: false
6 |
7 | #caption
8 | caption:
9 | enable: true
10 | title: "I’m Henara Colii, A content writer based in LDN, currently at Bookworm."
11 |
12 | # social
13 | social:
14 | enable: true
15 | social_links:
16 | - link: "https://www.facebook.com/"
17 | icon: "lab la-facebook-f"
18 |
19 | - link: "https://www.twitter.com/"
20 | icon: "lab la-twitter"
21 |
22 | - link: "https://www.linkedin.com/"
23 | icon: "lab la-linkedin-in"
24 |
25 | - link: "https://www.github.com/"
26 | icon: "lab la-github"
27 |
28 | # what_i_do
29 | what_i_do:
30 | title: "What I Do"
31 | enable: true
32 | item:
33 | - title: "Content Writing"
34 | icon: "las la-pen-nib"
35 | description: "Purus eget ipsum elementum venenatis, quis rutrum mi semper nonpurus eget ipsum elementum venenatis."
36 |
37 | - title: "Photography"
38 | icon: "las la-camera"
39 | description: "Aenean maximus urna magna elementum venenatis, quis rutrum mi semper non purus eget ipsum elementum venenatis."
40 |
41 | - title: "Web Research"
42 | icon: "lar la-snowflake"
43 | description: "Aenean maximus urna magna elementum venenatis, quis rutrum mi semper non purus eget ipsum elementum venenatis."
44 |
45 | ---
46 | A content writer with over 12 years experience working across brand identity, publishing and digital products. Maecenas sit amet purus eget ipsum elementum venenatis. Aenean maximus urna magna elementum venenatis, quis rutrum mi semper non purus eget.
47 |
48 | Purus eget ipsum elementum venenatis. Aenean maximus urna magna elementum venenatis, quis rutrum mi semper non purus eget ipsum elementum venenatis.
--------------------------------------------------------------------------------
/exampleSite/content/english/author/_index.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "Author"
3 | image: ""
4 | date: 2021-01-26T10:13:00+06:00
5 | draft: false
6 | menu:
7 |
8 | ---
9 |
10 |
--------------------------------------------------------------------------------
/exampleSite/content/english/author/henara-colii.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "Henara Colii"
3 | image: "images/author/author-2.jpg"
4 | email: "abdulmonnafsomrat@gmail.com"
5 | date: 2021-02-02T10:20:19+06:00
6 | draft: false
7 | social:
8 | - icon: "la-facebook-f"
9 | link: "https://facebook.com"
10 | - icon: "la-twitter"
11 | link: "https://twitter.com"
12 | - icon: "la-linkedin-in"
13 | link: "https://linkedin.com"
14 | ---
15 |
16 | Maecenas sit amet purus eget ipsum elementum venenatis. Aenean maximus urna magna elementum venenatis, quis rutrum mi semper non purus eget ipsum elementum venenatis.
17 |
18 | Purus eget ipsum elementum venenatis. Aenean maximus urna magna elementum venenatis, quis rutrum mi semper non purus eget ipsum elementum venenatis.
--------------------------------------------------------------------------------
/exampleSite/content/english/author/lubana-era.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "Lubana Era"
3 | image: "images/author/author.jpg"
4 | email: "abdulmonnafsomrat@gmail.com"
5 | date: 2021-01-26T10:14:19+06:00
6 | draft: false
7 | social:
8 | - icon: "la-facebook-f"
9 | link: "https://facebook.com"
10 | - icon: "la-twitter"
11 | link: "https://twitter.com"
12 | - icon: "la-linkedin-in"
13 | link: "https://linkedin.com"
14 | ---
15 |
16 | Maecenas sit amet purus eget ipsum elementum venenatis. Aenean maximus urna magna elementum venenatis, quis rutrum mi semper non purus eget ipsum elementum venenatis.
17 |
18 | Purus eget ipsum elementum venenatis. Aenean maximus urna magna elementum venenatis, quis rutrum mi semper non purus eget ipsum elementum venenatis.
--------------------------------------------------------------------------------
/exampleSite/content/english/blog/_index.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "Blog"
3 | description: "meta description"
4 | draft: false
5 | ---
6 |
7 |
--------------------------------------------------------------------------------
/exampleSite/content/english/blog/post-1.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "What you need to know about Photography"
3 | image: "images/post/07.jpg"
4 | date: 2021-01-24T18:19:25+06:00
5 | author: "Lubana Era"
6 | tags: ["Photography"]
7 | categories: ["Photography"]
8 | draft: false
9 | ---
10 |
11 | Nam ut rutrum ex, venenatis sollicitudin urna. Aliquam erat volutpat. Integer eu ipsum sem. Ut bibendum lacus vestibulum maximus suscipit. Quisque vitae nibh iaculis neque blandit euismod.
12 |
13 | Lorem ipsum dolor sit amet consectetur adipisicing elit. Nemo vel ad consectetur ut aperiam. Itaque eligendi natus aperiam? Excepturi repellendus consequatur quibusdam optio expedita praesentium est adipisci dolorem ut eius!
14 |
15 | ### Creative Design
16 | Nam ut rutrum ex, venenatis sollicitudin urna. Aliquam erat volutpat. Integer eu ipsum sem. Ut bibendum lacus vestibulum maximus suscipit. Quisque vitae nibh iaculis neque blandit euismod.
17 |
18 | >Lorem ipsum dolor sit amet consectetur adipisicing elit. Nemo vel ad consectetur ut aperiam. Itaque eligendi natus aperiam? Excepturi repellendus consequatur quibusdam optio expedita praesentium est adipisci dolorem ut eius!
19 |
20 | Lorem ipsum dolor sit amet consectetur adipisicing elit. Nemo vel ad consectetur ut aperiam. Itaque eligendi natus aperiam? Excepturi repellendus consequatur quibusdam optio expedita praesentium est adipisci dolorem ut eius!
--------------------------------------------------------------------------------
/exampleSite/content/english/blog/post-2.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "Become a morning person with the help of this a alarm clock"
3 | description: "meta description"
4 | image: "images/post/03.jpg"
5 | date: 2021-01-25T11:33:57+06:00
6 | author: "Lubana Era"
7 | tags: ["Alarm", "Clock"]
8 | categories: ["LifeStyle"]
9 | draft: false
10 | ---
11 |
12 | Nam ut rutrum ex, venenatis sollicitudin urna. Aliquam erat volutpat. Integer eu ipsum sem. Ut bibendum lacus vestibulum maximus suscipit. Quisque vitae nibh iaculis neque blandit euismod.
13 |
14 | Lorem ipsum dolor sit amet consectetur adipisicing elit. Nemo vel ad consectetur ut aperiam. Itaque eligendi natus aperiam? Excepturi repellendus consequatur quibusdam optio expedita praesentium est adipisci dolorem ut eius!
15 |
16 | ### Creative Design
17 | Nam ut rutrum ex, venenatis sollicitudin urna. Aliquam erat volutpat. Integer eu ipsum sem. Ut bibendum lacus vestibulum maximus suscipit. Quisque vitae nibh iaculis neque blandit euismod.
18 |
19 | >Lorem ipsum dolor sit amet consectetur adipisicing elit. Nemo vel ad consectetur ut aperiam. Itaque eligendi natus aperiam? Excepturi repellendus consequatur quibusdam optio expedita praesentium est adipisci dolorem ut eius!
20 |
21 | Lorem ipsum dolor sit amet consectetur adipisicing elit. Nemo vel ad consectetur ut aperiam. Itaque eligendi natus aperiam? Excepturi repellendus consequatur quibusdam optio expedita praesentium est adipisci dolorem ut eius!
--------------------------------------------------------------------------------
/exampleSite/content/english/blog/post-3.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "DIY Paper Diamond Tutorial with HUNGRY HEART"
3 | description: "meta description"
4 | image: "images/post/06.jpg"
5 | date: 2021-01-25T11:35:57+06:00
6 | author: "Henara Colii"
7 | tags: ["Diy", "Toy"]
8 | categories: ["LifeStyle"]
9 | draft: false
10 | ---
11 |
12 | A paper diamond is such a pretty way to bring a flair of stylish luxury to your home.. Ut bibendum lacus vestibulum maximus suscipit. Quisque vitae nibh iaculis neque blandit euismod.
13 |
14 | Lorem ipsum dolor sit amet consectetur adipisicing elit. Nemo vel ad consectetur ut aperiam. Itaque eligendi natus aperiam? Excepturi repellendus consequatur quibusdam optio expedita praesentium est adipisci dolorem ut eius!
15 |
16 | ### Creative Design
17 | Nam ut rutrum ex, venenatis sollicitudin urna. Aliquam erat volutpat. Integer eu ipsum sem. Ut bibendum lacus vestibulum maximus suscipit. Quisque vitae nibh iaculis neque blandit euismod.
18 |
19 | >Lorem ipsum dolor sit amet consectetur adipisicing elit. Nemo vel ad consectetur ut aperiam. Itaque eligendi natus aperiam? Excepturi repellendus consequatur quibusdam optio expedita praesentium est adipisci dolorem ut eius!
20 |
21 | Lorem ipsum dolor sit amet consectetur adipisicing elit. Nemo vel ad consectetur ut aperiam. Itaque eligendi natus aperiam? Excepturi repellendus consequatur quibusdam optio expedita praesentium est adipisci dolorem ut eius!
--------------------------------------------------------------------------------
/exampleSite/content/english/blog/post-4.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "Banana is the best meal packages in the UK spark outrage online"
3 | description: "meta description"
4 | image: "images/post/05.jpg"
5 | date: 2021-01-25T16:56:47+06:00
6 | draft: false
7 | author: "Henara Colii"
8 | tags: ["Food", "Gold"]
9 | categories: ["Food"]
10 | ---
11 |
12 | A banana is an elongated, edible fruit – botanically a berry – produced by several kinds of large herbaceous flowering plants in the genus Musa. In some countries, bananas used for cooking may be called "plantains", distinguishing them from dessert bananas.
13 |
14 | Lorem ipsum dolor sit amet consectetur adipisicing elit. Nemo vel ad consectetur ut aperiam. Itaque eligendi natus aperiam? Excepturi repellendus consequatur quibusdam optio expedita praesentium est adipisci dolorem ut eius!
15 |
16 | ### Creative Design
17 | Nam ut rutrum ex, venenatis sollicitudin urna. Aliquam erat volutpat. Integer eu ipsum sem. Ut bibendum lacus vestibulum maximus suscipit. Quisque vitae nibh iaculis neque blandit euismod.
18 |
19 | >Lorem ipsum dolor sit amet consectetur adipisicing elit. Nemo vel ad consectetur ut aperiam. Itaque eligendi natus aperiam? Excepturi repellendus consequatur quibusdam optio expedita praesentium est adipisci dolorem ut eius!
20 |
21 | Lorem ipsum dolor sit amet consectetur adipisicing elit. Nemo vel ad consectetur ut aperiam. Itaque eligendi natus aperiam? Excepturi repellendus consequatur quibusdam optio expedita praesentium est adipisci dolorem ut eius!
--------------------------------------------------------------------------------
/exampleSite/content/english/blog/post-5.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "Why a balloon is a flexible bag that can be inflated with a gas"
3 | description: "meta description"
4 | image: "images/post/04.jpg"
5 | date: 2021-02-02T16:56:47+06:00
6 | draft: false
7 | author: "Lubana Era"
8 | tags: ["Balloon", "Gas"]
9 | categories: ["Accessories"]
10 | ---
11 |
12 | A balloon is a flexible bag that can be inflated with a gas, such as helium, hydrogen, nitrous oxide, oxygen, and air. For special tasks, balloons can be filled with smoke, liquid water, granular media, or light sources.
13 |
14 | Lorem ipsum dolor sit amet consectetur adipisicing elit. Nemo vel ad consectetur ut aperiam. Itaque eligendi natus aperiam? Excepturi repellendus consequatur quibusdam optio expedita praesentium est adipisci dolorem ut eius!
15 |
16 | ### Creative Design
17 | Nam ut rutrum ex, venenatis sollicitudin urna. Aliquam erat volutpat. Integer eu ipsum sem. Ut bibendum lacus vestibulum maximus suscipit. Quisque vitae nibh iaculis neque blandit euismod.
18 |
19 | >Lorem ipsum dolor sit amet consectetur adipisicing elit. Nemo vel ad consectetur ut aperiam. Itaque eligendi natus aperiam? Excepturi repellendus consequatur quibusdam optio expedita praesentium est adipisci dolorem ut eius!
20 |
21 | Lorem ipsum dolor sit amet consectetur adipisicing elit. Nemo vel ad consectetur ut aperiam. Itaque eligendi natus aperiam? Excepturi repellendus consequatur quibusdam optio expedita praesentium est adipisci dolorem ut eius!
--------------------------------------------------------------------------------
/exampleSite/content/english/blog/post-6.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "Become a morning person with the help of this a alarm clock"
3 | description: "meta description"
4 | image: "images/post/03.jpg"
5 | date: 2021-02-03T16:56:47+06:00
6 | draft: false
7 | author: "Henara Colii"
8 | tags: ["Alarm", "Clock"]
9 | categories: ["LifeStyle"]
10 | ---
11 |
12 | Almost every day for the past nine or so months has felt like March 13, and that can sometimes make it difficult to want to wake up for the day ahead of you.
13 |
14 | To make a morning person out of you, the wake-up light simulates the sunrise to gradually ease you awake. This allows you to wake up more naturally rather than being jolted awake by the default iPhone alarm sound, which honestly triggers my fight or flight response.
15 |
16 | ### Creative Design
17 | Nam ut rutrum ex, venenatis sollicitudin urna. Aliquam erat volutpat. Integer eu ipsum sem. Ut bibendum lacus vestibulum maximus suscipit. Quisque vitae nibh iaculis neque blandit euismod.
18 |
19 | >Lorem ipsum dolor sit amet consectetur adipisicing elit. Nemo vel ad consectetur ut aperiam. Itaque eligendi natus aperiam? Excepturi repellendus consequatur quibusdam optio expedita praesentium est adipisci dolorem ut eius!
20 |
21 | Lorem ipsum dolor sit amet consectetur adipisicing elit. Nemo vel ad consectetur ut aperiam. Itaque eligendi natus aperiam? Excepturi repellendus consequatur quibusdam optio expedita praesentium est adipisci dolorem ut eius!
--------------------------------------------------------------------------------
/exampleSite/content/english/blog/post-7.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "What you need to know about Photography"
3 | description: "meta description"
4 | image: "images/post/02.jpg"
5 | date: 2021-02-04T16:56:47+06:00
6 | draft: false
7 | author: "Lubana Era"
8 | tags: ["Photography"]
9 | categories: ["Photography"]
10 | ---
11 |
12 | Photography is an invaluable medium that allows us to capture the incandescent beauty of the outside world, something many of us haven’t seen in... well, a hot minute. Global pandemics will do that.
13 |
14 | But that certainly doesn’t mean that beautiful photos can’t be taken indoors, out of windows, or in secluded outdoor locations (safely socially distanced, of course). And perhaps now is as good a time as any to gain some helpful tips on how to do just that by taking an online photography course.
15 |
16 | ### Creative Design
17 | Nam ut rutrum ex, venenatis sollicitudin urna. Aliquam erat volutpat. Integer eu ipsum sem. Ut bibendum lacus vestibulum maximus suscipit. Quisque vitae nibh iaculis neque blandit euismod.
18 |
19 | >Lorem ipsum dolor sit amet consectetur adipisicing elit. Nemo vel ad consectetur ut aperiam. Itaque eligendi natus aperiam? Excepturi repellendus consequatur quibusdam optio expedita praesentium est adipisci dolorem ut eius!
20 |
21 | Lorem ipsum dolor sit amet consectetur adipisicing elit. Nemo vel ad consectetur ut aperiam. Itaque eligendi natus aperiam? Excepturi repellendus consequatur quibusdam optio expedita praesentium est adipisci dolorem ut eius!
--------------------------------------------------------------------------------
/exampleSite/content/english/blog/post-8.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "How to make toys from old Olarpaper"
3 | description: "meta description"
4 | image: "images/post/01.jpg"
5 | date: 2021-02-05T16:56:47+06:00
6 | draft: false
7 | author: "Lubana Era"
8 | tags: ["Diy", "Toy"]
9 | categories: ["LifeStyle"]
10 | ---
11 |
12 | Nemo vel ad consectetur namut rutrum ex, venenatis sollicitudin urna. Aliquam erat volutpat. Integer eu ipsum sem. Ut bibendum lacus vestibulum maximus suscipit. Quisque vitae nibh iaculis neque blandit euismod.
13 |
14 | Lorem ipsum dolor sit amet consectetur adipisicing elit. Nemo vel ad consectetur ut aperiam. Itaque eligendi natus aperiam? Excepturi repellendus consequatur quibusdam optio expedita praesentium est adipisci dolorem ut eius!
15 |
16 | ### Creative Design
17 | Nam ut rutrum ex, venenatis sollicitudin urna. Aliquam erat volutpat. Integer eu ipsum sem. Ut bibendum lacus vestibulum maximus suscipit. Quisque vitae nibh iaculis neque blandit euismod.
18 |
19 | >Lorem ipsum dolor sit amet consectetur adipisicing elit. Nemo vel ad consectetur ut aperiam. Itaque eligendi natus aperiam? Excepturi repellendus consequatur quibusdam optio expedita praesentium est adipisci dolorem ut eius!
20 |
21 | Lorem ipsum dolor sit amet consectetur adipisicing elit. Nemo vel ad consectetur ut aperiam. Itaque eligendi natus aperiam? Excepturi repellendus consequatur quibusdam optio expedita praesentium est adipisci dolorem ut eius!
--------------------------------------------------------------------------------
/exampleSite/content/english/contact.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "Contact"
3 | layout: "contact"
4 | draft: false
5 | ---
--------------------------------------------------------------------------------
/exampleSite/content/english/elements.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "Elements"
3 | description: "this is meta description"
4 | draft: false
5 | ---
6 |
7 |
8 | #### Heading example
9 |
10 | Here is example of hedings. You can use this heading by following markdownify rules. For example: use `#` for heading 1 and use `######` for heading 6.
11 |
12 | # Heading 1
13 | ## Heading 2
14 | ### Heading 3
15 | #### Heading 4
16 | ##### Heading 5
17 | ###### Heading 6
18 |
19 |
20 |
21 | ##### Emphasis
22 |
23 | Emphasis, aka italics, with *asterisks* or _underscores_.
24 |
25 | Strong emphasis, aka bold, with **asterisks** or __underscores__.
26 |
27 | Combined emphasis with **asterisks and _underscores_**.
28 |
29 | Strikethrough uses two tildes. ~~Scratch this.~~
30 |
31 |
32 |
33 | ##### Link
34 | [I'm an inline-style link](https://www.google.com)
35 |
36 | [I'm an inline-style link with title](https://www.google.com "Google's Homepage")
37 |
38 | [I'm a reference-style link][Arbitrary case-insensitive reference text]
39 |
40 | [I'm a relative reference to a repository file](../blob/master/LICENSE)
41 |
42 | [You can use numbers for reference-style link definitions][1]
43 |
44 | Or leave it empty and use the [link text itself].
45 |
46 | URLs and URLs in angle brackets will automatically get turned into links.
47 | http://www.example.com or and sometimes
48 | example.com (but not on Github, for example).
49 |
50 | Some text to show that the reference links can follow later.
51 |
52 | [arbitrary case-insensitive reference text]: https://www.themefisher.com
53 | [1]: https://gethugothemes.com
54 | [link text itself]: https://www.getjekyllthemes.com
55 |
56 |
57 |
58 | ##### Paragraph
59 |
60 | Lorem ipsum dolor sit amet consectetur adipisicing elit. Quam nihil enim maxime corporis cumque totam aliquid nam sint inventore optio modi neque laborum officiis necessitatibus, facilis placeat pariatur! Voluptatem, sed harum pariatur adipisci voluptates voluptatum cumque, porro sint minima similique magni perferendis fuga! Optio vel ipsum excepturi tempore reiciendis id quidem? Vel in, doloribus debitis nesciunt fugit sequi magnam accusantium modi neque quis, vitae velit, pariatur harum autem a! Velit impedit atque maiores animi possimus asperiores natus repellendus excepturi sint architecto eligendi non, omnis nihil. Facilis, doloremque illum. Fugit optio laborum minus debitis natus illo perspiciatis corporis voluptatum rerum laboriosam.
61 |
62 |
63 |
64 | ##### Ordered List
65 |
66 | 1. List item
67 | 2. List item
68 | 3. List item
69 | 4. List item
70 | 5. List item
71 |
72 |
73 |
74 | ##### Unordered List
75 |
76 | * List item
77 | * List item
78 | * List item
79 | * List item
80 | * List item
81 |
82 |
83 |
84 | #### Notice
85 |
86 | {{< notice "note" >}}
87 | This is a simple note.
88 | {{< /notice >}}
89 |
90 | {{< notice "tip" >}}
91 | This is a simple tip.
92 | {{< /notice >}}
93 |
94 | {{< notice "info" >}}
95 | This is a simple info.
96 | {{< /notice >}}
97 |
98 | #### Tab
99 |
100 | {{< tabs >}}
101 |
102 | {{< tab "first" >}}
103 | This is first tab
104 | {{< /tab >}}
105 |
106 | {{< tab "second" >}}
107 | this is second tab
108 | {{< /tab >}}
109 |
110 | {{< tab "third" >}}
111 | this is third tab
112 | {{< /tab >}}
113 |
114 | {{ tabs >}}
115 |
116 |
117 |
118 | ### Collapse
119 |
120 | {{< collapse "collapse 1" >}}
121 | This is a simple collapse
122 | {{< /collapse >}}
123 |
124 | {{< collapse "collapse 2" >}}
125 | This is a simple collapse
126 | {{< /collapse >}}
127 |
128 | {{< collapse "collapse 3" >}}
129 | This is a simple collapse
130 | {{< /collapse >}}
131 |
132 |
133 |
134 | ##### Code and Syntax Highlighting
135 |
136 | Inline `code` has `back-ticks around` it.
137 |
138 | ```javascript
139 | var s = "JavaScript syntax highlighting";
140 | alert(s);
141 | ```
142 |
143 | ```python
144 | s = "Python syntax highlighting"
145 | print s
146 | ```
147 |
148 |
149 |
150 | ##### Blockquote
151 |
152 | > This is a blockquote example.
153 |
154 |
155 |
156 | ##### Inline HTML
157 |
158 | You can also use raw HTML in your Markdown, and it'll mostly work pretty well.
159 |
160 |
161 | Definition list
162 | Is something people use sometimes.
163 |
164 | Markdown in HTML
165 | Does *not* work **very** well. Use HTML tags .
166 |
167 |
168 |
169 |
170 |
171 | ##### Tables
172 |
173 | Colons can be used to align columns.
174 |
175 | | Tables | Are | Cool |
176 | | ------------- |:-------------:| -----:|
177 | | col 3 is | right-aligned | $1600 |
178 | | col 2 is | centered | $12 |
179 | | zebra stripes | are neat | $1 |
180 |
181 | There must be at least 3 dashes separating each header cell.
182 | The outer pipes (|) are optional, and you don't need to make the
183 | raw Markdown line up prettily. You can also use inline Markdown.
184 |
185 | Markdown | Less | Pretty
186 | --- | --- | ---
187 | *Still* | `renders` | **nicely**
188 | 1 | 2 | 3
189 |
190 |
191 |
192 | ##### Image
193 |
194 | {{< image src="images/post/01.jpg" caption="This is Image Caption" alt="alter-text" command="fill" option="q95" class="img-fluid" title="image title" >}}
195 |
196 |
197 |
198 | ##### Youtube video
199 |
200 | {{< youtube C0DPdy98e4c >}}
--------------------------------------------------------------------------------
/exampleSite/content/english/privacy.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "Privacy"
3 | description: "this is meta description"
4 | draft: false
5 | ---
6 |
7 |
8 | #### Responsibility of Contributors
9 |
10 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Purus, donec nunc eros, ullamcorper id feugiat quisque aliquam sagittis. Sem turpis sed viverra massa gravida pharetra. Non dui dolor potenti eu dignissim fusce. Ultrices amet, in curabitur a arcu a lectus morbi id. Iaculis erat sagittis in tortor cursus. Molestie urna eu tortor, erat scelerisque eget. Nunc hendrerit sed interdum lacus. Lorem quis viverra sed
11 |
12 | pretium, aliquam sit. Praesent elementum magna amet, tincidunt eros, nibh in leo. Malesuada purus, lacus, at aliquam suspendisse tempus. Quis tempus amet, velit nascetur sollicitudin. At sollicitudin eget amet in. Eu velit nascetur sollicitudin erhdfvssfvrgss eget viverra nec elementum. Lacus, facilisis tristique lectus in.
13 |
14 | #### Gathering of Personal Information
15 |
16 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Purus, donec nunc eros, ullamcorper id feugiat quisque aliquam sagittis. Sem turpis sed viverra massa gravida pharetra. Non dui dolor potenti eu dignissim fusce. Ultrices amet, in curabitur a arcu a lectus morbi id. Iaculis erat sagittis in tortor cursus. Molestie urna eu tortor, erat scelerisque eget. Nunc hendrerit sed interdum lacus. Lorem quis viverra sed
17 |
18 | #### Protection of Personal- Information
19 |
20 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Purus, donec nunc eros, ullamcorper id feugiat quisque aliquam sagittis. Sem turpis sed viverra massa gravida pharetra. Non dui dolor potenti eu dignissim fusce. Ultrices amet, in curabitur a arcu a lectus morbi id. Iaculis erat sagittis in tortor cursus.
21 |
22 | Molestie urna eu tortor, erat scelerisque eget. Nunc hendrerit sed interdum lacus. Lorem quis viverra sed
23 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Purus, donec nunc eros, ullamcorper id feugiat
24 |
25 | #### Privacy Policy Changes
26 |
27 | 1. Sll the Themefisher items are designed to be with the latest , We check all
28 | 2. comments that threaten or harm the reputation of any person or organization
29 | 3. personal information including, but limited to, email addresses, telephone numbers
30 | 4. Any Update come in The technology Customer will get automatic Notification.
--------------------------------------------------------------------------------
/exampleSite/content/english/search.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "Search Result"
3 | date: 2018-09-24T11:07:10+06:00
4 | description: "this is meta description"
5 | layout: "search"
6 | draft: false
7 | ---
--------------------------------------------------------------------------------
/exampleSite/content/english/terms-conditions.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "Terms And Conditions"
3 | description: "this is meta description"
4 | draft: false
5 | ---
6 |
7 |
8 | #### Responsibility of Contributors
9 |
10 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Purus, donec nunc eros, ullamcorper id feugiat quisque aliquam sagittis. Sem turpis sed viverra massa gravida pharetra. Non dui dolor potenti eu dignissim fusce. Ultrices amet, in curabitur a arcu a lectus morbi id. Iaculis erat sagittis in tortor cursus. Molestie urna eu tortor, erat scelerisque eget. Nunc hendrerit sed interdum lacus. Lorem quis viverra sed
11 |
12 | pretium, aliquam sit. Praesent elementum magna amet, tincidunt eros, nibh in leo. Malesuada purus, lacus, at aliquam suspendisse tempus. Quis tempus amet, velit nascetur sollicitudin. At sollicitudin eget amet in. Eu velit nascetur sollicitudin erhdfvssfvrgss eget viverra nec elementum. Lacus, facilisis tristique lectus in.
13 |
14 | #### Gathering of Personal Information
15 |
16 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Purus, donec nunc eros, ullamcorper id feugiat quisque aliquam sagittis. Sem turpis sed viverra massa gravida pharetra. Non dui dolor potenti eu dignissim fusce. Ultrices amet, in curabitur a arcu a lectus morbi id. Iaculis erat sagittis in tortor cursus. Molestie urna eu tortor, erat scelerisque eget. Nunc hendrerit sed interdum lacus. Lorem quis viverra sed
17 |
18 | #### Protection of Personal- Information
19 |
20 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Purus, donec nunc eros, ullamcorper id feugiat quisque aliquam sagittis. Sem turpis sed viverra massa gravida pharetra. Non dui dolor potenti eu dignissim fusce. Ultrices amet, in curabitur a arcu a lectus morbi id. Iaculis erat sagittis in tortor cursus.
21 |
22 | Molestie urna eu tortor, erat scelerisque eget. Nunc hendrerit sed interdum lacus. Lorem quis viverra sed
23 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Purus, donec nunc eros, ullamcorper id feugiat
24 |
25 | #### Privacy Policy Changes
26 |
27 | 1. Sll the Themefisher items are designed to be with the latest , We check all
28 | 2. comments that threaten or harm the reputation of any person or organization
29 | 3. personal information including, but limited to, email addresses, telephone numbers
30 | 4. Any Update come in The technology Customer will get automatic Notification.
--------------------------------------------------------------------------------
/exampleSite/go.mod:
--------------------------------------------------------------------------------
1 | module gethugothemes.com
2 |
3 | go 1.20
4 |
5 | require (
6 | github.com/gethugothemes/hugo-modules/components/cookie-consent v0.0.0-20241123034247-ea3817d07c63 // indirect
7 | github.com/gethugothemes/hugo-modules/components/custom-script v0.0.0-20241123034247-ea3817d07c63 // indirect
8 | github.com/gethugothemes/hugo-modules/components/preloader v0.0.0-20241123034247-ea3817d07c63 // indirect
9 | github.com/gethugothemes/hugo-modules/components/render-link v0.0.0-20241123034247-ea3817d07c63 // indirect
10 | github.com/gethugothemes/hugo-modules/gallery-slider v0.0.0-20241123034247-ea3817d07c63 // indirect
11 | github.com/gethugothemes/hugo-modules/images v0.0.0-20241123034247-ea3817d07c63 // indirect
12 | github.com/gethugothemes/hugo-modules/pwa v0.0.0-20241123034247-ea3817d07c63 // indirect
13 | github.com/gethugothemes/hugo-modules/search v0.0.0-20241123034247-ea3817d07c63 // indirect
14 | github.com/gethugothemes/hugo-modules/shortcodes/collapse v0.0.0-20241123034247-ea3817d07c63 // indirect
15 | github.com/gethugothemes/hugo-modules/shortcodes/notice v0.0.0-20241123034247-ea3817d07c63 // indirect
16 | github.com/gethugothemes/hugo-modules/shortcodes/tabs v0.0.0-20241123034247-ea3817d07c63 // indirect
17 | github.com/gethugothemes/hugo-modules/videos v0.0.0-20241123034247-ea3817d07c63 // indirect
18 | github.com/gohugoio/hugo-mod-bootstrap-scss/v5 v5.20300.20200 // indirect
19 | )
20 |
--------------------------------------------------------------------------------
/exampleSite/hugo.toml:
--------------------------------------------------------------------------------
1 | # This file is for render site varibles and plugins
2 | # don't remove this file.
3 | # The presence of this file is for compatibility with Blogdown and Forestry.
4 | #
5 | # The actual configuration files are stored in the `config/_default/` folder.
6 |
7 |
8 | ######################### site variables ##############################
9 | # customize your color and font from here.
10 | [params.variables]
11 | white = "#ffffff"
12 | black = "#000000"
13 | dark = "#152035"
14 | gray = "#747577"
15 | light = "#FAFAFA"
16 | color_primary = "#01AD9F"
17 |
18 | # font variables
19 | # base font size for full website,
20 | font_size = "16px" # default is 16px
21 |
22 | # Font Scale Sizes
23 | # "minorSecond": 1.067,
24 | # "majorSecond": 1.125,
25 | # "minorThird": 1.2,
26 | # "majorThird": 1.25,
27 | # "perfectFourth": 1.333,
28 | # "augmentedFourth": 1.414,
29 | # "perfectFifth": 1.5,
30 | # "goldenRatio": 1.618
31 | font_scale = "1.25" # default is "majorThird": 1.25
32 |
33 | # go to https://fonts.google.com/ to find the font you want to use. select your font and copy only the bold part from the URL. and paste it here.
34 | # example: "Work+Sans:wght@400;500;600"
35 | font_primary = "Mulish:wght@500;600;700;800;900"
36 | font_primary_type = "sans-serif" # [serif/sans-serif]
37 | font_secondary = ""
38 | font_secondary_type = "" # [serif/sans-serif]
39 | font_icon = "Font Awesome 6 Free" # https://fontawesome.com/v6.0/icons/
40 |
41 |
42 | ############################# Plugins ##############################
43 | # CSS Plugins
44 | [[params.plugins.css]]
45 | link = "plugins/glightbox/glightbox.css"
46 | [[params.plugins.css]]
47 | link = "plugins/bootstrap/bootstrap.min.css"
48 | [[params.plugins.css]]
49 | link = "plugins/line-awesome/css/line-awesome.min.css"
50 |
51 |
52 | # JS Plugins
53 | [[params.plugins.js]]
54 | link = "plugins/cookie.js"
55 | [[params.plugins.js]]
56 | link = "plugins/glightbox/glightbox.js"
57 | [[params.plugins.js]]
58 | link = "js/gallery-slider.js"
59 | [[params.plugins.js]]
60 | link = "plugins/instagram-feed/instagram-feed.js"
61 | [[params.plugins.js]]
62 | link = "js/search.js"
--------------------------------------------------------------------------------
/exampleSite/i18n/en.yaml:
--------------------------------------------------------------------------------
1 | - id: search_placeholder
2 | translation: Click to search..
3 |
4 | - id: our_instagram
5 | translation: Our Instagram
6 |
7 | - id: name
8 | translation: Your Name
9 |
10 | - id: email
11 | translation: Email Address
12 |
13 | - id: subject
14 | translation: Subject
15 |
16 | - id: message
17 | translation: Your Message Here
18 |
19 | - id: send_message
20 | translation: Send Message
21 |
22 | - id: search_result_for
23 | translation: Search results for
24 |
25 | - id: you_may_also_like
26 | translation: You May Also Like
27 |
28 | - id: most_recent_post
29 | translation: Our Most Recent Post
30 |
31 | - id: written_by
32 | translation: Written By
33 |
34 | - id: read_more
35 | translation: Read More
36 |
37 | - id: read_article
38 | translation: Read Article
39 |
40 | - id: showing_posts_from
41 | translation: Showing posts from
42 |
43 | - id: home
44 | translation: Home
45 |
46 | - id: search
47 | translation: Search
48 |
49 | - id: categories
50 | translation: Categories
51 |
52 | - id: tags
53 | translation: Tags
54 |
55 | - id: social
56 | translation: Social
57 |
58 | - id: copyright-text
59 | translation: Designed & Developed By
60 |
61 | - id: search_input_placeholder
62 | translation: Search Bookworm..
63 |
64 | - id: no_results_for
65 | translation: No results for
66 |
67 | - id: empty_search_results_placeholder
68 | translation: Type something to search..
--------------------------------------------------------------------------------
/exampleSite/postcss.config.js:
--------------------------------------------------------------------------------
1 | const purgecss = require("@fullhuman/postcss-purgecss")({
2 | content: ["./hugo_stats.json"],
3 | defaultExtractor: (content) => {
4 | const els = JSON.parse(content).htmlElements;
5 | return [...(els.tags || []), ...(els.classes || []), ...(els.ids || [])];
6 | },
7 | safelist: [
8 | /dark/,
9 | /^swiper-/,
10 | /collapsing/,
11 | /show/,
12 | /[aria-expanded=true]/,
13 | /[aria-expanded=false]/,
14 | /^lb-/,
15 | /^gl/,
16 | /^go/,
17 | /^gc/,
18 | /^gs/,
19 | /^gi/,
20 | /^desc/,
21 | /^zoom/,
22 | /dragging/,
23 | /fullscreen/,
24 | /loaded/,
25 | /visible/,
26 | /current/,
27 | /active/,
28 | ],
29 | });
30 |
31 | module.exports = {
32 | plugins: [
33 | ...(process.env.HUGO_ENVIRONMENT === "production" ? [purgecss] : []),
34 | ],
35 | };
36 |
--------------------------------------------------------------------------------
/layouts/404.html:
--------------------------------------------------------------------------------
1 | {{ define "main" }}
2 |
3 |
14 |
15 | {{ end }}
--------------------------------------------------------------------------------
/layouts/_default/about.html:
--------------------------------------------------------------------------------
1 | {{define "main"}}
2 |
3 |
4 |
5 |
6 |
7 | {{ with .Params.image }}
8 |
9 | {{ partial "image.html" (dict "Src" . "Class" "img-fluid rounded" "Alt" "about image") }}
10 |
11 | {{ end }}
12 |
13 |
14 | {{ if .Params.caption.enable }}
15 | {{ with .Params.caption }}
16 |
{{.title | markdownify}}
17 | {{ end }}
18 | {{ end }}
19 |
20 | {{ if .Params.social.enable }}
21 | {{ with .Params.social }}
22 |
23 | {{ range .social_links }}
24 |
25 |
26 |
27 | {{end}}
28 |
29 | {{ end }}
30 | {{ end }}
31 |
32 |
33 | {{.Content}}
34 |
35 |
36 |
37 |
38 | {{ if .Params.what_i_do.enable }}
39 | {{ with .Params.what_i_do }}
40 |
41 |
42 |
43 |
{{ .title }}
44 |
45 | {{ range .item }}
46 |
47 |
48 |
{{ .title }}
49 |
{{ .description }}
50 |
51 | {{end}}
52 |
53 |
54 | {{ end }}
55 | {{ end }}
56 |
57 |
58 |
59 | {{end}}
--------------------------------------------------------------------------------
/layouts/_default/baseof.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | {{ partial "essentials/head.html" . }}
6 |
7 |
8 | {{ if hugo.IsProduction }}
9 | {{ partialCached "essentials/style.html" . }}
10 | {{ else }}
11 | {{ partial "essentials/style.html" . }}
12 | {{ end }}
13 |
14 |
15 |
16 |
17 | {{ if hugo.IsProduction }}
18 | {{ partial "essentials/header.html" . }}
19 | {{ partialCached "preloader.html" . }}
20 | {{ else }}
21 | {{ partial "essentials/header.html" . }}
22 | {{ partial "preloader.html" . }}
23 | {{ end }}
24 |
25 | {{ if and
26 | (not .IsHome)
27 | (ne .Section "blog")
28 | (ne .Section "homepage")
29 | (ne .Permalink ("/about/" | absLangURL))
30 | (ne .Permalink ("/search/" | absLangURL))
31 | (ne .Kind "404")
32 | }}
33 | {{ partial "components/page-header.html" . }}
34 | {{ end }}
35 |
36 |
37 |
38 |
39 | {{ block "main" . }}{{ end }}
40 |
41 |
42 |
43 | {{ if hugo.IsProduction }}
44 | {{ partialCached "essentials/footer.html" . }}
45 | {{ partialCached "essentials/script.html" . }}
46 | {{ else }}
47 | {{ partial "essentials/footer.html" . }}
48 | {{ partial "essentials/script.html" . }}
49 | {{ end }}
50 |
51 |
52 |
--------------------------------------------------------------------------------
/layouts/_default/contact.html:
--------------------------------------------------------------------------------
1 | {{ define "main" }}
2 |
3 | {{with site.Params.contact_form_action}}
4 |
32 | {{end}}
33 |
34 | {{ end }}
--------------------------------------------------------------------------------
/layouts/_default/list.html:
--------------------------------------------------------------------------------
1 | {{define "main"}}
2 |
3 |
4 | {{ if or (eq .Section "post") (eq .Section "posts") (eq .Section "blog") (eq .Section "blogs") (eq .Section "news") (eq .Section "categories") (eq .Section "tags") }}
5 |
6 |
7 |
8 |
9 |
10 |
11 | {{range .Data.Pages}}
12 |
13 | {{.Render "post"}}
14 |
15 | {{end}}
16 |
17 |
18 |
19 |
20 |
21 |
22 | {{ else }}
23 |
24 | {{ partial "page-header.html" . }}
25 |
26 |
27 |
28 |
29 |
30 | {{.Content}}
31 |
32 |
33 |
34 |
35 |
36 |
37 | {{ end }}
38 |
39 | {{end}}
--------------------------------------------------------------------------------
/layouts/_default/post.html:
--------------------------------------------------------------------------------
1 |
2 | {{if .Params.image}}
3 |
4 | {{ partial "image.html" (dict "Src" .Params.image "Class" "w-100 h-auto rounded" "Alt" .Title) }}
5 |
6 | {{end}}
7 |
8 |
34 |
37 |
{{ .Summary }}
38 |
39 |
40 |
41 |
--------------------------------------------------------------------------------
/layouts/_default/single.html:
--------------------------------------------------------------------------------
1 | {{ define "main"}}
2 |
3 |
4 | {{ if or (eq .Section "post") (eq .Section "posts") (eq .Section "blog") (eq .Section "blogs") (eq .Section "news") (eq .Section "categories") (eq .Section "tags") }}
5 |
6 |
7 |
8 |
9 |
10 |
11 |
{{.Title}}
12 |
32 |
33 |
34 | {{ with .Params.image }}
35 |
36 | {{ partial "image.html" (dict "Src" . "Class" "img-fluid rounded" "Alt" "Post image") }}
37 |
38 | {{ end }}
39 |
40 |
41 | {{.Content}}
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 | {{range .Params.tags}}
51 | {{.}}
52 | {{end}}
53 |
54 |
55 |
56 | {{- partial "post-share.html" . -}}
57 |
58 |
59 |
60 |
61 | {{ if .Params.Author }}
62 |
87 | {{ end }}
88 |
89 | {{ $related := (where site.RegularPages "Section" "blog") | intersect (where site.Pages ".Title" "!=" .Title) | union (site.RegularPages.Related . ) }}
90 | {{ if $related }}
91 |
92 |
93 |
94 |
95 |
96 |
You May Also Like
97 |
98 | {{ range first 2 $related }}
99 |
100 | {{ .Render "post" }}
101 |
102 | {{ end }}
103 |
104 |
105 |
106 |
107 | {{ end }}
108 |
109 |
110 |
111 | {{ else }}
112 |
113 |
114 |
115 |
116 |
117 |
118 | {{.Content}}
119 |
120 |
121 |
122 |
123 |
124 |
125 | {{ end }}
126 |
127 | {{ end }}
--------------------------------------------------------------------------------
/layouts/_default/terms.html:
--------------------------------------------------------------------------------
1 | {{ define "main" }}
2 |
3 |
4 |
5 |
6 |
7 |
8 | {{ if eq .Permalink (`tags/` | absURL)}}
9 | {{ range .Site.Taxonomies.tags }}
10 |
11 | {{ .Page.Title }} ({{ .Count }})
12 |
13 | {{ end }}
14 | {{ end }}
15 | {{ if eq .Permalink (`categories/` | absURL)}}
16 | {{ range .Site.Taxonomies.categories }}
17 |
18 | {{ .Page.Title }} ({{ .Count }})
19 |
20 | {{ end }}
21 | {{ end }}
22 |
23 |
24 |
25 |
26 |
27 |
28 | {{ end }}
--------------------------------------------------------------------------------
/layouts/author/list.html:
--------------------------------------------------------------------------------
1 | {{define "main"}}
2 |
3 |
4 |
5 |
6 | {{range .RegularPages }}
7 |
28 | {{end}}
29 |
30 |
31 |
32 |
33 | {{end}}
--------------------------------------------------------------------------------
/layouts/author/single.html:
--------------------------------------------------------------------------------
1 | {{define "main"}}
2 |
3 |
4 |
5 |
6 |
7 | {{if .Params.image}}
8 | {{ partial "image.html" (dict "Src" .Params.image "Size" "150x150" "Class" "img-fluid rounded mb-5" "Alt" .Title) }}
9 | {{else}}
10 |
11 | {{end}}
12 |
{{.Title}}
13 |
14 | {{ range .Params.social }}
15 |
16 |
17 |
18 | {{end}}
19 |
20 |
21 |
22 |
23 | {{.Content}}
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 | {{ range where site.RegularPages "Params.author" .Title }}
33 |
34 | {{.Render "post"}}
35 |
36 | {{ end }}
37 |
38 |
39 |
40 | {{end}}
--------------------------------------------------------------------------------
/layouts/index.html:
--------------------------------------------------------------------------------
1 | {{define "main"}}
2 |
3 |
4 |
5 |
6 |
7 |
8 | {{ $paginator := .Paginate (where site.RegularPages "Type" "in" site.Params.mainSections) }}
9 | {{range $index, $items := $paginator.Pages}}
10 |
11 | {{.Render "post"}}
12 |
13 | {{end}}
14 |
15 |
16 |
17 |
18 |
19 | {{"" | safeHTML }}
20 | {{ $paginator := .Paginator }}
21 |
22 | {{ $adjacent_links := 2 }}
23 |
24 | {{ $max_links := (add (mul $adjacent_links 2) 1) }}
25 |
26 | {{ $lower_limit := (add $adjacent_links 1) }}
27 |
28 | {{ $upper_limit := (sub $paginator.TotalPages $adjacent_links) }}
29 |
30 | {{ if gt $paginator.TotalPages 1 }}
31 |
32 |
84 |
85 | {{ end }}
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 | {{ with site.Params.instafeed }}
95 | {{ if .enable }}
96 |
97 |
98 |
99 |
100 |
101 |
Our Instagram
102 |
103 |
104 |
105 | {{ with .access_token }}
106 |
109 | {{ end }}
110 |
111 |
112 |
113 | {{ end }}
114 | {{ end }}
115 |
116 | {{end}}
--------------------------------------------------------------------------------
/layouts/partials/components/page-header.html:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/layouts/partials/components/social-share.html:
--------------------------------------------------------------------------------
1 | {{ $url := printf "%s" .Permalink | absLangURL }}
2 |
--------------------------------------------------------------------------------
/layouts/partials/essentials/footer.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | {{ with site.Params.subscription }}
6 | {{ if .enable }}
7 |
8 |
{{ .title | markdownify }}
9 |
10 |
16 |
17 |
18 |
19 |
20 |
21 | {{ end }}
22 | {{ end }}
23 |
24 |
25 |
30 |
31 | {{range site.Params.social}}
32 |
33 |
34 |
35 | {{end}}
36 |
37 | {{ with site.Params.copyright }}
38 |
{{.| markdownify}}
39 | {{ end }}
40 |
41 |
42 |
43 |
44 |
--------------------------------------------------------------------------------
/layouts/partials/essentials/head.html:
--------------------------------------------------------------------------------
1 |
2 | {{ .Title | default site.Title }}
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | {{ partialCached "favicon" . }}
12 |
13 |
14 |
15 | {{ partialCached "manifest" . }}
16 |
17 |
18 |
19 |
20 | {{ partialCached "custom-script.html" . }}
21 |
22 |
23 |
24 | {{ template "_internal/google_analytics.html" . }}
25 |
26 |
27 |
28 | {{ partial "search-index.html" . }}
--------------------------------------------------------------------------------
/layouts/partials/essentials/header.html:
--------------------------------------------------------------------------------
1 |
2 |
98 |
99 |
100 | {{ partial "search-modal.html" (dict "Context" .) }}
--------------------------------------------------------------------------------
/layouts/partials/essentials/script.html:
--------------------------------------------------------------------------------
1 |
2 | {{ $bootstrap := resources.Get "js/bootstrap.js" }}
3 | {{ $params := dict }}
4 | {{ $sourceMap := cond hugo.IsProduction "" "inline" }}
5 | {{ $opts := dict "sourceMap" $sourceMap "target" "es2018" "params" $params }}
6 | {{ $bootstrap = $bootstrap | js.Build $opts }}
7 | {{ if hugo.IsProduction }}
8 | {{ $bootstrap = $bootstrap | fingerprint "sha512" }}
9 | {{ end }}
10 |
11 |
12 |
13 | {{ $scripts := slice }}
14 | {{ range site.Params.plugins.js }}
15 | {{ if findRE "^http" .link }}
16 |
20 | {{ else }}
21 | {{ $scripts = $scripts | append (resources.Get .link) }}
22 | {{ end }}
23 | {{ end }}
24 |
25 |
26 | {{ $scripts = $scripts | append (resources.Get "js/script.js") }}
27 | {{ $scripts = $scripts | resources.Concat "js/scripts.js" }}
28 | {{ if hugo.IsProduction }}
29 | {{ $scripts = $scripts | fingerprint "sha512" }}
30 | {{ end }}
31 |
32 |
33 |
34 |
35 | {{ partialCached "pwa.html" . }}
36 |
37 |
38 |
39 | {{ partialCached "cookie-consent.html" . }}
40 |
--------------------------------------------------------------------------------
/layouts/partials/essentials/style.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 | {{ $styles := slice }}
20 | {{ range site.Params.plugins.css }}
21 | {{ if findRE "^http" .link }}
22 |
23 | {{ else }}
24 | {{ $styles = $styles | append (resources.Get .link) }}
25 | {{ end }}
26 | {{ end }}
27 | {{ $styles := $styles | append (resources.Get "scss/style.scss" | resources.ExecuteAsTemplate "style.scss" . | toCSS) }}
28 | {{ $styles := $styles | resources.Concat "/css/style.css" }}
29 |
30 |
31 |
32 | {{ if and hugo.IsProduction site.Params.purge_css }}
33 | {{ $styles = $styles | css.PostCSS | fingerprint "sha256" }}
34 | {{ $styles = $styles | resources.PostProcess }}
35 | {{ end }}
36 |
37 |
38 |
39 |
40 |
41 |
--------------------------------------------------------------------------------
/layouts/partials/post-share.html:
--------------------------------------------------------------------------------
1 | {{ $url := printf "%s" .Permalink | absLangURL }}
2 |
--------------------------------------------------------------------------------
/layouts/partials/widgets/categories.html:
--------------------------------------------------------------------------------
1 | {{ "" | safeHTML }}
2 |
--------------------------------------------------------------------------------
/layouts/partials/widgets/search.html:
--------------------------------------------------------------------------------
1 | {{ "" | safeHTML }}
2 | {{ if site.Params.search }}
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 | {{ end }}
--------------------------------------------------------------------------------
/layouts/partials/widgets/social.html:
--------------------------------------------------------------------------------
1 | {{ "" | safeHTML }}
2 |
--------------------------------------------------------------------------------
/layouts/partials/widgets/tags.html:
--------------------------------------------------------------------------------
1 | {{ "" | safeHTML }}
2 |
--------------------------------------------------------------------------------
/layouts/partials/widgets/widget-wrapper.html:
--------------------------------------------------------------------------------
1 | {{- range .Widgets -}}
2 | {{- partial ( print "widgets/" . ) $.Scope -}}
3 | {{- end -}}
--------------------------------------------------------------------------------
/netlify.toml:
--------------------------------------------------------------------------------
1 | [build]
2 | publish = "public"
3 | command = "yarn project-setup && yarn build"
4 |
5 | [build.environment]
6 | HUGO_VERSION = "0.115.1"
7 | GO_VERSION = "1.20.5"
8 | HUGO_BASEURL = "/"
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "bookworm-light",
3 | "version": "3.4.2",
4 | "license": "MIT",
5 | "author": "gethugothemes",
6 | "scripts": {
7 | "dev": "hugo server",
8 | "build": "hugo --gc --minify --templateMetrics --templateMetricsHints --buildDrafts --buildExpired --buildFuture --forceSyncStatic",
9 | "preview": "hugo server --disableFastRender --navigateToChanged --templateMetrics --templateMetricsHints --buildDrafts --buildExpired --buildFuture --watch --forceSyncStatic -e production --minify",
10 | "dev:example": "cd exampleSite; hugo server --themesDir ../..",
11 | "build:example": "cd exampleSite; hugo --themesDir ../.. --gc --minify --templateMetrics --templateMetricsHints --buildDrafts --buildExpired --buildFuture --forceSyncStatic",
12 | "preview:example": "cd exampleSite; hugo server --themesDir ../.. --disableFastRender --navigateToChanged --templateMetrics --templateMetricsHints --buildDrafts --buildExpired --buildFuture --watch --forceSyncStatic -e production --minify",
13 | "update-modules": "node ./scripts/clearModules.js && hugo mod clean --all && hugo mod get -u ./... && hugo mod tidy",
14 | "project-setup": "node ./scripts/projectSetup.js",
15 | "theme-setup": "node ./scripts/themeSetup.js",
16 | "format": "prettier -w ."
17 | },
18 | "devDependencies": {
19 | "@fullhuman/postcss-purgecss": "^5.0.0",
20 | "postcss": "^8.4.20",
21 | "postcss-cli": "^10.1.0",
22 | "prettier": "^2.8.1",
23 | "prettier-plugin-go-template": "0.0.13"
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/scripts/clearModules.js:
--------------------------------------------------------------------------------
1 | const fs = require("fs");
2 |
3 | const clearModules = (filePath) => {
4 | if (fs.existsSync(filePath)) {
5 | let fileContent = fs.readFileSync(filePath, "utf8");
6 | fileContent = fileContent.replace(/require\s*\([\s\S]*?\)/, "");
7 | fs.writeFileSync(filePath, fileContent, "utf8");
8 | } else {
9 | console.log("File does not exist.");
10 | }
11 | };
12 |
13 | clearModules("go.mod");
14 | clearModules("exampleSite/go.mod");
15 |
--------------------------------------------------------------------------------
/scripts/projectSetup.js:
--------------------------------------------------------------------------------
1 | const fs = require("fs");
2 | const path = require("path");
3 |
4 | const getFolderName = (rootfolder) => {
5 | const configPath = path.join(
6 | rootfolder,
7 | "exampleSite/config/_default/hugo.toml"
8 | );
9 | const getConfig = fs.readFileSync(configPath, "utf8");
10 | const match = getConfig.match(/theme\s*=\s*\[?"([^"\]]+)"\]?/);
11 | let selectedTheme = null;
12 | if (match && match[1]) {
13 | selectedTheme = match[1];
14 | }
15 | return selectedTheme;
16 | };
17 |
18 | const deleteFolder = (folderPath) => {
19 | if (fs.existsSync(folderPath)) {
20 | fs.rmSync(folderPath, { recursive: true, force: true });
21 | }
22 | };
23 |
24 | const createNewfolder = (rootfolder, folderName) => {
25 | const newFolder = path.join(rootfolder, folderName);
26 | fs.mkdirSync(newFolder, { recursive: true });
27 | return newFolder;
28 | };
29 |
30 | const iterateFilesAndFolders = (rootFolder, { destinationRoot }) => {
31 | const directory = path.join(rootFolder);
32 | const items = fs.readdirSync(directory, { withFileTypes: true });
33 | items.forEach((item) => {
34 | if (item.isDirectory()) {
35 | createNewfolder(destinationRoot, item.name);
36 | iterateFilesAndFolders(path.join(directory, item.name), {
37 | currentFolder: item.name,
38 | destinationRoot: path.join(destinationRoot, item.name),
39 | });
40 | } else {
41 | const sourceFile = path.join(directory, item.name);
42 | const destinationFile = path.join(destinationRoot, item.name);
43 | fs.renameSync(sourceFile, destinationFile);
44 | }
45 | });
46 | };
47 |
48 | const setupProject = () => {
49 | const rootfolder = path.join(__dirname, "../");
50 | if (!fs.existsSync(path.join(rootfolder, "themes"))) {
51 | const folderList = ["layouts", "assets", "static"];
52 | const folderName = getFolderName(rootfolder);
53 | const newfolderName = createNewfolder(
54 | path.join(rootfolder, "themes"),
55 | folderName
56 | );
57 |
58 | folderList.forEach((folder) => {
59 | const source = path.join(rootfolder, folder);
60 | const destination = path.join(newfolderName, folder);
61 | if (fs.existsSync(source)) {
62 | fs.mkdirSync(destination, { recursive: true });
63 | iterateFilesAndFolders(source, {
64 | currentFolder: folder,
65 | destinationRoot: destination,
66 | });
67 | deleteFolder(source);
68 | }
69 | });
70 |
71 | const exampleSite = path.join(rootfolder, "exampleSite");
72 | iterateFilesAndFolders(exampleSite, { destinationRoot: rootfolder });
73 | deleteFolder(exampleSite);
74 | }
75 | };
76 |
77 | setupProject();
78 |
--------------------------------------------------------------------------------
/scripts/themeSetup.js:
--------------------------------------------------------------------------------
1 | const fs = require("fs");
2 | const path = require("path");
3 |
4 | const createNewfolder = (rootfolder, folderName) => {
5 | const newFolder = path.join(rootfolder, folderName);
6 | fs.mkdirSync(newFolder, { recursive: true });
7 | return newFolder;
8 | };
9 |
10 | const deleteFolder = (folderPath) => {
11 | if (fs.existsSync(folderPath)) {
12 | fs.rmSync(folderPath, { recursive: true, force: true });
13 | }
14 | };
15 |
16 | const getFolderName = (rootfolder) => {
17 | const configPath = path.join(
18 | rootfolder,
19 | "exampleSite/config/_default/hugo.toml"
20 | );
21 | const getConfig = fs.readFileSync(configPath, "utf8");
22 | const match = getConfig.match(/theme\s*=\s*\[?"([^"\]]+)"\]?/);
23 | let selectedTheme = null;
24 | if (match && match[1]) {
25 | selectedTheme = match[1];
26 | }
27 | return selectedTheme;
28 | };
29 |
30 | const iterateFilesAndFolders = (rootFolder, { destinationRoot }) => {
31 | const directory = path.join(rootFolder);
32 | const items = fs.readdirSync(directory, { withFileTypes: true });
33 | items.forEach((item) => {
34 | if (item.isDirectory()) {
35 | createNewfolder(destinationRoot, item.name);
36 | iterateFilesAndFolders(path.join(directory, item.name), {
37 | currentFolder: item.name,
38 | destinationRoot: path.join(destinationRoot, item.name),
39 | });
40 | } else {
41 | const sourceFile = path.join(directory, item.name);
42 | const destinationFile = path.join(destinationRoot, item.name);
43 | fs.renameSync(sourceFile, destinationFile);
44 | }
45 | });
46 | };
47 |
48 | const setupTheme = () => {
49 | const rootFolder = path.join(__dirname, "../");
50 |
51 | if (!fs.existsSync(path.join(rootFolder, "exampleSite"))) {
52 | const includesFiles = [
53 | "tailwind.config.js",
54 | "postcss.config.js",
55 | "go.mod",
56 | "hugo.toml",
57 | "assets",
58 | "config",
59 | "data",
60 | "content",
61 | "i18n",
62 | "static",
63 | ];
64 |
65 | const folder = createNewfolder(rootFolder, "exampleSite");
66 |
67 | fs.readdirSync(rootFolder, { withFileTypes: true }).forEach((file) => {
68 | if (includesFiles.includes(file.name)) {
69 | if (file.isDirectory()) {
70 | const destination = path.join(rootFolder, "exampleSite", file.name);
71 | fs.mkdirSync(destination, { recursive: true });
72 | iterateFilesAndFolders(path.join(rootFolder, file.name), {
73 | destinationRoot: destination,
74 | });
75 | deleteFolder(path.join(rootFolder, file.name));
76 | } else {
77 | fs.renameSync(
78 | path.join(rootFolder, file.name),
79 | path.join(folder, file.name)
80 | );
81 | }
82 | }
83 | });
84 |
85 | const themes = path.join(rootFolder, "themes");
86 | iterateFilesAndFolders(path.join(themes, getFolderName(rootFolder)), {
87 | destinationRoot: rootFolder,
88 | });
89 | deleteFolder(themes);
90 | }
91 | };
92 |
93 | setupTheme();
94 |
--------------------------------------------------------------------------------
/vercel-build.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | # default versions
4 | NODE_VERSION='18.16.1';
5 | GO_VERSION='1.20.5';
6 | HUGO_VERSION='0.115.1';
7 |
8 | # install Node.js
9 | # echo "Installing Node.js $NODE_VERSION..."
10 | # curl -sSOL https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}.tar.gz
11 | # tar -xzf node-v${NODE_VERSION}.tar.gz
12 | # export PATH=$PATH:/usr/local/bin
13 | # rm -rf node-v${NODE_VERSION}.tar.gz
14 |
15 | echo "USING NODE VERSION: $(node -v)"
16 |
17 | # install Go
18 | echo "Installing Go $GO_VERSION..."
19 | curl -sSOL https://dl.google.com/go/go${GO_VERSION}.linux-amd64.tar.gz
20 | tar -C /usr/local -xzf go${GO_VERSION}.linux-amd64.tar.gz
21 | export PATH=$PATH:/usr/local/go/bin
22 | rm -rf go${GO_VERSION}.linux-amd64.tar.gz
23 | go version
24 |
25 | # install Hugo
26 | echo "Installing Hugo $HUGO_VERSION..."
27 | curl -sSOL https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_Linux-64bit.tar.gz
28 | tar -xzf hugo_extended_${HUGO_VERSION}_Linux-64bit.tar.gz
29 | mv hugo /usr/local/bin/
30 | rm -rf hugo_extended_${HUGO_VERSION}_Linux-64bit.tar.gz
31 | hugo version
32 |
33 | # project setup
34 | echo "Project setting up..."
35 | npm run project-setup
36 |
37 | # install dependencies
38 | echo "Installing project dependencies..."
39 | npm install
40 |
41 | # run the build command
42 | echo "Running the build command..."
43 | npm run build
44 |
--------------------------------------------------------------------------------
/vercel.json:
--------------------------------------------------------------------------------
1 | {
2 | "builds": [
3 | {
4 | "src": "vercel-build.sh",
5 | "use": "@vercel/static-build",
6 | "config": {
7 | "distDir": "public"
8 | }
9 | }
10 | ]
11 | }
12 |
--------------------------------------------------------------------------------