├── .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 |

👀Demo | Page Speed (96%)🚀

5 | 6 | 7 |

8 | 9 | 10 | 11 | 12 | 13 | license 14 | 15 | code size 16 | 17 | 18 | contributors 19 | 20 | 21 | follow on Twitter 23 |

24 | 25 | --- 26 | 27 |

28 | screenshot 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 | ![](https://demo.gethugothemes.com/icons/tick.png) | ![](https://demo.gethugothemes.com/icons/tick.png) | 38 | CSS and Js bundle with hugo pipe | ![](https://demo.gethugothemes.com/icons/tick.png) | ![](https://demo.gethugothemes.com/icons/tick.png) | 39 | Netlify settings predefine | ![](https://demo.gethugothemes.com/icons/tick.png) | ![](https://demo.gethugothemes.com/icons/tick.png) | 40 | Contact form Support (formspree) | ![](https://demo.gethugothemes.com/icons/tick.png) | ![](https://demo.gethugothemes.com/icons/tick.png) | 41 | Search by fuse.js and mark.js | ![](https://demo.gethugothemes.com/icons/tick.png) | ![](https://demo.gethugothemes.com/icons/tick.png) | 42 | GDPR consent enable | ![](https://demo.gethugothemes.com/icons/tick.png) | ![](https://demo.gethugothemes.com/icons/tick.png) | 43 | Color and fonts variable in config file | ![](https://demo.gethugothemes.com/icons/tick.png) | ![](https://demo.gethugothemes.com/icons/tick.png) | 44 | Mailchimp integrate | ![](https://demo.gethugothemes.com/icons/tick.png) | ![](https://demo.gethugothemes.com/icons/tick.png) | 45 | Instagram feed available | ![](https://demo.gethugothemes.com/icons/tick.png) | ![](https://demo.gethugothemes.com/icons/tick.png) | 46 | Google page speed optimized | ![](https://demo.gethugothemes.com/icons/tick.png) | ![](https://demo.gethugothemes.com/icons/tick.png) | 47 | Open graph meta tag | ![](https://demo.gethugothemes.com/icons/tick.png) | ![](https://demo.gethugothemes.com/icons/tick.png) | 48 | Twitter card meta tag | ![](https://demo.gethugothemes.com/icons/tick.png) | ![](https://demo.gethugothemes.com/icons/tick.png) | 49 | Multiple language support (Fr, En) | ![](https://demo.gethugothemes.com/icons/x.png) | ![](https://demo.gethugothemes.com/icons/tick.png) | 50 | Menu alignment customized (left, right, or center ) | ![](https://demo.gethugothemes.com/icons/x.png) | ![](https://demo.gethugothemes.com/icons/tick.png) | 51 | Multiple post layout ( grid or list) | ![](https://demo.gethugothemes.com/icons/x.png) | ![](https://demo.gethugothemes.com/icons/tick.png) | 52 | Sidebar option (left, right or false) | ![](https://demo.gethugothemes.com/icons/x.png) | ![](https://demo.gethugothemes.com/icons/tick.png) | 53 | 4+ Premium Pages | ![](https://demo.gethugothemes.com/icons/x.png) | ![](https://demo.gethugothemes.com/icons/tick.png) | 54 | Priority Support | ![](https://demo.gethugothemes.com/icons/x.png) | ![](https://demo.gethugothemes.com/icons/tick.png) | 55 | Get It Now | [![download-light](https://demo.gethugothemes.com/icons/download.png)](https://github.com/gethugothemes/bookworm-light/archive/refs/heads/master.zip) | [![download](https://demo.gethugothemes.com/icons/grab.png)](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 | [![Deploy to 76 | Netlify](https://www.netlify.com/img/deploy/button.svg)](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 | | [![Mega-Bundle-HUGO](https://demo.gethugothemes.com/thumbnails/bundle.png?)](https://gethugothemes.com/bundle/?utm_source=bookworm_github&utm_medium=referral&utm_campaign=github_theme_readme) | [![Logbook](https://demo.gethugothemes.com/thumbnails/logbook.png)](https://gethugothemes.com/products/logbook/) | [![Parsa](https://demo.gethugothemes.com/thumbnails/parsa.png)](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: '
instagram-image
' 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 | {{}} 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 |
4 |
5 |
6 |
7 |

oops!

8 |

Page not found

9 | Back To Home 10 |
11 |
12 |
13 |
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 | 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 |
5 |
6 |
7 |
8 |
9 |
10 | 11 | 12 |
13 |
14 | 15 | 16 |
17 |
18 | 19 | 20 |
21 |
22 | 23 | 24 |
25 | 26 | 27 |
28 |
29 |
30 |
31 |
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 |

35 | {{.Title}} 36 |

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 | 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 |
8 | {{ if .Params.image }} 9 | 10 | {{ partial "image.html" (dict "Src" .Params.image "Size" "150x150" "Class" "img-fluid rounded" "Alt" .Title) }} 11 |

{{.Title}}

12 |
13 | {{ else }} 14 | 15 | 16 |

{{.Title}}

17 |
18 | {{ end }} 19 | 26 |

{{- .Summary | truncate 100 -}}   Read More

27 |
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 | 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 | 87 |
88 |
89 |
90 |
91 |
92 |
93 | 94 | {{ with site.Params.instafeed }} 95 | {{ if .enable }} 96 |
97 |
98 |
99 |
100 |
101 |

Our Instagram

102 |

@{{.instagram_user}}

103 |
104 |
105 | {{ with .access_token }} 106 |
107 |
108 |
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 | 21 | {{ end }} 22 | {{ end }} 23 |
24 |
25 | 30 | 37 | {{ with site.Params.copyright }} 38 | 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 |
3 |
4 |
5 |
6 | 7 | 94 |
95 |
96 |
97 |
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 |
3 |
{{ i18n "categories" }}
4 | {{- if isset site.Taxonomies "categories" }} 5 | {{- if not (eq (len site.Taxonomies.categories) 0) }} 6 | 11 | {{- end }} 12 | {{- end }} 13 |
-------------------------------------------------------------------------------- /layouts/partials/widgets/search.html: -------------------------------------------------------------------------------- 1 | {{ "" | safeHTML }} 2 | {{ if site.Params.search }} 3 |
4 |
{{ i18n "search" }}
5 | 9 |
10 | {{ end }} -------------------------------------------------------------------------------- /layouts/partials/widgets/social.html: -------------------------------------------------------------------------------- 1 | {{ "" | safeHTML }} 2 |
3 |

{{ i18n "social" }}

4 | 9 |
-------------------------------------------------------------------------------- /layouts/partials/widgets/tags.html: -------------------------------------------------------------------------------- 1 | {{ "" | safeHTML }} 2 |
3 |

{{ i18n "tags" }}

4 | {{- if isset site.Taxonomies "tags" }} 5 | {{- if not (eq (len site.Taxonomies.tags) 0) }} 6 | 11 | {{- end }} 12 | {{- end }} 13 |
-------------------------------------------------------------------------------- /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 | --------------------------------------------------------------------------------