214 Commits

Author SHA1 Message Date
Emruz Hossain d5fb8e5313 Fix embed-pdf short code not rendering pdf file (#844)
Signed-off-by: hossainemruz <hossainemruz@gmail.com>
2023-12-08 16:04:58 +00:00
Bernat Borràs Civil bb9fec2e5d Fix taken courses collapsible (#840)
* Fix taken courses collapsible

* Remove space

* Reorder functions
2023-12-07 00:48:50 +06:00
Emruz Hossain 93dc9dbb26 Add lighthouse score check (#837)
* Add lighthouse check

Signed-off-by: hossainemruz <hossainemruz@gmail.com>

* Fix URL

Signed-off-by: hossainemruz <hossainemruz@gmail.com>

---------

Signed-off-by: hossainemruz <hossainemruz@gmail.com>
2023-11-23 15:18:52 +06:00
hossainemruz 434061ea6b Update netlify.toml
Signed-off-by: hossainemruz <hossainemruz@gmail.com>
2023-11-23 15:02:20 +06:00
hossainemruz 40d121bf2c Update replace dir
Signed-off-by: hossainemruz <hossainemruz@gmail.com>
2023-11-23 15:00:41 +06:00
Emruz Hossain bb56bfbc77 Add Netlify configuration (#836)
Signed-off-by: hossainemruz <hossainemruz@gmail.com>
2023-11-23 08:21:54 +00:00
Emruz Hossain 93fc487111 Refactor workflows (#835)
Signed-off-by: hossainemruz <hossainemruz@gmail.com>
2023-11-21 14:42:39 +06:00
Bernat Borràs Civil e5230e8c93 Add minute translation for catalan, spanish and french (#833) 2023-11-13 17:53:02 +00:00
Nirjas Jakilim 017ab6262a Updated min hugo version required on theme configuration (#830)
updated theme.toml to reflect with the latest minimum hugo version requirement.
2023-10-31 15:43:30 +00:00
Emruz Hossain cd2546d4e8 Add tooltiop for scroll-to-top button (#829)
Signed-off-by: hossainemruz <hossainemruz@gmail.com>
2023-10-31 08:24:54 +00:00
Emruz Hossain c00d676b26 Update Hugo version in README (#828)
Signed-off-by: hossainemruz <hossainemruz@gmail.com>
2023-10-31 08:01:38 +00:00
Luca Argentieri 05c9d3d850 Add self-hosted goat counter (#826)
* Add self-hosted goat counter

* GoatCounter custom instance and beckward compatibility

---------

Co-authored-by: SilverLuke <luca99.argentieri@gmail.com>
Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
2023-10-31 07:15:28 +00:00
Augusto Pace e61d6b796b Fixed localization of post cards (#821)
* Fixed date localization on post card

* fixed also labeling localization for post card

* adressed change request by using the hugo feature of singular/plural automagic for translation

* Fix reading time translation

Signed-off-by: hossainemruz <hossainemruz@gmail.com>

---------

Signed-off-by: hossainemruz <hossainemruz@gmail.com>
Co-authored-by: hossainemruz <hossainemruz@gmail.com>
2023-10-30 04:27:14 +00:00
dependabot[bot] fbbef3b2c5 Bump actions/setup-node from 3 to 4 (#822)
Bumps [actions/setup-node](https://github.com/actions/setup-node) from 3 to 4.
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](https://github.com/actions/setup-node/compare/v3...v4)

---
updated-dependencies:
- dependency-name: actions/setup-node
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-24 11:51:41 +00:00
Emruz Hossain 69611695e7 Fix search result card layout (#820)
Signed-off-by: hossainemruz <hossainemruz@gmail.com>
2023-10-20 20:20:26 +00:00
Bernat Borràs Civil fecc0546e6 Fix distorted post card images (issue #808) (#819) 2023-10-18 17:12:57 +00:00
Bernat Borràs Civil 45b0b5b704 Fix tag separation in post cards (#818) 2023-10-18 15:12:55 +00:00
dependabot[bot] acd4f63cda Bump actions/checkout from 4.1.0 to 4.1.1 (#817)
Bumps [actions/checkout](https://github.com/actions/checkout) from 4.1.0 to 4.1.1.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v4.1.0...v4.1.1)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-18 11:58:10 +00:00
Bernat Borràs Civil aa7bdb0899 Justify post content (issue #831: Text in post is not justified) (#815)
* Justify content

* Justify content

* Remove redundant justification

* Remove inline css

---------

Co-authored-by: Emruz Hossain <hossainemruz@gmail.com>
2023-10-17 19:39:53 +00:00
dependabot[bot] 5b31653ed2 Bump release-drafter/release-drafter from 5.24.0 to 5.25.0 (#814)
Bumps [release-drafter/release-drafter](https://github.com/release-drafter/release-drafter) from 5.24.0 to 5.25.0.
- [Release notes](https://github.com/release-drafter/release-drafter/releases)
- [Commits](https://github.com/release-drafter/release-drafter/compare/v5.24.0...v5.25.0)

---
updated-dependencies:
- dependency-name: release-drafter/release-drafter
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-17 11:31:42 +00:00
dependabot[bot] e35f917370 Bump postcss from 8.4.21 to 8.4.31 (#805)
Bumps [postcss](https://github.com/postcss/postcss) from 8.4.21 to 8.4.31.
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/postcss/compare/8.4.21...8.4.31)

---
updated-dependencies:
- dependency-name: postcss
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Emruz Hossain <hossainemruz@gmail.com>
2023-10-16 18:06:19 +00:00
Bernat Borràs Civil a917e1e3f7 Add input color (#812) 2023-10-16 05:01:50 +00:00
Bernat Borràs Civil bd2181eaca Fix featured post section after update (#807) 2023-10-15 10:41:39 +00:00
Emruz Hossain e8f8f3b22b Fix post author image position + responsiveness (#804)
Signed-off-by: hossainemruz <hossainemruz@gmail.com>
2023-10-06 19:32:57 +00:00
Mariatta 1dbe8aca45 Create mastodon embed shortcode (#788)
This shortcode can be used as follows:

```
{{<mastodon server="" user="" id="">}}
```

It defaults to mastodon.social server.


Closes #787

Co-authored-by: Emruz Hossain <hossainemruz@gmail.com>
2023-10-07 01:06:16 +06:00
Bernat Borràs Civil a1188673ad Add section to feature some posts in the main page (#786)
* Add working-on section

* Remove more posts button in working on

* Rename working-on.html to featured-posts.html

* Iterate posts from config file

* Remove unnecessary code in featured-posts.html

---------

Co-authored-by: Emruz Hossain <hossainemruz@gmail.com>
2023-10-07 01:01:45 +06:00
Vincent Ducamps 539828cbff fix dark mode: absolute to relative icon path (#790) 2023-10-07 00:55:18 +06:00
David Davó 42d3c650f8 Fixed navbar scroll spy (#798) (#799)
* Fixed navbar scroll spy

* Created get-section-url helper

* Fix URL for home section

Signed-off-by: hossainemruz <hossainemruz@gmail.com>

---------

Signed-off-by: hossainemruz <hossainemruz@gmail.com>
Co-authored-by: Emruz Hossain <hossainemruz@gmail.com>
2023-10-07 00:38:18 +06:00
Emruz Hossain 03d263c4a1 Remove re-write warning message (#803) 2023-10-05 09:25:56 +00:00
Emruz Hossain c943f39617 Fix theme icon in transparent menu (#801)
Signed-off-by: hossainemruz <hossainemruz@gmail.com>
2023-09-29 23:17:47 +00:00
Emruz Hossain 5f0aebcf68 Implement proper dark mode (#800)
* Implement proper dark mode

Signed-off-by: hossainemruz <hossainemruz@gmail.com>

* Fix footer color in light mode

Signed-off-by: hossainemruz <hossainemruz@gmail.com>

---------

Signed-off-by: hossainemruz <hossainemruz@gmail.com>
2023-09-30 05:04:48 +06:00
Emruz Hossain 6dc9d1d33d Refactor CSS (#785)
* Refactor CSS

Signed-off-by: hossainemruz <hossainemruz@gmail.com>

* Refactor about section

Signed-off-by: hossainemruz <hossainemruz@gmail.com>

* Refactor CSS for experiences section

Signed-off-by: hossainemruz <hossainemruz@gmail.com>

* Update education section

Signed-off-by: hossainemruz <hossainemruz@gmail.com>

* Update projects section

Signed-off-by: hossainemruz <hossainemruz@gmail.com>

* Update publication + accomplishment section

Signed-off-by: hossainemruz <hossainemruz@gmail.com>

* Update achievements section

Signed-off-by: hossainemruz <hossainemruz@gmail.com>

* Refactor footer CSS

Signed-off-by: hossainemruz <hossainemruz@gmail.com>

* Re-use section title adjustment css for top header

Signed-off-by: hossainemruz <hossainemruz@gmail.com>

* Refactor navbar CSS

Signed-off-by: hossainemruz <hossainemruz@gmail.com>

* Refactor sidebar CSS

Signed-off-by: hossainemruz <hossainemruz@gmail.com>

* Use unified navbar for all pages

Signed-off-by: hossainemruz <hossainemruz@gmail.com>

* Refactor 404 page CSS

Signed-off-by: hossainemruz <hossainemruz@gmail.com>

* Refactor list page css

Signed-off-by: hossainemruz <hossainemruz@gmail.com>

* Fix notes page css

Signed-off-by: hossainemruz <hossainemruz@gmail.com>

* Refactor single page css

Signed-off-by: hossainemruz <hossainemruz@gmail.com>

* Introduce color variables

Signed-off-by: hossainemruz <hossainemruz@gmail.com>

---------

Signed-off-by: hossainemruz <hossainemruz@gmail.com>
2023-09-29 04:27:19 +06:00
dependabot[bot] 77447b7723 Bump actions/checkout from 4.0.0 to 4.1.0 (#795)
Bumps [actions/checkout](https://github.com/actions/checkout) from 4.0.0 to 4.1.0.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v4.0.0...v4.1.0)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-09-25 11:19:33 +00:00
dependabot[bot] bd7ad1148d Bump actions/checkout from 3.6.0 to 4.0.0 (#792)
Bumps [actions/checkout](https://github.com/actions/checkout) from 3.6.0 to 4.0.0.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v3.6.0...v4.0.0)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-09-05 11:45:44 +00:00
dependabot[bot] cc0b957979 Bump actions/checkout from 3.5.3 to 3.6.0 (#789)
Bumps [actions/checkout](https://github.com/actions/checkout) from 3.5.3 to 3.6.0.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v3.5.3...v3.6.0)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-08-25 11:22:23 +00:00
Bernat Borràs Civil 80205a7117 Add reading time, #679 (#784)
* Add reading time

* Add reading time
2023-07-31 16:30:13 +00:00
ZeYanLin 8f2d583ab6 Support Cloudflare Web Analytics (#763)
* Support Cloudflare Web Analytics

* Support Cloudflare Web Analytics

---------

Co-authored-by: Emruz Hossain <hossainemruz@gmail.com>
2023-07-30 07:48:13 +00:00
Bernat Borràs Civil 08017d5977 Add possibility to show tags on post cards (#782)
* Add possibility to show tags on post cards

* Add on_card tags in exampleSite

---------

Co-authored-by: Emruz Hossain <hossainemruz@gmail.com>
2023-07-29 15:21:26 +00:00
Emruz Hossain 0e12222cc3 Fix index featching during search (#783)
Signed-off-by: hossainemruz <hossainemruz@gmail.com>
2023-07-29 02:09:17 +06:00
hossainemruz 678d955044 Fix search using incorrect element id
Signed-off-by: hossainemruz <hossainemruz@gmail.com>
2023-07-29 00:57:50 +06:00
Emruz Hossain 55560f40bd Fix CSS not being applied in tags (#780)
Signed-off-by: hossainemruz <hossainemruz@gmail.com>
2023-07-28 00:15:51 +06:00
dependabot[bot] 0afcdcd468 Bump word-wrap from 1.2.3 to 1.2.4 (#778)
Bumps [word-wrap](https://github.com/jonschlinkert/word-wrap) from 1.2.3 to 1.2.4.
- [Release notes](https://github.com/jonschlinkert/word-wrap/releases)
- [Commits](https://github.com/jonschlinkert/word-wrap/compare/1.2.3...1.2.4)

---
updated-dependencies:
- dependency-name: word-wrap
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-07-27 22:23:42 +06:00
Bernat Borràs Civil 5372e856d7 Add space between expanding icon and category name (Sidebar) (#773) 2023-07-04 07:28:03 +00:00
Bernat Borràs Civil a128873f20 Fix takenCourses buttons (#772) 2023-07-03 22:14:35 +06:00
Bernat Borràs Civil 9a759090cd Add extracurricular activities url (#770)
* Add extracurricular activities url

* Allow markdown in extracurricular activities
2023-07-03 08:16:52 +00:00
Bernat Borràs Civil cd80fc9015 Fix Issue: Skills logo misaligned #753 (#769) 2023-07-03 06:59:41 +00:00
dependabot[bot] 53f1bc9137 Bump release-drafter/release-drafter from 5.23.0 to 5.24.0 (#767)
Bumps [release-drafter/release-drafter](https://github.com/release-drafter/release-drafter) from 5.23.0 to 5.24.0.
- [Release notes](https://github.com/release-drafter/release-drafter/releases)
- [Commits](https://github.com/release-drafter/release-drafter/compare/v5.23.0...v5.24.0)

---
updated-dependencies:
- dependency-name: release-drafter/release-drafter
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-06-28 11:57:52 +00:00
dependabot[bot] 147a4c1a0f Bump actions/checkout from 3.5.2 to 3.5.3 (#766)
Bumps [actions/checkout](https://github.com/actions/checkout) from 3.5.2 to 3.5.3.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v3.5.2...v3.5.3)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-06-12 11:57:53 +00:00
Miradil 83d10c59ad Fixed changing default color scheme in config, affecting the result (#755) 2023-04-29 04:56:50 +00:00
dependabot[bot] 4940d4a929 Bump actions/checkout from 3.5.1 to 3.5.2 (#750)
Bumps [actions/checkout](https://github.com/actions/checkout) from 3.5.1 to 3.5.2.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v3.5.1...v3.5.2)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-04-14 11:57:58 +00:00
dependabot[bot] 88bfd76efd Bump actions/checkout from 3.5.0 to 3.5.1 (#749)
Bumps [actions/checkout](https://github.com/actions/checkout) from 3.5.0 to 3.5.1.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v3.5.0...v3.5.1)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-04-13 11:57:59 +00:00
Emily 8d34a7573b fix cardHeader (#747) 2023-04-10 16:07:03 +00:00
dependabot[bot] 951557050e Bump peter-evans/create-pull-request from 4 to 5 (#746)
Bumps [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) from 4 to 5.
- [Release notes](https://github.com/peter-evans/create-pull-request/releases)
- [Commits](https://github.com/peter-evans/create-pull-request/compare/v4...v5)

---
updated-dependencies:
- dependency-name: peter-evans/create-pull-request
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-04-05 11:57:54 +00:00
dependabot[bot] aa2aea46ee Bump actions/checkout from 3.4.0 to 3.5.0 (#744)
Bumps [actions/checkout](https://github.com/actions/checkout) from 3.4.0 to 3.5.0.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v3.4.0...v3.5.0)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-03-24 12:00:24 +00:00
dependabot[bot] 5bfe8b7428 Bump actions/checkout from 3.3.0 to 3.4.0 (#743)
Bumps [actions/checkout](https://github.com/actions/checkout) from 3.3.0 to 3.4.0.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v3.3.0...v3.4.0)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-03-16 11:58:01 +00:00
dependabot[bot] 5b281a7f57 Bump gaurav-nelson/github-action-markdown-link-check from 1.0.14 to 1.0.15 (#739)
Bumps [gaurav-nelson/github-action-markdown-link-check](https://github.com/gaurav-nelson/github-action-markdown-link-check) from 1.0.14 to 1.0.15.
- [Release notes](https://github.com/gaurav-nelson/github-action-markdown-link-check/releases)
- [Commits](https://github.com/gaurav-nelson/github-action-markdown-link-check/compare/1.0.14...1.0.15)

---
updated-dependencies:
- dependency-name: gaurav-nelson/github-action-markdown-link-check
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-03-01 11:58:28 +00:00
dependabot[bot] a71b73840e Bump release-drafter/release-drafter from 5.22.0 to 5.23.0 (#737)
Bumps [release-drafter/release-drafter](https://github.com/release-drafter/release-drafter) from 5.22.0 to 5.23.0.
- [Release notes](https://github.com/release-drafter/release-drafter/releases)
- [Commits](https://github.com/release-drafter/release-drafter/compare/v5.22.0...v5.23.0)

---
updated-dependencies:
- dependency-name: release-drafter/release-drafter
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-02-21 11:57:46 +00:00
Andrea b99f5ada20 Fix italian traslation and uncommented (#736) 2023-02-19 16:39:39 +00:00
Emruz Hossain 0d20efe1b7 Support rel atribute in social links (#735)
Signed-off-by: hossainemruz <hossainemruz@gmail.com>
2023-02-09 17:03:59 +00:00
Reo Uehara b498330793 Add: templates: twitter-card (#732)
Co-authored-by: Emruz Hossain <hossainemruz@gmail.com>
2023-01-28 00:10:58 +06:00
hossainemruz e5fcc95e8b Unify package.json
Signed-off-by: hossainemruz <hossainemruz@gmail.com>
2023-01-27 23:19:59 +06:00
Aaron Qian d9eccf58f4 Bundle CSS with Hugo's Sass feature (#705)
* migrate bootstrap and flags to bundle

* migrated main.css

* migrate navbar.css and plyr

* migrated mulish font and darkreader

* migrated static/css/sections stylesheets

* migrated list page and sidebar styles

* migrated search.html ( nothing to add )

* migration single page styles

* remove duplicated style tags

* migrate notes.  Deleted unused css in static

* migrate 404 css to bundle

* migrate katex styles

* migrate embedpdf styles

* migrated katex css

---------

Co-authored-by: Aaron Qian <aaron@yeet.io>
2023-01-27 22:56:34 +06:00
github-actions[bot] cef76eb748 Update and run autoprefixer (#733)
Co-authored-by: hossainemruz <hossainemruz@users.noreply.github.com>
Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
2023-01-26 18:22:39 +00:00
github-actions[bot] 0c8c8ce2d4 Update and run autoprefixer (#731)
Co-authored-by: hossainemruz <hossainemruz@users.noreply.github.com>
Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
2023-01-26 18:21:31 +00:00
hossainemruz cefa24409e Update usage guide in README
Signed-off-by: hossainemruz <hossainemruz@gmail.com>
2023-01-27 00:20:16 +06:00
Emruz Hossain 2f3a30a4ff Add warning about on-going re-write in main branch 2023-01-16 00:45:08 +06:00
dependabot[bot] 3957190425 Bump actions/checkout from 3.2.0 to 3.3.0 (#728)
Bumps [actions/checkout](https://github.com/actions/checkout) from 3.2.0 to 3.3.0.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v3.2.0...v3.3.0)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-01-06 11:02:14 +00:00
Igor Rodriguez 6620c35f5d Brazilian Portuguese translation (#727) 2023-01-06 04:05:35 +00:00
Emruz Hossain 374b4019d8 Fix build (#724)
Signed-off-by: hossainemruz <hossainemruz@gmail.com>

Signed-off-by: hossainemruz <hossainemruz@gmail.com>
2023-01-05 19:12:55 +00:00
github-actions[bot] 95ecdfb83c Update and run autoprefixer (#723)
Co-authored-by: kodiakhq[bot] <kodiakhq[bot]@users.noreply.github.com>
Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
2023-01-05 19:00:42 +00:00
github-actions[bot] 38ea2c6c6e Update and run autoprefixer (#721)
Co-authored-by: hossainemruz <hossainemruz@users.noreply.github.com>
Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
2023-01-05 18:59:39 +00:00
Emruz Hossain 85f6413b7e Update config.yaml for exampleSite to match new structure (#722)
Signed-off-by: hossainemruz <hossainemruz@gmail.com>

Signed-off-by: hossainemruz <hossainemruz@gmail.com>
2023-01-05 18:58:41 +00:00
Aaron Qian 02db3d3044 Bundling JS with ESBuild (#702)
* add npm dependencies used in this theme

* implement helper to configure JS and ESBuild

* migrate jquery popper.js bootstrap fontawesome to js bundle

* refactor main.js into smaller pieces, and moved navbar.js to assets

* remove list.js. It adjusts post card height to be the same, but is actually not needed.

* refactored notes.js, search.js, single.js into application.js

* move ityped to js asset, implement experiences horizontal vertical line in css

* align recent post height via css

* migrated home.js and refactored into various sections

* migrated darkMode feature to js bundle

* moved mermaid feature to js bundle

* migrate syntax highlight to js bundle

* migrate katex ( js portion ) to js bundle

* migrate pdf-js to js bundle by delegating to cdn

* set explicit comparisions for feature envvars so js can properly optimize

* removed goat-counter

* more fixes for broken achievements and small bugs

* more bug fixes

* allow configuration of hightlight.js, fix video-player shortcode

* remove jquery all together

* add null handling and fix merge conflicts

Co-authored-by: Aaron Qian <aaron@yeet.io>
2023-01-06 00:42:54 +06:00
dependabot[bot] fe14b0fbf5 Bump release-drafter/release-drafter from 5.21.1 to 5.22.0 (#718)
Bumps [release-drafter/release-drafter](https://github.com/release-drafter/release-drafter) from 5.21.1 to 5.22.0.
- [Release notes](https://github.com/release-drafter/release-drafter/releases)
- [Commits](https://github.com/release-drafter/release-drafter/compare/v5.21.1...v5.22.0)

---
updated-dependencies:
- dependency-name: release-drafter/release-drafter
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-01-03 11:02:44 +00:00
Emruz Hossain d3c2c6d1fc Add exampleSite + update module to v4 (#717)
Signed-off-by: hossainemruz <hossainemruz@gmail.com>

Signed-off-by: hossainemruz <hossainemruz@gmail.com>
2022-12-28 19:25:33 +00:00
hossainemruz 65c71f88ea Use relative URL in opengraph header
Signed-off-by: hossainemruz <hossainemruz@gmail.com>
2022-12-28 03:51:46 +06:00
Emruz Hossain 58ef60dc65 Use rendering hook for link (#716)
Signed-off-by: hossainemruz <hossainemruz@gmail.com>

Signed-off-by: hossainemruz <hossainemruz@gmail.com>
2022-12-27 21:28:51 +00:00
hossainemruz 2d43234614 Update module file
Signed-off-by: hossainemruz <hossainemruz@gmail.com>
2022-12-27 02:10:47 +06:00
hossainemruz dedd6ca0b7 Update Hugo Module path
Signed-off-by: hossainemruz <hossainemruz@gmail.com>
2022-12-27 01:55:52 +06:00
zicklam 65de557d60 Add buymeacoffee.com widget (#707)
Co-authored-by: Emruz Hossain <hossainemruz@gmail.com>
2022-12-26 23:23:55 +06:00
github-actions[bot] 75845423c9 add vendor specific css prefixes (#714)
Co-authored-by: hossainemruz <hossainemruz@users.noreply.github.com>
Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
2022-12-26 23:20:23 +06:00
Bernat Borràs Civil bafd3034ae Add catalan translation (#710)
* Add catalan translation

* Add catalan language

* Add catalan language in readme

Co-authored-by: Emruz Hossain <hossainemruz@gmail.com>
2022-12-26 23:19:54 +06:00
github-actions[bot] 71d2db71d9 Update and run autoprefixer (#713)
Co-authored-by: hossainemruz <hossainemruz@users.noreply.github.com>
Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
2022-12-26 17:19:13 +00:00
M. Akif Tokatlioglu 657c50d941 Fixed spelling problems in tr.toml (#711)
Co-authored-by: Emruz Hossain <hossainemruz@gmail.com>
2022-12-26 23:18:15 +06:00
dependabot[bot] 1f22a677ca Bump actions/checkout from 3.1.0 to 3.2.0 (#712)
Bumps [actions/checkout](https://github.com/actions/checkout) from 3.1.0 to 3.2.0.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v3.1.0...v3.2.0)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-12-26 23:15:44 +06:00
github-actions[bot] 6704952afa Update and run autoprefixer (#704)
Co-authored-by: hossainemruz <hossainemruz@users.noreply.github.com>
Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
2022-11-12 15:09:11 +00:00
github-actions[bot] 108bd93598 Update and run autoprefixer (#700)
Co-authored-by: kodiakhq[bot] <kodiakhq[bot]@users.noreply.github.com>
Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
2022-11-12 15:08:16 +00:00
Hiroya Onoe 996346b249 Fix links of posts, notes, and tags/%s directories redirection (#703) 2022-11-12 21:07:19 +06:00
Mathias 2cfe671487 Fix typo in i18n/fr.toml (#699) 2022-11-11 16:52:06 +00:00
Emruz Hossain 7c849ccf21 Support external link in sidebar (#696)
Signed-off-by: hossainemruz <hossainemruz@gmail.com>

Signed-off-by: hossainemruz <hossainemruz@gmail.com>
2022-11-10 16:57:30 +00:00
Emily f475ddcef8 fix valine comment bug (#692)
Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
2022-11-08 20:13:47 +06:00
eishundo c3dc76652e Add missing "alt" attributes to img tags in theme-selector.html (#689)
Co-authored-by: eishundo <eishundo@users.noreply.github.com>
2022-11-08 14:00:18 +00:00
Emruz Hossain a78b031ca9 Don't show search cards in search result (#690)
Signed-off-by: hossainemruz <hossainemruz@gmail.com>

Signed-off-by: hossainemruz <hossainemruz@gmail.com>
2022-11-06 17:17:30 +00:00
eishundo 76ff0e4e40 Fix recent-posts.html to not display search card (#687)
Co-authored-by: eishundo <eishundo@users.noreply.github.com>
2022-11-03 17:28:31 +00:00
Emruz Hossain c3f0bd449e Look for hero image in page bundle (#684)
Signed-off-by: hossainemruz <hossainemruz@gmail.com>

Signed-off-by: hossainemruz <hossainemruz@gmail.com>
2022-11-02 17:56:27 +00:00
github-actions[bot] a16652581b add vendor specific css prefixes (#683)
Co-authored-by: hossainemruz <hossainemruz@users.noreply.github.com>
2022-10-30 23:08:17 +06:00
Bernat Borràs Civil 7175b0d21f More Posts button (#680)
* Add More Posts button

* Update recent-posts.html

* Update recent-posts.html

Co-authored-by: Emruz Hossain <hossainemruz@gmail.com>
2022-10-30 22:46:36 +06:00
Joan 33d91af120 Centered Tags on Posts page (#681)
* Centered Tags on Posts page

* Update single.html

Proper Centering withour Removing <ul></ul>
2022-10-30 15:02:45 +00:00
dependabot[bot] 1dc00ccb1e Bump peaceiris/actions-hugo from 2.5.0 to 2.6.0 (#678)
Bumps [peaceiris/actions-hugo](https://github.com/peaceiris/actions-hugo) from 2.5.0 to 2.6.0.
- [Release notes](https://github.com/peaceiris/actions-hugo/releases)
- [Changelog](https://github.com/peaceiris/actions-hugo/blob/main/CHANGELOG.md)
- [Commits](https://github.com/peaceiris/actions-hugo/compare/v2.5.0...v2.6.0)

---
updated-dependencies:
- dependency-name: peaceiris/actions-hugo
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-24 11:05:47 +00:00
Lukas Nagel 36f42bde9d Better Support if browser blocks GoatCounter (#676)
* Added local goat counter

* Undid wrong commit
2022-10-19 16:28:14 +00:00
Emruz Hossain 33c10915a8 Fix counter.dev analytics (#674) 2022-10-18 16:06:22 +00:00
Pablo Marcos 0e8e182e33 Add PDF Shortcut (#672)
* Add Blogtrottr as newsletter provider

* Fixed absLangURL issue with sections in footer

* Added embed-pdf shortcode

pdf-js is sered locally to preserve privacy and comply with GDPR

Co-authored-by: Emruz Hossain <hossainemruz@gmail.com>
2022-10-18 21:47:41 +06:00
dependabot[bot] 211a0785fa Bump release-drafter/release-drafter from 5.21.0 to 5.21.1 (#673)
Bumps [release-drafter/release-drafter](https://github.com/release-drafter/release-drafter) from 5.21.0 to 5.21.1.
- [Release notes](https://github.com/release-drafter/release-drafter/releases)
- [Commits](https://github.com/release-drafter/release-drafter/compare/v5.21.0...v5.21.1)

---
updated-dependencies:
- dependency-name: release-drafter/release-drafter
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-18 11:04:40 +00:00
Alexandre Neto 32c5c04632 Allow custom hero images Fixes #379 (#670)
Co-authored-by: Emruz Hossain <hossainemruz@gmail.com>
2022-10-15 17:18:50 +00:00
github-actions[bot] c52b1f8dcc add vendor specific css prefixes (#669)
Co-authored-by: kodiakhq[bot] <kodiakhq[bot]@users.noreply.github.com>
2022-10-15 21:25:43 +06:00
Cyb3r Jak3 1685b0a3c4 Only load flag CSS if showing flag icons (#666) 2022-10-15 15:14:01 +00:00
Lukas Nagel bd10f18553 Added Hugo-Module (#650)
* Updated Gitignore

* Added GoModule

* fixed typo

* Updated Module-Name

Co-authored-by: Emruz Hossain <hossainemruz@gmail.com>
2022-10-12 18:46:25 +00:00
Lukas Nagel 1ca18416d1 Centered Arrow (#664) 2022-10-11 15:33:18 +06:00
imgbot[bot] 3ef375f488 [ImgBot] Optimize images (#659)
*Total -- 2,013.46kb -> 1,961.08kb (2.6%)

/static/icons/computer-svgrepo-com.svg -- 1.33kb -> 0.89kb (32.62%)
/static/flags/1x1/ax.svg -- 0.53kb -> 0.44kb (15.61%)
/static/flags/1x1/in.svg -- 1.06kb -> 0.90kb (14.67%)
/static/icons/moon-svgrepo-com.svg -- 3.12kb -> 2.67kb (14.46%)
/static/flags/1x1/ch.svg -- 0.28kb -> 0.25kb (12.85%)
/static/flags/1x1/ps.svg -- 0.53kb -> 0.46kb (12.83%)
/static/flags/1x1/uz.svg -- 1.42kb -> 1.24kb (12.69%)
/static/flags/1x1/eu.svg -- 1.22kb -> 1.06kb (12.68%)
/static/flags/1x1/bj.svg -- 0.48kb -> 0.42kb (12.5%)
/static/flags/1x1/ve.svg -- 1.16kb -> 1.02kb (11.99%)
/static/flags/1x1/to.svg -- 0.35kb -> 0.31kb (11.73%)
/static/icons/sun-svgrepo-com.svg -- 3.44kb -> 3.04kb (11.63%)
/static/flags/1x1/tz.svg -- 0.58kb -> 0.52kb (11.52%)
/static/flags/1x1/jo.svg -- 0.67kb -> 0.60kb (11.05%)
/static/flags/1x1/sl.svg -- 0.42kb -> 0.38kb (10.57%)
/static/flags/1x1/sd.svg -- 0.48kb -> 0.43kb (10.41%)
/static/flags/1x1/kw.svg -- 0.49kb -> 0.44kb (10.12%)
/static/flags/1x1/cg.svg -- 0.46kb -> 0.41kb (9.87%)
/static/flags/1x1/cf.svg -- 0.61kb -> 0.55kb (9.7%)
/static/flags/1x1/ly.svg -- 0.51kb -> 0.46kb (9.68%)
/static/flags/1x1/pk.svg -- 0.67kb -> 0.61kb (9.46%)
/static/flags/1x1/za.svg -- 0.86kb -> 0.78kb (9.41%)
/static/flags/1x1/la.svg -- 0.49kb -> 0.44kb (9.18%)
/static/flags/1x1/bw.svg -- 0.25kb -> 0.22kb (9.16%)
/static/flags/1x1/ir.svg -- 14.96kb -> 13.59kb (9.13%)
/static/flags/1x1/cd.svg -- 0.49kb -> 0.45kb (9.13%)
/static/flags/1x1/bs.svg -- 0.55kb -> 0.50kb (9.03%)
/static/flags/1x1/cu.svg -- 0.56kb -> 0.51kb (8.95%)
/static/flags/1x1/cl.svg -- 0.56kb -> 0.51kb (8.95%)
/static/flags/1x1/tl.svg -- 0.56kb -> 0.51kb (8.9%)
/static/flags/1x1/mu.svg -- 0.31kb -> 0.28kb (8.86%)
/static/flags/1x1/bv.svg -- 0.57kb -> 0.52kb (8.81%)
/static/flags/1x1/is.svg -- 0.51kb -> 0.47kb (8.8%)
/static/flags/1x1/dj.svg -- 0.57kb -> 0.52kb (8.78%)
/static/flags/1x1/gm.svg -- 0.37kb -> 0.34kb (8.71%)
/static/flags/1x1/fo.svg -- 0.52kb -> 0.47kb (8.66%)
/static/flags/1x1/kr.svg -- 0.81kb -> 0.74kb (8.56%)
/static/flags/1x1/jp.svg -- 0.47kb -> 0.43kb (8.52%)
/static/flags/1x1/ye.svg -- 0.27kb -> 0.24kb (8.46%)
/static/flags/1x1/hu.svg -- 0.27kb -> 0.24kb (8.42%)
/static/flags/1x1/ga.svg -- 0.27kb -> 0.25kb (8.36%)
/static/flags/1x1/ml.svg -- 0.27kb -> 0.25kb (8.33%)
/static/flags/1x1/td.svg -- 0.27kb -> 0.25kb (8.33%)
/static/flags/1x1/so.svg -- 0.48kb -> 0.44kb (8.3%)
/static/flags/1x1/vn.svg -- 0.48kb -> 0.44kb (8.3%)
/static/flags/1x1/pr.svg -- 0.60kb -> 0.55kb (8.29%)
/static/flags/1x1/cw.svg -- 0.66kb -> 0.61kb (8.25%)
/static/flags/1x1/pl.svg -- 0.21kb -> 0.20kb (8.22%)
/static/flags/1x1/ci.svg -- 0.27kb -> 0.25kb (8.21%)
/static/flags/1x1/lr.svg -- 0.67kb -> 0.62kb (8.12%)
/static/flags/1x1/th.svg -- 0.28kb -> 0.26kb (8.07%)
/static/flags/1x1/co.svg -- 0.28kb -> 0.26kb (8.04%)
/static/flags/1x1/ic.svg -- 0.28kb -> 0.26kb (8.04%)
/static/flags/1x1/be.svg -- 0.28kb -> 0.26kb (8.01%)
/static/flags/1x1/ru.svg -- 0.28kb -> 0.26kb (8.01%)
/static/flags/1x1/cp.svg -- 0.28kb -> 0.26kb (7.96%)
/static/flags/1x1/gf.svg -- 0.28kb -> 0.26kb (7.96%)
/static/flags/1x1/mf.svg -- 0.28kb -> 0.26kb (7.96%)
/static/flags/1x1/wf.svg -- 0.28kb -> 0.26kb (7.96%)
/static/flags/1x1/it.svg -- 0.28kb -> 0.26kb (7.96%)
/static/flags/1x1/pm.svg -- 0.28kb -> 0.26kb (7.96%)
/static/flags/1x1/bl.svg -- 0.28kb -> 0.26kb (7.96%)
/static/flags/1x1/gp.svg -- 0.28kb -> 0.26kb (7.96%)
/static/flags/1x1/yt.svg -- 0.28kb -> 0.26kb (7.96%)
/static/flags/1x1/re.svg -- 0.28kb -> 0.26kb (7.96%)
/static/flags/1x1/mq.svg -- 0.28kb -> 0.26kb (7.96%)
/static/flags/1x1/ie.svg -- 0.28kb -> 0.26kb (7.96%)
/static/flags/1x1/fr.svg -- 0.28kb -> 0.26kb (7.96%)
/static/flags/1x1/np.svg -- 1.10kb -> 1.02kb (7.96%)
/static/flags/1x1/cr.svg -- 0.28kb -> 0.26kb (7.93%)
/static/flags/1x1/bg.svg -- 0.28kb -> 0.26kb (7.9%)
/static/flags/1x1/gn.svg -- 0.29kb -> 0.26kb (7.88%)
/static/flags/1x1/pa.svg -- 0.64kb -> 0.59kb (7.79%)
/static/flags/1x1/ua.svg -- 0.23kb -> 0.21kb (7.76%)
/static/flags/1x1/tj.svg -- 1.74kb -> 1.60kb (7.75%)
/static/flags/1x1/mc.svg -- 0.23kb -> 0.21kb (7.69%)
/static/flags/1x1/mg.svg -- 0.29kb -> 0.27kb (7.69%)
/static/flags/1x1/lv.svg -- 0.23kb -> 0.21kb (7.69%)
/static/flags/1x1/tg.svg -- 0.71kb -> 0.66kb (7.67%)
/static/flags/1x1/lc.svg -- 0.36kb -> 0.33kb (7.63%)
/static/flags/1x1/ro.svg -- 0.29kb -> 0.27kb (7.62%)
/static/flags/1x1/aw.svg -- 11.79kb -> 10.90kb (7.59%)
/static/flags/1x1/at.svg -- 0.23kb -> 0.22kb (7.53%)
/static/flags/1x1/cm.svg -- 0.80kb -> 0.74kb (7.44%)
/static/flags/1x1/ag.svg -- 0.74kb -> 0.68kb (7.4%)
/static/flags/1x1/nz.svg -- 2.12kb -> 1.97kb (7.36%)
/static/flags/1x1/tw.svg -- 2.44kb -> 2.26kb (7.28%)
/static/flags/1x1/jm.svg -- 0.38kb -> 0.35kb (7.25%)
/static/flags/1x1/kp.svg -- 0.83kb -> 0.77kb (7.19%)
/static/flags/1x1/ng.svg -- 0.25kb -> 0.23kb (7%)
/static/flags/1x1/st.svg -- 0.90kb -> 0.83kb (6.98%)
/static/flags/1x1/nr.svg -- 0.65kb -> 0.60kb (6.93%)
/static/flags/1x1/tn.svg -- 0.72kb -> 0.67kb (6.92%)
/static/flags/1x1/kn.svg -- 0.79kb -> 0.74kb (6.91%)
/static/flags/1x1/gy.svg -- 0.47kb -> 0.43kb (6.9%)
/static/flags/1x1/gw.svg -- 0.87kb -> 0.81kb (6.88%)
/static/flags/1x1/rw.svg -- 0.73kb -> 0.68kb (6.85%)
/static/flags/1x1/na.svg -- 0.95kb -> 0.89kb (6.78%)
/static/flags/1x1/dm.svg -- 16.06kb -> 14.98kb (6.7%)
/static/flags/1x1/tt.svg -- 0.31kb -> 0.29kb (6.62%)
/static/flags/1x1/ee.svg -- 0.34kb -> 0.32kb (6.59%)
/static/flags/1x1/il.svg -- 0.83kb -> 0.78kb (6.59%)
/static/flags/1x1/gi.svg -- 2.87kb -> 2.68kb (6.47%)
/static/flags/1x1/gd.svg -- 1.79kb -> 1.67kb (6.4%)
/static/flags/1x1/km.svg -- 1.01kb -> 0.95kb (6.38%)
/static/flags/1x1/sn.svg -- 0.40kb -> 0.38kb (6.33%)
/static/flags/1x1/hn.svg -- 1.09kb -> 1.02kb (6.29%)
/static/flags/1x1/ai.svg -- 36.46kb -> 34.24kb (6.08%)
/static/flags/1x1/eh.svg -- 0.57kb -> 0.53kb (6.02%)
/static/flags/1x1/bi.svg -- 1.02kb -> 0.96kb (5.82%)
/static/flags/1x1/ht.svg -- 14.76kb -> 13.91kb (5.82%)
/static/flags/1x1/gr.svg -- 0.84kb -> 0.79kb (5.57%)
/static/flags/1x1/bf.svg -- 0.37kb -> 0.35kb (5.54%)
/static/flags/1x1/ke.svg -- 1.45kb -> 1.38kb (5.44%)
/static/flags/1x1/fm.svg -- 0.74kb -> 0.70kb (5.43%)
/static/flags/1x1/ae.svg -- 0.25kb -> 0.24kb (5.41%)
/static/flags/1x1/sg.svg -- 0.92kb -> 0.87kb (5.4%)
/static/flags/1x1/tc.svg -- 6.97kb -> 6.60kb (5.38%)
/static/flags/1x1/sb.svg -- 0.93kb -> 0.88kb (5.37%)
/static/flags/1x1/no.svg -- 0.31kb -> 0.29kb (5.35%)
/static/flags/1x1/sj.svg -- 0.31kb -> 0.29kb (5.35%)
/static/flags/1x1/sc.svg -- 0.31kb -> 0.30kb (5.3%)
/static/flags/1x1/vc.svg -- 0.48kb -> 0.46kb (5.27%)
/static/flags/1x1/je.svg -- 6.24kb -> 5.92kb (5.24%)
/static/flags/1x1/lt.svg -- 0.43kb -> 0.41kb (5.24%)
/static/flags/1x1/ss.svg -- 0.38kb -> 0.37kb (5.08%)
/static/flags/1x1/sv.svg -- 81.80kb -> 77.66kb (5.06%)
/static/flags/1x1/de.svg -- 0.21kb -> 0.20kb (5.05%)
/static/flags/1x1/ne.svg -- 0.27kb -> 0.26kb (5.02%)
/static/flags/1x1/tr.svg -- 0.56kb -> 0.53kb (4.9%)
/static/flags/1x1/bq.svg -- 0.22kb -> 0.21kb (4.89%)
/static/flags/1x1/nl.svg -- 0.22kb -> 0.21kb (4.89%)
/static/flags/1x1/cz.svg -- 0.22kb -> 0.21kb (4.87%)
/static/flags/1x1/gb-eng.svg -- 0.22kb -> 0.21kb (4.8%)
/static/flags/1x1/lu.svg -- 0.22kb -> 0.21kb (4.8%)
/static/flags/1x1/gh.svg -- 0.29kb -> 0.27kb (4.78%)
/static/flags/1x1/dk.svg -- 0.23kb -> 0.22kb (4.74%)
/static/flags/1x1/am.svg -- 0.23kb -> 0.22kb (4.66%)
/static/flags/1x1/fi.svg -- 0.23kb -> 0.22kb (4.64%)
/static/flags/1x1/kh.svg -- 7.10kb -> 6.77kb (4.63%)
/static/flags/1x1/mv.svg -- 0.30kb -> 0.28kb (4.61%)
/static/flags/1x1/et.svg -- 1.19kb -> 1.14kb (4.59%)
/static/flags/1x1/id.svg -- 0.17kb -> 0.17kb (4.49%)
/static/flags/1x1/gt.svg -- 35.28kb -> 33.71kb (4.46%)
/static/flags/1x1/sr.svg -- 0.31kb -> 0.30kb (4.42%)
/static/flags/1x1/py.svg -- 17.00kb -> 16.26kb (4.33%)
/static/flags/1x1/sy.svg -- 0.32kb -> 0.31kb (4.28%)
/static/flags/1x1/bd.svg -- 0.18kb -> 0.18kb (4.23%)
/static/flags/1x1/ni.svg -- 18.16kb -> 17.39kb (4.21%)
/static/flags/1x1/vu.svg -- 2.08kb -> 1.99kb (4.09%)
/static/flags/1x1/az.svg -- 0.48kb -> 0.46kb (4.04%)
/static/flags/1x1/hk.svg -- 3.46kb -> 3.33kb (3.84%)
/static/flags/1x1/cefta.svg -- 0.89kb -> 0.86kb (3.83%)
/static/flags/1x1/cv.svg -- 1.32kb -> 1.27kb (3.77%)
/static/flags/1x1/mm.svg -- 0.68kb -> 0.65kb (3.76%)
/static/flags/1x1/va.svg -- 88.67kb -> 85.34kb (3.75%)
/static/flags/1x1/pt.svg -- 8.54kb -> 8.22kb (3.72%)
/static/flags/1x1/ba.svg -- 1.21kb -> 1.16kb (3.72%)
/static/flags/1x1/gg.svg -- 0.61kb -> 0.58kb (3.7%)
/static/flags/1x1/mh.svg -- 0.74kb -> 0.71kb (3.69%)
/static/flags/1x1/tm.svg -- 30.74kb -> 29.60kb (3.69%)
/static/flags/1x1/si.svg -- 2.02kb -> 1.94kb (3.68%)
/static/flags/1x1/tf.svg -- 1.17kb -> 1.12kb (3.6%)
/static/flags/1x1/dz.svg -- 0.30kb -> 0.29kb (3.59%)
/static/flags/1x1/se.svg -- 0.22kb -> 0.21kb (3.52%)
/static/flags/1x1/mz.svg -- 2.53kb -> 2.45kb (3.51%)
/static/flags/1x1/gb-sct.svg -- 0.23kb -> 0.22kb (3.39%)
/static/flags/1x1/ug.svg -- 3.93kb -> 3.80kb (3.38%)
/static/flags/1x1/gl.svg -- 0.23kb -> 0.22kb (3.38%)
/static/flags/1x1/pg.svg -- 2.04kb -> 1.97kb (3.35%)
/static/flags/1x1/sz.svg -- 4.63kb -> 4.47kb (3.33%)
/static/flags/1x1/ws.svg -- 0.68kb -> 0.66kb (3.29%)
/static/flags/1x1/xx.svg -- 0.24kb -> 0.23kb (3.28%)
/static/flags/1x1/vg.svg -- 10.45kb -> 10.11kb (3.26%)
/static/flags/1x1/mr.svg -- 0.42kb -> 0.41kb (3.25%)
/static/flags/1x1/es-ga.svg -- 28.15kb -> 27.25kb (3.19%)
/static/flags/1x1/gb.svg -- 0.53kb -> 0.51kb (3.16%)
/static/flags/1x1/br.svg -- 7.60kb -> 7.36kb (3.15%)
/static/flags/1x1/nu.svg -- 0.82kb -> 0.79kb (3.1%)
/static/flags/1x1/mn.svg -- 1.40kb -> 1.36kb (3.07%)
/static/flags/1x1/li.svg -- 8.12kb -> 7.87kb (3.07%)
/static/flags/1x1/fj.svg -- 25.41kb -> 24.63kb (3.04%)
/static/flags/1x1/bh.svg -- 0.27kb -> 0.26kb (2.9%)
/static/flags/1x1/ky.svg -- 23.78kb -> 23.10kb (2.89%)
/static/flags/1x1/ki.svg -- 5.80kb -> 5.64kb (2.8%)
/static/flags/1x1/ad.svg -- 31.88kb -> 31.01kb (2.73%)
/static/flags/1x1/mk.svg -- 0.40kb -> 0.39kb (2.7%)
/static/flags/1x1/zm.svg -- 5.29kb -> 5.15kb (2.68%)
/static/flags/1x1/nc.svg -- 1.23kb -> 1.20kb (2.55%)
/static/flags/1x1/my.svg -- 0.67kb -> 0.66kb (2.47%)
/static/flags/1x1/mt.svg -- 10.26kb -> 10.00kb (2.46%)
/static/flags/1x1/ao.svg -- 1.56kb -> 1.52kb (2.44%)
/static/flags/1x1/lb.svg -- 2.69kb -> 2.62kb (2.36%)
/static/flags/1x1/af.svg -- 20.61kb -> 20.12kb (2.36%)
/static/flags/1x1/io.svg -- 22.33kb -> 21.80kb (2.35%)
/static/flags/1x1/dg.svg -- 22.33kb -> 21.80kb (2.35%)
/static/flags/1x1/md.svg -- 11.09kb -> 10.83kb (2.33%)
/static/flags/1x1/bt.svg -- 24.55kb -> 23.97kb (2.33%)
/static/flags/4x3/bb.svg -- 0.59kb -> 0.58kb (2.3%)
/static/flags/1x1/bb.svg -- 0.60kb -> 0.58kb (2.3%)
/static/flags/1x1/gb-nir.svg -- 24.65kb -> 24.09kb (2.27%)
/static/flags/1x1/qa.svg -- 0.34kb -> 0.34kb (2.27%)
/static/flags/1x1/pe.svg -- 71.77kb -> 70.19kb (2.2%)
/static/flags/1x1/cc.svg -- 3.01kb -> 2.95kb (2.17%)
/static/flags/1x1/iq.svg -- 1.44kb -> 1.41kb (2.17%)
/static/flags/1x1/eg.svg -- 9.73kb -> 9.53kb (2.11%)
/static/flags/1x1/cx.svg -- 2.44kb -> 2.39kb (2.04%)
/static/flags/1x1/sx.svg -- 12.77kb -> 12.51kb (2.03%)
/static/flags/1x1/mp.svg -- 23.08kb -> 22.62kb (2.03%)
/static/flags/1x1/ec.svg -- 29.20kb -> 28.61kb (2.01%)
/static/flags/1x1/gq.svg -- 5.14kb -> 5.04kb (1.96%)
/static/flags/1x1/sk.svg -- 1.15kb -> 1.13kb (1.96%)
/static/flags/1x1/by.svg -- 5.94kb -> 5.83kb (1.84%)
/static/flags/1x1/kg.svg -- 3.24kb -> 3.18kb (1.84%)
/static/flags/1x1/pf.svg -- 4.12kb -> 4.05kb (1.8%)
/static/flags/1x1/sm.svg -- 15.47kb -> 15.19kb (1.79%)
/static/flags/1x1/bo.svg -- 112.75kb -> 110.76kb (1.76%)
/static/flags/1x1/mo.svg -- 1.51kb -> 1.48kb (1.75%)
/static/flags/1x1/ea.svg -- 91.47kb -> 89.88kb (1.75%)
/static/flags/1x1/es.svg -- 91.47kb -> 89.88kb (1.75%)
/static/flags/1x1/tv.svg -- 1.31kb -> 1.29kb (1.71%)
/static/flags/1x1/um.svg -- 3.88kb -> 3.81kb (1.64%)
/static/flags/1x1/im.svg -- 10.00kb -> 9.84kb (1.62%)
/static/flags/1x1/mw.svg -- 3.80kb -> 3.74kb (1.57%)
/static/flags/1x1/hm.svg -- 1.27kb -> 1.25kb (1.53%)
/static/flags/1x1/au.svg -- 1.27kb -> 1.25kb (1.53%)
/static/flags/1x1/bz.svg -- 45.95kb -> 45.26kb (1.52%)
/static/flags/1x1/er.svg -- 3.31kb -> 3.26kb (1.51%)
/static/flags/1x1/ph.svg -- 1.43kb -> 1.41kb (1.5%)
/static/flags/1x1/tk.svg -- 0.75kb -> 0.74kb (1.42%)
/static/flags/1x1/zw.svg -- 6.60kb -> 6.51kb (1.35%)
/static/flags/1x1/gu.svg -- 4.82kb -> 4.75kb (1.32%)
/static/flags/1x1/gs.svg -- 32.71kb -> 32.28kb (1.31%)
/static/flags/1x1/rs.svg -- 182.71kb -> 180.37kb (1.28%)
/static/flags/1x1/fk.svg -- 29.54kb -> 29.17kb (1.28%)
/static/flags/1x1/mx.svg -- 88.74kb -> 87.62kb (1.26%)
/static/flags/1x1/bm.svg -- 22.25kb -> 21.97kb (1.26%)
/static/flags/1x1/ca.svg -- 0.63kb -> 0.62kb (1.24%)
/static/flags/1x1/ck.svg -- 1.81kb -> 1.79kb (1.24%)
/static/flags/1x1/kz.svg -- 11.15kb -> 11.02kb (1.2%)
/static/flags/1x1/bn.svg -- 14.16kb -> 13.99kb (1.19%)
/static/flags/1x1/vi.svg -- 8.50kb -> 8.40kb (1.17%)
/static/flags/1x1/sa.svg -- 9.98kb -> 9.87kb (1.13%)
/static/flags/1x1/ms.svg -- 6.13kb -> 6.06kb (1.13%)
/static/flags/1x1/pn.svg -- 13.64kb -> 13.49kb (1.11%)
/static/flags/1x1/ge.svg -- 1.50kb -> 1.49kb (0.91%)
/static/flags/1x1/lk.svg -- 11.07kb -> 10.98kb (0.85%)
/static/flags/1x1/ta.svg -- 29.93kb -> 29.71kb (0.73%)
/static/flags/1x1/ac.svg -- 29.93kb -> 29.71kb (0.73%)
/static/flags/1x1/nf.svg -- 5.45kb -> 5.42kb (0.7%)
/static/flags/1x1/as.svg -- 31.83kb -> 31.63kb (0.66%)
/static/flags/1x1/me.svg -- 62.36kb -> 62.02kb (0.55%)
/static/flags/1x1/al.svg -- 3.14kb -> 3.13kb (0.37%)
/static/flags/1x1/aq.svg -- 2.88kb -> 2.87kb (0.37%)
/static/flags/1x1/gb-wls.svg -- 8.86kb -> 8.83kb (0.32%)
/static/flags/1x1/xk.svg -- 8.52kb -> 8.49kb (0.25%)
/static/flags/1x1/un.svg -- 19.93kb -> 19.88kb (0.24%)
/static/flags/1x1/cy.svg -- 5.88kb -> 5.87kb (0.23%)

Signed-off-by: ImgBotApp <ImgBotHelp@gmail.com>

Signed-off-by: ImgBotApp <ImgBotHelp@gmail.com>
Co-authored-by: ImgBotApp <ImgBotHelp@gmail.com>
Co-authored-by: Emruz Hossain <hossainemruz@gmail.com>
2022-10-09 15:26:32 +00:00
BenjaminAdam 747106edcc Improved german localization (#662)
"Guthaben" is used for banking loans.
Changed to "Punktzahl" and "Note" to
better reflect the german education
system.

The 404 error message was just
nonsense. Changed it to correct
translation of english version.
2022-10-09 15:24:18 +00:00
Alexandre Neto 1f17e61ad6 Portuguese translation (#660)
* Portuguese translation

* Adds Portuguese to the list of languages

* Missing PT translation
2022-10-07 14:01:02 +00:00
TheDarthMole 799572c792 fix: fixed http 404 for flags required by darkreader (#658) 2022-10-06 03:48:50 +00:00
github-actions[bot] ca85a71230 Update and run autoprefixer (#653)
Co-authored-by: kodiakhq[bot] <kodiakhq[bot]@users.noreply.github.com>
Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
2022-10-04 11:10:25 +00:00
dependabot[bot] ea9812ec7c Bump actions/checkout from 3.0.2 to 3.1.0 (#654)
Bumps [actions/checkout](https://github.com/actions/checkout) from 3.0.2 to 3.1.0.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v3.0.2...v3.1.0)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-04 11:09:29 +00:00
github-actions[bot] d61d39b9fb Update and run autoprefixer (#648)
Co-authored-by: kodiakhq[bot] <kodiakhq[bot]@users.noreply.github.com>
Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
2022-10-03 01:56:07 +00:00
freezingDaniel 56615bfa43 Update repo-URLs (#651) 2022-10-03 01:55:12 +00:00
dependabot[bot] 35ccacacd2 Bump release-drafter/release-drafter from 5.20.1 to 5.21.0 (#647)
Bumps [release-drafter/release-drafter](https://github.com/release-drafter/release-drafter) from 5.20.1 to 5.21.0.
- [Release notes](https://github.com/release-drafter/release-drafter/releases)
- [Commits](https://github.com/release-drafter/release-drafter/compare/v5.20.1...v5.21.0)

---
updated-dependencies:
- dependency-name: release-drafter/release-drafter
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-09-15 11:05:52 +00:00
dependabot[bot] 237a79332a Bump actions/checkout from 2.4.0 to 3.0.2 (#645)
Bumps [actions/checkout](https://github.com/actions/checkout) from 2.4.0 to 3.0.2.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v2.4.0...v3.0.2)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-09-08 11:09:03 +00:00
Emruz Hossain 872e2119c2 Fix soft skill text wrapping issue (#644) 2022-09-07 11:30:26 +00:00
Elise Briers 2500174f94 Improve dutch translations (#642) 2022-09-06 16:26:21 +00:00
Emruz Hossain e2463abc4e Update Task list for publication 2022-09-05 22:01:33 +06:00
Lukas Nagel 79282571eb Local google font (#639)
* added font

* added mulish css

* updated local font css

Co-authored-by: Emruz Hossain <hossainemruz@gmail.com>
2022-09-05 15:49:04 +00:00
Akumetsu 6585f002a9 Added functionality for use of any fontawesome icon and custom socials (#640) 2022-09-05 04:19:59 +00:00
Abdelhak Bougouffa d32ac9a43e Add Arabic language localization (#638)
* Add Arabic localization

* Add Arabic to README
2022-09-01 04:59:50 +00:00
github-actions[bot] 412376fdc1 Update and run autoprefixer (#636)
Co-authored-by: hossainemruz <hossainemruz@users.noreply.github.com>
Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
2022-08-18 17:01:21 +00:00
github-actions[bot] 63931ee8f6 Update and run autoprefixer (#635)
Co-authored-by: kodiakhq[bot] <kodiakhq[bot]@users.noreply.github.com>
Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
2022-08-18 16:59:36 +00:00
dependabot[bot] bb87ee29ac Bump release-drafter/release-drafter from 5.20.0 to 5.20.1 (#632)
Bumps [release-drafter/release-drafter](https://github.com/release-drafter/release-drafter) from 5.20.0 to 5.20.1.
- [Release notes](https://github.com/release-drafter/release-drafter/releases)
- [Commits](https://github.com/release-drafter/release-drafter/compare/v5.20.0...v5.20.1)

---
updated-dependencies:
- dependency-name: release-drafter/release-drafter
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
2022-08-18 22:58:09 +06:00
David Davó eefb6166eb Added matomo support (#633) 2022-08-18 16:56:16 +00:00
Emruz Hossain 55dd90a0dd Add support for providing optional URL in a achievement entry (#623)
Signed-off-by: hossainemruz <hossainemruz@gmail.com>
2022-07-30 14:29:05 +00:00
github-actions[bot] fe5d8af56d add vendor specific css prefixes (#622)
Co-authored-by: kodiakhq[bot] <kodiakhq[bot]@users.noreply.github.com>
2022-07-29 23:22:20 +06:00
Emruz Hossain b81fd5078b Add publication section (#620)
* Add publication section

Signed-off-by: hossainemruz <hossainemruz@gmail.com>

* Don't make tags clickable

Signed-off-by: hossainemruz <hossainemruz@gmail.com>
2022-07-29 17:12:14 +00:00
Emruz Hossain eb167e0155 Update README.md 2022-07-21 07:59:20 +06:00
Kemal Kolcuoğlu 8cb07ffeb4 Adding Turkish Language Localization (#616) 2022-07-21 01:41:11 +00:00
Emruz Hossain 27c3d0f4cc Add margin between tags (#612)
Signed-off-by: hossainemruz <hossainemruz@gmail.com>
2022-07-16 16:03:53 +00:00
Emruz Hossain ad3dee71c2 Support providing custom buttons in about section (#611)
Signed-off-by: hossainemruz <hossainemruz@gmail.com>
2022-07-16 15:52:24 +00:00
Emruz Hossain bf6f63976b Fix CSS for gist (#606)
Signed-off-by: hossainemruz <hossainemruz@gmail.com>
2022-06-15 19:44:56 +00:00
Emruz Hossain 6c8ab46a73 Use RelPermalink for background url (#605)
Signed-off-by: hossainemruz <hossainemruz@gmail.com>
2022-06-15 18:51:31 +00:00
Gabriel Jean 3d6246f3c9 Removed flag icon span if countryCode is null (#603)
* Update lang-selector.html

* Update lang-selector-2.html

* Added showFlags parameter

* Refactor showFlags logic

Signed-off-by: hossainemruz <hossainemruz@gmail.com>

Co-authored-by: hossainemruz <hossainemruz@gmail.com>
2022-06-13 15:14:39 +00:00
github-actions[bot] 4a5f6ce426 Update and run autoprefixer (#601)
Co-authored-by: kodiakhq[bot] <kodiakhq[bot]@users.noreply.github.com>
Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
2022-06-10 15:23:40 +00:00
github-actions[bot] 20bc7dd71f add vendor specific css prefixes (#600)
Co-authored-by: kodiakhq[bot] <kodiakhq[bot]@users.noreply.github.com>
Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
2022-06-10 21:22:48 +06:00
donfiguerres 65049cfbb7 Dark theme via DarkReader (#595)
* Initial commit for dark theme.

* Use DarkReader.auto() to watch for system theme.

* Tunning default parameters.

* Allow configurable number of recent posts.

* Added invisible element to hack theme initialization.

* Added default value.

* Use Darkreader CDN.

* Cleanup to keep darkreader in as few files as possible.

* Renamed darkmode.js to darkmode-darkreader.js.

* Bring back the initialization.

* Added provider property.

* Added theme selector to the posts navbar.

* Removed extra line breaks.

* Changed darkreader CDN to local copy.

* Renamed to darkMode.

* Fixed CodeQL failures.

* Added icons.

* Renamed function.

* Added SVG inversion.

* Used icons for selection.

* Toggle initial dark only in the dynamic navbar.

Co-authored-by: donfiguerres <donfiguerres@github.com>
Co-authored-by: Emruz Hossain <hossainemruz@gmail.com>
2022-06-10 15:18:49 +00:00
Clarence 869eba97a2 Update zh-tw.toml (#598)
* Update zh-tw

* Update zh-tw.toml
2022-06-09 04:23:08 +00:00
hossainemruz ddbb4bf7ce Fix project automation
Signed-off-by: hossainemruz <hossainemruz@gmail.com>
2022-05-16 22:26:23 +06:00
Gabriel Jean 2ae15e5235 Added logic to the education icon line (#589)
Co-authored-by: Emruz Hossain <hossainemruz@gmail.com>
2022-05-16 05:08:47 +00:00
github-actions[bot] eacae1be3e add vendor specific css prefixes (#591)
Co-authored-by: kodiakhq[bot] <kodiakhq[bot]@users.noreply.github.com>
2022-05-16 11:06:32 +06:00
dependabot[bot] 43fe14bfa1 Bump release-drafter/release-drafter from 5.19.0 to 5.20.0 (#590)
Bumps [release-drafter/release-drafter](https://github.com/release-drafter/release-drafter) from 5.19.0 to 5.20.0.
- [Release notes](https://github.com/release-drafter/release-drafter/releases)
- [Commits](https://github.com/release-drafter/release-drafter/compare/v5.19.0...v5.20.0)

---
updated-dependencies:
- dependency-name: release-drafter/release-drafter
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-05-12 11:06:08 +00:00
github-actions[bot] 06ee3c1e1f add vendor specific css prefixes (#585)
Co-authored-by: kodiakhq[bot] <kodiakhq[bot]@users.noreply.github.com>
2022-04-27 14:22:02 +06:00
dependabot[bot] baa4774862 Bump github/codeql-action from 1 to 2 (#584)
Bumps [github/codeql-action](https://github.com/github/codeql-action) from 1 to 2.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/v1...v2)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-04-26 11:05:42 +00:00
Marcin Jasion a22474538d Add RSS post sorting by date descending (#580) 2022-04-14 19:31:29 +00:00
SalahDin Ahmed 827a940995 Post specific togglable TOC (#575)
The default is true.
2022-04-04 03:20:48 +00:00
SalahDin Ahmed f6440e69d5 Enable pages in counter.dev (#571)
* Enable pages in counter.dev

Not perfect but will work fine for a while.

* Make counter.dev's `referrerPolicy` togglable

* Make `referrerPolicy` take more options

Co-authored-by: Emruz Hossain <hossainemruz@gmail.com>
2022-04-02 00:06:38 +06:00
Emruz Hossain a50f947384 Add commento.io support (#564)
Signed-off-by: hossainemruz <hossainemruz@gmail.com>
2022-03-30 19:57:40 +00:00
github-actions[bot] a1bff16050 Update and run autoprefixer (#568)
Co-authored-by: hossainemruz <hossainemruz@users.noreply.github.com>
Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
2022-03-28 04:47:39 +00:00
github-actions[bot] e8615c64e2 Update and run autoprefixer (#567)
Co-authored-by: kodiakhq[bot] <kodiakhq[bot]@users.noreply.github.com>
Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
2022-03-28 04:47:26 +00:00
jakob42 c43da0089d fixed gitlab link (#570)
Co-authored-by: Jakob Lenfers <lenfers@bremen-social-sciences.de>
2022-03-28 04:46:26 +00:00
Marko Korhonen c9cebe5fe8 Add finnish translation (#565)
* Add finnish translation

* Add finnish translation to the README

* Use a more fitting word for prev in finnish translation

Co-authored-by: Emruz Hossain <hossainemruz@gmail.com>
2022-03-23 21:21:54 +06:00
dependabot[bot] 4025a6e321 Bump peter-evans/create-pull-request from 3.14.0 to 4 (#566)
Bumps [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) from 3.14.0 to 4.
- [Release notes](https://github.com/peter-evans/create-pull-request/releases)
- [Commits](https://github.com/peter-evans/create-pull-request/compare/v3.14.0...v4)

---
updated-dependencies:
- dependency-name: peter-evans/create-pull-request
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-03-23 11:38:19 +00:00
Emruz Hossain 3809d298ca Use repoID and categoryID in giscus template (#560)
* Use repoID and categoryID in giscus template

Signed-off-by: hossainemruz <hossainemruz@gmail.com>

* Fix links

Signed-off-by: hossainemruz <hossainemruz@gmail.com>
2022-03-15 17:36:11 +00:00
dependabot[bot] 974d4485ba Bump gaurav-nelson/github-action-markdown-link-check from 1.0.13 to 1.0.14 (#559)
Bumps [gaurav-nelson/github-action-markdown-link-check](https://github.com/gaurav-nelson/github-action-markdown-link-check) from 1.0.13 to 1.0.14.
- [Release notes](https://github.com/gaurav-nelson/github-action-markdown-link-check/releases)
- [Commits](https://github.com/gaurav-nelson/github-action-markdown-link-check/compare/1.0.13...1.0.14)

---
updated-dependencies:
- dependency-name: gaurav-nelson/github-action-markdown-link-check
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-03-15 11:03:43 +00:00
Pablo Marcos 91b18c0f04 Add analytics template + Add Ko-Fi donation button + Host fonts locally (#530)
* Add Blogtrottr as newsletter provider

* Fixed absLangURL issue with sections in footer

* Fixes LaTeX support

Makes scripts fully local and only loads them if math:true. Adds support for 18462\latex18462 or even $\latex$

* Added 2 New, Privacy-Friendly Analytics Methods

Counter.dev and GoatAnalytics. Google Analytics should keep working the same

* Removed 1 CDN

* Moved params under features

* Added Ko-Fi floating button for support

* Refactor analytics code + Add local fonts

Signed-off-by: hossainemruz <hossainemruz@gmail.com>

Co-authored-by: Pablo Marcos <codebergflamingo@staplehorse.anonaddy.com>
Co-authored-by: Emruz Hossain <hossainemruz@gmail.com>
2022-03-14 22:01:49 +06:00
James Ray c89fe66332 Add optional mermaid shortcode (#551)
* add optional mermaid shotcode

* Use page level configuration for mermaid + use local file

Signed-off-by: hossainemruz <hossainemruz@gmail.com>

* Fix comment

Co-authored-by: Emruz Hossain <hossainemruz@gmail.com>
Co-authored-by: Emruz Hossain <emruz@appscode.com>
2022-03-13 15:53:27 +00:00
James Ray 8caa12724e Auto build (#548)
* add build workflow

* add create config

Co-authored-by: Emruz Hossain <hossainemruz@gmail.com>
2022-03-08 15:54:08 +00:00
github-actions[bot] 309118c068 Update and run autoprefixer (#556)
Co-authored-by: kodiakhq[bot] <kodiakhq[bot]@users.noreply.github.com>
Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
2022-03-08 11:09:30 +00:00
github-actions[bot] be903cfd69 Update and run autoprefixer (#555)
Co-authored-by: kodiakhq[bot] <kodiakhq[bot]@users.noreply.github.com>
Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
2022-03-08 11:08:25 +00:00
github-actions[bot] fe647ce34f Update and run autoprefixer (#554)
Co-authored-by: kodiakhq[bot] <kodiakhq[bot]@users.noreply.github.com>
Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
2022-03-08 11:08:09 +00:00
dependabot[bot] 17128e9388 Bump actions/checkout from 2.4.0 to 3 (#549)
Bumps [actions/checkout](https://github.com/actions/checkout) from 2.4.0 to 3.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v2.4.0...v3)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
2022-03-08 11:06:59 +00:00
dependabot[bot] de221c342d Bump peter-evans/create-pull-request from 3.13.0 to 3.14.0 (#547)
Bumps [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) from 3.13.0 to 3.14.0.
- [Release notes](https://github.com/peter-evans/create-pull-request/releases)
- [Commits](https://github.com/peter-evans/create-pull-request/compare/v3.13.0...v3.14.0)

---
updated-dependencies:
- dependency-name: peter-evans/create-pull-request
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
2022-03-08 11:05:57 +00:00
dependabot[bot] 6f5e748b5b Bump release-drafter/release-drafter from 5.18.1 to 5.19.0 (#553)
Bumps [release-drafter/release-drafter](https://github.com/release-drafter/release-drafter) from 5.18.1 to 5.19.0.
- [Release notes](https://github.com/release-drafter/release-drafter/releases)
- [Commits](https://github.com/release-drafter/release-drafter/compare/v5.18.1...v5.19.0)

---
updated-dependencies:
- dependency-name: release-drafter/release-drafter
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-03-08 11:04:55 +00:00
James Ray e151dad461 Refine rss build logic (#545)
* Add refine rss build logic

* Switch to .RelPermalink since URL is deprecated
2022-03-01 04:10:10 +00:00
James Ray 711d4c7749 Support commenting using giscus (#543)
* add giscus

* update theme default to light

update category default to General
2022-02-28 17:45:03 +00:00
dependabot[bot] 56e1bc5a69 Bump peter-evans/create-pull-request from 3.12.1 to 3.13.0 (#544)
Bumps [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) from 3.12.1 to 3.13.0.
- [Release notes](https://github.com/peter-evans/create-pull-request/releases)
- [Commits](https://github.com/peter-evans/create-pull-request/compare/v3.12.1...v3.13.0)

---
updated-dependencies:
- dependency-name: peter-evans/create-pull-request
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-02-28 11:05:48 +00:00
James Ray d3b20dc424 add rss feed (#542) 2022-02-28 07:33:37 +00:00
github-actions[bot] 8ac46052e4 Update and run autoprefixer (#541)
Co-authored-by: kodiakhq[bot] <kodiakhq[bot]@users.noreply.github.com>
Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
2022-02-28 03:41:14 +00:00
github-actions[bot] 6b4b367c13 Update and run autoprefixer (#538)
Co-authored-by: kodiakhq[bot] <kodiakhq[bot]@users.noreply.github.com>
Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
2022-02-28 03:40:16 +00:00
Ivan Katliarchuk abca4629bc Don't show Responsibilities header, if there aren't any (#540) 2022-02-28 03:39:13 +00:00
dependabot[bot] 4c6e7d404d Bump actions/setup-node from 2.5.1 to 3 (#537)
Bumps [actions/setup-node](https://github.com/actions/setup-node) from 2.5.1 to 3.
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](https://github.com/actions/setup-node/compare/v2.5.1...v3)

---
updated-dependencies:
- dependency-name: actions/setup-node
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-02-25 11:06:51 +00:00
Jan 2c5f991275 fix: translated "Search" in search box (#521)
* fix: translated "Search" in search box

Implemented i18n for term "Search" in search box. Added translation
(mostly "Search") in i18n/*.toml files.

* Fix search translation not applied to posts + update translations

Co-authored-by: stueja <jan@jbook.js73.de>
Co-authored-by: Emruz Hossain <hossainemruz@gmail.com>
2022-02-13 14:48:04 +00:00
Jean-Baptiste Le Duigou 1e951589ef [enhancement] Fix year in copyright notice (#528)
* Fix link to email address

See https://github.com/hossainemruz/toha/issues/7

* fix: 🐛 year of copyright notice should be generated
2022-02-09 05:55:32 +00:00
dependabot[bot] 896db21fa5 Bump release-drafter/release-drafter from 5.18.0 to 5.18.1 (#527)
Bumps [release-drafter/release-drafter](https://github.com/release-drafter/release-drafter) from 5.18.0 to 5.18.1.
- [Release notes](https://github.com/release-drafter/release-drafter/releases)
- [Commits](https://github.com/release-drafter/release-drafter/compare/v5.18.0...v5.18.1)

---
updated-dependencies:
- dependency-name: release-drafter/release-drafter
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-02-07 11:10:59 +00:00
github-actions[bot] 9e8d0c401d add vendor specific css prefixes (#524)
Co-authored-by: kodiakhq[bot] <kodiakhq[bot]@users.noreply.github.com>
2022-02-05 23:04:00 +06:00
dependabot[bot] 5772734a34 Bump release-drafter/release-drafter from 5.17.6 to 5.18.0 (#523)
Bumps [release-drafter/release-drafter](https://github.com/release-drafter/release-drafter) from 5.17.6 to 5.18.0.
- [Release notes](https://github.com/release-drafter/release-drafter/releases)
- [Commits](https://github.com/release-drafter/release-drafter/compare/v5.17.6...v5.18.0)

---
updated-dependencies:
- dependency-name: release-drafter/release-drafter
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-02-04 11:06:02 +00:00
hossainemruz 69132a1dae Revert setting 3px offset in .top-right class
Signed-off-by: hossainemruz <hossainemruz@gmail.com>
2022-01-31 23:38:58 +06:00
Jan 46769a2b6d fix: correct tel: URL for translated about section (#518)
In the about section, a correct `tel:` URL was only generated if the
name of the sociallink was "Phone". Now, a correct link will also be
generated if the name of the sociallink corresponds to the translation
of "phone" in one of the i18n files.

Co-authored-by: stueja <jan@jBook.local>
Co-authored-by: Emruz Hossain <hossainemruz@gmail.com>
2022-01-31 17:10:53 +00:00
Jan d74549f870 feat: id for footer (#517)
Added id="footer" just in case someone wants to link there via custom
menus or href="#footer".

Co-authored-by: stueja <jan@jBook.local>
Co-authored-by: Emruz Hossain <hossainemruz@gmail.com>
2022-01-31 17:09:31 +00:00
James Ray 42a0e5100a add calculation to line up lines (#516)
Co-authored-by: Emruz Hossain <hossainemruz@gmail.com>
2022-01-31 17:07:41 +00:00
Jan bfa1e4c2b3 feat: configurable custom navbar items (#514)
* feat: configurable custom navbar items

The customMenu item from `data/<language>/site.yaml` will only appear if
its property `showOnNavbar` is `true`.

Example:
```
customMenus:
  - name: Imprint
    url: posts/imprint
    showOnNavbar: false
```

* fix: change logic from  to

Co-authored-by: stueja <jan@jBook.local>
Co-authored-by: Emruz Hossain <hossainemruz@gmail.com>
2022-01-31 17:05:05 +00:00
Jan a159ff65b1 feat: customMenus in footer (#513)
* feat: customMenus in footer

Show customMenu links also in footer.
In `config.yaml`,
 - `params.footer.enable` is `true` to show the footer at all
 - `params.footer.navigation.enable` is `true` to show navigation items
   in the footer
 - `params.footer.navigation.customMenus.enable` is `true` to show
   customMenu items

Example:
```
params:
  footer:
    enable: true
    navigation:
      enable: true
      customMenus:
        enable: true
```

In `data/<language>/site.yaml`,
 - `customMenus` must contain at least one entry with `showOnFooter:
   true`

Example:
 ```
 customMenus:
   - name: Imprint
     url: posts/imprint
     showOnFooter: true
 ```

* fix: nesting levels in config

Co-authored-by: stueja <jan@jBook.local>
Co-authored-by: Emruz Hossain <hossainemruz@gmail.com>
2022-01-31 17:04:01 +00:00
dependabot[bot] e4cda24f7f Bump nanoid from 3.1.30 to 3.2.0 (#520)
Bumps [nanoid](https://github.com/ai/nanoid) from 3.1.30 to 3.2.0.
- [Release notes](https://github.com/ai/nanoid/releases)
- [Changelog](https://github.com/ai/nanoid/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ai/nanoid/compare/3.1.30...3.2.0)

---
updated-dependencies:
- dependency-name: nanoid
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-01-31 17:00:15 +00:00
dependabot[bot] 585c1ef847 Bump peter-evans/create-pull-request from 3.12.0 to 3.12.1 (#519)
Bumps [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) from 3.12.0 to 3.12.1.
- [Release notes](https://github.com/peter-evans/create-pull-request/releases)
- [Commits](https://github.com/peter-evans/create-pull-request/compare/v3.12.0...v3.12.1)

---
updated-dependencies:
- dependency-name: peter-evans/create-pull-request
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-01-31 11:05:49 +00:00
Jan 2b9ce8fb29 Update skill.html (#512)
As proposed in #506
2022-01-24 10:58:50 +00:00
Gabriel Jean d93c49d82a Tweaked background of table in education.css (#510) 2022-01-23 18:21:48 +00:00
Emruz Hossain 91f6b69fa7 Fix navbar missing an item in the dropdown (#509)
Signed-off-by: Emruz Hossain <hossainemruz@gmail.com>
2022-01-21 05:27:46 +00:00
dependabot[bot] 99a131fe43 Bump release-drafter/release-drafter from 5.17.5 to 5.17.6 (#507)
Bumps [release-drafter/release-drafter](https://github.com/release-drafter/release-drafter) from 5.17.5 to 5.17.6.
- [Release notes](https://github.com/release-drafter/release-drafter/releases)
- [Commits](https://github.com/release-drafter/release-drafter/compare/v5.17.5...v5.17.6)

---
updated-dependencies:
- dependency-name: release-drafter/release-drafter
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-01-20 11:08:03 +00:00
Jan 4ebbb523a5 fix: navigation with hidden title (#505)
* Update accomplishments.html

fix display property when hidden

* Update achievements.html

fixed display property when hidden

* Update education-alt.html

fixed display property when hidden

* Update education.html

fixed display property when hidden

* Update experiences.html

fixed display property when hidden

* Update projects.html

fixed display property when hidden

* Update recent-posts.html

fixed display property when hidden

* Update skills.html

fixed display property when hidden
2022-01-19 18:32:28 +00:00
Jan d0a6eb4b28 Update experience-info.html (#502)
added .html to multiple-positions
2022-01-18 03:57:20 +00:00
dependabot[bot] 5e172bca28 Bump release-drafter/release-drafter from 5.16.1 to 5.17.5 (#501)
Bumps [release-drafter/release-drafter](https://github.com/release-drafter/release-drafter) from 5.16.1 to 5.17.5.
- [Release notes](https://github.com/release-drafter/release-drafter/releases)
- [Commits](https://github.com/release-drafter/release-drafter/compare/v5.16.1...v5.17.5)

---
updated-dependencies:
- dependency-name: release-drafter/release-drafter
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-01-17 11:05:25 +00:00
Jan 93f422675f Update footer.html (#499)
Added closing div
2022-01-17 03:38:25 +00:00
hossainemruz 2e8bf65885 Upgrade minimum required Hugo version to 0.87.0
Signed-off-by: hossainemruz <hossainemruz@gmail.com>
2022-01-14 01:50:26 +06:00
Jan 801208c664 Localize post date (#492) 2022-01-14 01:35:10 +06:00
Jan f69ec4fca3 configurable navbar item count (#493)
* configurable navbar item count

Make the number of navbar items outside "More" configurable via

```
config.yaml
---
params:
  features:
    maxnavitems: 6
```

* fix configurable navbar count

replace all evidences of "5" by $maxnavitems

* Move `features.maxnavitems` into `topNavbar.maxVisibleSections`

Signed-off-by: hossainemruz <hossainemruz@gmail.com>

Co-authored-by: Emruz Hossain <hossainemruz@gmail.com>
2022-01-13 19:29:12 +00:00
Pablo Marcos 063c65716b Add LaTeX support (#481)
* Add Blogtrottr as newsletter provider

* Fixed absLangURL issue with sections in footer

* Add LaTeX support

Added katex scripts and css to scripts and header partials, respectively

* Replace CDN with local files for LaTex resources + Fix flag error

Signed-off-by: hossainemruz <hossainemruz@gmail.com>

Co-authored-by: Pablo Marcos <codebergflamingo@staplehorse.anonaddy.com>
Co-authored-by: Emruz Hossain <hossainemruz@gmail.com>
2022-01-13 19:06:07 +00:00
github-actions[bot] 11ca8ef8b3 add vendor specific css prefixes (#496)
Co-authored-by: kodiakhq[bot] <kodiakhq[bot]@users.noreply.github.com>
2022-01-14 00:43:48 +06:00
dependabot[bot] ec80b7f22d Bump release-drafter/release-drafter from 5.15.0 to 5.16.1 (#495)
Bumps [release-drafter/release-drafter](https://github.com/release-drafter/release-drafter) from 5.15.0 to 5.16.1.
- [Release notes](https://github.com/release-drafter/release-drafter/releases)
- [Commits](https://github.com/release-drafter/release-drafter/compare/v5.15.0...v5.16.1)

---
updated-dependencies:
- dependency-name: release-drafter/release-drafter
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-01-13 11:05:30 +00:00
Emruz Hossain 2134464267 Remove unused adjustSkillCardsHeight(); function (#488) 2022-01-04 15:27:54 +00:00
github-actions[bot] f29aa9b4fa add vendor specific css prefixes (#487)
Co-authored-by: kodiakhq[bot] <kodiakhq[bot]@users.noreply.github.com>
2022-01-04 12:06:35 +06:00
Tobias Mühlberger d1bc8e2f4c Fix Nav-Bar when link to section of page (#486) 2022-01-04 04:43:27 +00:00
github-actions[bot] bc0b69d726 Update and run autoprefixer (#484)
Co-authored-by: kodiakhq[bot] <kodiakhq[bot]@users.noreply.github.com>
Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
2021-12-28 11:06:20 +00:00
github-actions[bot] cab383aa12 Update and run autoprefixer (#477)
Co-authored-by: kodiakhq[bot] <kodiakhq[bot]@users.noreply.github.com>
Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
2021-12-28 11:05:18 +00:00
dependabot[bot] 0b27282e6a Bump actions/setup-node from 2.5.0 to 2.5.1 (#483)
Bumps [actions/setup-node](https://github.com/actions/setup-node) from 2.5.0 to 2.5.1.
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](https://github.com/actions/setup-node/compare/v2.5.0...v2.5.1)

---
updated-dependencies:
- dependency-name: actions/setup-node
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-12-28 11:04:18 +00:00
dependabot[bot] b5c841295c Bump peter-evans/create-pull-request from 3.11.0 to 3.12.0 (#476)
Bumps [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) from 3.11.0 to 3.12.0.
- [Release notes](https://github.com/peter-evans/create-pull-request/releases)
- [Commits](https://github.com/peter-evans/create-pull-request/compare/v3.11.0...v3.12.0)

---
updated-dependencies:
- dependency-name: peter-evans/create-pull-request
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-12-14 11:05:21 +00:00
Till 39e1433fca Footer contact info: Icons and linking (#471)
* Footer contact info: Icons and linking

* Open link in a new tab

Signed-off-by: hossainemruz <hossainemruz@gmail.com>

Co-authored-by: Emruz Hossain <hossainemruz@gmail.com>
2021-12-07 18:11:59 +00:00
github-actions[bot] 0c408aa7ce Update and run autoprefixer (#470)
Co-authored-by: kodiakhq[bot] <kodiakhq[bot]@users.noreply.github.com>
Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
2021-12-07 17:41:44 +00:00
Fabio Fenoglio e3c84e0ba1 Fixed "show-more-btn" toggle logic and added optional "collapseAfter" parameter (#473)
* fixed "show-more-btn" toggle logic

* allow customization of number of items to show in "taken courses" when before collapsing

* renamed treshold param to collapseAfter

Co-authored-by: Fabio Fenoglio <fabio.fenoglio@eng.it>
2021-12-07 17:40:34 +00:00
dependabot[bot] fea093c187 Bump actions/setup-node from 2.4.1 to 2.5.0 (#469)
Bumps [actions/setup-node](https://github.com/actions/setup-node) from 2.4.1 to 2.5.0.
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](https://github.com/actions/setup-node/compare/v2.4.1...v2.5.0)

---
updated-dependencies:
- dependency-name: actions/setup-node
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-11-29 11:06:13 +00:00
501 changed files with 16926 additions and 6753 deletions
+3
View File
@@ -0,0 +1,3 @@
node_modules
exampleSite/node_modules
exampleSite/public
+12
View File
@@ -0,0 +1,12 @@
env:
browser: true
es2021: true
extends:
- standard
- plugin:no-jquery/all
- prettier
plugins:
- no-jquery
parserOptions:
ecmaVersion: latest
sourceType: module
+2 -2
View File
@@ -6,8 +6,8 @@ title: 'Feature Request'
<!---
Before filing an issue, please review the following:
Existing Features: https://github.com/hossainemruz/toha#features
Project Roadmap: https://github.com/hossainemruz/toha#project-roadmap
Existing Features: https://github.com/hugo-toha/toha#features
Project Roadmap: https://github.com/hugo-toha/toha#project-roadmap
-->
### Describe the solution you'd like
+3 -3
View File
@@ -8,10 +8,10 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout to latest commit
uses: actions/checkout@v2.4.0
uses: actions/checkout@v4.1.1
- name: Setup Node
uses: actions/setup-node@v2.4.1
uses: actions/setup-node@v4
with:
node-version: "15.x"
@@ -21,7 +21,7 @@ jobs:
npm run autoprefixer
- name: Create Pull Request
uses: peter-evans/create-pull-request@v3.11.0
uses: peter-evans/create-pull-request@v5
with:
branch: autoprefixer
branch-suffix: timestamp
+4 -4
View File
@@ -39,11 +39,11 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@v2.4.0
uses: actions/checkout@v4.1.1
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v1
uses: github/codeql-action/init@v2
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
@@ -54,7 +54,7 @@ jobs:
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@v1
uses: github/codeql-action/autobuild@v2
# ️ Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
@@ -68,4 +68,4 @@ jobs:
# make release
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v1
uses: github/codeql-action/analyze@v2
-13
View File
@@ -1,13 +0,0 @@
name: Enforce Labels
on:
pull_request:
types: [labeled, unlabeled, opened, edited, synchronize]
jobs:
enforce-label:
runs-on: ubuntu-latest
steps:
- uses: yogevbd/enforce-label-action@2.2.2
with:
REQUIRED_LABELS_ANY: "automerge,breaking-change,bug-fix,enhancement,feature,translation"
REQUIRED_LABELS_ANY_DESCRIPTION: "The PR must have at least one these labels: ['automerge','breaking-change','bug-fix','enhancement','feature','translation']"
-13
View File
@@ -1,13 +0,0 @@
name: Check Markdown links
# Run action on pull request event
on: [pull_request]
jobs:
markdown-link-check:
runs-on: ubuntu-latest
steps:
# checkout to latest commit
- uses: actions/checkout@v2.4.0
# run markdown linter
- uses: gaurav-nelson/github-action-markdown-link-check@1.0.13
@@ -1,4 +1,4 @@
name: Release Drafter
name: Merge to main workflows
# Run action on push in mater branch
on:
push:
@@ -10,6 +10,6 @@ jobs:
runs-on: ubuntu-latest
steps:
# Create/Update release draft
- uses: release-drafter/release-drafter@v5.15.0
- uses: release-drafter/release-drafter@v5.25.0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -1,150 +0,0 @@
name: Project Automation (Issue)
on:
issues:
types:
- opened
- reopened
- closed
- labeled
- unlabeled
jobs:
issue_automation:
runs-on: ubuntu-latest
steps:
- name: Get project data
env:
GITHUB_TOKEN: ${{secrets.PROJECT_AUTOMATION}}
ORGANIZATION: hugo-toha
PROJECT_NUMBER: 4
run: |
gh api graphql --header 'GraphQL-Features: projects_next_graphql' -f query='
query($org: String!, $number: Int!) {
organization(login: $org){
projectNext(number: $number) {
id
fields(first:20) {
nodes {
id
name
settings
}
}
}
}
}' -f org="$ORGANIZATION" -F number=$PROJECT_NUMBER > project_data.json
echo 'PROJECT_ID='$(jq -r '.data.organization.projectNext.id' project_data.json) >> $GITHUB_ENV
# Read the ID of the "Type" field options
echo 'TYPE_ID='$(jq -r '.data.organization.projectNext.fields.nodes[] | select(.name== "Type") |.id' project_data.json) >> $GITHUB_ENV
echo 'PROJECT_ID='$(jq -r '.data.organization.projectNext.id' project_data.json) >> $GITHUB_ENV
echo 'TYPE_ID='$(jq -r '.data.organization.projectNext.fields.nodes[] | select(.name== "Type") |.id' project_data.json) >> $GITHUB_ENV
echo 'TYPE_BUG='$(jq -r '.data.organization.projectNext.fields.nodes[] | select(.name== "Type") |.settings | fromjson.options[] | select(.name=="Bug") |.id' project_data.json) >> $GITHUB_ENV
echo 'TYPE_FEATURE='$(jq -r '.data.organization.projectNext.fields.nodes[] | select(.name== "Type") |.settings | fromjson.options[] | select(.name=="Feature") |.id' project_data.json) >> $GITHUB_ENV
echo 'TYPE_ENHANCEMENT='$(jq -r '.data.organization.projectNext.fields.nodes[] | select(.name== "Type") |.settings | fromjson.options[] | select(.name=="Enhancement") |.id' project_data.json) >> $GITHUB_ENV
echo 'TYPE_DOCUMENTATION='$(jq -r '.data.organization.projectNext.fields.nodes[] | select(.name== "Type") |.settings | fromjson.options[] | select(.name=="Documentation") |.id' project_data.json) >> $GITHUB_ENV
echo 'TYPE_TRANSLATION='$(jq -r '.data.organization.projectNext.fields.nodes[] | select(.name== "Type") |.settings | fromjson.options[] | select(.name=="Translation") |.id' project_data.json) >> $GITHUB_ENV
# Read the id of the "Status" field options
echo 'STATUS_ID='$(jq -r '.data.organization.projectNext.fields.nodes[] | select(.name== "Status") |.id' project_data.json) >> $GITHUB_ENV
echo 'STATUS_TODO='$(jq -r '.data.organization.projectNext.fields.nodes[] | select(.name== "Status") |.settings | fromjson.options[] | select(.name=="Todo") |.id' project_data.json) >> $GITHUB_ENV
echo 'STATUS_IN_PROGRESS='$(jq -r '.data.organization.projectNext.fields.nodes[] | select(.name== "Status") |.settings | fromjson.options[] | select(.name=="In Progress") |.id' project_data.json) >> $GITHUB_ENV
echo 'STATUS_READY_FOR_REVIEW='$(jq -r '.data.organization.projectNext.fields.nodes[] | select(.name== "Status") |.settings | fromjson.options[] | select(.name=="Ready for Review") |.id' project_data.json) >> $GITHUB_ENV
echo 'STATUS_DONE='$(jq -r '.data.organization.projectNext.fields.nodes[] | select(.name== "Status") |.settings | fromjson.options[] | select(.name=="Done") |.id' project_data.json) >> $GITHUB_ENV
- name: Add Issue to project
env:
GITHUB_TOKEN: ${{secrets.PROJECT_AUTOMATION}}
ISSUE_ID: ${{ github.event.issue.node_id }}
run: |
item_id="$( gh api graphql -f query='
mutation($project:ID!, $issue:ID!) {
addProjectNextItem(input: {projectId: $project, contentId: $issue}) {
projectNextItem {
id
}
}
}' -f project="$PROJECT_ID" -f issue="$ISSUE_ID" --jq '.data.addProjectNextItem.projectNextItem.id')"
echo 'ITEM_ID='$item_id >> $GITHUB_ENV
- name: Export Labels
env:
ISSUE_DATA: ${{ toJson(github.event.issue) }}
run: |
echo 'LABELS='$(echo "$ISSUE_DATA" | jq -r '[.labels[].name] | join(" ")') >> $GITHUB_ENV
- name: Set "Type" field
env:
GITHUB_TOKEN: ${{secrets.PROJECT_AUTOMATION}}
run: |
# Only execute this step if the Issue contains at least one label
if [ "${#LABELS[@]}" -gt 0 ]; then
# Let by default the type is "Bug"
OPTION_ID=$TYPE_BUG
# If it has "feature" label then set the type to "Feature"
if [[ "${LABELS[*]}" =~ "feature" ]]; then
OPTION_ID=$TYPE_FEATURE
fi
# If it has "enhancement" label then set the type to "Enhancement"
if [[ "${LABELS[*]}" =~ "enhancement" ]]; then
OPTION_ID=$TYPE_ENHANCEMENT
fi
# If it has "documentation" label then set the type to "Documentation"
if [[ "${LABELS[*]}" =~ "documentation" ]]; then
OPTION_ID=$TYPE_DOCUMENTATION
fi
# If it has "translation" label then set the type to "Translation"
if [[ "${LABELS[*]}" =~ "translation" ]]; then
OPTION_ID=$TYPE_TRANSLATION
fi
# Set the "Type" field to appropriate option
gh api graphql -f query='
mutation ($project: ID!, $item: ID!, $field: ID!, $opt_id: ID!) {
updateProjectNextItemField(input: {
projectId: $project
itemId: $item
fieldId: $field
value: $opt_id
}) {
projectNextItem {
id
}
}
}' -f project="$PROJECT_ID" -f item="$ITEM_ID" -f field="$TYPE_ID" -f opt_id="$OPTION_ID" --silent
fi
- name: Set "Status" field
env:
GITHUB_TOKEN: ${{secrets.PROJECT_AUTOMATION}}
run: |
STATE=${{github.event.issue.state}}
echo "State: $STATE"
OPTION_ID=$STATUS_TODO
if [[ "${STATE}" == "closed" ]]
then
OPTION_ID=$STATUS_DONE
fi
gh api graphql -f query='
mutation ($project: ID!, $item: ID!, $field: ID!, $status_id: ID!) {
updateProjectNextItemField(input: {
projectId: $project
itemId: $item
fieldId: $field
value: $status_id
}) {
projectNextItem {
id
}
}
}' -f project="$PROJECT_ID" -f item="$ITEM_ID" -f field="$STATUS_ID" -f status_id="$OPTION_ID" --silent
@@ -1,219 +0,0 @@
name: Project Automation (PR)
on:
pull_request:
types:
- opened
- ready_for_review
- reopened
- review_requested
- closed
- labeled
- unlabeled
- synchronize
jobs:
pr_automation:
runs-on: ubuntu-latest
steps:
- name: Get project data
env:
GITHUB_TOKEN: ${{secrets.PROJECT_AUTOMATION}}
ORGANIZATION: hugo-toha
PROJECT_NUMBER: 4
run: |
gh api graphql --header 'GraphQL-Features: projects_next_graphql' -f query='
query($org: String!, $number: Int!) {
organization(login: $org){
projectNext(number: $number) {
id
fields(first:20) {
nodes {
id
name
settings
}
}
}
}
}' -f org="$ORGANIZATION" -F number=$PROJECT_NUMBER > project_data.json
echo 'PROJECT_ID='$(jq -r '.data.organization.projectNext.id' project_data.json) >> $GITHUB_ENV
# Read the ID of the "Type" field options
echo 'TYPE_ID='$(jq -r '.data.organization.projectNext.fields.nodes[] | select(.name== "Type") |.id' project_data.json) >> $GITHUB_ENV
echo 'PROJECT_ID='$(jq -r '.data.organization.projectNext.id' project_data.json) >> $GITHUB_ENV
echo 'TYPE_ID='$(jq -r '.data.organization.projectNext.fields.nodes[] | select(.name== "Type") |.id' project_data.json) >> $GITHUB_ENV
echo 'TYPE_BUG='$(jq -r '.data.organization.projectNext.fields.nodes[] | select(.name== "Type") |.settings | fromjson.options[] | select(.name=="Bug") |.id' project_data.json) >> $GITHUB_ENV
echo 'TYPE_FEATURE='$(jq -r '.data.organization.projectNext.fields.nodes[] | select(.name== "Type") |.settings | fromjson.options[] | select(.name=="Feature") |.id' project_data.json) >> $GITHUB_ENV
echo 'TYPE_ENHANCEMENT='$(jq -r '.data.organization.projectNext.fields.nodes[] | select(.name== "Type") |.settings | fromjson.options[] | select(.name=="Enhancement") |.id' project_data.json) >> $GITHUB_ENV
echo 'TYPE_DOCUMENTATION='$(jq -r '.data.organization.projectNext.fields.nodes[] | select(.name== "Type") |.settings | fromjson.options[] | select(.name=="Documentation") |.id' project_data.json) >> $GITHUB_ENV
echo 'TYPE_TRANSLATION='$(jq -r '.data.organization.projectNext.fields.nodes[] | select(.name== "Type") |.settings | fromjson.options[] | select(.name=="Translation") |.id' project_data.json) >> $GITHUB_ENV
# Read the id of the "Status" field options
echo 'STATUS_ID='$(jq -r '.data.organization.projectNext.fields.nodes[] | select(.name== "Status") |.id' project_data.json) >> $GITHUB_ENV
echo 'STATUS_TODO='$(jq -r '.data.organization.projectNext.fields.nodes[] | select(.name== "Status") |.settings | fromjson.options[] | select(.name=="Todo") |.id' project_data.json) >> $GITHUB_ENV
echo 'STATUS_IN_PROGRESS='$(jq -r '.data.organization.projectNext.fields.nodes[] | select(.name== "Status") |.settings | fromjson.options[] | select(.name=="In Progress") |.id' project_data.json) >> $GITHUB_ENV
echo 'STATUS_READY_FOR_REVIEW='$(jq -r '.data.organization.projectNext.fields.nodes[] | select(.name== "Status") |.settings | fromjson.options[] | select(.name=="Ready for Review") |.id' project_data.json) >> $GITHUB_ENV
echo 'STATUS_DONE='$(jq -r '.data.organization.projectNext.fields.nodes[] | select(.name== "Status") |.settings | fromjson.options[] | select(.name=="Done") |.id' project_data.json) >> $GITHUB_ENV
- name: Add PR to project
env:
GITHUB_TOKEN: ${{secrets.PROJECT_AUTOMATION}}
PR_ID: ${{ github.event.pull_request.node_id }}
run: |
item_id="$( gh api graphql -f query='
mutation($project:ID!, $pr:ID!) {
addProjectNextItem(input: {projectId: $project, contentId: $pr}) {
projectNextItem {
id
}
}
}' -f project="$PROJECT_ID" -f pr="$PR_ID" --jq '.data.addProjectNextItem.projectNextItem.id')"
echo 'ITEM_ID='$item_id >> $GITHUB_ENV
- name: Export Labels
env:
PR_DATA: ${{ toJson(github.event.pull_request) }}
run: |
echo 'LABELS='$(echo "$PR_DATA" | jq -r '[.labels[].name] | join(" ")') >> $GITHUB_ENV
- name: Set "Type" field
env:
GITHUB_TOKEN: ${{secrets.PROJECT_AUTOMATION}}
run: |
# Only execute this step if the PR contains at least one label
if [ "${#LABELS[@]}" -gt 0 ]; then
# Let by default the type is "Bug"
OPTION_ID=$TYPE_BUG
# If it has "feature" label then set the type to "Feature"
if [[ "${LABELS[*]}" =~ "feature" ]]; then
OPTION_ID=$TYPE_FEATURE
fi
# If it has "enhancement" label then set the type to "Enhancement"
if [[ "${LABELS[*]}" =~ "enhancement" ]]; then
OPTION_ID=$TYPE_ENHANCEMENT
fi
# If it has "documentation" label then set the type to "Documentation"
if [[ "${LABELS[*]}" =~ "documentation" ]]; then
OPTION_ID=$TYPE_DOCUMENTATION
fi
# If it has "translation" label then set the type to "Translation"
if [[ "${LABELS[*]}" =~ "translation" ]]; then
OPTION_ID=$TYPE_TRANSLATION
fi
# Set the "Type" field to appropriate option
gh api graphql -f query='
mutation ($project: ID!, $item: ID!, $field: ID!, $opt_id: ID!) {
updateProjectNextItemField(input: {
projectId: $project
itemId: $item
fieldId: $field
value: $opt_id
}) {
projectNextItem {
id
}
}
}' -f project="$PROJECT_ID" -f item="$ITEM_ID" -f field="$TYPE_ID" -f opt_id="$OPTION_ID" --silent
fi
- name: Set "Status" field
env:
GITHUB_TOKEN: ${{secrets.PROJECT_AUTOMATION}}
run: |
MERGED=${{github.event.pull_request.merged}}
STATE=${{github.event.pull_request.state}}
REVIEWERS=${{github.event.pull_request.requested_reviewers}}
DRAFT=${{github.event.pull_request.draft}}
echo "Merged: $MERGED"
echo "State: $STATE"
echo "Draft: $DRAFT"
echo "Reviewer: $REVIEWER"
OPTION_ID=$STATUS_TODO
if [[ ("${MERGED}" == "true") || ("${STATE}" == "closed") ]]
then
OPTION_ID=$STATUS_DONE
elif [[ ${#REVIEWERS[@]} -gt 0 ]]
then
OPTION_ID=$STATUS_READY_FOR_REVIEW
else
OPTION_ID=$STATUS_IN_PROGRESS
fi
# Expose the OPTION_ID so that it can be used in later steps
echo 'PR_STATUS='$OPTION_ID >> $GITHUB_ENV
gh api graphql -f query='
mutation ($project: ID!, $item: ID!, $field: ID!, $status_id: ID!) {
updateProjectNextItemField(input: {
projectId: $project
itemId: $item
fieldId: $field
value: $status_id
}) {
projectNextItem {
id
}
}
}' -f project="$PROJECT_ID" -f item="$ITEM_ID" -f field="$STATUS_ID" -f status_id="$OPTION_ID" --silent
- name: Find Linked Issues
id: linked_issues
uses: hossainemruz/linked-issues@main
with:
pr_url: ${{github.event.pull_request.html_url}}
format: IssueNumber
- name: Update Linked Issues Status
env:
GITHUB_TOKEN: ${{secrets.PROJECT_AUTOMATION}}
run: |
declare -a issues=(${{ steps.linked_issues.outputs.issues }})
# Loop through the every issues and update their Status to same as the PR Status
for i in "${issues[@]}"
do
# Find the Issue ID
ISSUE_ID="$(gh api graphql -f query='
query($owner: String!, $name: String!, $issue_number: Int!) {
repository(owner: $owner, name: $name) {
issue(number: $issue_number) {
id
}
}
}' -f owner="${{github.event.pull_request.head.repo.owner.login}}" -f name="${{github.event.pull_request.head.repo.name}}" -F issue_number=$i --jq='.data.repository.issue.id')"
# Find the id of the Issue at the project board
item_id="$( gh api graphql -f query='
mutation($project:ID!, $pr:ID!) {
addProjectNextItem(input: {projectId: $project, contentId: $pr}) {
projectNextItem {
id
}
}
}' -f project="$PROJECT_ID" -f pr="$ISSUE_ID" --jq '.data.addProjectNextItem.projectNextItem.id')"
# Update the Issue Status
gh api graphql -f query='
mutation ($project: ID!, $item: ID!, $field: ID!, $status_id: ID!) {
updateProjectNextItemField(input: {
projectId: $project
itemId: $item
fieldId: $field
value: $status_id
}) {
projectNextItem {
id
}
}
}' -f project="$PROJECT_ID" -f item="$item_id" -f field="$STATUS_ID" -f status_id="$PR_STATUS" --silent
done
+92
View File
@@ -0,0 +1,92 @@
name: PR Workflows
# Run action on pull request event
on: [pull_request]
jobs:
# Build exampleSite
build:
runs-on: ubuntu-latest
steps:
# checkout to the commit that has been pushed
- uses: actions/checkout@v4.1.1
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 18
- name: Install node modules
run: npm install
- name: Setup Hugo
uses: peaceiris/actions-hugo@v2.6.0
with:
hugo-version: 'latest'
extended: true
- name: Build
run: |
cd exampleSite
hugo --minify
# Run linter
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4.1.1
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 18
- name: Install node modules
run: npm install
- name: Lint
run: |
npm run lint
lighthouse-check:
runs-on: ubuntu-latest
steps:
- name: Waiting for Netlify Preview
uses: kamranayub/wait-for-netlify-action@v2.1.1
id: preview
with:
site_name: "toha-ci"
max_timeout: 300
env:
NETLIFY_TOKEN: ${{secrets.NETLIFY_TOKEN}}
- name: Run Lighthouse
uses: foo-software/lighthouse-check-action@v10.0.0
id: lighthouseCheck
with:
accessToken: ${{ secrets.LIGHTHOUSE_TOKEN }}
gitHubAccessToken: ${{secrets.GITHUB_TOKEN}}
emulatedFormFactor: 'all'
prCommentEnabled: true
prCommentSaveOld: false
timeout: 5
urls: "${{ steps.preview.outputs.url }},${{ steps.preview.outputs.url }}/posts/,${{ steps.preview.outputs.url }}/posts/markdown-sample/,${{ steps.preview.outputs.url }}/posts/shortcodes/"
# Ensure that PR has desired labels
enforce-label:
runs-on: ubuntu-latest
steps:
- uses: yogevbd/enforce-label-action@2.2.2
with:
REQUIRED_LABELS_ANY: "automerge,breaking-change,bug-fix,enhancement,feature,translation"
REQUIRED_LABELS_ANY_DESCRIPTION: "The PR must have at least one these labels: ['automerge','breaking-change','bug-fix','enhancement','feature','translation']"
# Check for any broken links
markdown-link-check:
runs-on: ubuntu-latest
steps:
# checkout to latest commit
- uses: actions/checkout@v4.1.1
# run markdown linter
- uses: gaurav-nelson/github-action-markdown-link-check@1.0.15
+3 -1
View File
@@ -2,4 +2,6 @@
node_modules/
.DS_Store
.history/
resources/
resources/
public/
.hugo_build.lock
+5
View File
@@ -0,0 +1,5 @@
printWidth: 100
tabWidth: 2
semi: false
singleQuote: true
trailingComma: "all"
+1
View File
@@ -0,0 +1 @@
nodejs 18.12.1
+69 -207
View File
@@ -30,8 +30,16 @@ A [Hugo](https://gohugo.io/) theme for a personal portfolio with minimalist desi
- Achievement Gallery
- Sidebar to Categorize the Posts
- Short Codes
- Google Analytics Support
- Disqus Comment Support
- Analytics Support
- GoatCounter
- counter.dev
- Google Analytics
- Matomo/Piwik
- Comment Support
- [Disqus](https://disqus.com/)
- [Valine](https://valine.js.org/)
- [Uttarances](https://utteranc.es/)
- [Giscus](https://giscus.app/)
For more details about the features please visit [here](https://toha-guides.netlify.app/posts/features/).
@@ -49,7 +57,13 @@ For more details about the features please visit [here](https://toha-guides.netl
- 日本語
- 한국어
- русский
- suomi
- Tiếng Việt
- Turkish
- Arabic (العربية)
- Português
- Català
- Português Brasileiro
To know more about how to translate your site, please visit [here](https://toha-guides.netlify.app/posts/translation/). Follow, the data and post format from this [example site](https://hugo-toha.github.io).
@@ -71,92 +85,70 @@ Here are few screenshots from the [example site](https://hugo-toha.github.io).
## Requirements
- Hugo Version 0.68.0 or higher
- Hugo Version 0.118.0 (extended) or higher
- Go language 1.18 or higher (require for hugo modules)
- Node version v18.x or later and npm 8.x or later.
## Usage
In order to use this theme, follow the following steps:
The easiest way to use this theme is to fork [hugo-toha.github.io](https://github.com/hugo-toha/hugo-toha.github.io) sample repo.Then change the configurations according to your need.
#### Add theme as git submodule
If you want to start from scratch, then follow these steps:
At first, add [Toha](https://github.com/hugo-toha/toha) theme as git submodule to your hugo-site.
##### 1. Initialize Hugo module on you repo
```console
$ git submodule add https://github.com/hugo-toha/toha.git themes/toha
At first, initialize [Hugo modules](https://gohugo.io/hugo-modules/) in your repo. This will create a `go.mod` file.
```bash
hugo mod init github.com/<your username>/<your repo name>
```
> Don't use SSH URL of the theme during adding as git sub-module. Also, don't clone the theme in your `themes` directory using `git clone`. They don't work well with Github Action or Netlify.
##### 2. Add this theme as your module dependency
If you don't already have a hugo site, create one by following the step-by-step guide from [here](https://toha-guides.netlify.app/posts/getting-started/prepare-site/).
#### Configuring Site
Now, configure your site to use `toha` theme by adding the following configuration in `config.yaml` file of your site.
Now, in your `config.yaml` file, add a `module` section.
```yaml
baseURL: https://hugo-toha.github.io
languageCode: en-us
title: "John's Blog"
theme: "toha"
# Manage languages
# For any more details, you can check the official documentation: https://gohugo.io/content-management/multilingual/
languages:
en:
languageName: English
weight: 1
# Control TOC depth
markup:
tableOfContents:
startLevel: 2
endLevel: 6
ordered: false
# At least HTML and JSON are required for the main HTML content and
# client-side JavaScript search
outputs:
home:
- HTML
- RSS
- JSON
# Enable global emoji support
enableEmoji: true
# Site parameters
params:
# GitHub repo URL and branch of your site
gitRepo: https://github.com/hugo-toha/hugo-toha.github.io
gitBranch: main
# specify whether you want to write some blog posts or not
enableBlogPost: true
# specify whether you want to show Table of Contents in reading page
enableTOC: true
# Provide newsletter configuration.
# This feature has been implemented for Mailchimp only for now.
# You can also hide it from the footer.
newsletter:
# specify whether you want to display the newsletter form
enable: true
# specify which newsletter provider you want to use
provider: mailchimp
# specify the target URL for the subscription form
mailchimpURL: https://github.us1.list-manage.com/subscribe/post?u=19de52a4603135aae97163fd8&amp;id=094a24c76e
# Use Hugo modules to add theme
module:
imports:
- path: github.com/hugo-toha/toha/v4
```
Don't forget to update `title`, `baseURL`, and `gitRepo` fields with your own information. To know about more available configuration options, please visit [here](https://toha-guides.netlify.app/posts/configuration/site-parameters/).
Check this sample [config.yaml](https://github.com/hugo-toha/hugo-toha.github.io/blob/main/config.yaml) for further reference.
##### 3. Update your module
Now, run this command to load this theme as your module.
```bash
hugo mod tidy
```
#### Running Locally
Now, you can run your hugo site with `toha` theme locally with the following command:
Now, you can run your hugo site locally with the following steps:
```console
$ hugo server --theme toha --watch
##### 1. Generate node dependency configuration
Now run the following command to generate node dependency configuration. This will create the a `package.json` file in you repo.
```bash
hugo mod npm pack
```
##### 2. Install dependencies
Install the node dependencies using following command:
```bash
npm install
```
##### 3. Run your site
Now, run you site locally using following command.
```bash
hugo server -w
```
When you run your site for first time, it will start with the default parameters. It should look similar to the [example site](https://hugo-toha.github.io). However, it will not have any sections in the homepage as we haven't configured them yet. You can configure your site by following the guides from [here](https://toha-guides.netlify.app/posts/configuration/).
@@ -165,142 +157,12 @@ When you run your site for first time, it will start with the default parameters
Here, are some handy shortcodes you can use with this theme.
- [Alert](https://toha-guides.netlify.app/posts/short-codes/alert/)
- [Image](https://toha-guides.netlify.app/posts/short-codes/img/)
- [Split](https://toha-guides.netlify.app/posts/short-codes/split/)
- [Vertical Space](https://toha-guides.netlify.app/posts/short-codes/vs/)
## Project Roadmap
Here, are the current plan and progress of various components of this theme. The components will be prioritized based on users requests.
### 1. Portfolio Mode
Here is the check list for portfolio mode,
- [x] **Home**
- [x] Configurable Background
- [x] Author Image
- [x] Greeting
- [x] Typing Carousel
- [x] **About**
- [x] Name and Designation
- [x] Summary
- [x] Markdown Support
- [x] Social Links
- [x] Font Awesome Support
- [x] Resume Link
- [x] Soft Skills Indicator
- [x] **Skills**
- [x] Skill Cards
- [x] Markdown Support
- [x] **Experiences**
- [x] Designation
- [x] Timeline
- [x] Company Overview
- [x] Responsibilities
- [x] **Projects**
- [x] Category Filter
- [x] Project Card
- [x] Overview
- [x] Markdown Support
- [x] Github Stars
- [x] External URL Support
- [x] Technology Tags
- [x] **Recent Posts**
- [x] **Academic Career**
- [x] Degree
- [x] Institution
- [x] Timeline
- [x] Taken Courses
- [x] CGPA
- [x] Extracurricular Activities
- [ ] **Publications**
- [ ] Category Filter
- [ ] Card
- [ ] Abstract
- [ ] Authors
- [ ] Tags
- [ ] Links
- [ ] Gallery
- [x] **Accomplishment / Courses**
- [x] Overview
- [x] Certificate
- [x] **Achievements Gallery**
- [x] Image
- [x] Summary
### 2. Blog Mode
Here is the checklist for blog mode,
- [ ] **Dedicated Home page**
- [x] **List Page**
- [x] Post Cards
- [x] Sidebar
- [x] Pagination
- [x] **Reading Page**
- [x] Hero Image
- [x] Author Information
- [x] Sidebar
- [x] Table of Contents
- [x] Next & Previous Page Navigation
- [x] `Improve This Page` Button
- [x] Disqus Comment
### 3. Documentation Mode
Here is the check list for documentation mode,
- [ ] **Dedicated Home Page**
- [ ] **Doc Page**
- [ ] Redesign sidebar
- [ ] Redesign TOC menu
- [ ] Search Capability
### 4. Note Mode
- [ ] **Dedicated Home Page**
- [ ] **Note Page**
- [x] Add note view
- [ ] Redesign sidebar
- [ ] Add search capability
### 5. Tracking and Comments
- [x] Google Analytics
- [x] Disqus Comment
### 6. Shortcodes
- [x] Image
- [x] Split Page into Multiple Column
- [x] Vertical space between two sections
- [x] Alert
- [ ] Figure & sub-figure
- [ ] Tabs
- [x] Notes
- [Alert](https://toha-guides.netlify.app/posts/shortcodes/#alert)
- [Image](https://toha-guides.netlify.app/posts/shortcodes/#image)
- [Split](https://toha-guides.netlify.app/posts/shortcodes/#split)
- [Vertical Space](https://toha-guides.netlify.app/posts/shortcodes/#vertical-space)
- [Video](https://toha-guides.netlify.app/posts/shortcodes/#video)
- [Mermaid](https://hugo-toha.github.io/posts/shortcodes/#mermaid)
## Contributing
+10
View File
@@ -0,0 +1,10 @@
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"*": [
"*"
]
}
}
}
+11
View File
@@ -0,0 +1,11 @@
import 'popper.js'
import 'bootstrap'
import '@fortawesome/fontawesome-free/js/all'
import feather from 'feather-icons'
import './core'
import './features'
import './sections'
import './pages'
feather.replace();
+36
View File
@@ -0,0 +1,36 @@
let deviceState = {
isMobile: false,
isTablet: false,
isLaptop: false
}
function detectDeviceState () {
if (window.innerWidth <= 425) {
deviceState = {
isMobile: true,
isTablet: false,
isLaptop: false
}
} else if (window.innerWidth <= 768) {
deviceState = {
isMobile: false,
isTablet: true,
isLaptop: false
}
} else {
deviceState = {
isMobile: false,
isTablet: false,
isLaptop: true
}
}
}
detectDeviceState()
window.addEventListener('resize', detectDeviceState)
// returns a copy of the device state
// so other parts of code can't override this.
export function getDeviceState () {
return { ...deviceState }
}
+2
View File
@@ -0,0 +1,2 @@
export * from './device'
export * from './insertScript'
+14
View File
@@ -0,0 +1,14 @@
export const insertScript = (id, src, onload) => {
// script is already inserted, do nothing
if (document.getElementById(id)) return
// insert script
const firstScriptTag = document.getElementsByTagName('script')[0]
const scriptTag = document.createElement('script')
scriptTag.id = id
scriptTag.onload = onload
scriptTag.src = src
scriptTag.defer = true
scriptTag.async = true
firstScriptTag.parentNode.insertBefore(scriptTag, firstScriptTag)
}
+52
View File
@@ -0,0 +1,52 @@
const PERSISTENCE_KEY = 'darkmode:color-scheme'
window.addEventListener('load', async () => {
const menu = document.getElementById('themeMenu')
const $icon = document.getElementById('navbar-theme-icon-svg')
if (menu == null || $icon == null) return
const btns = menu.getElementsByTagName('a')
const iconMap = Array.from(btns).reduce((map, btn) => {
const $img = btn.getElementsByTagName('img')[0]
map[btn.dataset.scheme] = $img.src
return map
}, {})
function loadScheme() {
return localStorage.getItem(PERSISTENCE_KEY) || "system"
}
function saveScheme(scheme) {
localStorage.setItem(PERSISTENCE_KEY, scheme)
}
function getPreferredColorScheme() {
const isDarkMode = window.matchMedia("(prefers-color-scheme: dark)").matches;
return isDarkMode ? "dark" : "light";
}
function setScheme(newScheme) {
let theme = newScheme
if (newScheme === 'system') {
theme = getPreferredColorScheme()
}
// set data-theme attribute on html tag
document.querySelector("html").dataset.theme = theme;
// update icon
$icon.src = iconMap[newScheme]
// save preference to local storage
saveScheme(newScheme)
}
setScheme(loadScheme())
Array.from(menu.getElementsByTagName('a')).forEach((btn) => {
btn.addEventListener('click', () => {
const { scheme } = btn.dataset
setScheme(scheme)
})
})
})
+165
View File
@@ -0,0 +1,165 @@
import { insertScript } from '../../core'
const PDFJS_BUNDLE = 'https://cdn.jsdelivr.net/npm/pdfjs-dist@3.0.279/build/pdf.min.js'
const WORKER_BUNDLE = 'https://cdn.jsdelivr.net/npm/pdfjs-dist@3.0.279/build/pdf.worker.min.js'
class PDFViewer {
constructor (el) {
const {
url,
hidePaginator,
hideLoader,
scale,
pageNum
} = el.dataset
if (url == null) {
throw new Error('Cannot load PDF! Attribute `data-url` is not set.')
}
// props
this.url = url
this.hidePaginator = hidePaginator !== 'false'
this.hideLoader = hideLoader !== 'false'
this.scale = scale || 3
// initial state
this.pageNum = parseInt(pageNum, 10) || 1
this.loaded = false
this.pageRendering = false
this.pageNumPending = null
// DOM elements
this.canvas = el.getElementsByClassName('pdf-canvas')[0]
if (this.canvas == null) {
throw new Error('canvas element not found!')
};
this.paginator = el.getElementsByClassName('paginator')[0]
this.loadingWrapper = el.getElementsByClassName('loading-wrapper')[0]
this.next = el.getElementsByClassName('next')[0]
this.prev = el.getElementsByClassName('prev')[0]
this.curPage = el.getElementsByClassName('page-num')[0]
this.pageCount = el.getElementsByClassName('page-count')[0]
// context
this.ctx = this.canvas.getContext('2d')
// events
this.next.addEventListener('click', this.handleNextPage.bind(this))
this.prev.addEventListener('click', this.handlePrevPage.bind(this))
this.showPaginator()
this.showLoader()
this.loadPDF()
}
/**
* If we haven't disabled the loader, show loader and hide canvas
*/
showLoader () {
if (this.hideLoader) return
this.loadingWrapper.style.display = 'flex'
this.canvas.style.display = 'none'
}
/**
* If we haven't disabled the paginator, show paginator
*/
showPaginator () {
if (this.hidePaginator) return
this.paginator.style.display = 'block'
}
/**
* Hides loader and shows canvas
*/
showContent () {
this.loadingWrapper.style.display = 'none'
this.canvas.style.display = 'block'
}
/**
* Asynchronously downloads PDF.
*/
async loadPDF () {
this.pdfDoc = await window.pdfjsLib.getDocument(this.url).promise
this.pageCount.textContent = this.pdfDoc.numPages
// If the user passed in a number that is out of range, render the last page.
if (this.pageNum > this.pdfDoc.numPages) {
this.pageNum = this.pdfDoc.numPages
}
this.renderPage(this.pageNum)
}
/**
* Get page info from document, resize canvas accordingly, and render page.
* @param num Page number.
*/
async renderPage (num) {
this.pageRendering = true
const page = await this.pdfDoc.getPage(num)
const viewport = page.getViewport({ scale: this.scale })
this.canvas.height = viewport.height
this.canvas.width = viewport.width
// Wait for rendering to finish
await page.render({
canvasContext: this.ctx,
viewport
}).promise
this.pageRendering = false
this.showContent()
if (this.pageNumPending !== null) {
// New page rendering is pending
this.renderPage(this.pageNumPending)
this.pageNumPending = null
}
// Update page counters
this.curPage.textContent = num
}
/**
* If another page rendering in progress, waits until the rendering is
* finished. Otherwise, executes rendering immediately.
*/
queueRenderPage (num) {
if (this.pageRendering) {
this.pageNumPending = num
} else {
this.renderPage(num)
}
}
/**
* Displays previous page.
*/
handlePrevPage () {
if (this.pageNum <= 1) {
return
}
this.pageNum--
this.queueRenderPage(this.pageNum)
}
/**
* Displays next page.
*/
handleNextPage () {
if (this.pageNum >= this.pdfDoc.numPages) {
return
}
this.pageNum++
this.queueRenderPage(this.pageNum)
}
}
insertScript('pdfjs', PDFJS_BUNDLE, () => {
window.pdfjsLib.GlobalWorkerOptions.workerSrc = WORKER_BUNDLE
Array.from(document.getElementsByClassName('pdf-viewer')).forEach(el => new PDFViewer(el))
})
@@ -0,0 +1,3 @@
if (process.env.FEATURE_FLOWCHART_MERMAID === '1') {
import('./mermaid')
}
@@ -0,0 +1,7 @@
import mermaid from 'mermaid'
import * as params from '@params'
const mermaidOptions = params.flowchart?.mermaid || {}
const options = Object.assign({}, mermaidOptions, { startOnLoad: true })
mermaid.initialize(options)
+27
View File
@@ -0,0 +1,27 @@
if (process.env.FEATURE_VIDEOPLAYER === '1') {
import('./videoplayer')
}
if (process.env.FEATURE_TOC === '1') {
import('./toc')
}
if (process.env.FEATURE_DARKMODE === '1') {
import('./darkmode')
}
if (process.env.FEATURE_FLOWCHART === '1') {
import('./flowchart')
}
if (process.env.FEATURE_SYNTAXHIGHLIGHT === '1') {
import('./syntaxhighlight')
}
if (process.env.FEATURE_MATH === '1') {
import('./math')
}
if (process.env.FEATURE_EMBEDPDF === '1') {
import('./embedpdf')
}
+3
View File
@@ -0,0 +1,3 @@
if (process.env.FEATURE_MATH_KATEX === '1') {
import('./katex')
}
+21
View File
@@ -0,0 +1,21 @@
import renderMathInElement from 'katex/contrib/auto-render'
import * as params from '@params'
const defaultOptions = {
delimiters: [
{ left: '$$', right: '$$', display: true },
{ left: '\\[', right: '\\]', display: true },
{ left: '$', right: '$', display: false },
{ left: '\\(', right: '\\)', display: false }
]
}
window.addEventListener('DOMContentLoaded', () => {
renderMathInElement(
document.body,
{
...defaultOptions,
...(params.math?.katex || {})
}
)
})
@@ -0,0 +1,12 @@
import hljs from 'highlight.js'
import * as params from '@params'
const defaultOptions = {
ignoreUnescapedHTML: true
}
hljs.configure({
...defaultOptions,
...(params.syntaxhighlight?.hljs || {}),
});
hljs.highlightAll();
@@ -0,0 +1,3 @@
if (process.env.FEATURE_SYNTAXHIGHLIGHT_HLJS === '1') {
import('./hljs')
}
+48
View File
@@ -0,0 +1,48 @@
import { getDeviceState } from '../../core'
// Toggle Table of Contents on click. Here, class "hide" open the toc
function toggleTOC () {
const toc = document.getElementById('toc-section')
if (toc == null) {
return
}
if (toc.classList.contains('hide')) {
toc.classList.remove('hide')
} else {
// if sidebar-section is open, then close it first
const sidebar = document.getElementById('sidebar-section')
if (sidebar != null && sidebar.classList.contains('hide')) {
sidebar.classList.remove('hide')
}
// add "hide" class
toc.classList.add('hide')
// if it is mobile device. then scroll to top.
const { isMobile } = getDeviceState()
if (isMobile && toc.classList.contains('hide')) {
document.body.scrollTop = 0
document.documentElement.scrollTop = 0
}
}
if (document.getElementById('hero-area') != null) {
document.getElementById('hero-area').classList.toggle('hide')
}
}
window.addEventListener('DOMContentLoaded', () => {
// bind click event to #toc-toggle in navbar-2.html
const toggle = document.getElementById('toc-toggler')
if (toggle) toggle.addEventListener('click', toggleTOC)
// hide TOC when user clicks on a TOC link.
// Only applies if it's mobile.
const toc = document.getElementById('TableOfContents')
if (toc) {
toc.addEventListener('click', (event) => {
const { isMobile } = getDeviceState()
if (isMobile && event.target.nodeName === 'A') {
toggleTOC()
}
})
}
})
@@ -0,0 +1,3 @@
if (process.env.FEATURE_VIDEOPLAYER_PLYR === '1') {
import('./plyr')
}
@@ -0,0 +1,5 @@
import Plyr from 'plyr'
import * as params from '@params'
const options = params.videoplayer?.plyr
window.addEventListener('DOMContentLoaded', () => Plyr.setup('.video-player', options))
+16
View File
@@ -0,0 +1,16 @@
import { init } from 'ityped'
// =========== Typing Carousel ================
// get data from hidden ul and set as typing data
document.addEventListener('DOMContentLoaded', () => {
const $ul = document.getElementById('typing-carousel-data')?.children
if ($ul == null || $ul.length === 0) return
const strings = Array.from($ul).map($el => $el.textContent)
init('#ityped', {
strings,
startDelay: 200,
loop: true
})
})
+4
View File
@@ -0,0 +1,4 @@
import './note'
import './search'
import './single'
import './home'
+30
View File
@@ -0,0 +1,30 @@
import imagesLoaded from 'imagesloaded'
document.addEventListener('DOMContentLoaded', function () {
function resizeGridItem (item) {
const grid = document.getElementsByClassName('note-card-holder')[0]
const rowHeight = parseInt(window.getComputedStyle(grid).getPropertyValue('grid-auto-rows'))
const rowGap = parseInt(window.getComputedStyle(grid).getPropertyValue('grid-row-gap'))
const rowSpan = Math.ceil((item.querySelector('.item').getBoundingClientRect().height + rowGap) / (rowHeight + rowGap))
item.style.gridRowEnd = 'span ' + rowSpan
}
function resizeAllGridItems () {
const allItems = document.getElementsByClassName('note-card')
for (let x = 0; x < allItems.length; x++) {
resizeGridItem(allItems[x])
}
}
function resizeInstance (instance) {
const item = instance.elements[0]
resizeGridItem(item)
}
window.addEventListener('resize', resizeAllGridItems)
const allItems = document.getElementsByClassName('note-card')
for (let x = 0; x < allItems.length; x++) {
imagesLoaded(allItems[x], resizeInstance)
}
})
+133
View File
@@ -0,0 +1,133 @@
import Fuse from 'fuse.js'
import Mark from 'mark.js'
window.addEventListener('DOMContentLoaded', () => {
const summaryInclude = 60
const fuseOptions = {
shouldSort: true,
includeMatches: true,
threshold: 0.0,
tokenize: true,
location: 0,
distance: 100,
maxPatternLength: 32,
minMatchCharLength: 1,
keys: [
{ name: 'title', weight: 0.8 },
{ name: 'hero', weight: 0.7 },
{ name: 'summary', weight: 0.6 },
{ name: 'date', weight: 0.5 },
{ name: 'contents', weight: 0.5 },
{ name: 'tags', weight: 0.3 },
{ name: 'categories', weight: 0.3 }
]
}
const searchQuery = param('keyword')
if (searchQuery) {
document.getElementById('search-box').value = searchQuery
executeSearch(searchQuery)
} else {
const node = document.createElement('p')
node.textContent = 'Please enter a word or phrase above'
document.getElementById('search-results')?.append(node)
}
function executeSearch (searchQuery) {
const url = window.location.href.split('/search/')[0] + '/index.json'
fetch(url).then(response => response.json()).then(function (data) {
const pages = data
const fuse = new Fuse(pages, fuseOptions)
const results = fuse.search(searchQuery)
document.getElementById('search-box').value = searchQuery
if (results.length > 0) {
populateResults(results)
} else {
const node = document.createElement('p')
node.textContent = 'No matches found'
document.getElementById('search-results')?.append(node)
}
})
}
function populateResults (results) {
results.forEach(function (value, key) {
const contents = value.item.contents
let snippet = ''
const snippetHighlights = []
if (fuseOptions.tokenize) {
snippetHighlights.push(searchQuery)
} else {
value.matches.forEach(function (mvalue) {
if (mvalue.key === 'tags' || mvalue.key === 'categories') {
snippetHighlights.push(mvalue.value)
} else if (mvalue.key === 'contents') {
const start = mvalue.indices[0][0] - summaryInclude > 0 ? mvalue.indices[0][0] - summaryInclude : 0
const end = mvalue.indices[0][1] + summaryInclude < contents.length ? mvalue.indices[0][1] + summaryInclude : contents.length
snippet += contents.substring(start, end)
snippetHighlights.push(mvalue.value.substring(mvalue.indices[0][0], mvalue.indices[0][1] - mvalue.indices[0][0] + 1))
}
})
}
if (snippet.length < 1) {
snippet += contents.substring(0, summaryInclude * 2)
}
// pull template from hugo template definition
const templateDefinition = document.getElementById('search-result-template').innerHTML
// replace values
const output = render(templateDefinition, {
key,
title: value.item.title,
hero: value.item.hero,
date: value.item.date,
summary: value.item.summary,
link: value.item.permalink,
tags: value.item.tags,
categories: value.item.categories,
snippet
})
const dom = new DOMParser().parseFromString(output, 'text/html')
document.getElementById('search-results').append(dom.getElementsByClassName('post-card')[0])
snippetHighlights.forEach(function (snipvalue) {
const context = document.getElementById('#summary-' + key)
const instance = new Mark(context)
instance.mark(snipvalue)
})
})
}
function param (name) {
return decodeURIComponent((location.search.split(name + '=')[1] || '').split('&')[0]).replace(/\+/g, ' ')
}
function render (templateString, data) {
let conditionalMatches, copy
const conditionalPattern = /\$\{\s*isset ([a-zA-Z]*) \s*\}(.*)\$\{\s*end\s*}/g
// since loop below depends on re.lastInxdex, we use a copy to capture any manipulations whilst inside the loop
copy = templateString
while ((conditionalMatches = conditionalPattern.exec(templateString)) !== null) {
if (data[conditionalMatches[1]]) {
// valid key, remove conditionals, leave contents.
copy = copy.replace(conditionalMatches[0], conditionalMatches[2])
} else {
// not valid, remove entire section
copy = copy.replace(conditionalMatches[0], '')
}
}
templateString = copy
// now any conditionals removed we can do simple substitution
let key, find, re
for (key in data) {
find = '\\$\\{\\s*' + key + '\\s*\\}'
re = new RegExp(find, 'g')
templateString = templateString.replace(re, data[key])
}
return templateString
}
})
+60
View File
@@ -0,0 +1,60 @@
window.addEventListener('DOMContentLoaded', () => {
// =========== Add anchor to the headers ================
function addAnchor (element) {
element.innerHTML = `<a href="#${element.id}" class="header-anchor">${element.innerHTML}<sup><i class="fas fa-link fa-sm"></i></sup></a>`
}
const postContent = document.getElementById('post-content')
if (postContent != null) {
const headerTypes = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6']
for (let i = 0; i < headerTypes.length; i++) {
const headers = postContent.querySelectorAll(headerTypes[i])
if (headers) {
headers.forEach(addAnchor)
}
}
}
// =============== Make TOC Compatible wit Bootstrap Scroll Spy ========
// add "navbar" class to the "nav" element
const toc = document.getElementById('TableOfContents')
if (toc) {
toc.classList.add('navbar')
// add "nav-pills" class to the "ul" elements
let elems = toc.getElementsByTagName('ul')
for (let i = 0; i < elems.length; i++) {
elems[i].classList.add('nav-pills')
}
// add "nav-item" class to the "li" elements
elems = toc.getElementsByTagName('li')
for (let i = 0; i < elems.length; i++) {
elems[i].classList.add('nav-item')
}
// add "nav-link" class to the "a" elements
elems = toc.getElementsByTagName('a')
for (let i = 0; i < elems.length; i++) {
elems[i].classList.add('nav-link')
}
}
// add scroll to top button
const btn = document.getElementById('scroll-to-top')
if(btn) {
window.addEventListener('scroll', function () {
if (window.scrollY > 300) {
btn.classList.add('show')
} else {
btn.classList.remove('show')
}
})
btn.addEventListener('click', function (e) {
e.preventDefault()
window.scrollTo({
top: 0,
behavior: 'smooth'
})
})
}
})
+3
View File
@@ -0,0 +1,3 @@
export const process = {
env: {}
}
+220
View File
@@ -0,0 +1,220 @@
import { getDeviceState } from '../core'
function fourColumRow (gallery, entries, i) {
const entry1 = document.createElement('div')
entry1.classList.add('col-lg-6', 'm-0', 'p-0')
entry1.appendChild(entries[i].cloneNode(true))
entry1.children[0].classList.add('img-type-1')
gallery.appendChild(entry1)
i++
const entry2 = document.createElement('div')
entry2.classList.add('col-lg-3', 'm-0', 'p-0')
entry2.appendChild(entries[i].cloneNode(true))
entry2.children[0].classList.add('img-type-1')
gallery.appendChild(entry2)
i++
const entry3 = document.createElement('div')
entry3.classList.add('col-lg-3', 'm-0', 'p-0')
entry3.appendChild(entries[i].cloneNode(true))
entry3.children[0].classList.add('img-type-2')
i++
entry3.appendChild(entries[i].cloneNode(true))
entry3.children[1].classList.add('img-type-2')
gallery.appendChild(entry3)
i++
}
function fourColumnReversedRow (gallery, entries, i) {
const entry1 = document.createElement('div')
entry1.classList.add('col-lg-3', 'm-0', 'p-0')
entry1.appendChild(entries[i].cloneNode(true))
entry1.children[0].classList.add('img-type-2')
i++
entry1.appendChild(entries[i].cloneNode(true))
entry1.children[1].classList.add('img-type-2')
gallery.appendChild(entry1)
i++
const entry2 = document.createElement('div')
entry2.classList.add('col-lg-3', 'm-0', 'p-0')
entry2.appendChild(entries[i].cloneNode(true))
entry2.children[0].classList.add('img-type-1')
gallery.appendChild(entry2)
i++
const entry3 = document.createElement('div')
entry3.classList.add('col-lg-6', 'm-0', 'p-0')
entry3.appendChild(entries[i].cloneNode(true))
entry3.children[0].classList.add('img-type-1')
gallery.appendChild(entry3)
i++
}
function threeColumnRow (gallery, entries, i) {
console.log(i)
const entry1 = document.createElement('div')
entry1.classList.add('col-lg-6', 'col-md-6', 'm-0', 'p-0')
entry1.appendChild(entries[i].cloneNode(true))
entry1.children[0].classList.add('img-type-1')
gallery.appendChild(entry1)
i++
const entry2 = document.createElement('div')
entry2.classList.add('col-lg-3', 'col-md-3', 'm-0', 'p-0')
entry2.appendChild(entries[i].cloneNode(true))
entry2.children[0].classList.add('img-type-1')
gallery.appendChild(entry2)
i++
const entry3 = document.createElement('div')
entry3.classList.add('col-lg-3', 'col-md-3', 'm-0', 'p-0')
entry3.appendChild(entries[i].cloneNode(true))
entry3.children[0].classList.add('img-type-1')
gallery.appendChild(entry3)
i++
}
function threeColumnReversedRow (gallery, entries, i) {
const entry1 = document.createElement('div')
entry1.classList.add('col-lg-3', 'col-md-3', 'm-0', 'p-0')
entry1.appendChild(entries[i].cloneNode(true))
entry1.children[0].classList.add('img-type-1')
gallery.appendChild(entry1)
i++
const entry2 = document.createElement('div')
entry2.classList.add('col-lg-3', 'col-md-3', 'm-0', 'p-0')
entry2.appendChild(entries[i].cloneNode(true))
entry2.children[0].classList.add('img-type-1')
gallery.appendChild(entry2)
i++
const entry3 = document.createElement('div')
entry3.classList.add('col-lg-6', 'col-md-3', 'm-0', 'p-0')
entry3.appendChild(entries[i].cloneNode(true))
entry3.children[0].classList.add('img-type-1')
gallery.appendChild(entry3)
i++
}
function twoColumnRow (gallery, entries, i) {
const entry1 = document.createElement('div')
entry1.classList.add('col-6', 'm-0', 'p-0')
entry1.appendChild(entries[i].cloneNode(true))
entry1.children[0].classList.add('img-type-1')
gallery.appendChild(entry1)
i++
const entry2 = document.createElement('div')
entry2.classList.add('col-6', 'm-0', 'p-0')
entry2.appendChild(entries[i].cloneNode(true))
entry2.children[0].classList.add('img-type-1')
gallery.appendChild(entry2)
i++
}
function singleColumnRow (gallery, entries, i) {
const entry1 = document.createElement('div')
entry1.classList.add('col-12', 'm-0', 'p-0')
entry1.appendChild(entries[i].cloneNode(true))
entry1.children[0].classList.add('img-type-1')
gallery.appendChild(entry1)
i++
}
function showAchievements () {
const { isLaptop, isTablet } = getDeviceState()
// show achievements from achievements-holder div
const gallery = document.getElementById('gallery')
if (gallery == null) {
return
}
gallery.innerHTML = ''
const entries = document.getElementById('achievements-holder').children
let len = entries.length
let i = 0
let rowNumber = 1
while (i < len) {
if (isLaptop) {
if (i + 4 <= len) {
if (rowNumber % 2) {
fourColumRow(gallery, entries, i)
} else {
fourColumnReversedRow(gallery, entries, i)
}
i += 4
} else if (i + 3 <= len) {
if (rowNumber % 2) {
threeColumnRow(gallery, entries, i)
} else {
threeColumnReversedRow(gallery, entries, i)
}
i += 3
} else if (i + 2 <= len) {
twoColumnRow(gallery, entries, i)
i += 2
} else {
singleColumnRow(gallery, entries, i)
i++
}
} else if (isTablet) {
if (i + 2 <= len) {
twoColumnRow(gallery, entries, i)
i += 2
} else {
singleColumnRow(gallery, entries, i)
i++
}
} else {
singleColumnRow(gallery, entries, i)
i++
}
rowNumber++
}
// show full image on click
const elements = document.getElementsByClassName('achievement-entry')
len = elements.length
for (let i = 0; i < len; i++) {
elements[i].onclick = function () {
const achievements = document.getElementsByClassName('achievement-entry')
const len2 = achievements.length
for (let j = 0; j < len2; j++) {
achievements[j].classList.toggle('hidden')
}
this.classList.toggle('achievement-details')
this.classList.toggle('hidden')
this.parentElement.classList.toggle('col-lg-12')
this.parentElement.classList.toggle('col-md-12')
this.parentElement.classList.toggle('col-sm-12')
if (this.children.SmallImage.hasAttribute('active')) {
const mainLogo = this.children.LargeImage.getAttribute('Style')
this.children.LargeImage.setAttribute('active', true)
this.children.SmallImage.removeAttribute('active')
this.setAttribute('Style', mainLogo)
} else {
const mainLogo = this.children.SmallImage.getAttribute('Style')
this.children.SmallImage.setAttribute('active', true)
this.children.LargeImage.removeAttribute('active')
this.setAttribute('Style', mainLogo)
}
if (this.children.caption !== undefined) {
this.children.caption.classList.toggle('hidden')
}
if (this.children['enlarge-icon'] !== undefined) {
this.getElementsByClassName('fa-xmark')[0].classList.toggle('hidden')
this.getElementsByClassName('fa-magnifying-glass-plus')[0].classList.toggle('hidden')
}
if (this.children['achievement-title'] !== undefined) {
this.children['achievement-title'].classList.toggle('hidden')
}
}
}
}
['DOMContentLoaded', 'resize'].forEach((event) =>
document.addEventListener(event, showAchievements))
+30
View File
@@ -0,0 +1,30 @@
// Show more rows in the taken courses table
function toggleCourseVisibility (elem) {
// find the courses
const courses = elem.parentNode.getElementsByClassName('course')
if (courses == null) {
return
}
// toggle hidden-course class from the third elements
for (const course of courses) {
if (course.classList.contains('hidden-course') || course.classList.contains('toggled-hidden-course')) {
course.classList.toggle('hidden-course')
course.classList.add('toggled-hidden-course')
}
}
// toggle the buttons visibility
const buttonsToToggle = elem.parentNode.getElementsByClassName('show-more-btn')
for (const buttonToToggle of buttonsToToggle) {
buttonToToggle.classList.toggle('hidden')
}
}
window.addEventListener('DOMContentLoaded', () => {
const els = Array.from(document.getElementsByClassName('btn'));
els.filter((el) => el != null && (el.id === 'show-more-btn' || el.id === 'show-less-btn')).forEach((el) =>
el.addEventListener('click', ({ target }) =>
toggleCourseVisibility(target)))
})
+7
View File
@@ -0,0 +1,7 @@
import './navbar'
import './sidebar'
import './education'
import './achievements'
import './projects'
import './publications'
+62
View File
@@ -0,0 +1,62 @@
const updateNavBar = () => {
const topNavbar = document.getElementById('top-navbar')
const navbarToggler = document.getElementById('navbar-toggler')
const themeIcon = document.getElementById('navbar-theme-icon-svg')
if (window.scrollY > 40) {
topNavbar?.classList.remove('transparent-navbar')
topNavbar?.classList.add('shadow')
navbarToggler?.classList.remove('navbar-dark')
navbarToggler?.classList.add('navbar-light')
// color theme selector a.k.a. dark mode
themeIcon?.classList.remove('svg-inverted')
// get the main logo from hidden img tag
const mainLogo = document.getElementById('main-logo')
if (mainLogo) {
const logoURL = mainLogo.getAttribute('src')
document.getElementById('logo')?.setAttribute('src', logoURL)
}
} else {
topNavbar?.classList.remove('shadow')
topNavbar?.classList.add('transparent-navbar')
navbarToggler?.classList.remove('navbar-light')
navbarToggler?.classList.add('navbar-dark')
// color theme selector a.k.a. dark mode
themeIcon?.classList.add('svg-inverted')
// get the inverted logo from hidden img tag
const invertedLogo = document.getElementById('inverted-logo')
if (invertedLogo) {
const logoURL = invertedLogo.getAttribute('src')
document.getElementById('logo')?.setAttribute('src', logoURL)
}
}
}
document.addEventListener('DOMContentLoaded', function () {
// change navbar style on scroll
// ==================================================
// When the user scrolls down 80px from the top of the document,
// resize the navbar's padding and the logo's font size
const topNavbar = document.getElementById('top-navbar')
if (topNavbar?.classList.contains('homepage')) {
document.addEventListener('scroll', updateNavBar)
updateNavBar()
}
// Creates a click handler to collapse the navigation when
// anchors in the mobile nav pop up are clicked
const navMain = document.getElementsByClassName('navbar-collapse')
Array.from(navMain).forEach(function (el) {
el.addEventListener('click', function (e) {
if (e.target.tagName === 'A') {
el.classList.add('collapse')
}
})
})
})
+19
View File
@@ -0,0 +1,19 @@
import Filterizr from 'filterizr'
import { insertScript } from '../core'
document.addEventListener('DOMContentLoaded', () => {
// ================== Project cards =====================
// setup project filter buttons
const projectCardHolder = document.getElementById('project-card-holder')
if (projectCardHolder != null && projectCardHolder.children.length !== 0) {
// eslint-disable-next-line no-new
new Filterizr('.filtr-projects', {
layout: 'sameWidth',
controlsSelector: '.project-filtr-control'
})
}
})
// dynamically insert github buttons script.
insertScript('github-buttons', 'https://buttons.github.io/buttons.js')
+13
View File
@@ -0,0 +1,13 @@
import Filterizr from 'filterizr'
document.addEventListener('DOMContentLoaded', () => {
const publicationCardHolder = document.getElementById('publication-card-holder')
if (publicationCardHolder != null && publicationCardHolder.children.length !== 0) {
// eslint-disable-next-line no-new
new Filterizr('.filtr-publications', {
layout: 'sameWidth',
gridItemsSelector: '.pub-filtr-item',
controlsSelector: '.pub-filtr-control'
})
}
})
+38
View File
@@ -0,0 +1,38 @@
import { getDeviceState } from '../core/device'
// Toggle sidebar on click. Here, class "hide" open the sidebar
function toggleSidebar () {
const sidebar = document.getElementById('sidebar-section')
if (sidebar == null) {
return
}
if (sidebar.classList.contains('expanded')) {
sidebar.classList.remove('expanded')
} else {
// if toc-section is open, then close it first
const toc = document.getElementById('toc-section')
if (toc != null && toc.classList.contains('hide')) {
toc.classList.remove('hide')
}
// add "expanded" class
sidebar.classList.add('expanded')
// if it is mobile device. then scroll to top.
const { isMobile } = getDeviceState()
if (isMobile && sidebar.classList.contains('expanded')) {
document.body.scrollTop = 0
document.documentElement.scrollTop = 0
if (document.getElementById('hero-area') != null) {
document.getElementById('hero-area').classList.toggle('hide')
}
}
}
if (document.getElementById('content-section') != null) {
document.getElementById('content-section').classList.toggle('hide')
}
}
window.addEventListener('DOMContentLoaded', () => {
// bind click event to #sidebar-toggler in navbar-2.html
const toggle = document.getElementById('sidebar-toggler')
if (toggle) toggle.addEventListener('click', toggleSidebar)
})
+80
View File
@@ -0,0 +1,80 @@
// loading bootstrap
// TODO: Refactor to use bootstrap sass variable for theming.
@import 'bootstrap/scss/bootstrap';
@import 'include-media/dist/_include-media';
// The Mulish font, we use font-weight 300 - 700
@import '@fontsource/mulish/300';
@import '@fontsource/mulish/index'; // 400
@import '@fontsource/mulish/500';
@import '@fontsource/mulish/600';
@import '@fontsource/mulish/700';
@import './variables';
@import './mixins';
// components
@import './components/cards';
@import './components/buttons';
@import './components/links';
@import './components/texts';
@import './components/images';
@import './components/tables';
@import './components/misc';
// layouts
@import './layouts/main';
@import './layouts/list';
@import './layouts/single';
@import './layouts/notes';
@import './layouts/404';
// navigators
@import './navigators/navbar';
@import './navigators/sidebar';
// sections
@import './sections/home';
@import './sections/about';
@import './sections/skills';
@import './sections/experiences';
@import './sections/education';
@import './sections/projects';
@import './sections/recent-posts';
@import './sections/achievements';
@import './sections/accomplishments';
@import './sections/publications';
@import './sections/footer';
// override
@import './override';
// features and services, only imported if enabled.
{{ range $feature, $featureDef := site.Params.features }}
{{ with $featureDef }}
{{ $featureEnabled := or (not (isset . "enable")) .enable }}
{{ if $featureEnabled }}
{{ with (index site.Data.toha.styles $feature) }}
{{ range .styles }}
@import '{{.}}';
{{ end }}
{{ end }}
{{ range $service, $config := .services }}
{{ with (index site.Data.toha.styles $feature) }}
{{ with .services }}
{{ with (index . $service) }}
{{ range .styles }}
@import '{{ . }}';
{{ end }}
{{ end }}
{{ end }}
{{ end }}
{{ end }}
{{ end }}
{{ end }}
{{ end }}
+176
View File
@@ -0,0 +1,176 @@
.btn-dark {
background-color: get-light-color('text-color') !important;
border-color: get-light-color('text-color') !important;
color: get-light-color('text-over-accent-color') !important;
@include transition();
&:hover,
&:focus {
background-color: get-light-color('accent-color') !important;
border-color: get-light-color('accent-color') !important;
@include transition();
}
}
.btn-info {
background-color: get-light-color('accent-color') !important;
color: get-light-color('text-over-accent-color') !important;
&:hover,
&:focus {
background-color: get-light-color('hover-over-accent-color') !important;
}
}
.btn-outline-info {
color: get-light-color('accent-color') !important;
border-color: get-light-color('accent-color') !important;
&:hover,
&:focus {
background-color: get-light-color('accent-color') !important;
color: get-light-color('text-over-accent-color') !important;
}
}
.btn-link {
color: get-light-color('accent-color');
&:hover,
&:focus {
color: get-light-color('hover-over-accent-color');
}
}
.nav-button {
background-color: transparent;
border: 1px solid transparent;
border-radius: 0.25rem;
color: get-light-color('muted-text-color');
}
.tags {
text-align: left;
padding-top: 0.5em;
li {
font-size: 0.5em;
list-style-type: none;
display: inline-block;
background: get-light-color('accent-color');
margin-left: 0.2em;
margin-right: 0.2em;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
a {
color: get-light-color('text-over-accent-color');
text-decoration: none !important;
}
}
.icon-button {
background-color: get-light-color('text-color');
color: get-light-color('text-over-accent-color') !important;
padding: 0.25rem 0.5rem;
line-height: 1.5;
border-radius: 0.2rem;
border: none;
&:hover,
&:focus {
background-color: get-light-color('accent-color') !important;
@include transition();
}
}
.filled-button {
background-color: get-light-color('accent-color') !important;
color: get-light-color('text-over-accent-color') !important;
@include transition();
&:hover,
&:active {
background-color: get-light-color('hover-over-accent-color') !important;
@include transition();
}
}
html[data-theme='dark'] {
.btn-dark {
background-color: get-dark-color('accent-color') !important;
border-color: get-dark-color('accent-color') !important;
color: get-dark-color('text-over-accent-color') !important;
&:hover,
&:focus {
background-color: get-dark-color('hover-over-accent-color') !important;
border-color: get-dark-color('hover-over-accent-color') !important;
}
}
.btn-info {
background-color: get-dark-color('bg-card') !important;
color: get-dark-color('text-color') !important;
border: 1px solid get-dark-color('muted-text-color') !important;
&:hover,
&:focus {
background-color: get-dark-color('hover-over-accent-color') !important;
}
}
.btn-outline-info {
color: get-dark-color('accent-color') !important;
border-color: get-dark-color('accent-color') !important;
&:hover,
&:focus {
background-color: get-dark-color('accent-color') !important;
color: get-dark-color('text-over-accent-color') !important;
}
}
.btn-link {
color: get-dark-color('accent-color');
&:hover,
&:focus {
color: get-dark-color('hover-over-accent-color');
}
}
.nav-button {
color: get-dark-color('muted-text-color');
}
.tags {
li {
background: get-dark-color('accent-color');
a {
background-color: get-dark-color('bg-card');
border: 1px solid get-dark-color('muted-text-color');
color: get-dark-color('text-over-accent-color');
}
}
}
.icon-button {
background-color: get-dark-color('muted-text-color');
color: get-dark-color('text-over-accent-color') !important;
&:hover,
&:focus {
background-color: get-dark-color('accent-color') !important;
}
}
.filled-button {
background-color: get-dark-color('accent-color') !important;
color: get-dark-color('text-over-accent-color') !important;
&:hover,
&:active {
background-color: get-dark-color('hover-over-accent-color') !important;
}
}
}
+117
View File
@@ -0,0 +1,117 @@
.card {
box-shadow: none;
@include transition();
overflow: hidden;
background: get-light-color('bg-card');
&:hover,
&:focus {
box-shadow: $box-shadow;
border: 1px solid get-light-color('bg-primary');
@include transition();
}
.card-head {
height: 172px;
display: flex;
overflow: hidden;
}
.card-body {
text-align: justify;
}
.card-img-top {
object-fit: cover;
@include transition();
}
.card-img-sm {
width: 32px;
height: 32px;
}
.card-img-xs {
width: 24px;
height: 24px;
}
.card-footer {
background: get-light-color('bg-card') !important;
a.btn {
text-decoration: none !important;
}
}
}
.post-card {
width: 24rem;
display: inline-flex;
.post-card-link {
text-decoration: none !important;
}
.card {
margin: 5px;
position: relative;
&:hover,
&:focus {
.card-img-top {
transform: scale(1.2);
object-fit: cover;
@include transition();
}
}
.card-body {
padding: 1.25rem !important;
padding-bottom: 0 !important;
.post-summary {
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
max-height: 144px;
/* fallback */
-webkit-line-clamp: 5;
/* number of lines to show */
-webkit-box-orient: vertical;
}
}
.card-footer {
margin-top: auto;
span {
font-size: 10pt;
color: get-light-color('muted-text-color') !important;
padding-top: 5px;
}
}
}
}
html[data-theme='dark'] {
.card {
background: get-dark-color('bg-card');
&:hover,
&:focus {
border: 1px solid rgba(get-dark-color('accent-color'), 0.2);
}
.card-footer {
background: get-dark-color('bg-card') !important;
}
}
.post-card {
.card {
.card-footer {
span {
color: get-dark-color('muted-text-color') !important;
}
}
}
}
}
+48
View File
@@ -0,0 +1,48 @@
img {
display: block;
max-width: 100%;
&.center {
margin-left: auto;
margin-right: auto;
}
&.left {
margin-right: auto;
}
&.right {
margin-left: auto;
}
}
figure {
border: 1px solid rgba(get-light-color('accent-color'), 0.1);
height: -moz-fit-content;
height: fit-content;
width: -moz-fit-content;
width: fit-content;
align-self: center;
margin: auto;
}
caption,
figcaption {
caption-side: bottom;
text-align: center;
color: get-light-color('muted-text-color');
}
html[data-theme='dark'] {
figure {
border: 1px solid rgba(get-dark-color('accent-color'), 0.1);
}
caption,
figcaption {
color: get-dark-color('muted-text-color');
}
}
.svg-inverted {
filter: invert(1);
}
+79
View File
@@ -0,0 +1,79 @@
a {
color: get-light-color('accent-color');
@include transition();
&:hover,
&:focus {
text-decoration: get-light-color('hover-over-accent-color') underline;
color: get-light-color('hover-over-accent-color');
@include transition();
}
}
.list-link {
text-decoration: none !important;
color: get-light-color('text-color');
@include transition();
&.active {
display: inline;
color: get-light-color('accent-color');
}
&:hover {
margin-left: 3px;
color: get-light-color('accent-color');
@include transition();
}
}
a.header-anchor {
text-decoration: none;
color: get-light-color('heading-color');
i,
svg {
font-size: 10pt;
color: get-light-color('text-color');
display: none;
margin-left: 0.5rem;
}
&:hover {
i,
svg {
display: inline-block;
}
}
code {
color: get-light-color('inline-code-color');
}
}
.anchor {
padding-top: 3.5rem;
}
html[data-theme='dark'] {
a {
color: get-dark-color('accent-color');
&:hover,
&:focus {
text-decoration: get-dark-color('hover-over-accent-color') underline;
color: get-dark-color('hover-over-accent-color');
}
}
.list-link {
color: get-dark-color('text-color');
&:hover {
color: get-dark-color('accent-color');
}
}
a.header-anchor {
color: get-dark-color('heading-color');
i,
svg {
color: get-dark-color('text-color');
}
code {
color: get-dark-color('inline-code-color');
}
}
}
+48
View File
@@ -0,0 +1,48 @@
.paginator {
width: -moz-fit-content;
width: fit-content;
margin: auto;
vertical-align: bottom;
.page-item {
& > a {
color: get-light-color('accent-color');
}
&.active,
&:hover > a {
background-color: get-light-color('accent-color') !important;
color: get-light-color('text-over-accent-color') !important;
}
}
}
pre {
margin: 5px;
& > code {
padding: 10px !important;
}
}
@include media('<=large') {
pre {
margin: 0px;
& > code {
padding: 0px !important;
}
}
}
html[data-theme='dark'] {
.paginator {
.page-item {
& > a {
color: get-dark-color('accent-color');
}
&.active,
&:hover > a {
background-color: get-dark-color('accent-color') !important;
color: get-dark-color('text-over-accent-color') !important;
}
}
}
}
+110
View File
@@ -0,0 +1,110 @@
table {
border-radius: 0.1rem;
border: 1px solid rgba(get-light-color('accent-color'), 0.1);
min-width: 10rem;
padding: 0.1rem;
thead {
tr {
background: get-light-color('accent-color');
color: get-light-color('text-over-accent-color');
}
}
tbody {
tr {
height: 40px !important;
color: get-light-color('text-color');
&:nth-child(odd) {
background-color: get-light-color('bg-primary');
}
&:nth-child(even) {
background-color: rgba(get-light-color('accent-color'), 0.05);
}
}
}
th,
td {
padding-top: 0.2rem;
padding-bottom: 0.2rem;
padding-left: 0.5rem;
padding-right: 0.5rem;
}
}
.gist {
table {
border-radius: unset !important;
background: unset !important;
border: unset !important;
padding: unset !important;
tr {
height: unset !important;
}
th,
td {
padding: unset !important;
border-left: unset !important;
border-bottom: unset !important;
}
td,
tc {
border-right: 1px solid rgba(get-light-color('accent-color'), 0.1);
}
thead {
tr {
background: unset !important;
color: unset !important;
}
}
tbody {
tr {
&:nth-child(odd) {
background-color: unset !important;
}
&:hover {
background: unset !important;
}
}
}
}
}
html[data-theme='dark'] {
table {
border: 1px solid rgba(get-dark-color('accent-color'), 0.1);
thead {
tr {
background: get-dark-color('accent-color');
color: get-dark-color('text-over-accent-color');
}
}
tbody {
tr {
color: get-dark-color('text-color');
&:nth-child(odd) {
background-color: get-dark-color('bg-primary');
}
&:nth-child(even) {
background-color: rgba(get-dark-color('accent-color'), 0.05);
}
}
}
}
.gist {
&::selection{
background: get-dark-color('text-color');
color: get-dark-color('inverse-text-color');
}
table {
td,
tc {
border-right: 1px solid rgba(get-dark-color('accent-color'), 0.1);
}
}
}
}
+119
View File
@@ -0,0 +1,119 @@
h1,
h2,
h3,
h4,
h5 {
color: get-light-color('heading-color');
}
strong {
color: get-light-color('heading-color') !important;
}
p {
color: get-light-color('text-color');
text-align: justify;
text-justify: inter-word;
}
input {
color: get-light-color('text-color');
}
blockquote {
border-left: 4px solid get-light-color('accent-color');
background-color: rgba(get-light-color('accent-color'), 0.05);
padding: 0.3rem;
padding-left: 1rem;
& > p {
color: get-light-color('text-color');
margin-top: 0.5rem;
margin-bottom: 0.5rem;
}
}
.text-muted {
color: get-light-color('muted-text-color') !important;
}
.text-heading {
font-weight: bold;
color: get-light-color('muted-text-color');
}
.sub-title {
color: get-light-color('muted-text-color');
font-size: 10pt;
}
::-moz-selection {
@include selection-color();
}
::selection {
@include selection-color();
}
@include media('<=small') {
h1 {
font-size: 2.2rem;
}
}
@include media('<=tiny') {
h1 {
font-size: 1.5rem;
}
}
html[data-theme='dark'] {
h1,
h2,
h3,
h4,
h5 {
color: get-dark-color('heading-color');
}
strong {
color: get-dark-color('heading-color') !important;
}
p {
color: get-dark-color('text-color');
}
input {
color: get-dark-color('text-color');
}
blockquote {
border-left: 4px solid get-dark-color('accent-color');
background-color: rgba(get-dark-color('accent-color'), 0.05);
color: get-dark-color('text-color');
}
.text-muted {
color: get-dark-color('muted-text-color') !important;
}
.text-heading {
color: get-dark-color('muted-text-color');
}
.sub-title {
color: get-dark-color('muted-text-color');
}
::-moz-selection {
@include selection-color($theme: 'dark');
}
::selection {
@include selection-color($theme: 'dark');
}
li,
ul {
color: get-dark-color('text-color');
}
}
+64
View File
@@ -0,0 +1,64 @@
body.kind-404 {
#sidebar-toggler {
display: none;
}
.notFound {
padding-top: 5rem;
text-align: center;
padding-bottom: 8rem;
img {
height: 500px;
}
h1 {
font-style: italic;
}
.message {
position: absolute;
max-width: 20rem;
top: 40%;
left: 30%;
}
}
@include media('<=very-large') {
.notFound .message {
top: 50%;
left: 25%;
}
}
@include media('<=large') {
.notFound .message {
top: 46%;
left: 25%;
}
}
@include media('<=medium') {
.notFound {
img {
height: 400px;
}
.message {
top: 20rem;
left: 4rem;
}
}
}
@include media('<=small') {
.notFound {
img {
height: 250px;
}
.message {
top: 20rem;
left: 2rem;
}
}
}
}
+207
View File
@@ -0,0 +1,207 @@
// in Hugo, Page kind can be either "section" or "page".
// if it is section, then it's a page with a list of items, for example /posts
// if it is page, then it is a single page.
body.kind-section,
body.kind-term,
body.kind-page {
.wrapper {
display: flex;
padding: 0;
margin: 0;
width: 100%;
.content-section {
flex: 80%;
order: 2;
/* background-color: lightseagreen; */
padding: 0;
position: relative;
padding-left: 0.5rem;
padding-right: 0.5rem;
.content {
padding: 0;
position: relative;
padding-top: 2rem;
min-height: 130vh;
.post-card-holder {
margin-top: 32px;
margin-left: auto;
padding: 0;
display: flex;
flex-flow: wrap;
}
.paginator {
width: -moz-fit-content;
width: fit-content;
margin: auto;
.pagination {
margin-left: auto;
margin-right: auto;
margin-top: 0.5rem;
margin-bottom: 0.5rem;
width: -moz-fit-content;
width: fit-content;
}
.page-item {
& > a {
color: get-light-color('accent-color');
}
&.active > a {
background-color: get-light-color('accent-color');
color: get-light-color('text-over-accent-color');
}
}
}
}
}
}
@include media('<medium') {
.post-card {
margin-left: 1%;
margin-right: 1%;
width: 98%;
}
.wrapper {
padding-left: 0px;
padding-right: 0px;
flex-flow: column;
overflow: hidden;
.content-section {
flex: 100%;
max-width: 100%;
padding-left: 0;
width: 100%;
.content {
width: 100%;
padding-left: 0;
padding-right: 0;
@include transition();
}
&.hide {
.content {
margin-top: 0;
padding-top: 0;
@include transition();
}
.post-card-holder {
margin-top: 0.5rem;
@include transition();
}
}
}
}
}
@include media('>=medium', '<large') {
.post-card {
width: calc(100% / 2);
}
.content-section.hide {
.post-card {
width: 100%;
}
}
}
@include media('>=large', '<very-large') {
.post-card {
width: calc(100% / 3);
}
.wrapper {
padding-left: 0px;
padding-right: 0px;
.content-section {
padding: 0;
flex: 60%;
order: 2;
padding-bottom: 0.5rem;
.content {
overflow: hidden;
.post-card-holder {
margin: 0;
margin-top: 1.5rem;
padding-left: 0.5rem;
padding-right: 0.5rem;
position: relative;
@include transition();
}
}
.container {
max-width: 100%;
}
&.hide {
.post-card {
width: calc(100% / 2);
}
}
}
}
}
@include media('>=very-large', '<extra-large') {
.post-card {
width: calc(100% / 4);
}
.post-card-holder {
margin-left: 0px;
}
}
@include media('>=extra-large') {
.post-card {
width: calc(100% / 5);
}
.content-section {
padding-left: 1rem;
padding-right: 1rem;
flex: 85%;
max-width: 85%;
}
}
}
html[data-theme='dark'] {
body.kind-section,
body.kind-term,
body.kind-page {
.wrapper {
.content-section {
.content {
.paginator {
.page-item {
& > a {
background-color: get-dark-color('bg-card') !important;
color: get-dark-color('text-color') !important;
border: 1px solid get-dark-color('muted-text-color') !important;
text-decoration: none !important;
&:hover {
background-color: get-dark-color('hover-over-accent-color') !important;
color: get-dark-color('text-over-accent-color') !important;
}
}
&.active > a {
background-color: get-dark-color('accent-color') !important;
color: get-dark-color('text-over-accent-color') !important;
}
}
}
}
}
}
}
}
+115
View File
@@ -0,0 +1,115 @@
/*
Removed smooth scrolling implementation in main.js in favor of
simpler css approach.
See: https://css-tricks.com/snippets/jquery/smooth-scrolling/
*/
*,
html {
scroll-behavior: smooth !important;
}
body {
position: relative;
}
/*
Fixes anchor overlapping with header.
See: https://stackoverflow.com/questions/4086107/fixed-page-header-overlaps-in-page-anchors
*/
:target::before {
content: '';
display: block;
height: 2em; /* fixed header height*/
margin: -2em 0 0; /* negative fixed header height */
}
body {
background-color: get-light-color('bg-primary');
font-family: 'Mulish';
}
.bg-primary {
background-color: get-light-color('bg-primary') !important;
}
.bg-secondary {
background-color: get-light-color('bg-secondary') !important;
}
.flag-icon {
width: 16px !important;
margin-top: 3px;
margin-right: 3px;
}
.hidden {
display: none !important;
}
.content {
ul > ol,
ol > ul,
ul > ul,
ol > ol,
li > ol,
li > ul {
-webkit-padding-start: 1rem;
padding-inline-start: 1rem;
}
}
kbd {
background-color: get-light-color('accent-color');
color: get-light-color('text-over-accent-color');
}
mark {
background-color: get-light-color('highlight-color');
border-radius: 0.25rem;
}
@include media('<=small') {
.skills-section,
.projects-section,
.publications-section {
.container {
padding-left: 0.3rem;
padding-right: 0.3rem;
}
}
.section-holder {
padding-left: 5px;
padding-right: 5px;
}
.skills-section,
.projects-section,
.recent-posts-section,
.achievements-section,
.publications-section {
padding-left: 0;
padding-right: 0;
}
}
html[data-theme='dark'] {
body {
background-color: get-dark-color('bg-primary');
color: get-dark-color('text-color');
}
.bg-primary {
background-color: get-dark-color('bg-primary') !important;
}
.bg-secondary {
background-color: get-dark-color('bg-secondary') !important;
}
kbd {
background-color: get-dark-color('accent-color');
color: get-dark-color('text-over-accent-color');
}
mark {
background-color: get-dark-color('highlight-color');
}
}
+199
View File
@@ -0,0 +1,199 @@
body.type-notes {
.wrapper {
display: flex;
padding: 0;
margin: 0;
width: 100%;
.content-section {
flex: 80%;
max-width: 80%;
order: 2;
/* background-color: lightseagreen; */
padding: 0;
position: relative;
padding-left: 0.5rem;
padding-right: 0.5rem;
.content {
padding: 0;
position: relative;
padding-top: 2rem;
min-height: 130vh;
.note-card-holder {
margin-top: 2rem;
display: flex;
flex-flow: wrap;
margin-left: auto;
padding: 0;
.note-card {
align-self: flex-start;
flex: auto;
.card {
margin: 0.5rem;
.card-body {
padding: 1rem;
pre {
margin: 0;
border-radius: 3px;
}
}
}
}
.note-title {
padding-left: 1rem;
color: get-light-color('accent-color');
&:before {
content: '';
display: inline-block;
width: 98%;
height: 100%;
margin-bottom: -26px;
border-bottom: 1px solid get-light-color('accent-color');
}
span {
background: get-light-color('bg-secondary');
padding-right: 5px;
}
}
}
}
}
}
@include media('<=extra-large') {
.note-card-holder {
.note-card {
flex: 30%;
}
}
}
@include media('<=large') {
.wrapper {
padding-left: 0px;
padding-right: 0px;
.content-section {
padding: 0;
max-width: 100%;
order: 2;
padding-bottom: 0.5rem;
@include transition();
.content {
overflow: hidden;
.note-card-holder {
margin: 0;
margin-top: 1.5rem;
padding-left: 0.5rem;
padding-right: 0.5rem;
position: relative;
@include transition();
.note-card {
flex: 50%;
}
}
}
.container {
max-width: 100%;
}
&.hide {
max-width: 60%;
@include transition();
}
}
}
}
@include media('<=medium') {
.note-card-holder .note-card {
max-width: 50%;
min-width: 50%;
@include transition();
}
.content-section.hide .note-card-holder .note-card {
max-width: 100%;
min-width: 100%;
@include transition();
}
}
@include media('<=small') {
.wrapper {
padding-left: 0px;
padding-right: 0px;
flex-flow: column;
overflow: hidden;
.content-section {
.content {
width: 100%;
padding-left: 0;
padding-right: 0;
@include transition();
.note-card-holder {
margin-top: 0.5rem;
@include transition();
.note-card {
flex: 100%;
max-width: 100%;
@include transition();
}
}
}
&.hide {
flex: 100%;
max-width: 100%;
padding-left: 0;
width: 100%;
@include transition();
.content {
.note-card-holder {
margin-top: 0;
padding-top: 0;
@include transition();
}
}
}
}
}
}
}
html[data-theme='dark'] {
body.type-notes {
.wrapper {
.content-section {
.content {
.note-card-holder {
.note-title {
color: get-dark-color('accent-color');
&:before {
border-bottom: 1px solid get-dark-color('accent-color');
}
span {
background: get-dark-color('bg-secondary');
padding-right: 5px;
}
}
}
}
}
}
}
}
+388
View File
@@ -0,0 +1,388 @@
body.kind-page {
background-color: get-light-color('bg-secondary');
position: relative;
.wrapper {
display: flex;
padding: 0;
margin: 0;
width: 100%;
justify-content: space-between;
position: relative;
.content-section {
flex: 60%;
max-width: 60%;
order: 2;
padding: 0;
position: relative;
padding-left: 1rem;
padding-right: 1rem;
.content {
padding-top: 1.5rem;
.read-area {
background-color: get-light-color('bg-primary');
.hero-area {
margin-top: 3rem;
width: 100%;
height: 400px;
background-position: center;
background-repeat: no-repeat;
background-size: cover;
}
.page-content {
width: 100%;
position: relative;
top: -4.5rem;
padding: 15px;
.author-profile {
position: relative;
align-content: center;
text-align: center;
.author-name {
margin-top: 0px;
}
p {
text-align: center;
}
img {
height: 120px;
width: 120px;
margin-left: auto;
margin-right: auto;
-o-object-fit: cover;
object-fit: cover;
background-color: get-light-color('bg-primary');
padding: 5px;
}
}
.title {
text-align: center;
}
.tags {
text-align: center;
}
.post-content {
padding: 15px;
h1,
h2 {
margin-top: 1.4rem;
}
h3,
h4,
h5,
h6 {
margin-top: 1.3rem;
}
}
.next-prev-navigator {
padding-left: 1rem !important;
padding-right: 1rem !important;
.next-article {
text-align: right;
}
.next-prev-text {
white-space: break-spaces;
}
a {
text-decoration: none !important;
}
}
}
}
}
}
.toc-section {
flex: 20%;
order: 3;
max-width: 20%;
@include transition();
.toc-holder {
position: sticky;
top: 4.5rem;
padding-top: 1rem;
overflow-x: hidden;
overflow-y: auto;
background-color: get-light-color('bg-primary');
margin-right: 0.5rem;
@include transition();
.toc {
position: relative;
padding-top: 0px;
@include transition();
nav {
padding-top: 0px;
margin-top: 0px;
display: flex;
flex-direction: column;
align-items: flex-start;
@include transition();
ul {
list-style: none;
padding-left: 0.5rem;
margin-bottom: 0rem;
width: 100%;
}
.nav-link {
padding: 0;
padding-left: 0.5rem;
text-decoration: none !important;
@include transition();
color: get-light-color('text-color');
&:hover,
&:focus,
&.active {
padding-left: 1rem;
padding-right: 0.5rem;
background-color: get-light-color('accent-color');
color: get-light-color('text-over-accent-color');
@include transition();
}
}
}
}
}
}
.disquss {
padding: 10px;
}
.share-buttons {
@include brand-background();
.btn {
border: none !important;
}
}
}
.btn-improve-page {
text-align: right;
}
#scroll-to-top {
position: fixed;
bottom: 0rem;
right: 1rem;
color: get-light-color('accent-color');
font-size: 24pt;
z-index: 900000;
visibility: hidden;
&:hover {
color: get-light-color('hover-over-accent-color');
}
&.show {
visibility: visible;
}
i {
box-shadow: $box-shadow;
background-color: get-light-color('bg-primary');
border-radius: 50%;
}
}
@include media('<=ultra-large') {
.content-section {
flex: 65%;
max-width: 65%;
}
.content-section .container {
max-width: 100%;
}
}
@include media('<very-large') {
.container {
max-width: 100%;
}
.wrapper {
padding-left: 0px;
padding-right: 0px;
.content-section {
padding: 0;
flex: 60%;
max-width: 100%;
order: 2;
overflow: hidden;
.content {
overflow: hidden;
.read-area {
.hero-area {
height: 300px;
margin-top: 1rem;
}
.page-content {
padding: 0px;
}
}
}
}
.toc-section {
display: none;
}
.share-buttons {
max-width: 48%;
}
.btn-improve-page {
margin-right: 1rem;
max-width: 48%;
}
#disqus_thread,
.dsq-brlink {
padding: 5px;
}
}
}
@include media('<=small') {
.wrapper {
padding: 0px;
display: flex;
flex-direction: column;
.content-section {
padding: 0;
flex: 100%;
max-width: 100%;
order: 3;
.content {
.read-area {
.hero-area {
height: 200px;
margin-top: 1rem;
}
.page-content {
padding: 0px;
.next-prev-navigator {
.previous-article {
text-align: center;
margin: 5px;
a {
width: 100%;
}
}
.next-article {
text-align: center;
margin: 5px;
a {
width: 100%;
}
}
}
}
}
}
}
.share-buttons {
max-width: 100%;
}
.btn-improve-page {
text-align: start;
max-width: 100%;
}
#scroll-to-top {
right: 0.5rem;
}
#disqus_thread,
.dsq-brlink {
padding: 5px;
}
}
}
}
html[data-theme='dark'] {
body.kind-page {
background-color: get-dark-color('bg-secondary');
.wrapper {
.content-section {
.content {
.read-area {
background-color: get-dark-color('bg-primary');
.page-content {
.author-profile {
img {
background-color: get-dark-color('bg-primary');
}
}
}
}
}
}
.toc-section {
.toc-holder {
background-color: get-dark-color('bg-primary');
hr {
background-color: get-dark-color('muted-text-color');
}
.toc {
nav {
.nav-link {
color: get-dark-color('text-color');
&:hover,
&:focus,
&.active {
background-color: get-dark-color('accent-color');
color: get-dark-color('text-over-accent-color');
}
}
}
}
}
}
#scroll-to-top {
color: get-dark-color('accent-color');
&:hover {
color: get-dark-color('hover-over-accent-color');
}
i {
background-color: get-dark-color('bg-primary');
}
}
}
}
}
+52
View File
@@ -0,0 +1,52 @@
@function get-color($mode, $key) {
@if map-has-key($themes, $mode) {
$theme: map-get($themes, $mode);
@if map-has-key($theme, $key) {
@return map-get($theme, $key);
}
}
@return red; // default color for debugging purpose
}
@function get-light-color($key) {
@return get-color('light', $key);
}
@function get-dark-color($key) {
@return get-color('dark', $key);
}
@mixin reset-list {
margin: 0;
padding: 0;
list-style: none;
}
@mixin section-title-adjustment() {
h1 > span {
margin-top: -55px; /* Size of fixed header */
padding-bottom: 55px;
display: block;
}
}
@mixin brand-background() {
@each $brand, $color in $brand-colors {
.bg-#{$brand} {
background-color: $color;
}
}
}
@mixin transition() {
transition: all $transition-type $transition-duration;
}
@mixin selection-color($theme: 'light') {
background: get-light-color('accent-color');
color: get-light-color('text-over-accent-color');
@if $theme == 'dark' {
background: get-dark-color('accent-color');
color: get-dark-color('text-over-accent-color');
}
}
+285
View File
@@ -0,0 +1,285 @@
@mixin nav-item-hover-effect($theme: 'light') {
color: get-light-color('accent-color') !important;
border-bottom: 2px solid get-light-color('accent-color') !important;
background: rgba(get-light-color('accent-color'), 0.1);
@include transition();
@if $theme == 'dark' {
color: get-dark-color('accent-color') !important;
border-bottom: 2px solid get-dark-color('accent-color') !important;
background: rgba(get-dark-color('accent-color'), 0.1);
}
}
.top-navbar {
position: fixed;
left: 0;
top: 0;
width: 100%;
height: 50px;
z-index: 99999;
margin: 0px;
padding-top: 0.4rem;
color: get-light-color('heading-color');
text-align: center;
background-color: get-light-color('bg-primary');
@include transition();
.navbar-brand {
color: get-light-color('heading-color');
font-weight: 600;
img {
width: 42px;
padding: 5px;
margin-left: -10px;
}
}
img {
display: inline-block;
}
.sidebar-icon {
width: 32px;
height: 32px;
filter: invert(0.5);
}
li {
a {
color: get-light-color('heading-color');
text-decoration: none !important;
font-weight: 500;
@include transition();
border-bottom: 2px solid transparent;
&:hover {
@include nav-item-hover-effect();
}
}
}
.navbar-nav .active {
@include nav-item-hover-effect();
}
#top-navbar-divider {
margin-top: 10px;
background-color: get-light-color('muted-text-color');
height: 20px;
width: 2px;
}
.dropdown-menu {
box-shadow: $box-shadow;
border: 1px solid rgba(get-light-color('accent-color'), 0.1);
max-height: 0vh;
overflow: hidden;
display: block;
visibility: hidden;
@include transition();
&.show {
max-height: 100vh;
visibility: visible;
@include transition();
a {
color: get-light-color('heading-color') !important;
&:hover {
@include nav-item-hover-effect();
}
}
}
}
.navbar-collapse {
margin-top: -5px;
&.show,
&.collapsing {
background-color: get-light-color('bg-primary');
padding-left: 1rem;
li {
a {
color: get-light-color('heading-color');
font-weight: 500;
@include transition();
}
}
.navbar-nav {
.active {
color: get-light-color('accent-color');
}
a:hover {
color: get-light-color('accent-color');
}
}
}
}
&.transparent-navbar {
background-color: transparent !important;
.navbar-brand {
color: get-light-color('inverse-text-color');
font-weight: 600;
}
li {
a {
color: get-light-color('inverse-text-color');
}
}
.feather-menu {
stroke: get-light-color('inverse-text-color');
}
}
#themeMenu {
width: 25px;
min-width: 3rem;
img.theme-icon {
display: block !important;
margin-left: auto !important;
margin-right: auto !important;
}
}
@include media('<very-large') {
height: -moz-fit-content;
height: fit-content;
padding-bottom: 0px;
padding-top: 0px;
.container {
max-width: 100%;
}
&.transparent-navbar {
.navbar-nav .active,
li a:hover {
color: get-light-color('accent-color');
@include transition();
}
}
#top-navbar-divider {
height: auto;
width: auto;
margin-right: 15px;
border-top: 1px solid #c0ccda;
}
.dropdown-menu {
text-align: center;
margin-right: 1rem;
@include transition();
}
.languageSelector {
position: fixed;
right: 0.5rem;
bottom: 1rem;
z-index: 10000000;
background-color: get-light-color('bg-primary');
box-shadow: $box-shadow;
}
#themeMenu {
width: 100%;
}
}
@include media('<=small') {
.dropdown-menu {
margin-left: -1rem;
margin-right: 0rem;
}
}
}
.feather-sidebar,
.feather-menu {
width: 1.5rem;
height: 1.5rem;
stroke: get-light-color('text-color');
}
html[data-theme='dark'] {
.top-navbar {
color: get-dark-color('heading-color');
background-color: get-dark-color('bg-primary');
.navbar-brand {
color: get-dark-color('heading-color');
}
.sidebar-icon {
filter: invert(0.5);
}
li {
a {
color: get-dark-color('heading-color');
}
}
#top-navbar-divider {
background-color: get-dark-color('muted-text-color');
}
.dropdown-menu {
box-shadow: $box-shadow;
background-color: get-dark-color('bg-card');
border: 1px solid rgba(get-dark-color('accent-color'), 0.1);
&.show {
a {
color: get-dark-color('heading-color') !important;
}
}
}
.navbar-collapse {
&.show,
&.collapsing {
background-color: get-dark-color('bg-primary');
li {
a {
color: get-dark-color('heading-color');
}
}
.navbar-nav {
.active {
color: get-dark-color('accent-color');
}
a:hover {
color: get-dark-color('accent-color');
}
}
}
}
&.transparent-navbar {
.navbar-brand {
color: get-dark-color('text-color');
}
li {
a {
color: get-dark-color('text-color');
}
}
.feather-menu {
stroke: get-dark-color('text-color');
}
}
}
img.theme-icon {
filter: invert(1);
}
.feather-sidebar,
.feather-menu {
stroke: get-dark-color('text-color');
}
}
+301
View File
@@ -0,0 +1,301 @@
.sidebar-section {
order: 1;
flex: 20%;
max-width: 20%;
@include transition();
.sidebar-holder {
top: 2.5rem;
position: sticky;
background-color: get-light-color('bg-primary');
height: 100vh;
overflow: auto;
box-shadow: $box-shadow;
@include transition();
.sidebar {
background: get-light-color('bg-primary');
height: 100vh;
@include transition();
#search-box {
margin-left: 5%;
margin-right: 5%;
width: -webkit-fill-available;
height: 35px;
padding-left: 15px;
margin-top: 30px;
margin-bottom: 10px;
border-radius: 5px;
background-color: get-light-color('bg-secondary');
@include transition();
border: 1px solid rgba(get-light-color('accent-color'), 0.1);
&:focus {
border: 1pt solid get-light-color('accent-color');
outline: none;
}
}
#list-heading {
padding-left: 0px !important;
}
.sidebar-tree {
padding-left: 1rem;
position: relative;
width: -moz-max-content;
width: max-content;
.tree {
margin: 0;
padding: 0;
list-style: none;
li {
margin: 0;
padding: 0 1em;
line-height: 2em;
color: get-light-color('heading-color');
position: relative;
i {
color: get-light-color('heading-color');
font-size: 12px;
margin-right: 5px;
}
}
.shift-right {
margin-left: 5px;
}
.subtree {
padding-left: 0.7rem;
&:before {
content: '';
display: block;
width: 0;
position: absolute;
top: 2.5rem;
left: 1.5rem;
bottom: 0.9rem;
border-left: 1px solid get-light-color('text-color');
}
li {
&:before {
content: '';
display: block;
width: 18px;
height: 0;
border-top: 1px solid get-light-color('text-color');
margin-top: -1px;
position: absolute;
top: 18px;
left: -2px;
}
&:last-child:before {
background: get-light-color('bg-primary');
height: auto;
top: 1.1rem;
bottom: 0;
}
ul {
position: relative;
padding-left: 0.5rem;
display: none;
list-style: none;
&.active {
display: block;
}
&:before {
content: '';
display: block;
width: 0;
position: absolute;
top: -8px;
left: 6px;
bottom: 0.8rem;
border-left: 1px solid;
}
}
}
}
}
}
}
}
@include media('<=ultra-large') {
flex: 15%;
max-width: 15%;
.sidebar-holder {
max-width: 100%;
}
}
@include media('<=extra-large') {
.sidebar-holder {
max-width: 20rem;
}
}
@include media('<=very-large') {
.sidebar-tree {
margin-left: 1rem;
}
}
@include media('<very-large') {
flex: 0%;
max-width: 0%;
min-height: 100vh;
@include transition();
.sidebar-holder {
position: sticky;
top: 2.5rem;
width: 100%;
padding-bottom: 1rem;
max-height: calc(100vh - 2.5rem);
}
&.expanded {
flex: 30%;
max-width: 30%;
margin-right: 0.5rem;
@include transition();
}
}
@include media('<=medium') {
flex: 0%;
max-width: 0%;
min-height: 100vh;
@include transition();
.sidebar-holder {
position: sticky;
top: 2.5rem;
width: 100%;
}
&.expanded {
flex: 40%;
max-width: 40%;
margin-right: 0.5rem;
@include transition();
}
}
@include media('<=small') {
width: 100%;
min-height: 0;
max-height: 0;
max-width: 100%;
@include transition();
.sidebar-holder {
max-height: 0;
height: -moz-fit-content;
height: fit-content;
overflow: hidden;
max-width: 100%;
@include transition();
.sidebar {
position: relative;
height: -moz-fit-content;
height: fit-content;
max-height: -moz-fit-content;
max-height: fit-content;
width: 100vw;
min-height: 0;
overflow: hidden;
@include transition();
.sidebar-tree {
margin-left: 0rem;
max-height: 0;
@include transition();
}
}
}
&.expanded {
margin-top: 2rem;
position: relative;
height: -moz-fit-content;
height: fit-content;
flex: none;
max-height: 300vh;
max-width: 100%;
@include transition();
.sidebar-holder {
max-height: 200vh;
@include transition();
.sidebar-tree {
max-height: 200vh;
@include transition();
}
}
}
}
}
.feather-plus-circle,
.feather-minus-circle {
width: 1rem;
height: 1rem;
}
html[data-theme='dark'] {
.sidebar-section {
.sidebar-holder {
background-color: get-dark-color('bg-primary');
.sidebar {
background: get-dark-color('bg-primary');
#search-box {
background-color: get-dark-color('bg-secondary');
border: 1px solid rgba(get-dark-color('accent-color'), 0.1);
&:focus {
border: 1pt solid get-dark-color('accent-color');
}
}
.sidebar-tree {
.tree {
li {
color: get-dark-color('heading-color');
i {
color: get-dark-color('heading-color');
}
}
.subtree {
&:before {
border-left: 1px solid get-dark-color('text-color');
}
li {
&:before {
border-top: 1px solid get-dark-color('text-color');
}
&:last-child:before {
background: get-dark-color('bg-primary');
}
}
}
}
}
}
}
}
}
+15
View File
@@ -0,0 +1,15 @@
/* override this file for custom css */
/* you can import boostrap mixins */
// @import 'bootstrap/scss/mixins';
// Example usage
// .some-class {
// @include media-breakpoint-up(sm) {
// // Larger than sm: 576px
// display: inline;
// }
// @include media-breakpoint-down(md) {
// // Smaller than md: 768px
// display: block;
// }
// }
+229
View File
@@ -0,0 +1,229 @@
@use 'sass:map';
$progress-bar-colors: (
'blue': #048dff,
'yellow': #eebb4d,
'pink': #ed63d2,
'green': #2dca73,
'sky': #00c9e3,
'orange': #ff7c7c,
);
@mixin circular-progress-bar-color() {
@each $color, $value in $progress-bar-colors {
&.#{$color} {
.circular-progress-bar {
border-color: $value;
}
}
}
}
@mixin circular-progress-animation-breakpoints() {
$progress: 50;
$duration: 0;
@for $i from 1 through 10 {
.circular-progress-percentage-#{$progress} {
animation: circular-loading-#{$progress} #{$duration}s linear forwards 1.8s;
}
$progress: $progress + 5;
$duration: $duration + 0.18;
}
}
@mixin circular-progress-animation-keyframes($progress, $degree, $keyframes) {
@for $i from 1 through $keyframes {
@keyframes circular-loading-#{$progress} {
0% {
transform: rotate(0);
}
100% {
transform: rotate(#{$degree}deg);
}
}
$progress: $progress + 5;
$degree: $degree + 18;
}
}
.about-section {
.social-link {
list-style: none;
padding: 0.2rem;
a {
font-size: 1.5rem;
color: get-light-color('text-color');
padding: 0.5rem;
&:hover {
color: get-light-color('accent-color');
@include transition();
}
}
}
.circular-progress {
width: 150px;
height: 150px;
line-height: 150px;
background: none;
margin: 0 auto;
box-shadow: none;
position: relative;
&::after {
content: '';
width: 100%;
height: 100%;
border-radius: 50%;
border: 12px solid get-light-color('bg-primary');
position: absolute;
top: 0;
left: 0;
}
span {
width: 50%;
height: 100%;
overflow: hidden;
position: absolute;
top: 0;
z-index: 1;
}
.circular-progress-bar {
width: 100%;
height: 100%;
background: none;
border-width: 12px;
border-style: solid;
position: absolute;
top: 0;
}
.circular-progress-left {
left: 0;
.circular-progress-bar {
left: 100%;
border-top-right-radius: 80px;
border-bottom-right-radius: 80px;
border-left: 0;
transform-origin: center left;
}
}
.circular-progress-right {
right: 0;
.circular-progress-bar {
left: -100%;
border-top-left-radius: 80px;
border-bottom-left-radius: 80px;
border-right: 0;
transform-origin: center right;
animation: circular-loading-1 1.8s linear forwards;
}
}
.circular-progress-value {
width: 90%;
height: 90%;
padding: 1rem;
border-radius: 50%;
background: get-light-color('text-color');
font-size: 1rem;
color: get-light-color('bg-primary');
line-height: initial;
text-align: center;
position: absolute;
top: 5%;
left: 5%;
display: flex;
justify-content: center;
align-items: center;
}
@include circular-progress-bar-color();
@include circular-progress-animation-breakpoints();
@include circular-progress-animation-keyframes($progress: 50, $degree: 0, $keyframes: 10);
@include circular-progress-animation-keyframes($progress: 1, $degree: 180, $keyframes: 5);
}
@include media('<=large') {
.circular-progress {
margin-bottom: 20px;
}
}
@include media('<=medium') {
.about-section.container {
max-width: 100%;
}
.circular-progress {
width: 135px;
height: 135px;
}
}
@include media('<=small') {
.circular-progress {
width: 150px;
height: 150px;
}
.circular-progress .circular-progress-value {
font-size: 1rem;
}
}
@include media('<=tiny') {
.col-6 {
flex: auto;
max-width: 100%;
}
.social-link {
flex-wrap: wrap;
}
.certificate-badge {
padding-left: 2rem;
padding-right: 2rem;
}
.circular-progress {
width: 200px;
height: 200px;
.circular-progress-left .circular-progress-bar {
border-top-right-radius: 100px;
border-bottom-right-radius: 100px;
}
.circular-progress-right .circular-progress-bar {
border-top-left-radius: 100px;
border-bottom-left-radius: 100px;
}
}
}
}
html[data-theme='dark'] {
.about-section {
.social-link {
a {
color: get-dark-color('text-color');
&:hover {
color: get-dark-color('accent-color');
}
}
}
.circular-progress {
&::after {
border: 12px solid get-dark-color('bg-primary');
}
.circular-progress-value {
background: get-dark-color('inverse-text-color');
color: get-dark-color('text-color');
}
}
}
}
@@ -0,0 +1,78 @@
.accomplishments-section {
@include section-title-adjustment();
.card {
background: get-light-color('bg-card');
border-top: 2px solid get-light-color('accent-color');
height: 100%;
&:hover,
&:focus {
border-top: 2px solid get-light-color('hover-over-accent-color');
}
.card-header {
background: none;
border: none;
.sub-title {
color: get-light-color('muted-text-color');
margin-top: 0.4rem;
}
}
.card-body {
padding: 0;
padding-left: 1rem;
padding-right: 1rem;
}
.card-footer {
background: get-light-color('bg-card');
border: none;
padding: 0;
padding-left: 0.7rem;
padding-bottom: 0.3rem;
}
}
@include media('<=large') {
width: 100%;
padding: 0;
padding-left: 0.2rem;
padding-right: 0.2rem;
margin-top: 2rem;
.container {
max-width: 100%;
}
}
@include media('<=small') {
flex: 100%;
max-width: 100%;
}
}
html[data-theme='dark'] {
.accomplishments-section {
.card {
background: get-dark-color('bg-card');
border-top: 2px solid get-dark-color('accent-color');
&:hover,
&:focus {
border-top: 2px solid get-dark-color('hover-over-accent-color');
}
.card-header {
.sub-title {
color: get-dark-color('muted-text-color');
}
}
.card-footer {
background: get-dark-color('bg-card');
}
}
}
}
+159
View File
@@ -0,0 +1,159 @@
.achievements-section {
@include section-title-adjustment();
.container {
padding-top: 0.5rem;
}
#gallery {
.achievement-entry {
margin-top: 5px;
margin-bottom: 5px;
margin-left: 7px;
margin-right: 7px;
z-index: 1;
background-color: get-light-color('bg-secondary');
background-size: cover;
background-repeat: no-repeat;
background-position: center;
position: relative;
overflow: hidden;
@include transition();
.title {
color: get-light-color('inverse-text-color');
background-color: rgba(get-light-color('bg-primary-inverse'), 0.7);
opacity: 0;
padding: 5px;
position: absolute;
bottom: 0px;
width: 100%;
margin-bottom: 0px;
bottom: -5px;
}
&:hover {
cursor: pointer;
transform: scale(1.1);
@include transition();
z-index: 20000;
.svg-inline--fa {
opacity: 1;
font-size: 1rem;
@include transition();
}
.title {
opacity: 1;
bottom: 0px;
@include transition();
}
}
}
.achievement-details {
cursor: pointer;
z-index: 1;
height: 75vh !important;
opacity: 1 !important;
transition: none !important;
transform: none !important;
.img-type-1 .svg-inline--fa,
.img-type-2 .svg-inline--fa {
margin-top: 0px !important;
transition: none !important;
float: right;
}
}
.img-type-1 {
height: 300px;
.svg-inline--fa {
margin-top: 135px;
}
}
.img-type-2 {
height: 146px;
margin-bottom: 8px;
.svg-inline--fa {
margin-top: 50px;
}
}
.svg-inline--fa {
color: get-light-color('muted-text-color');
background-color: rgba(get-light-color('bg-primary-inverse'), 0.7);
padding: 10px;
font-size: 0rem;
opacity: 0;
}
.caption {
background-color: rgba(get-light-color('bg-primary-inverse'), 0.7);
bottom: 1rem;
left: 1rem;
color: get-light-color('inverse-text-color');
padding: 15px;
position: absolute;
@include transition();
h4 {
color: get-light-color('inverse-text-color');
}
p {
font-size: 16px;
font-weight: 300;
color: get-light-color('inverse-text-color');
}
}
@include media('<=medium') {
.container {
max-width: 100%;
}
.col-md-6 {
flex: 50%;
width: 50%;
}
}
@include media('<=small') {
#gallery .achievement-entry:hover {
transform: scale(1.05);
}
}
}
}
html[data-theme='dark'] {
.achievements-section {
#gallery {
.achievement-entry {
background-color: get-dark-color('bg-secondary');
.title {
color: get-dark-color('inverse-text-color');
background-color: rgba(get-dark-color('bg-primary-inverse'), 0.7);
}
}
.svg-inline--fa {
color: get-dark-color('muted-text-color');
background-color: rgba(get-dark-color('bg-primary-inverse'), 0.7);
}
.caption {
background-color: rgba(get-dark-color('bg-primary-inverse'), 0.7);
color: get-dark-color('inverse-text-color');
h4 {
color: get-dark-color('inverse-text-color');
}
p {
color: get-dark-color('inverse-text-color');
}
}
}
}
}
+234
View File
@@ -0,0 +1,234 @@
.education-section {
@include section-title-adjustment();
.card {
&:hover,
&:focus {
border-left: 2px solid get-light-color('accent-color');
}
}
.education-info-table {
width: 100%;
border: none;
background: none;
.icon {
width: 2rem;
padding-left: 0;
padding-right: 0;
position: relative;
.hline {
position: absolute;
left: 1rem;
top: 0;
background-color: get-light-color('accent-color');
height: 100%;
width: 2px;
}
.icon-holder {
background-color: get-light-color('accent-color');
border-radius: 50%;
height: 2rem;
width: 2rem;
padding: 0.2rem;
text-align: center;
color: get-light-color('text-over-accent-color');
position: relative;
}
}
tr,
th,
td {
border: none !important;
padding: 0;
background: none !important;
}
tr {
&:hover {
background: none !important;
}
&:first-child {
.hline {
height: 65%;
top: auto;
}
}
&:last-child {
.hline {
height: 50%;
}
}
.line {
width: 5%;
padding-left: 0;
padding-right: 0;
div {
height: 2px;
margin-right: -1px;
background-color: get-light-color('accent-color');
}
}
.details {
.degree-info {
padding: 1rem;
margin-top: 0.5rem;
margin-bottom: 0.5rem;
border-left: 2px solid get-light-color('accent-color');
border-top: 1px solid get-light-color('bg-primary');
border-bottom: 1px solid get-light-color('bg-primary');
border-right: 1px solid get-light-color('bg-primary');
border-radius: 5px;
h5 {
margin-bottom: 0.3rem;
}
.timeframe {
color: get-light-color('muted-text-color');
text-align: right;
}
.taken-courses {
table {
margin-left: 1rem;
width: 100%;
@include transition();
background: none;
border: none;
tr,
td,
th {
background: none;
border: none;
color: get-light-color('text-color');
}
tr {
height: auto !important;
}
th {
.course-name-header {
width: 50%;
}
}
}
.hidden-course {
display: none;
@include transition();
}
ul {
margin-bottom: 0;
}
}
}
}
}
}
.hidden {
display: none;
}
@include media('<=large') {
.container {
padding-left: 0;
}
}
@include media('<=small') {
padding-left: 0.5rem;
padding-right: 0.5rem;
.container {
padding-right: 0;
}
.icon {
display: none;
}
.line {
display: none;
}
.timeframe {
text-align: left;
}
}
}
.education-alt .degree-info {
border-right: 2px solid get-light-color('accent-color');
}
html[data-theme='dark'] {
.education-section {
.card {
&:hover,
&:focus {
border-left: 2px solid get-dark-color('accent-color');
}
}
.education-info-table {
.icon {
.hline {
background-color: get-dark-color('accent-color');
}
.icon-holder {
background-color: get-dark-color('accent-color');
color: get-dark-color('text-over-accent-color');
}
}
tr {
.line {
div {
background-color: get-dark-color('accent-color');
}
}
.details {
.degree-info {
border-left: 2px solid get-dark-color('accent-color');
border-top: 1px solid get-dark-color('bg-primary');
border-bottom: 1px solid get-dark-color('bg-primary');
border-right: 1px solid get-dark-color('bg-primary');
.timeframe {
color: get-dark-color('muted-text-color');
}
.taken-courses {
table {
tr,
td,
th {
color: get-dark-color('text-color');
}
}
}
&:hover{
border: 1px solid rgba(get-dark-color('accent-color'),0.2);
border-left: 2px solid get-dark-color('accent-color');
}
}
}
}
}
}
.education-alt .degree-info {
border-right: 2px solid get-dark-color('accent-color');
}
}
+145
View File
@@ -0,0 +1,145 @@
.experiences-section {
@include section-title-adjustment();
padding-bottom: 1rem;
ul {
padding-left: 1rem;
& > li {
margin-left: 0;
color: get-light-color('text-color');
}
}
.designation {
font-weight: 600;
}
.circle {
padding: 13px 20px;
border-radius: 50%;
background-color: get-light-color('accent-color');
color: get-light-color('text-over-accent-color');
max-height: 50px;
z-index: 2;
}
.timeline {
margin-top: 1.5rem !important;
.vertical-line {
align-self: stretch;
&::after {
content: '';
position: absolute;
border-left: 3px solid get-light-color('accent-color');
z-index: 1;
height: 100%;
left: 50%;
}
&:nth-child(even)::after {
left: calc(50% - 3px) !important;
}
}
.horizontal-line {
div {
padding: 0;
height: 40px;
}
hr {
border-top: 3px solid get-light-color('accent-color');
margin: 0;
top: 17px;
position: relative;
}
.timeline-side-div {
display: flex;
overflow: hidden;
}
.corner {
border: 3px solid get-light-color('accent-color');
width: 100%;
position: relative;
border-radius: 15px;
}
}
.row {
&:nth-child(2n) {
div {
&:nth-child(1) .corner {
left: 50%;
top: -50%;
}
&:nth-child(3) .corner {
left: -50%;
top: calc(50% - 3px);
}
}
}
&:nth-child(4n) {
div {
&:nth-child(1) .corner {
left: 50%;
top: calc(50% - 3px);
}
&:nth-child(3) .corner {
left: -50%;
top: -50%;
}
}
}
}
}
@include media('<=medium') {
.container {
max-width: 100%;
}
}
@include media('<=small') {
.container {
padding-left: 0px;
padding-right: 0px;
}
.timeline {
.vertical-line {
visibility: hidden;
}
.horizontal-line {
visibility: hidden;
}
}
}
}
html[data-theme='dark'] {
.experiences-section {
ul {
& > li {
color: get-dark-color('text-color');
}
}
.circle {
background-color: get-dark-color('accent-color');
color: get-dark-color('text-over-accent-color');
}
.timeline {
.vertical-line {
&::after {
border-left: 3px solid get-dark-color('accent-color');
}
}
.horizontal-line {
hr {
border-top: 3px solid get-dark-color('accent-color');
}
.corner {
border: 3px solid get-dark-color('accent-color');
}
}
}
}
}
+112
View File
@@ -0,0 +1,112 @@
.footer {
color: get-light-color('muted-text-color') !important;
background-color: get-light-color('footer-color');
position: relative;
z-index: 9999;
h5 {
color: get-light-color('inverse-text-color');
}
a {
color: get-light-color('muted-text-color');
@include transition();
&:hover {
margin-left: 5px;
text-decoration: get-light-color('muted-text-color') underline;
@include transition();
}
}
ul {
list-style: none;
padding-left: 0;
li {
margin-top: 5px;
}
}
hr {
background-color: get-light-color('muted-text-color');
}
p:first-child {
color: get-light-color('inverse-text-color');
}
input {
background-color: get-light-color('inverse-text-color');
&:focus {
background-color: get-light-color('bg-secondary');
}
}
#disclaimer {
color: get-light-color('muted-text-color') !important;
text-align: justify;
& > strong {
color: get-light-color('inverse-text-color') !important;
}
}
#theme {
color: get-light-color('inverse-text-color');
img {
width: 32px;
display: inline-block;
}
}
#hugo {
&:hover {
margin-right: 5px;
@include transition();
}
img {
display: inline-block;
}
}
}
html[data-theme='dark'] {
.footer {
color: get-dark-color('muted-text-color') !important;
background-color: get-dark-color('footer-color');
h5 {
color: get-dark-color('heading-color');
}
a {
color: get-dark-color('muted-text-color');
&:hover {
text-decoration: get-dark-color('muted-text-color') underline;
}
}
hr {
background-color: get-dark-color('muted-text-color');
}
p:first-child {
color: get-dark-color('muted-text-color');
}
input {
background-color: get-dark-color('bg-primary');
&:focus {
background-color: get-dark-color('bg-secondary');
}
}
#disclaimer {
color: get-dark-color('muted-text-color') !important;
& > strong {
color: get-dark-color('text-color') !important;
}
}
#theme {
color: get-dark-color('text-color');
}
}
}
+131
View File
@@ -0,0 +1,131 @@
.home {
height: 100vh;
padding: 0;
margin: 0;
color: get-light-color('text-over-accent-color');
overflow: hidden;
.background {
height: 100%;
width: 100%;
padding: 0;
margin: 0;
background-attachment: fixed;
background-position: center;
transform: scale(1.1);
filter: blur(3px);
background-size: cover;
}
.arrow-center {
display: flex;
justify-content: center;
}
/*
Resolves https://github.com/hugo-toha/toha/issues/70
fixed attached images use the whole <body> size. On mobile this can get really
tall which blows your image out. Setting the attachment back to scroll allows
your cover image to stretch within its own container
*/
@supports (-webkit-touch-callout: none) {
.background {
background-attachment: scroll;
}
}
.content {
position: relative;
top: -65%;
height: 60%;
}
img {
width: 148px;
height: 148px;
background-color: get-light-color('bg-secondary');
padding: 5px;
margin-bottom: 10px;
}
.greeting,
.greeting-subtitle {
color: get-light-color('text-over-accent-color');
}
.typing-carousel {
font-size: 14pt;
color: get-light-color('text-over-accent-color');
}
#typing-carousel-data {
display: none;
}
.arrow {
position: absolute;
color: get-light-color('text-over-accent-color');
font-size: 1.5rem;
bottom: 0;
}
.bounce {
animation: bounce 2s infinite;
}
@keyframes bounce {
0%,
20%,
50%,
80%,
100% {
transform: translateY(0);
}
40% {
transform: translateY(-30px);
}
60% {
transform: translateY(-15px);
}
}
@include media('<=small') {
.content {
position: relative;
top: -75%;
height: 65%;
}
img {
width: 140px;
max-width: 50%;
height: auto;
}
.greeting {
font-size: 24pt;
}
}
}
html[data-theme='dark'] {
.home {
color: get-dark-color('text-over-accent-color');
img {
background-color: get-dark-color('bg-secondary');
}
.greeting,
.greeting-subtitle {
color: get-dark-color('text-over-accent-color');
}
.typing-carousel {
color: get-dark-color('text-over-accent-color');
}
.arrow {
color: get-dark-color('text-over-accent-color');
}
}
}
+48
View File
@@ -0,0 +1,48 @@
.pdf-viewer {
canvas {
border: 1px solid black;
direction: ltr;
width: 100%;
height: auto;
display: none;
}
.paginator {
display: flex!important;
width: 100% !important;
text-align: center;
margin-bottom: 0.2rem !important;
justify-content: space-between;
.page-number-indicator {
margin-left: auto;
margin-right: auto;
}
}
.loading-wrapper {
display: none;
justify-content: center;
align-items: center;
width: 100%;
height: 350px;
}
.loading {
display: inline-block;
width: 50px;
height: 50px;
border: 3px solid #d2d0d0;;
border-radius: 50%;
border-top-color: #383838;
animation: spin 1s ease-in-out infinite;
-webkit-animation: spin 1s ease-in-out infinite;
}
@keyframes spin {
to { -webkit-transform: rotate(360deg); }
}
@-webkit-keyframes spin {
to { -webkit-transform: rotate(360deg); }
}
}
+96
View File
@@ -0,0 +1,96 @@
.projects-section {
.card {
.card-header {
background-color: get-light-color('bg-card');
padding: 0.7rem;
padding-bottom: 0rem;
text-decoration: none;
.card-img-xs {
margin-right: 0.5rem;
}
.sub-title {
color: get-light-color('muted-text-color');
margin-top: 0.4rem;
span {
&:nth-child(1) {
float: left;
}
&:nth-child(2) {
float: right;
}
}
}
}
.card-body {
padding: 0.7rem;
}
}
.filtr-projects {
padding: 1rem !important;
}
.project-card-footer {
display: flex;
}
.project-tags-holder {
width: 70%;
}
.project-btn-holder {
width: 30%;
display: flex;
justify-content: flex-end;
flex-direction: column;
span {
display: flex;
justify-content: flex-end;
}
}
@include media('<=large') {
padding-left: 0;
padding-right: 0;
width: 100%;
.container {
max-width: 100%;
}
.filtr-projects {
padding: 0;
}
.filtr-item {
flex: 50%;
padding-left: 0.2rem;
padding-right: 0.2rem;
max-width: calc(100% / 2 - 0.2rem);
}
}
@include media('<=small') {
.btn {
margin-top: 0.3125rem;
}
.filtr-item {
max-width: 100%;
}
}
}
html[data-theme='dark'] {
.projects-section {
.card {
.card-header {
background-color: get-dark-color('bg-card');
.sub-title {
color: get-dark-color('muted-text-color');
}
}
}
}
}
+132
View File
@@ -0,0 +1,132 @@
.publications-section {
@include section-title-adjustment();
.card {
background: get-light-color('bg-card');
border-top: 2px solid get-light-color('accent-color');
&:hover,
&:focus {
border-top: 2px solid get-light-color('accent-color');
}
.card-header {
background: none;
border: none;
display: flex;
flex-direction: column;
.sub-title {
color: get-light-color('muted-text-color');
margin-top: 0.4rem;
span:nth-child(2) {
float: right !important;
}
}
}
.card-body {
padding: 0;
padding-left: 1rem;
padding-right: 1rem;
}
.card-footer {
background: get-light-color('bg-card');
border: none;
padding: 0;
padding-left: 1rem;
padding-right: 1rem;
padding-bottom: 0.3rem;
display: flex;
justify-content: space-between;
flex-wrap: wrap;
}
}
.filtr-publications {
padding: 1rem !important;
}
.btn-group {
justify-content: center;
}
@include media('<=large') {
padding-left: 0;
padding-right: 0;
width: 100%;
.container {
max-width: 100%;
}
.filtr-publications {
padding: 0;
}
.pub-filtr-item {
padding-left: 0.2rem;
padding-right: 0.2rem;
}
}
@include media('<=medium') {
.pub-filtr-item {
flex: 100%;
}
}
@include media('<=small') {
.pub-filtr-item {
flex: 100%;
max-width: 100%;
}
.details-btn {
.btn {
margin-top: 0.5rem;
margin-left: auto;
}
}
.card {
.card-footer {
padding-left: 0.5rem;
.tags {
flex: 100%;
max-width: 100%;
.btn {
margin-top: 0.2rem;
}
}
}
}
}
}
html[data-theme='dark'] {
.publications-section {
.card {
background: get-dark-color('bg-card');
border-top: 2px solid get-dark-color('accent-color');
&:hover,
&:focus {
border-top: 2px solid get-dark-color('accent-color');
}
.card-header {
.sub-title {
color: get-dark-color('muted-text-color');
}
}
.card-footer {
background: get-dark-color('bg-card');
}
}
}
}
+32
View File
@@ -0,0 +1,32 @@
.recent-posts-section {
.container {
padding-top: 1rem;
}
h1 > span {
margin-top: -55px; /* Size of fixed header */
padding-bottom: 55px;
display: block;
}
@include media('<medium') {
.post-card {
margin-left: 1%;
margin-right: 1%;
width: 98%;
}
}
@include media('>=medium', '<large') {
.container {
max-width: 100%;
}
.post-card {
width: calc(100% / 2);
}
}
@include media('>=large') {
.post-card {
width: calc(100% / 3);
}
}
}
+46
View File
@@ -0,0 +1,46 @@
.skills-section {
.card {
margin-top: 0.5rem;
margin-bottom: 0.5rem;
height: 100%;
.card-head {
background-color: get-light-color('bg-primary') !important;
height: -moz-fit-content;
height: fit-content;
padding: 0.7rem;
padding-bottom: 0rem;
border-bottom: 0.0625rem solid rgba(get-light-color('accent-color'), 0.4);
.card-img-xs {
margin-right: 0.5rem;
margin-bottom: 0.75rem;
}
}
.card-body {
padding-top: 0.2rem;
padding-left: 0.7rem;
}
}
@include media('<=medium') {
padding-left: 0;
padding-right: 0;
.container {
max-width: 95%;
}
}
}
html[data-theme='dark'] {
.skills-section {
.card {
.card-head {
background-color: get-dark-color('bg-card') !important;
border-bottom: 0.0625rem solid rgba(get-dark-color('accent-color'), 0.4);
}
}
}
}
+95
View File
@@ -0,0 +1,95 @@
@use 'sass:map';
$breakpoints: (
tiny: 320px,
small: 640px,
medium: 768px,
large: 1024px,
very-large: 1280px,
extra-large: 1536px,
ultra-large: 2560px,
);
// Color are chosen from TailwindCSS color scheme
// https://tailwindcss.com/docs/customizing-colors
// transitions
$transition-duration: 0.3s;
$transition-type: ease-out;
// borders and shadows
$box-shadow: 0px 8px 56px rgba(15, 80, 100, 0.16);
// themes
$themes: (
'light': (
// cyan 600
'accent-color': #0891b2,
// cyan 500
'hover-over-accent-color': #06b6d4,
// zinc 200
'text-over-accent-color': #e4e4e7,
// slate 50
'bg-primary': #f8fafc,
// slate 900
'bg-primary-inverse': #0f172a,
// slate 200
'bg-secondary': #e2e8f0,
'bg-card': #fff,
// slate 800
'heading-color': #1e293b,
// slate 700
'text-color': #334155,
// slate 300
'inverse-text-color': #cbd5e1,
// slate 500
'muted-text-color': #64748b,
// red 600
'inline-code-color': #dc2626,
// amber 200
'highlight-color': #fde68a,
// slate 900
'footer-color': #0f172a,
),
'dark': (
// cyan 600
'accent-color': #0891b2,
// cyan 500
'hover-over-accent-color': #06b6d4,
// zinc 200
'text-over-accent-color': #e4e4e7,
// gray-800
'bg-primary': #1f2937,
// slate 900
'bg-primary-inverse': #0f172a,
// gray 900
'bg-secondary': #111827,
// slate 800
'bg-card': #1e293b,
// slate 100
'heading-color': #f1f5f9,
// slate 300
'text-color': #cbd5e1,
// slate 900
'inverse-text-color': #0f172a,
// slate 500
'muted-text-color': #64748b,
// red 600
'inline-code-color': #dc2626,
// amber 200
'highlight-color': #fde68a,
// slate 900
'footer-color': #0f172a,
),
);
$brand-colors: (
'facebook': #3b5998,
'twitter': #1da1f2,
'linkedin': #0077b5,
'reddit': #ff4500,
'tumblr': #35465c,
'pocket': #ef4056,
'diaspora': #1e1e1e,
'whatsapp': #25d366,
);
+22
View File
@@ -0,0 +1,22 @@
module:
mounts:
- source: content
target: content
- source: static
target: static
- source: layouts
target: layouts
- source: data
target: data
- source: assets
target: assets
- source: i18n
target: i18n
- source: archetypes
target: archetypes
- source: ../../node_modules/flag-icon-css/flags
target: static/flags
- source: ../../node_modules/@fontsource/mulish/files
target: static/files
- source: ../../node_modules/katex/dist/fonts
target: static/fonts
+2 -2
View File
@@ -15,7 +15,7 @@ No content shown here is rendered, all content is based in the template layouts/
Setting a very low sitemap priority will tell search engines this is not important content.
This implementation uses Fusejs, jquery and mark.js
This implementation uses Fusejs and mark.js
## Initial setup
@@ -43,7 +43,7 @@ i.e. add `category`
\```
### Edit fuse.js options to Search
`static/js/search.js`
`assets/scripts/pages/search.js`
\```
keys: [
"title",
+2 -2
View File
@@ -15,7 +15,7 @@ No content shown here is rendered, all content is based in the template layouts/
Setting a very low sitemap priority will tell search engines this is not important content.
This implementation uses Fusejs, jquery and mark.js
This implementation uses Fusejs and mark.js
## Initial setup
@@ -43,7 +43,7 @@ i.e. add `category`
\```
### Edit fuse.js options to Search
`static/js/search.js`
`assets/scripts/pages/search.js`
\```
keys: [
"title",
+2 -2
View File
@@ -15,7 +15,7 @@ No content shown here is rendered, all content is based in the template layouts/
Setting a very low sitemap priority will tell search engines this is not important content.
This implementation uses Fusejs, jquery and mark.js
This implementation uses Fusejs and mark.js
## Initial setup
@@ -43,7 +43,7 @@ i.e. add `category`
\```
### Edit fuse.js options to Search
`static/js/search.js`
`assets/scripts/pages/search.js`
\```
keys: [
"title",
+1 -1
View File
@@ -43,7 +43,7 @@ Esto expone los valores en /index.json: por ejemplo, para agregar `categories`
\```
### Editar las opciones de fuse.js para buscar
`static/js/search.js`
`assets/scripts/pages/search.js`
\```
keys: [
"title",
+2 -2
View File
@@ -15,7 +15,7 @@ No content shown here is rendered, all content is based in the template layouts/
Setting a very low sitemap priority will tell search engines this is not important content.
This implementation uses Fusejs, jquery and mark.js
This implementation uses Fusejs and mark.js
## Initial setup
@@ -43,7 +43,7 @@ i.e. add `category`
\```
### Edit fuse.js options to Search
`static/js/search.js`
`assets/scripts/pages/search.js`
\```
keys: [
"title",
+2 -2
View File
@@ -15,7 +15,7 @@ No content shown here is rendered, all content is based in the template layouts/
Setting a very low sitemap priority will tell search engines this is not important content.
This implementation uses Fusejs, jquery and mark.js
This implementation uses Fusejs and mark.js
## Initial setup
@@ -43,7 +43,7 @@ i.e. add `category`
\```
### Edit fuse.js options to Search
`static/js/search.js`
`assets/scripts/pages/search.js`
\```
keys: [
"title",
+2 -2
View File
@@ -15,7 +15,7 @@ No content shown here is rendered, all content is based in the template layouts/
Setting a very low sitemap priority will tell search engines this is not important content.
This implementation uses Fusejs, jquery and mark.js
This implementation uses Fusejs and mark.js
## Initial setup
@@ -43,7 +43,7 @@ i.e. add `category`
\```
### Edit fuse.js options to Search
`static/js/search.js`
`assets/scripts/pages/search.js`
\```
keys: [
"title",
+2 -2
View File
@@ -15,7 +15,7 @@ No content shown here is rendered, all content is based in the template layouts/
Setting a very low sitemap priority will tell search engines this is not important content.
This implementation uses Fusejs, jquery and mark.js
This implementation uses Fusejs and mark.js
## Initial setup
@@ -43,7 +43,7 @@ i.e. add `category`
\```
### Edit fuse.js options to Search
`static/js/search.js`
`assets/scripts/pages/search.js`
\```
keys: [
"title",
+2 -2
View File
@@ -15,7 +15,7 @@ No content shown here is rendered, all content is based in the template layouts/
Setting a very low sitemap priority will tell search engines this is not important content.
This implementation uses Fusejs, jquery and mark.js
This implementation uses Fusejs and mark.js
## Initial setup
@@ -43,7 +43,7 @@ i.e. add `category`
\```
### Edit fuse.js options to Search
`static/js/search.js`
`assets/scripts/pages/search.js`
\```
keys: [
"title",
+2 -2
View File
@@ -15,7 +15,7 @@ No content shown here is rendered, all content is based in the template layouts/
Setting a very low sitemap priority will tell search engines this is not important content.
This implementation uses Fusejs, jquery and mark.js
This implementation uses Fusejs and mark.js
## Initial setup
@@ -43,7 +43,7 @@ i.e. add `category`
\```
### Edit fuse.js options to Search
`static/js/search.js`
`assets/scripts/pages/search.js`
\```
keys: [
"title",
+2 -2
View File
@@ -13,7 +13,7 @@ No content shown here is rendered, all content is based in the template layouts/
Setting a very low sitemap priority will tell search engines this is not important content.
This implementation uses Fusejs, jquery and mark.js
This implementation uses Fusejs and mark.js
## Initial setup
@@ -41,7 +41,7 @@ i.e. add `category`
\```
### Edit fuse.js options to Search
`static/js/search.js`
`assets/scripts/pages/search.js`
\```
keys: [
"title",
+2 -2
View File
@@ -15,7 +15,7 @@ No content shown here is rendered, all content is based in the template layouts/
Setting a very low sitemap priority will tell search engines this is not important content.
This implementation uses Fusejs, jquery and mark.js
This implementation uses Fusejs and mark.js
## Initial setup
@@ -43,7 +43,7 @@ i.e. add `category`
\```
### Edit fuse.js options to Search
`static/js/search.js`
`assets/scripts/pages/search.js`
\```
keys: [
"title",
+2 -2
View File
@@ -15,7 +15,7 @@ No content shown here is rendered, all content is based in the template layouts/
Setting a very low sitemap priority will tell search engines this is not important content.
This implementation uses Fusejs, jquery and mark.js
This implementation uses Fusejs and mark.js
## Initial setup
@@ -43,7 +43,7 @@ i.e. add `category`
\```
### Edit fuse.js options to Search
`static/js/search.js`
`assets/scripts/pages/search.js`
\```
keys: [
"title",
+3
View File
@@ -0,0 +1,3 @@
---
title: Posts
---
@@ -15,7 +15,7 @@ No content shown here is rendered, all content is based in the template layouts/
Setting a very low sitemap priority will tell search engines this is not important content.
This implementation uses Fusejs, jquery and mark.js
This implementation uses Fusejs and mark.js
## Initial setup
@@ -43,7 +43,7 @@ i.e. add `category`
\```
### Edit fuse.js options to Search
`static/js/search.js`
`assets/scripts/pages/search.js`
\```
keys: [
"title",
@@ -15,7 +15,7 @@ No content shown here is rendered, all content is based in the template layouts/
Setting a very low sitemap priority will tell search engines this is not important content.
This implementation uses Fusejs, jquery and mark.js
This implementation uses Fusejs and mark.js
## Initial setup
@@ -43,7 +43,7 @@ i.e. add `category`
\```
### Edit fuse.js options to Search
`static/js/search.js`
`assets/scripts/pages/search.js`
\```
keys: [
"title",
@@ -15,7 +15,7 @@ No content shown here is rendered, all content is based in the template layouts/
Setting a very low sitemap priority will tell search engines this is not important content.
This implementation uses Fusejs, jquery and mark.js
This implementation uses Fusejs and mark.js
## Initial setup
@@ -43,7 +43,7 @@ i.e. add `category`
\```
### Edit fuse.js options to Search
`static/js/search.js`
`assets/scripts/pages/search.js`
\```
keys: [
"title",
@@ -43,7 +43,7 @@ Esto expone los valores en /index.json: por ejemplo, para agregar `categories`
\```
### Editar las opciones de fuse.js para buscar
`static/js/search.js`
`assets/scripts/pages/search.js`
\```
keys: [
"title",
@@ -15,7 +15,7 @@ No content shown here is rendered, all content is based in the template layouts/
Setting a very low sitemap priority will tell search engines this is not important content.
This implementation uses Fusejs, jquery and mark.js
This implementation uses Fusejs and mark.js
## Initial setup
@@ -43,7 +43,7 @@ i.e. add `category`
\```
### Edit fuse.js options to Search
`static/js/search.js`
`assets/scripts/pages/search.js`
\```
keys: [
"title",
@@ -15,7 +15,7 @@ No content shown here is rendered, all content is based in the template layouts/
Setting a very low sitemap priority will tell search engines this is not important content.
This implementation uses Fusejs, jquery and mark.js
This implementation uses Fusejs and mark.js
## Initial setup
@@ -43,7 +43,7 @@ i.e. add `category`
\```
### Edit fuse.js options to Search
`static/js/search.js`
`assets/scripts/pages/search.js`
\```
keys: [
"title",
@@ -15,7 +15,7 @@ No content shown here is rendered, all content is based in the template layouts/
Setting a very low sitemap priority will tell search engines this is not important content.
This implementation uses Fusejs, jquery and mark.js
This implementation uses Fusejs and mark.js
## Initial setup
@@ -43,7 +43,7 @@ i.e. add `category`
\```
### Edit fuse.js options to Search
`static/js/search.js`
`assets/scripts/pages/search.js`
\```
keys: [
"title",
@@ -15,7 +15,7 @@ No content shown here is rendered, all content is based in the template layouts/
Setting a very low sitemap priority will tell search engines this is not important content.
This implementation uses Fusejs, jquery and mark.js
This implementation uses Fusejs and mark.js
## Initial setup
@@ -43,7 +43,7 @@ i.e. add `category`
\```
### Edit fuse.js options to Search
`static/js/search.js`
`assets/scripts/pages/search.js`
\```
keys: [
"title",
@@ -15,7 +15,7 @@ No content shown here is rendered, all content is based in the template layouts/
Setting a very low sitemap priority will tell search engines this is not important content.
This implementation uses Fusejs, jquery and mark.js
This implementation uses Fusejs and mark.js
## Initial setup
@@ -43,7 +43,7 @@ i.e. add `category`
\```
### Edit fuse.js options to Search
`static/js/search.js`
`assets/scripts/pages/search.js`
\```
keys: [
"title",
@@ -15,7 +15,7 @@ No content shown here is rendered, all content is based in the template layouts/
Setting a very low sitemap priority will tell search engines this is not important content.
This implementation uses Fusejs, jquery and mark.js
This implementation uses Fusejs and mark.js
## Initial setup
@@ -43,7 +43,7 @@ i.e. add `category`
\```
### Edit fuse.js options to Search
`static/js/search.js`
`assets/scripts/pages/search.js`
\```
keys: [
"title",

Some files were not shown because too many files have changed in this diff Show More