Merged main.

This commit is contained in:
donfiguerres 2022-01-17 16:08:20 +08:00
commit 106642ab1a
79 changed files with 1786 additions and 899 deletions

View file

@ -17,7 +17,7 @@ categories:
- 'feature'
- 'enhancement'
- title: 'New Translations'
- title: 'Translations'
label: 'translation'
- title: 'Bug Fixes'

View file

@ -8,10 +8,10 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout to latest commit
uses: actions/checkout@v2.3.4
uses: actions/checkout@v2.4.0
- name: Setup Node
uses: actions/setup-node@v2.1.5
uses: actions/setup-node@v2.5.1
with:
node-version: "15.x"
@ -21,7 +21,7 @@ jobs:
npm run autoprefixer
- name: Create Pull Request
uses: peter-evans/create-pull-request@v3.10.0
uses: peter-evans/create-pull-request@v3.12.0
with:
branch: autoprefixer
branch-suffix: timestamp

View file

@ -39,7 +39,7 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@v2
uses: actions/checkout@v2.4.0
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL

View file

@ -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.16.1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View file

@ -8,6 +8,6 @@ jobs:
runs-on: ubuntu-latest
steps:
# checkout to latest commit
- uses: actions/checkout@master
- uses: actions/checkout@v2.4.0
# run markdown linter
- uses: gaurav-nelson/github-action-markdown-link-check@1.0.12
- uses: gaurav-nelson/github-action-markdown-link-check@1.0.13

View file

@ -0,0 +1,150 @@
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

View file

@ -0,0 +1,219 @@
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

View file

@ -3,7 +3,7 @@
[![Netlify Status](https://api.netlify.com/api/v1/badges/b1b93b02-f278-440b-ae1b-304e9f4c4ab5/deploy-status)](https://app.netlify.com/sites/toha/deploys)
[![Build Status](https://img.shields.io/endpoint.svg?url=https%3A%2F%2Factions-badge.atrox.dev%2Fhugo-toha%2Ftoha%2Fbadge%3Fref%3Dmain&style=flat)](https://actions-badge.atrox.dev/hugo-toha/toha/goto?ref=main)
![Repository Size](https://img.shields.io/github/repo-size/hugo-toha/toha)
![Lines of Codes](https://img.shields.io/tokei/lines/github/hugo-toha/toha)
![Lines of Codes](https://img.shields.io/tokei/lines/github.com/hugo-toha/toha)
![Contributor](https://img.shields.io/github/contributors/hugo-toha/toha)
![Latest Release](https://img.shields.io/github/v/release/hugo-toha/toha?include_prereleases)
![Last Commit](https://img.shields.io/github/last-commit/hugo-toha/toha)

View file

@ -8,6 +8,12 @@ other = "পোষ্ট সমূহ"
[toc_heading]
other = "সুচিপত্র"
[tags]
other = "ট্যাগ সমুহ"
[categories]
other = "বিভাগ সমুহ"
[resume]
other = "আমার জীবনবৃত্তান্ত"
@ -30,7 +36,7 @@ other = "ইমেইল নোটিফিকেশান এর মাধ্
other = "ইমেইল প্রবেশ করান"
[newsletter_warning]
other = "আমরা আপনার ইমেল অন্য কারও সাথে শেয়ার করব না।"
other = "আপনার ইমেইল ঠিকানা প্রবেশের মাধমে আপনি এই ওয়েবসাইটের নিউজ লেটার পেতে সম্মত হচ্ছেন।"
[submit]
other = "জমা দিন"
@ -44,6 +50,9 @@ other = "পূর্ববর্তী"
[next]
other = "পরবর্তী"
[share_on]
other = "শেয়ার করুন"
[improve_this_page]
other = "এই পৃষ্ঠাটি উন্নত করুন"

View file

@ -8,6 +8,12 @@ other = "Beiträge"
[toc_heading]
other = "Inhaltsverzeichnis"
[tags]
other = "Stichworte"
[categories]
other = "Kategorien"
[at]
other = "bei"
@ -33,7 +39,7 @@ other = "Mit dem Newsletter auf dem neuesten Stand bleiben"
other = "E-Mail Adresse eingeben"
[newsletter_warning]
other = "Wir geben deine E-Mail Adresse nicht an Dritte weiter."
other = "Mit der Eingabe Ihrer E-Mail-Adresse erklären Sie sich damit einverstanden, den Newsletter dieser Website zu erhalten."
[submit]
other = "Absenden"
@ -47,6 +53,9 @@ other = "Vorherige"
[next]
other = "Nächste"
# [share_on]
# other = "Share on"
[improve_this_page]
other = "Diese Seite verbessern"

View file

@ -8,6 +8,12 @@ other = "Posts"
[toc_heading]
other = "Table of Contents"
[tags]
other = "Tags"
[categories]
other = "Categories"
[at]
other = "at"
@ -33,7 +39,7 @@ other = "Stay up to date with email notification"
other = "Enter email"
[newsletter_warning]
other = "We'll never share your email with anyone else."
other = "By entering your email address, you agree to receive the newsletter of this website."
[submit]
other = "Submit"
@ -47,6 +53,9 @@ other = "Prev"
[next]
other = "Next"
[share_on]
other = "Share on"
[improve_this_page]
other = "Improve this page"

View file

@ -8,6 +8,12 @@ other = "Posts"
[toc_heading]
other = "Contenido"
[tags]
other = "Etiquetas"
[categories]
other = "Categorías"
[at]
other = "en"
@ -33,7 +39,7 @@ other = "Subscribirse"
other = "Ingrese email"
[newsletter_warning]
other = "Jamás compartiremos tus datos con alguién mas"
other = "Al ingresar su dirección de correo electrónico, acepta recibir el boletín de este sitio web."
[submit]
other = "Enviar"
@ -47,6 +53,9 @@ other = "Anterior"
[next]
other = "Siguiente"
[share_on]
other = "Compartir en"
[improve_this_page]
other = "Mejorar esta página"
@ -77,29 +86,29 @@ other = "Ver más"
[show_less]
other = "Muestra menos"
# [responsibilities]
# other = "Responsibilities:"
[responsibilities]
other = "Responsabilidades:"
# [present]
# other = "Present"
[present]
other = "Presente"
# [comments_javascript]
# other = "Please enable JavaScript to view the"
[comments_javascript]
other = "Por favor, activa JavaScript para ver el"
# [comments_by]
# other = "comments powered by"
[comments_by]
other = "comentarios cortesía de"
# [read]
# other = "Read"
[read]
other = "Leer"
# [project_star]
# other = "Star"
[project_star]
other = "Favorito"
# [project_details]
# other = "Details"
[project_details]
other = "Detalles"
# [err_404]
# other = "The page you are looking for is not there yet."
[err_404]
other = "La página que estás buscando no está aquí (todavía)"
[more]
other = "Más"

View file

@ -3,16 +3,22 @@
other = "Accueil"
[posts]
other = "Des postes"
other = "Articles"
[toc_heading]
other = "Table des matières"
[tags]
other = "Mots clés"
[categories]
other = "Catégories"
[at]
other = "chez"
[resume]
other = "Mon Curriculum vitæ"
other = "Mon Curriculum Vitæ"
[navigation]
other = "Navigation"
@ -33,7 +39,7 @@ other = "Restez à jour par e-mail"
other = "Entrez une adresse e-mail"
[newsletter_warning]
other = "Nous ne partagerons jamais votre courriel avec quelqu'un d'autre."
other = "En renseignant votre adresse e-mail, vous acceptez de recevoir la newsletter de ce site."
[submit]
other = "Envoyer"
@ -47,6 +53,9 @@ other = "Précédent"
[next]
other = "Suivant"
[share_on]
other = "Partager sur"
[improve_this_page]
other = "Améliorez cette page"
@ -57,10 +66,10 @@ other = "sur"
other = "Publications"
[taken_courses]
other = "Taken Courses"
other = "Cours suivis"
[course_name]
other = "Cours suivis"
other = "Intitulé du cours"
[total_credit]
other = "Crédit total"
@ -77,29 +86,29 @@ other = "En savoir plus"
[show_less]
other = "Montrer moins"
# [responsibilities]
# other = "Responsibilities:"
[responsibilities]
other = "Responsabilitiés :"
# [present]
# other = "Present"
[present]
other = "Aujourd'hui"
# [comments_javascript]
# other = "Please enable JavaScript to view the"
[comments_javascript]
other = "Merci d'activer JavaScript pour voir le"
# [comments_by]
# other = "comments powered by"
[comments_by]
other = "commentaires fournis par"
# [read]
# other = "Read"
[read]
other = "Lire"
# [project_star]
# other = "Star"
# [project_details]
# other = "Details"
[project_details]
other = "Détails"
# [err_404]
# other = "The page you are looking for is not there yet."
[err_404]
other = "La page que vous recherchez n'est pas disponible."
[more]
other = "Suite"

View file

@ -8,6 +8,12 @@ other = "पोस्ट"
[toc_heading]
other = "विषयसूची"
[tags]
other = "टैग"
[categories]
other = "श्रेणियाँ"
[at]
other = "अन्य"
@ -33,7 +39,7 @@ other = "ईमेल अधिसूचना से अवगत रहें"
other = "ईमेल दर्ज करें"
[newsletter_warning]
other = "हम आपके ईमेल को कभी भी किसी और के साथ साझा नहीं करेंगे"
other = "अपना ईमेल पता दर्ज करके, आप इस वेबसाइट का न्यूज़लेटर प्राप्त करने के लिए सहमत होते हैं।"
[submit]
other = "जमा करें"
@ -47,6 +53,9 @@ other = "पिछला"
[next]
other = "आगे"
# [share_on]
# other = "Share on"
[improve_this_page]
other = "इस पृष्ठ को सुधारें"

View file

@ -8,6 +8,12 @@ other = "Artikel"
[toc_heading]
other = "Daftar Isi"
[tags]
other = "Tags"
[categories]
other = "Kategori"
[at]
other = "at"
@ -33,7 +39,7 @@ other = "Ingin selalu update dengan notifikasi email"
other = "Masukkan email"
[newsletter_warning]
other = "Kami tidak pernah berbagi data email dengan siapapun."
other = "Dengan memasukkan alamat email Anda, Anda setuju untuk menerima buletin situs web ini."
[submit]
other = "Kirim"
@ -47,6 +53,9 @@ other = "Sebelumnya"
[next]
other = "Lanjut"
# [share_on]
# other = "Share on"
[improve_this_page]
other = "Perbaiki halaman ini"

View file

@ -8,6 +8,12 @@ other = "Post"
[toc_heading]
other = "Contenuti"
[tags]
other = "Tags"
[categories]
other = "Categorie"
[at]
other = "presso"
@ -33,7 +39,7 @@ other = "Resta aggiornato con la notifica di email"
other = "Inserisci l'email"
[newsletter_warning]
other = "Non condivideremo l'email con altri."
other = "Inserendo il tuo indirizzo email, accetti di ricevere la newsletter di questo sito."
[submit]
other = "Invia"
@ -47,6 +53,9 @@ other = "Precedente"
[next]
other = "Successivo"
# [share_on]
# other = "Share on"
[improve_this_page]
other = "Migliora questa pagina"
@ -105,7 +114,7 @@ other = "Mostra meno"
other = "Di più"
[view_certificate]
other = "Féach ar an Teastas"
other = "Vedi certificato"
[notes]
other = "Appunti"

View file

@ -8,6 +8,12 @@ other = "記事"
[toc_heading]
other = "目次"
[tags]
other = "タグ"
[categories]
other = "カテゴリ"
[resume]
other = "職務経歴書"
@ -30,7 +36,7 @@ other = "メールで最新情報を受け取る"
other = "ここにメールアドレスを入力"
[newsletter_warning]
other = "ご入力いただいたメールアドレスが他人に開示されることは決してございません。"
other = "メールアドレスを入力すると、このウェブサイトのニュースレターを受け取ることに同意したことになります。"
[submit]
other = "登録"
@ -44,6 +50,9 @@ other = "前"
[next]
other = "次"
# [share_on]
# other = "Share on"
[improve_this_page]
other = "編集リクエストを送る"

View file

@ -8,6 +8,12 @@ other = "게시글"
[toc_heading]
other = "목차"
[tags]
other = "태그"
[categories]
other = "카테고리"
[at]
other = "at"
@ -33,7 +39,7 @@ other = "이메일 알림으로 최신 상태를 유지해보세요"
other = "이메일을 입력하세요"
[newsletter_warning]
other = "이메일을 다른 목적으로 사용하지 않습니다."
other = "이메일 주소를 입력하면이 웹 사이트의 뉴스 레터 수신에 동의하는 것입니다."
[submit]
other = "제출"
@ -47,6 +53,9 @@ other = "이전"
[next]
other = "다음"
# [share_on]
# other = "Share on"
[improve_this_page]
other = "이 페이지를 개선"

View file

@ -7,6 +7,12 @@ other = "Beiträge"
[toc_heading]
other = "Inhaltsverzeichnis"
[tags]
other = "Tags"
[categories]
other = "Categorieën"
[at]
other = "bei"
@ -32,7 +38,7 @@ other = "Mit dem Newsletter auf dem neuesten Stand bleiben"
other = "E-Mail-Adresse eingeben"
[newsletter_warning]
other = "Wir werden Ihre E-Mail-Adresse nicht an Dritte weitergeben."
other = "Door uw e-mailadres in te voeren, gaat u akkoord met het ontvangen van de nieuwsbrief van deze website."
[submit]
other = "Absenden"
@ -46,6 +52,9 @@ other = "Vorherige"
[next]
other = "Nächste"
# [share_on]
# other = "Share on"
[improve_this_page]
other = "Diese Seite verbessern"

View file

@ -8,6 +8,12 @@ other = "Посты"
[toc_heading]
other = "Оглавление"
[tags]
other = "Теги"
[categories]
other = "Категории"
[at]
other = "в"
@ -33,7 +39,7 @@ other = "Подпишитесь на уведомления, чтобы не п
other = "Введите email"
[newsletter_warning]
other = "Ваши данные в безопасности"
other = "Вводя свой адрес электронной почты, вы соглашаетесь получать информационный бюллетень этого веб-сайта."
[submit]
other = "Подтвердить"
@ -47,6 +53,9 @@ other = "Предыдущий"
[next]
other = "Следующий"
# [share_on]
# other = "Share on"
[improve_this_page]
other = "Улучшить эту страницу"

View file

@ -8,6 +8,12 @@ other = "Bài viết"
[toc_heading]
other = "Mục lục"
[tags]
other = "Thẻ"
[categories]
other = "Thể loại"
[at]
other = "tại"
@ -33,7 +39,7 @@ other = "Nhận email cập nhật thông tin"
other = "Nhập email"
[newsletter_warning]
other = "Chúng tôi sẽ không bao giờ chia sẻ email của bạn."
other = "Bằng cách nhập địa chỉ email của bạn, bạn đồng ý nhận bản tin của trang web này."
[submit]
other = "Gửi"
@ -47,6 +53,9 @@ other = "Trước"
[next]
other = "Tiếp theo"
# [share_on]
# other = "Share on"
[improve_this_page]
other = "Cải thiện trang này"

View file

@ -8,6 +8,12 @@ other = "博文"
[toc_heading]
other = "目录"
[tags]
other = "标签"
[categories]
other = "类别"
[at]
other = "at"
@ -33,7 +39,7 @@ other = "通过电子邮件接收最新信息"
other = "填入 E-mail"
[newsletter_warning]
other = "我们绝不会与任何人共享您的电子邮件。"
other = "输入您的电子邮件地址,即表示您同意接收本网站的时事通讯"
[submit]
other = "提交"
@ -47,6 +53,9 @@ other = "上一篇"
[next]
other = "下一篇"
[share_on]
other = "分享"
[improve_this_page]
other = "改善此页面"
@ -77,29 +86,29 @@ other = "查看更多"
[show_less]
other = "显示较少"
# [responsibilities]
# other = "Responsibilities:"
[responsibilities]
other = "职责:"
# [present]
# other = "Present"
[present]
other = "至今"
# [comments_javascript]
# other = "Please enable JavaScript to view the"
[comments_javascript]
other = "请启用 JavaScript 以查看"
# [comments_by]
# other = "comments powered by"
[comments_by]
other = "评论支持 by"
# [read]
# other = "Read"
[read]
other = "阅读"
# [project_star]
# other = "Star"
[project_star]
other = "Star"
# [project_details]
# other = "Details"
[project_details]
other = "详情"
# [err_404]
# other = "The page you are looking for is not there yet."
[err_404]
other = "您查找的页面已私奔。"
[more]
other = "更多的"
@ -111,4 +120,4 @@ other = "查看证书"
other = "笔记"
[disclaimer_text]
other = "责任通知"
other = "免责声明"

123
i18n/zh-tw.toml Normal file
View file

@ -0,0 +1,123 @@
# More documentation here: https://github.com/nicksnyder/go-i18n
[home]
other = "首頁"
[posts]
other = "文章"
[toc_heading]
other = "目錄"
[tags]
other = "标签"
[categories]
other = "类别"
[at]
other = "at"
[resume]
other = "履歷"
[navigation]
other = "導覽列"
[contact_me]
other = "聯絡方式:"
[email]
other = "信箱"
[phone]
other = "電話"
[newsletter_text]
other = "通過電子郵件接收最新消息"
[newsletter_input_placeholder]
other = "在此輸入您的電子郵件地址"
[newsletter_warning]
other = "輸入您的電子郵件地址,即表示您同意接受本網站的最新消息"
[submit]
other = "提交"
[hugoAttributionText]
other = "Powered by"
[prev]
other = "上一篇"
[next]
other = "下一篇"
[share_on]
other = "分享"
[improve_this_page]
other = "改善此頁面"
[out_of]
other = "/"
[publications]
other = "出版"
[taken_courses]
other = "修習課程"
[course_name]
other = "課程名稱"
[total_credit]
other = "總分"
[obtained_credit]
other = "獲得學分"
[extracurricular_activities]
other = "課外活動"
[show_more]
other = "查看更多"
[show_less]
other = "顯示較少"
# [responsibilities]
# other = "Responsibilities:"
# [present]
# other = "Present"
# [comments_javascript]
# other = "Please enable JavaScript to view the"
# [comments_by]
# other = "comments powered by"
# [read]
# other = "Read"
# [project_star]
# other = "Star"
# [project_details]
# other = "Details"
# [err_404]
# other = "The page you are looking for is not there yet."
[more]
other = "更多的"
[view_certificate]
other = "查看證書"
[notes]
other = "筆記"
[disclaimer_text]
other = "免責聲明"

View file

@ -4,13 +4,20 @@
<title>{{ .Page.Title }}</title>
<!------ ADD COMMON HEADERS -------->
{{- partial "header.html" . -}}
{{ template "_internal/opengraph.html" . }}
<!------ ADD PAGE SPECIFIC HEADERS ------->
{{ block "header" . }} {{ end }}
<!-- ADD GOOGLE ANALYTICS IF ENABLED -->
{{ if site.GoogleAnalytics }}
{{ template "_internal/google_analytics_async.html" . }}
<!-- Google Analytics v3 ID -->
{{ if hasPrefix site.GoogleAnalytics "UA-"}}
{{ template "_internal/google_analytics_async.html" . }}
{{ else }}
<!-- Google Analytics v4 ID -->
{{ template "_internal/google_analytics.html" . }}
{{ end }}
{{ end }}
</head>

View file

@ -1,6 +1,9 @@
{{ define "header" }}
<link rel="stylesheet" href="{{ "/css/layouts/list.css" | relURL }}">
<link rel="stylesheet" href="{{ "/css/navigators/sidebar.css" | relURL}}">
<!--================= custom style overrides =========================-->
<link rel="stylesheet" href="{{ "/css/style.css" | relURL }}"/>
{{ end }}
{{ define "navbar" }}

View file

@ -1,6 +1,9 @@
{{ define "header" }}
<link rel="stylesheet" href="{{ "/css/layouts/list.css" | relURL }}">
<link rel="stylesheet" href="{{ "/css/navigators/sidebar.css" | relURL}}">
<!--================= custom style overrides =========================-->
<link rel="stylesheet" href="{{ "/css/style.css" | relURL }}"/>
{{ end }}
{{ define "navbar" }}

View file

@ -6,6 +6,9 @@
/>
<link rel="stylesheet" href="{{ "/css/layouts/single.css" | relURL }}"/>
<link rel="stylesheet" href="{{ "/css/navigators/sidebar.css" | relURL }}">
<!--================= custom style overrides =========================-->
<link rel="stylesheet" href="{{ "/css/style.css" | relURL }}"/>
{{ end }}
{{ define "navbar" }}
@ -45,35 +48,134 @@
<div class="author-profile ml-auto align-self-lg-center">
<img class="rounded-circle" src='{{ partial "helpers/get-author-image.html" . }}' alt="Author Image">
<h5 class="author-name">{{ partial "helpers/get-author-name.html" . }}</h5>
<p>{{ .Page.Date.Format "January 2, 2006" }}</p>
<p>{{ .Page.Date | time.Format ":date_full" }}</p>
</div>
<div class="title">
<h1>{{ .Page.Title }}</h1>
</div>
{{ if site.Params.enableTags }}
<div class="taxonomy-terms">
<ul>
{{ range .Params.tags }}
{{ $url:= printf "tags/%s" . }}
<li class="rounded"><a href="{{ $url | urlize | relLangURL }}" class="btn, btn-sm">{{ . }}</a></li>
{{ end }}
</ul>
</div>
{{ end }}
<div class="post-content" id="post-content">
{{ .Page.Content }}
</div>
<!-- Share or Contribute -->
<div class="row pl-3 pr-3">
<!--Social Media Share Buttons-->
<div class="col-md-6 share-buttons">
{{ if site.Params.features.blog.shareButtons }}
<strong>{{ i18n "share_on" }}:</strong>
{{ if site.Params.features.blog.shareButtons.facebook }}
<a class="btn btn-sm facebook-btn" href="https://www.facebook.com/sharer.php?u={{ .Permalink }}" target="_blank">
<i class="fab fa-facebook"></i>
</a>
{{ end }}
{{ if site.Params.features.blog.shareButtons.twitter }}
<a class="btn btn-sm twitter-btn" href="https://twitter.com/share?url={{ .Permalink }}&text={{ .Title }}&via={{- site.Title -}}" target="_blank">
<i class="fab fa-twitter"></i>
</a>
{{ end }}
{{ if site.Params.features.blog.shareButtons.reddit }}
<a class="btn btn-sm reddit-btn" href="https://reddit.com/submit?url={{ .Permalink }}&title={{ .Title }}" target="_blank">
<i class="fab fa-reddit"></i>
</a>
{{ end }}
{{ if site.Params.features.blog.shareButtons.tumblr }}
<a class="btn btn-sm tumblr-btn" href="https://www.tumblr.com/share/link?url={{ .Permalink }}&name={{ .Title }}{{- with .Params.description -}}&description={{- . -}}{{- end -}}" target="_blank">
<i class="fab fa-tumblr"></i>
</a>
{{ end }}
{{ if site.Params.features.blog.shareButtons.pocket }}
<a class="btn btn-sm pocket-btn" href="https://getpocket.com/save?url={{ .Permalink }}&title={{ .Title }}" target="_blank">
<i class="fab fa-get-pocket"></i>
</a>
{{ end }}
{{ if site.Params.features.blog.shareButtons.linkedin }}
<a class="btn btn-sm linkedin-btn" href="https://www.linkedin.com/shareArticle?url={{ .Permalink }}&title={{ .Title }}" target="_blank">
<i class="fab fa-linkedin"></i>
</a>
{{ end }}
{{ if site.Params.features.blog.shareButtons.diaspora }}
<a class="btn btn-sm diaspora-btn" href="https://share.diasporafoundation.org/?title={{ .Title }}&url={{ .Permalink }}" rel="nofollow" target="_blank">
<i class="fab fa-diaspora"></i>
</a>
{{ end }}
{{ if site.Params.features.blog.shareButtons.mastodon }}
<a class="btn btn-sm mastodon-btn" href="https://mastodon.social/share?text={{ .Title }} - {{ .Permalink }}" target="_blank">
<i class="fab fa-mastodon"></i>
</a>
{{ end }}
{{ if site.Params.features.blog.shareButtons.whatsapp }}
<a class="btn btn-sm whatsapp-btn" href="https://api.whatsapp.com/send?text={{ .Title }} {{ .Permalink }}" target="_blank">
<i class="fab fa-whatsapp"></i>
</a>
{{ end }}
{{ if site.Params.features.blog.shareButtons.email }}
<a class="btn btn-sm email-btn" href="mailto:?subject={{ .Title }}&body={{ .Permalink }}" target="_blank">
<i class="fas fa-envelope-open-text"></i>
</a>
{{ end }}
{{ end }}
</div>
<!--- Improve this page button --->
{{ if site.Params.GitRepo }}
<div class="btn-improve-page">
<a href="{{ site.Params.GitRepo }}/edit/{{ site.Params.GitBranch }}/content/{{ .File.Path }}" title="{{ i18n "improve_this_page" }}" target="_blank" rel="noopener">
{{ if site.Params.GitBranch }}
{{ .Scratch.Set "GitBranch" site.Params.GitBranch }}
{{ else }}
{{ .Scratch.Set "GitBranch" "main" }}
{{ end }}
<div class="col-md-6 btn-improve-page">
{{ if ( eq site.Params.GitForge "gitlab" ) }}
<a href="{{ site.Params.GitRepo }}/-/edit/{{ .Scratch.Get "GitBranch" }}/{{ .File.Path }}" title="{{ i18n "improve_this_page" }}" target="_blank" rel="noopener">
{{ else if ( eq site.Params.GitForge "gitea" ) }}
<a href="{{ site.Params.GitRepo }}/_edit/{{ .Scratch.Get "GitBranch" }}/content/{{ .File.Path }}" title="{{ i18n "improve_this_page" }}" target="_blank" rel="noopener">
{{ else }} <!--- Make Github-style the default -->
<a href="{{ site.Params.GitRepo }}/edit/{{ .Scratch.Get "GitBranch" }}/content/{{ .File.Path }}" title="{{ i18n "improve_this_page" }}" target="_blank" rel="noopener">
{{ end }}
<i class="fas fa-code-branch"></i>
{{ i18n "improve_this_page" }}
</a>
</div>
{{ end }}
</div>
<!---Next and Previous Navigator -->
<!---Next and Previous Navigator -->
<hr />
{{ partial "navigators/next-prev-navigator.html" . }}
<hr />
<!-- Add Disqus forum -->
{{ if site.DisqusShortname }}
{{ partial "disqus.html" . }}
<!----- Add comment support ----->
{{ with site.Params.features.comment }}
{{ if .enable }}
<!-- Add Disqus forum -->
{{ if .disqus.shortName }}
{{ partial "disqus.html" . }}
<!-- Add valine -->
{{ else if .valine }}
{{ partial "valine.html" . }}
<!-- Add utteranc -->
{{ else if .utteranc }}
{{ partial "utteranc.html" . }}
{{ end }}
{{ end }}
{{ end }}
<!-- Keep backward compatibility with old config.yaml -->
{{ if site.DisqusShortname }}
{{ partial "disqus.html" . }}
{{ end }}
</div>
</div>
</div>

View file

@ -0,0 +1,62 @@
{{ define "header" }}
<link rel="stylesheet" href="{{ "/css/layouts/list.css" | relURL }}">
<link rel="stylesheet" href="{{ "/css/navigators/sidebar.css" | relURL}}">
<!--================= custom style overrides =========================-->
<link rel="stylesheet" href="{{ "/css/style.css" | relURL }}"/>
{{ end }}
{{ define "navbar" }}
{{ partial "navigators/navbar-2.html" . }}
{{ end }}
{{ define "sidebar" }}
{{ $homePage:="#" }}
{{ if site.IsMultiLingual }}
{{ $homePage = (path.Join (cond ( eq .Language.Lang "en") "" .Language.Lang) .Type) }}
{{ end }}
<section class="sidebar-section" id="sidebar-section">
<div class="sidebar-holder">
<div class="sidebar" id="sidebar">
<form class="mx-auto" method="get" action="{{ "search" | relLangURL }}">
<input type="text" name="keyword" value="" placeholder="Search" data-search="" id="search-box" />
</form>
<div class="sidebar-tree">
<ul class="tree" id="tree">
<li id="list-heading"><a href="{{ .Type | relLangURL }}" data-filter="all">{{ i18n .Type }}</a></li>
<div class="subtree taxonomy-terms">
{{ $context := . }}
{{ partial "navigators/taxonomies.html" (dict "context" $context "taxo" "categories" "title" ( humanize "categories" ) ) }}
</div>
</ul>
</div>
</div>
</div>
</section>
{{ end }}
{{ define "content" }}
<section class="content-section" id="content-section">
<div class="content container-fluid" id="content">
<div class="container-fluid post-card-holder" id="post-card-holder">
{{ $posts := where .RegularPagesRecursive "Layout" "!=" "search" }}
{{ $paginator := .Paginate $posts 12 }}
{{ range $paginator.Pages }}
{{ if .Layout }}
{{/* ignore the search.md file*/}}
{{ else }}
{{ partial "cards/post.html" . }}
{{ end }}
{{ end }}
</div>
<div class="paginator">
{{ template "_internal/pagination.html" . }}
</div>
</div>
</section>
{{ end }}
{{ define "scripts" }}
<script src="{{ "/js/list.js" | relURL }}"></script>
{{ end }}

View file

@ -13,6 +13,7 @@
<!-- import common headers -->
{{- partial "header.html" . -}}
{{- partial "opengraph.html" . -}}
<!-- import index page specific headers -->
<link rel="stylesheet" href="{{ "/css/sections/home.css" | relURL }}"/>
@ -24,10 +25,19 @@
<link rel="stylesheet" href="{{ "/css/sections/recent-posts.css" | relURL }}"/>
<link rel="stylesheet" href="{{ "/css/sections/achievements.css" | relURL }}"/>
<link rel="stylesheet" href="{{ "/css/sections/accomplishments.css" | relURL }}"/>
<!--================= custom style overrides =========================-->
<link rel="stylesheet" href="{{ "/css/style.css" | relURL }}"/>
<!-- Add Google Analytics if enabled in configuration -->
{{ if site.GoogleAnalytics }}
{{ template "_internal/google_analytics_async.html" . }}
<!-- Google Analytics v3 ID -->
{{ if hasPrefix site.GoogleAnalytics "UA-"}}
{{ template "_internal/google_analytics_async.html" . }}
{{ else }}
<!-- Google Analytics v4 ID -->
{{ template "_internal/google_analytics.html" . }}
{{ end }}
{{ end }}
</head>
<body data-spy="scroll" data-target="#top-navbar" data-offset="100">

View file

@ -11,7 +11,10 @@
{{ $logoImage:= resources.Get .logo}}
{{ if $logoImage }}
{{ $logoImage := $logoImage.Fit "24x24" }}
{{/* svg don't support "Fit" operation */}}
{{ if ne $logoImage.MediaType.SubType "svg" }}
{{ $logoImage = $logoImage.Fit "24x24" }}
{{ end }}
<img class="card-img-xs" src="{{ $logoImage.RelPermalink }}" alt="{{ .name }}" />
{{ end }}

View file

@ -7,7 +7,7 @@
{{/* svg don't support "Fit" operation */}}
{{ if ne $logoImage.MediaType.SubType "svg" }}
{{ $logoImage := $logoImage.Fit "24x24" }}
{{ $logoImage = $logoImage.Fit "24x24" }}
{{ end }}
<img class="card-img-xs" src="{{ $logoImage.RelPermalink }}" alt="{{ .name }}" />

View file

@ -1,3 +1,8 @@
{{ $disqusShortName := site.DisqusShortname }}
{{ if site.Params.features.comment.disqus.shortName }}
{{ $disqusShortName = site.Params.features.comment.disqus.shortName }}
{{ end }}
<div id="disqus_thread"></div>
<script type="text/javascript">
(function () {
@ -8,7 +13,7 @@
var dsq = document.createElement("script");
dsq.type = "text/javascript";
dsq.async = true;
var disqus_shortname = "{{ site.DisqusShortname }}";
var disqus_shortname = "{{ $disqusShortName }}";
dsq.src = "//" + disqus_shortname + ".disqus.com/embed.js";
(
document.getElementsByTagName("head")[0] ||

View file

@ -37,7 +37,7 @@
{{ $disclaimer := "" }}
{{ $siteConfig := (index site.Data site.Language.Lang).site }}
{{ if $siteConfig.disclaimer }}
{{ if $siteConfig.disclaimer }}
{{ $disclaimer = $siteConfig.disclaimer }}
{{ end }}
@ -73,7 +73,7 @@
{{ $sectionID = .section.id }}
{{ end }}
<li class="nav-item">
<a class="smooth-scroll" href="/#{{ $sectionID }}">{{ .section.name }}</a>
<a class="smooth-scroll" href="{{ "" | absLangURL }}#{{ $sectionID }}">{{ .section.name }}</a>
</li>
{{ end }}
{{- end }}
@ -86,7 +86,23 @@
<h5>{{ i18n "contact_me" }}</h5>
<ul>
{{ range $key,$value:= $author.contactInfo }}
<li><span>{{ title $key }}: </span> <span>{{ $value }}</span></li>
{{ if (eq $key "email") }}
<li><a href={{ printf "mailto:%s" $value }} target="_blank" rel="noopener">
<span><i class="fas fa-envelope"></i></span> <span>{{ $value }}</span>
</a></li>
{{ else if (eq $key "phone") }}
<li><span><i class="fas fa-phone-alt"></i></span> <span>{{ $value }}</span></li>
{{ else if (eq $key "linkedin") }}
<li><a href={{ printf "https://www.linkedin.com/in/%s" $value }} target="_blank" rel="noopener">
<span><i class="fab fa-linkedin"></i></span> <span>{{ $author.name }}</span>
</a></li>
{{ else if (eq $key "github") }}
<li><a href={{ printf "https://github.com/%s" $value }} target="_blank" rel="noopener">
<span><i class="fab fa-github"></i></span> <span>{{ $value }}</span>
</a></li>
{{ else }}
<li><span>{{ title $key }}: </span> <span>{{ $value }}</span></li>
{{ end }}
{{ end }}
</ul>
</div>
@ -121,13 +137,14 @@
<button type="submit" class="btn btn-info">{{ i18n "submit" }}</button>
</form>
{{ else }}
<!-- a dummy form -->
<form>
<div class="form-group">
<input type="email" class="form-control" id="exampleInputEmail1" aria-describedby="emailHelp" placeholder="{{ i18n "newsletter_input_placeholder" }}"/>
<small id="emailHelp" class="form-text text-muted">{{ i18n "newsletter_warning" }}</small>
</div>
<button type="submit" class="btn btn-info">{{ i18n "submit" }}</button>
<form method='post' action='https://blogtrottr.com'>
<div class="form-group">
<input type='email' class="form-control" name='btr_email' placeholder="{{ i18n "newsletter_input_placeholder" }}"/><br />
<input type='hidden' name='btr_url' value='{{ "" | absLangURL }}index.xml' />
<input type='hidden' name='schedule_type' value='1' />
<small id="emailHelp" class="form-text text-muted">{{ i18n "newsletter_warning" }}</small>
<button type="submit" class="btn btn-info"> {{ i18n "submit" }} </button>
</div>
</form>
{{ end }}
</div>
@ -137,7 +154,7 @@
{{ if and $disclaimerEnabled $disclaimer}}
<hr />
<div class="container">
<p id="disclaimer"><strong>{{ i18n "disclaimer_text" }}:</strong> {{ $disclaimer }}</p>
<p id="disclaimer"><strong>{{ i18n "disclaimer_text" }}:</strong> {{ $disclaimer | markdownify }}</p>
</div>
{{ end }}
{{ if $credentialsEnabled }}

View file

@ -1,18 +1,3 @@
{{/* default favicon */}}
{{ $favicon := "/images/favicon.png" }}
{{/* if favicon is provided in the config, then use that */}}
{{ if site.Params.logo.favicon }}
{{ $favicon = site.Params.logo.favicon }}
{{ end }}
{{/* resize the favicon. don't resize svg because it is not supported */}}
{{ $favicon := resources.Get $favicon }}
{{ if and $favicon (ne $favicon.MediaType.SubType "svg") }}
{{ $favicon = $favicon.Resize "42x" }}
{{ end }}
{{ $favicon = $favicon.RelPermalink}}
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
@ -20,17 +5,26 @@
<!-- ============ import common css ========== -->
<link rel="stylesheet" href="{{ "/css/bootstrap.min.css" | relURL }}"/>
<link rel="stylesheet" href="{{ "/css/layouts/main.css" | relURL }}"/>
<link rel="stylesheet" href="{{ "/css/style.css" | relURL }}"/>
<link rel="stylesheet" href="{{ "/css/navigators/navbar.css" | relURL }}"/>
<link rel="stylesheet" href="{{ "/css/plyr.css" | relURL }}"/>
<link rel="stylesheet" href="{{ "/css/flag-icon.min.css" | relURL }}"/>
<link rel="stylesheet" href="{{ "/css/katex.min.css" | relURL }}">
<!--=================== cdn ==============================-->
<link href="https://fonts.googleapis.com/css2?family=Muli:wght@300;400;500;600" rel="stylesheet">
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Muli:wght@300;400;500;600">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.11.2/css/all.min.css" />
<!--================= fab-icon =========================-->
<link rel="icon" type="image/png" href="{{ $favicon }}" />
{{/* add favicon only if the site author has provided the the favicon */}}
{{ if site.Params.logo.favicon }}
{{ $favicon := site.Params.logo.favicon }}
<!--================= custom style overrides =========================-->
<link rel="stylesheet" href="{{ "/css/style.css" | relURL }}"/>
{{/* resize the favicon. don't resize svg because it is not supported */}}
{{ $favicon = resources.Get $favicon }}
{{ if and $favicon (ne $favicon.MediaType.SubType "svg") }}
{{ $favicon = $favicon.Resize "42x" }}
{{ end }}
{{ $favicon = $favicon.RelPermalink}}
<link rel="icon" type="image/png" href="{{ $favicon }}" />
{{end}}

View file

@ -18,12 +18,12 @@
{{ end }}
{{ end }}
{{/* apply image processing. don't use "Fit" in svg because its not supported */}}
{{/* apply image processing. don't use "Fit" in svg or gif because its not supported */}}
{{ $authorImage:= resources.Get $authorImage}}
{{ if and $authorImage (ne $authorImage.MediaType.SubType "svg") }}
{{ $authorImage := $authorImage.Fit "120x120" }}
{{ if and $authorImage (and (ne $authorImage.MediaType.SubType "svg") ( ne $authorImage.MediaType.SubType "gif")) }}
{{ $authorImage = $authorImage.Fit "120x120" }}
{{ end }}
{{/* return the author image link */}}
{{ return $authorImage.RelPermalink }}

View file

@ -0,0 +1,10 @@
{{ $pages:= slice}}
{{ range . }}
{{ if .HasChildren }}
{{ $nestedPages:=partial "helpers/get-pages.html" .Children }}
{{ $pages = $pages | append $nestedPages }}
{{ else }}
{{ $pages = $pages | append .Page }}
{{ end }}
{{ end }}
{{ return $pages}}

View file

@ -2,7 +2,7 @@
{{ if eq .type "certification" }}
{{/* Verifiable certificate badge from https://www.credly.com */}}
<div class="">
<a href="{{ .url }}" target="_blank" >
<a href="{{ .url }}" target="_blank" rel="noopener noreferrer">
<img src="{{ .badge }}" alt="{{ .name }}" />
</a>
</div>

View file

@ -6,14 +6,14 @@
<div class="dropdown languageSelector">
<a class="btn dropdown-toggle" href="#" id="languageSelector" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
{{ $countryCode := partial "helpers/country-code.html" . }}
<img class="flag" src="https://www.countryflags.io/{{ $countryCode }}/flat/16.png" alt="{{ $countryCode }}">
<span class="flag-icon flag-icon-{{$countryCode}}"></span>
{{ site.Language.LanguageName }}
</a>
<div class="dropdown-menu" aria-labelledby="languageSelector">
{{ range .Translations }}
<a class="dropdown-item nav-link languages-item" href="{{ path.Join "/" (cond (eq .Language.Lang "en") "" .Language.Lang) $pageURL }}">
{{ $countryCode := partial "helpers/country-code.html" . }}
<img class="flag" src="https://www.countryflags.io/{{ $countryCode }}/flat/24.png" alt="{{ $countryCode }}">
<span class="flag-icon flag-icon-{{$countryCode}}"></span>
{{ .Language.LanguageName }}
</a>
{{ end }}

View file

@ -1,28 +1,31 @@
{{/* default logos */}}
{{ $mainLogo := "/images/main-logo.png" }}
{{ $invertedLogo := "/images/inverted-logo.png" }}
{{/* by default, don't use any logo */}}
{{ $mainLogo := "" }}
{{ $invertedLogo := "" }}
{{/* if custom logo has been provided in the config file, then use them */}}
{{/* if custom logo has been provided, use them */}}
{{ if site.Params.logo.main }}
{{ $mainLogo = site.Params.logo.main }}
{{ end }}
{{ if site.Params.logo.inverted }}
{{ $invertedLogo = site.Params.logo.inverted }}
{{ end }}
{{/* resize the logos. don't resize svg because it is not supported */}}
{{ $mainLogo := resources.Get $mainLogo}}
{{ if and $mainLogo (ne $mainLogo.MediaType.SubType "svg") }}
{{ $mainLogo = $mainLogo.Resize "42x" }}
{{ if $mainLogo }}
{{ $mainLogo = resources.Get $mainLogo}}
{{ if and $mainLogo (ne $mainLogo.MediaType.SubType "svg") }}
{{ $mainLogo = $mainLogo.Resize "42x" }}
{{ end }}
{{ $mainLogo = $mainLogo.RelPermalink}}
{{ end }}
{{ $mainLogo = $mainLogo.RelPermalink}}
{{ $invertedLogo := resources.Get $invertedLogo}}
{{ if and $invertedLogo (ne $invertedLogo.MediaType.SubType "svg") }}
{{ $invertedLogo = $invertedLogo.Resize "42x" }}
{{ if $invertedLogo }}
{{ $invertedLogo = resources.Get $invertedLogo}}
{{ if and $invertedLogo (ne $invertedLogo.MediaType.SubType "svg")}}
{{ $invertedLogo = $invertedLogo.Resize "42x" }}
{{ end }}
{{ $invertedLogo = $invertedLogo.RelPermalink}}
{{ end }}
{{ $invertedLogo = $invertedLogo.RelPermalink}}
<nav class="navbar navbar-expand-xl top-navbar final-navbar shadow">
<div class="container">
@ -30,7 +33,9 @@
<span class="navbar-toggler-icon"></span>
</button>
<a class="navbar-brand" href="{{ site.BaseURL | relLangURL }}">
<img src="{{ $mainLogo }}" alt="Logo">
{{ if $mainLogo }}
<img src="{{ $mainLogo }}" alt="Logo">
{{ end }}
{{- site.Title -}}
</a>
<button class="navbar-toggler navbar-light" id="toc-toggler" type="button" onclick="toggleTOC()">
@ -46,6 +51,10 @@
</div>
</div>
<!-- Store the logo information in a hidden img for the JS -->
<img src="{{ $mainLogo }}" class="d-none" id="main-logo" alt="Logo">
<img src="{{ $invertedLogo }}" class="d-none" id="inverted-logo" alt="Inverted Logo">
{{ if $mainLogo }}
<img src="{{ $mainLogo }}" class="d-none" id="main-logo" alt="Logo">
{{ end }}
{{ if $invertedLogo }}
<img src="{{ $invertedLogo }}" class="d-none" id="inverted-logo" alt="Inverted Logo">
{{ end }}
</nav>

View file

@ -1,17 +1,18 @@
{{/* variables for enabling/disabling various features */}}
{{ $blogEnabled := site.Params.features.blog.enable | default false }}
{{ $notesEnabled := site.Params.features.notes.enable | default false }}
{{ $maxVisibleSections := site.Params.topNavbar.maxVisibleSections | default 5 }}
{{/* keep backward compatibility for blog post */}}
{{ if site.Params.enableBlogPost }}
{{ $blogEnabled = true }}
{{ end }}
{{/* default logos */}}
{{ $mainLogo := "/images/main-logo.png" }}
{{ $invertedLogo := "/images/inverted-logo.png" }}
{{/* by default, don't use any logo */}}
{{ $mainLogo := "" }}
{{ $invertedLogo := "" }}
{{/* if custom logo is used, them */}}
{{/* if custom logo has been provided, use them */}}
{{ if site.Params.logo.main }}
{{ $mainLogo = site.Params.logo.main }}
{{ end }}
@ -20,17 +21,21 @@
{{ end }}
{{/* resize the logos. don't resize svg because it is not supported */}}
{{ $mainLogo := resources.Get $mainLogo}}
{{ if and $mainLogo (ne $mainLogo.MediaType.SubType "svg") }}
{{ $mainLogo = $mainLogo.Resize "42x" }}
{{ if $mainLogo }}
{{ $mainLogo = resources.Get $mainLogo}}
{{ if and $mainLogo (ne $mainLogo.MediaType.SubType "svg") }}
{{ $mainLogo = $mainLogo.Resize "42x" }}
{{ end }}
{{ $mainLogo = $mainLogo.RelPermalink}}
{{ end }}
{{ $mainLogo = $mainLogo.RelPermalink}}
{{ $invertedLogo := resources.Get $invertedLogo}}
{{ if and $invertedLogo (ne $invertedLogo.MediaType.SubType "svg")}}
{{ $invertedLogo = $invertedLogo.Resize "42x" }}
{{ if $invertedLogo }}
{{ $invertedLogo = resources.Get $invertedLogo}}
{{ if and $invertedLogo (ne $invertedLogo.MediaType.SubType "svg")}}
{{ $invertedLogo = $invertedLogo.Resize "42x" }}
{{ end }}
{{ $invertedLogo = $invertedLogo.RelPermalink}}
{{ end }}
{{ $invertedLogo = $invertedLogo.RelPermalink}}
{{ $customMenus := site.Params.customMenus }}
{{ if (index site.Data site.Language.Lang).site.customMenus }}
@ -45,7 +50,9 @@
<nav class="navbar navbar-expand-xl top-navbar initial-navbar" id="top-navbar">
<div class="container">
<a class="navbar-brand" href="{{ site.BaseURL | relLangURL }}">
<img src="{{ $invertedLogo }}" id="logo" alt="Logo">
{{ if $invertedLogo }}
<img src="{{ $invertedLogo }}" id="logo" alt="Logo">
{{ end }}
{{- site.Title -}}
</a>
<button
@ -65,18 +72,18 @@
<a class="nav-link" href="#home">{{ i18n "home" }}</a>
</li>
{{ if $sections }}
{{ $sectionCount := 0}}
{{ $sectionCount := 1 }}
{{ range sort $sections "section.weight" }}
{{ if and (.section.enable) (.section.showOnNavbar)}}
{{ $sectionCount = add $sectionCount 1}}
{{ if le $sectionCount 5 }}
{{ if le $sectionCount $maxVisibleSections }}
<li class="nav-item">
<a class="nav-link" href="#{{ partial "helpers/get-section-id.html" . }}">{{ .section.name }}</a>
</li>
{{ end }}
{{ end }}
{{- end }}
{{ if gt $sectionCount 5 }}
{{ if gt $sectionCount $maxVisibleSections }}
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">{{i18n "more" }}</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdown">
@ -84,7 +91,7 @@
{{ range sort $sections "section.weight" }}
{{ if and (.section.enable) (.section.showOnNavbar) }}
{{ $sectionCount = add $sectionCount 1}}
{{ if gt $sectionCount 5 }}
{{ if gt $sectionCount $maxVisibleSections }}
<a class="dropdown-item" href="#{{ partial "helpers/get-section-id.html" . }}">{{ .section.name }}</a>
{{ end }}
{{ end }}
@ -122,6 +129,10 @@
</div>
</div>
<!-- Store the logo information in a hidden img for the JS -->
<img src="{{ $mainLogo }}" class="d-none" id="main-logo" alt="Logo">
<img src="{{ $invertedLogo }}" class="d-none" id="inverted-logo" alt="Inverted Logo">
{{ if $mainLogo }}
<img src="{{ $mainLogo }}" class="d-none" id="main-logo" alt="Logo">
{{ end }}
{{ if $invertedLogo }}
<img src="{{ $invertedLogo }}" class="d-none" id="inverted-logo" alt="Inverted Logo">
{{ end }}
</nav>

View file

@ -1,33 +1,43 @@
{{ $curPage := . }}
{{ $prevPage := "" }}
{{ $nextPage := "" }}
<!-- List all the pages. It uses the sidebar menu to discover the page order. -->
{{ $pages := slice }}
{{ if isset site.Menus "sidebar" }}
{{ $pages = partial "helpers/get-pages.html" site.Menus.sidebar }}
{{ end }}
<!-- Now, find the current page index in the pages list. Then, find previous page and next page. -->
{{ $idx := 0 }}
{{ range $pages }}
{{ if eq .RelPermalink $curPage.RelPermalink }}
{{ $prevPage = index $pages (sub $idx 1) }}
{{ $nextPage = index $pages (add $idx 1) }}
{{ end }}
{{ $idx = add $idx 1 }}
{{ end }}
<div class="row next-prev-navigator">
{{ $currentPage := . }}
{{ range (where site.RegularPages.ByDate "Type" "in" site.Params.mainSections )}}
{{ if eq .RelPermalink $currentPage.RelPermalink }}
{{ if .Next }}
{{ if (in site.Params.mainSections .Next.Type) }}
<div class="col-md-6 previous-article">
<a href="{{.Next.RelPermalink}}" title="{{ .Next.Title }}" class="btn btn-outline-info">
<div><i class="fas fa-chevron-circle-left"></i> {{ i18n "prev" }}</div>
<div class="next-prev-text">{{ .Next.Title }}</div>
{{ if $prevPage }}
<div class="col-md-6 previous-article">
<a href="{{ $prevPage.RelPermalink }}" title="{{ $prevPage.Title }}" class="btn btn-outline-info">
<div><i class="fas fa-chevron-circle-left"></i> {{ i18n "prev" }}</div>
<div class="next-prev-text">{{ $prevPage.Title }}</div>
</a>
</div>
{{ end }}
{{ if $nextPage }}
{{ $columnWidth:="col-md-12" }}
{{ if $prevPage }}
{{ $columnWidth = "col-md-6" }}
{{ end}}
<div class="{{ $columnWidth }} next-article">
<a href="{{ $nextPage.RelPermalink }}" title="{{ $nextPage.Title }}" class="btn btn-outline-info">
<div>{{ i18n "next" }} <i class="fas fa-chevron-circle-right"></i></div>
<div class="next-prev-text">{{ $nextPage.Title }}</div>
</a>
</div>
{{ end }}
{{ end }}
{{ if .Prev }}
{{ if (in site.Params.mainSections .Prev.Type) }}
{{ $columnWidth:="col-md-12" }}
{{ if .Next }}
{{ if (in site.Params.mainSections .Next.Type) }}
{{ $columnWidth = "col-md-6" }}
{{ end }}
{{ end}}
<div class="{{ $columnWidth }} next-article">
<a href="{{ .Prev.RelPermalink }}" title="{{ .Prev.Title }}" class="btn btn-outline-info">
<div>{{ i18n "next" }} <i class="fas fa-chevron-circle-right"></i></div>
<div class="next-prev-text">{{ .Prev.Title }}</div>
</a>
</div>
{{ end }}
{{ end }}
{{ end }}
{{ end }}
</div>

View file

@ -0,0 +1,16 @@
{{ $context := .context }}
{{ $taxo := .taxo }}
{{ $class:= "" }}
{{ if isset $context.Site.Taxonomies ( lower $taxo ) }}
{{ $taxonomy := index $context.Site.Taxonomies ( lower $taxo ) }}
{{ if (gt (len $taxonomy) 0)}}
{{ range $taxonomy }}
{{if eq $context.Title .Page.Title}}
{{ $class = "active" }}
{{else}}
{{$class = ""}}
{{end}}
<li><a class="taxonomy-term {{ $class }}" href="{{ .Page.Permalink }}" data-taxonomy-term="{{ urlize .Page.Title }}"><span class="taxonomy-label">{{ .Page.Title }}</span></a></li>
{{ end }}
{{ end }}
{{ end }}

View file

@ -0,0 +1,12 @@
{{ $title := (index site.Data site.Language.Lang).site.openGraph.title | default site.Title }}
{{ $type := (index site.Data site.Language.Lang).site.openGraph.type | default "website" }}
{{ $description := (index site.Data site.Language.Lang).site.openGraph.description | default (index site.Data site.Language.Lang).site.description }}
{{ $image := (index site.Data site.Language.Lang).site.openGraph.image | default (index site.Data site.Language.Lang).author.image }}
{{ $url := (index site.Data site.Language.Lang).site.openGraph.url | default site.BaseURL }}
<!-- ============ open graph tags ========== -->
<meta property="og:title" content="{{ $title }}"/>
<meta property="og:type" content="{{ $type }}"/>
<meta property="og:description" content="{{ $description }}"/>
<meta property="og:image" content="{{ $image | absURL }}">
<meta property="og:url" content="{{ $url }}">

View file

@ -6,5 +6,8 @@
<script type="text/javascript" src="{{ "/js/plyr.js" | relURL }}"></script>
<script type="text/javascript" src="{{ "/js/main.js" | relURL }}"></script>
<script type="text/javascript" defer src="{{ "/js/katex.min.js" | relURL }}"></script>
<script type="text/javascript" defer src="{{ "/js/auto-render.min.js" | relURL }}" onload="renderMathInElement(document.body);"></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/darkreader@4.9.34/darkreader.js"></script>
<script type="text/javascript" src="{{ "/js/darkmode.js" | relURL }}"></script>

View file

@ -11,7 +11,8 @@
<div class="container anchor p-lg-5 about-section" id="{{ $sectionID }}">
<div class="row pt-sm-2 pt-md-4 align-self-center">
<!-- summary -->
<div class="col-sm-6">
<!-- takes up full section width if no badges/soft skills are specified -->
{{ if or (.softSkills) (.badges) }} <div class="col-sm-6"> {{ else }} <div class="col-sm-12"> {{ end }}
<h3 class="p-1">{{ $author.name }}</h3>
{{ if .designation }}
<h5 class="p-1">

View file

@ -3,9 +3,10 @@
{{ $sectionID = .section.id }}
{{ end }}
<div class="container-fluid anchor pb-5 accomplishments-section" id="{{ $sectionID }}">
<div class="container-fluid anchor pb-5 accomplishments-section">
{{ if not (.section.hideTitle) }}
<h1 class="text-center">{{ .section.name }}</h1>
<h1 class="text-center">
<span id="{{ $sectionID }}"></span>{{ .section.name }}</h1>
{{ end }}
<div class="container">

View file

@ -3,9 +3,10 @@
{{ $sectionID = .section.id }}
{{ end }}
<div class="container-fluid anchor pb-5 achievements-section" id="{{ $sectionID }}">
<div class="container-fluid anchor pb-5 achievements-section">
{{ if not (.section.hideTitle) }}
<h1 class="text-center">{{ .section.name }}</h1>
<h1 class="text-center">
<span id="{{ $sectionID }}"></span>{{ .section.name }}</h1>
{{ end }}
<div class="container">
<div class="row" id="gallery">

View file

@ -53,6 +53,7 @@
</div>
{{ end }}
{{ if .takenCourses }}
{{ $collapseAfter := .takenCourses.collapseAfter | default 2 }}
<div class="taken-courses">
<h6 class="text-muted">{{ i18n "taken_courses" }}</h6>
{{ if .takenCourses.showGrades }}
@ -65,7 +66,7 @@
</thead>
<tbody>
{{ range $index,$course := .takenCourses.courses }}
<tr class="course {{ if gt $index 1 }}hidden-course{{ end}}">
<tr class="course {{ if ge $index $collapseAfter }}hidden-course{{ end}}">
<td>{{ $course.name }}</td>
{{ if not $hideScale }}<td>{{ $course.outOf }}</td>{{ end }}
<td>{{ $course.achieved }}</td>
@ -76,11 +77,11 @@
{{ else }}
<ul>
{{ range $index,$course := .takenCourses.courses }}
<li class="course {{ if gt $index 1 }}hidden-course{{ end}}">{{ $course.name }}</li>
<li class="course {{ if ge $index $collapseAfter }}hidden-course{{ end}}">{{ $course.name }}</li>
{{ end }}
</ul>
{{ end }}
{{ if gt (len .takenCourses.courses) 2 }}
{{ if gt (len .takenCourses.courses) $collapseAfter }}
<button type="button" class="btn btn-link show-more-btn pt-0 {{ if .takenCourses.showGrades }}ml-1{{ else }}ml-2{{ end }}"
onclick="toggleCourseVisibility(this);" id="show-more-btn" aria-label="{{ i18n "show_more"}}">{{ i18n "show_more"}}</button>
<button type="button" class="btn btn-link show-more-btn hidden pt-0 {{ if .takenCourses.showGrades }}ml-1{{ else }}ml-2{{ end }}"

View file

@ -3,9 +3,10 @@
{{ $sectionID = .section.id }}
{{ end }}
<div class="container-fluid anchor pb-5 education-section" id="{{ $sectionID }}">
<div class="container-fluid anchor pb-5 education-section">
{{ if not (.section.hideTitle) }}
<h1 class="text-center">{{ .section.name }}</h1>
<h1 class="text-center">
<span id="{{ $sectionID }}"></span>{{ .section.name }}</h1>
{{ end }}
<div class="container">
@ -53,19 +54,20 @@
</div>
{{ end }}
{{ if .takenCourses }}
{{ $collapseAfter := .takenCourses.collapseAfter | default 2 }}
<div class="taken-courses">
<h6 class="text-muted">{{ i18n "taken_courses"}}</h6>
{{ if .takenCourses.showGrades }}
{{ $hideScale := .takenCourses.hideScale }}
<table>
<thead>
<th>{{ i18n "course_name"}}</th>
<th class="course-name-header">{{ i18n "course_name"}}</th>
{{ if not $hideScale }}<th>{{ i18n "total_credit"}}</th>{{ end }}
<th>{{ i18n "obtained_credit"}}</th>
</thead>
<tbody>
{{ range $index,$course := .takenCourses.courses }}
<tr class="course {{ if gt $index 1 }}hidden-course{{ end}}">
<tr class="course {{ if ge $index $collapseAfter }}hidden-course{{ end}}">
<td>{{ $course.name }}</td>
{{ if not $hideScale }}<td>{{ $course.outOf }}</td>{{ end }}
<td>{{ $course.achieved }}</td>
@ -76,11 +78,11 @@
{{ else }}
<ul>
{{ range $index,$course := .takenCourses.courses }}
<li class="course {{ if gt $index 1 }}hidden-course{{ end}}">{{ $course.name }}</li>
<li class="course {{ if ge $index $collapseAfter }}hidden-course{{ end}}">{{ $course.name }}</li>
{{ end }}
</ul>
{{ end }}
{{ if gt (len .takenCourses.courses ) 2 }}
{{ if gt (len .takenCourses.courses ) $collapseAfter }}
<button type="button" class="btn btn-link show-more-btn pt-0 {{ if .takenCourses.showGrades }}ml-1{{ else }}ml-2{{ end }}"
onclick="toggleCourseVisibility(this);" id="show-more-btn">{{ i18n "show_more"}}</button>
<button type="button" class="btn btn-link show-more-btn hidden pt-0 {{ if .takenCourses.showGrades }}ml-1{{ else }}ml-2{{ end }}"

View file

@ -3,9 +3,11 @@
{{ $sectionID = .section.id }}
{{ end }}
<div class="container-fluid anchor pb-5 experiences-section" id="{{ $sectionID }}">
<div class="container-fluid anchor pb-5 experiences-section">
{{ if not (.section.hideTitle) }}
<h1 class="text-center">{{ .section.name }}</h1>
<h1 class="text-center">
<span id="{{ $sectionID }}"></span>{{ .section.name }}
</h1>
{{ end }}
<div class="container timeline text-justify">
@ -27,4 +29,4 @@
{{ end }}
{{ end }}
</div>
</div>
</div>

View file

@ -26,8 +26,11 @@
{{ $authorImage = $author.image }}
{{ end }}
{{ $authorImage := resources.Get $authorImage }}
{{ $authorImage := $authorImage.Fit "148x148" }}
{{/* apply image processing. don't use "Fit" in svg or gif because its not supported */}}
{{ if and $authorImage (and (ne $authorImage.MediaType.SubType "svg") ( ne $authorImage.MediaType.SubType "gif")) }}
{{ $authorImage = $authorImage.Fit "148x148" }}
{{ end }}
{{/* get file that matches the filename as specified as src="" in shortcode */}}
{{ $src := resources.Get $backgroundImage }}
@ -110,6 +113,9 @@
alt="Author Image"
/>
<h1 class="greeting"> {{ $author.greeting }} {{ $name }}</h1>
{{ if $author.subtitle }}
<h2 class="greeting-subtitle">{{ $author.subtitle }}</h2>
{{ end }}
<div class="typing-carousel">
<span id="ityped" class="ityped"></span>
<span class="ityped-cursor"></span>

View file

@ -8,9 +8,11 @@
{{ $numShow = .section.numShow }}
{{ end }}
<div class="container-fluid anchor pb-5 recent-posts-section" id="{{ $sectionID }}">
<div class="container-fluid anchor pb-5 recent-posts-section">
{{ if not (.section.hideTitle) }}
<h1 class="text-center">{{ .section.name }}</h1>
<h1 class="text-center">
<span id="{{ $sectionID }}"></span>{{ .section.name }}</h1>
{{ end }}
<div class="container">
<div class="row" id="recent-post-cards">

View file

@ -3,9 +3,10 @@
{{ $sectionID = .section.id }}
{{ end }}
<div class="container-fluid anchor pb-5 skills-section" id="{{ $sectionID }}">
<div class="container-fluid anchor pb-5 skills-section">
{{ if not (.section.hideTitle) }}
<h1 class="text-center">{{ .section.name }}</h1>
<h1 class="text-center">
<span id="{{ $sectionID }}"></span>{{ .section.name }}</h1>
{{ end }}
<div class="container d-flex-block">
<div class="row" id="primary-skills">

View file

@ -0,0 +1,22 @@
{{ $repo := site.Params.features.comment.utteranc.repo }}
{{ $issueTerm := site.Params.features.comment.utteranc.issueTerm }}
{{ $theme := site.Params.features.comment.utteranc.theme }}
<div id="utteranc_thread"></div>
<div id="comments" class="comments">
<div id="comments-container"></div>
</div>
<script type="text/javascript">
(function() {
var utterances = document.createElement('script');
utterances.type = 'text/javascript';
utterances.async = true;
utterances.setAttribute('repo','{{ $repo }}')
utterances.setAttribute('issue-term','{{ $issueTerm }}')
utterances.setAttribute('theme','{{ $theme }}')
utterances.crossorigin = 'anonymous';
utterances.src = 'https://utteranc.es/client.js';
document.getElementById('comments-container').appendChild(utterances);
})();
</script>

View file

@ -0,0 +1,17 @@
<!-- valine -->
<div id="vcomments"></div>
<script src="//cdn1.lncld.net/static/js/3.0.4/av-min.js"></script>
<script src="//unpkg.com/valine/dist/Valine.min.js"></script>
<script type="text/javascript">
new Valine({
el: "#vcomments",
appId: "{{ .valine.appId }}",
appKey: "{{ .valine.appKey }}",
avatar: "{{ .valine.avatar }}",
placeholder: "{{ .valine.placeholder }}",
visitor: "{{ .valine.visitor }}",
lang: "{{ .valine.lang }}",
recordIP: "{{ .valine.recordIP }}",
enableQQ: "{{ .valine.enableQQ }}",
});
</script>

62
layouts/tags/list.html Normal file
View file

@ -0,0 +1,62 @@
{{ define "header" }}
<link rel="stylesheet" href="{{ "/css/layouts/list.css" | relURL }}">
<link rel="stylesheet" href="{{ "/css/navigators/sidebar.css" | relURL}}">
<!--================= custom style overrides =========================-->
<link rel="stylesheet" href="{{ "/css/style.css" | relURL }}"/>
{{ end }}
{{ define "navbar" }}
{{ partial "navigators/navbar-2.html" . }}
{{ end }}
{{ define "sidebar" }}
{{ $homePage:="#" }}
{{ if site.IsMultiLingual }}
{{ $homePage = (path.Join (cond ( eq .Language.Lang "en") "" .Language.Lang) .Type) }}
{{ end }}
<section class="sidebar-section" id="sidebar-section">
<div class="sidebar-holder">
<div class="sidebar" id="sidebar">
<form class="mx-auto" method="get" action="{{ "search" | relLangURL }}">
<input type="text" name="keyword" value="" placeholder="Search" data-search="" id="search-box" />
</form>
<div class="sidebar-tree">
<ul class="tree" id="tree">
<li id="list-heading"><a href="{{ .Type | relLangURL }}" data-filter="all">{{ i18n .Type }}</a></li>
<div class="subtree taxonomy-terms">
{{ $context := . }}
{{ partial "navigators/taxonomies.html" (dict "context" $context "taxo" "tags" "title" ( humanize "tags" ) ) }}
</div>
</ul>
</div>
</div>
</div>
</section>
{{ end }}
{{ define "content" }}
<section class="content-section" id="content-section">
<div class="content container-fluid" id="content">
<div class="container-fluid post-card-holder" id="post-card-holder">
{{ $posts := where .RegularPagesRecursive "Layout" "!=" "search" }}
{{ $paginator := .Paginate $posts 12 }}
{{ range $paginator.Pages }}
{{ if .Layout }}
{{/* ignore the search.md file*/}}
{{ else }}
{{ partial "cards/post.html" . }}
{{ end }}
{{ end }}
</div>
<div class="paginator">
{{ template "_internal/pagination.html" . }}
</div>
</div>
</section>
{{ end }}
{{ define "scripts" }}
<script src="{{ "/js/list.js" | relURL }}"></script>
{{ end }}

950
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -17,8 +17,8 @@
},
"homepage": "https://github.com/hossainemruz/toha#readme",
"devDependencies": {
"autoprefixer": "^10.2.5",
"postcss": "^8.3.0",
"autoprefixer": "^10.4.2",
"postcss": "^8.4.5",
"postcss-cli": "^8.3.1"
}
}

1
static/css/katex.min.css vendored Normal file

File diff suppressed because one or more lines are too long

View file

@ -50,17 +50,17 @@ a:hover {
}
.btn-dark {
background-color: #3c4858;
border-color: #3c4858;
color: #e5e9f2;
transition: all 0.3s ease-out;
background-color: #3c4858!important;
border-color: #3c4858!important;
color: #e5e9f2!important;
transition: all 0.3s ease-out!important;
}
.btn-dark:hover,
.btn-dark:focus {
background-color: #248aaa;
border-color: #248aaa;
transition: all 0.3s ease-out;
background-color: #248aaa!important;
border-color: #248aaa!important;
transition: all 0.3s ease-out!important;
}
.btn-outline-info {
@ -432,16 +432,29 @@ mark {
code {
padding: 0px;
}
h1 {
font-size: 2.2rem;
}
}
/* iPhoneX, iPhone 6,7,8 */
@media only screen and (max-width: 375px) {
h1 {
font-size: 2rem;
}
}
/* Galaxy S5, Moto G4 */
@media only screen and (max-width: 360px) {
h1 {
font-size: 1.8rem;
}
}
/* iPhone 5 or before */
@media only screen and (max-width: 320px) {
h1 {
font-size: 1.5rem;
}
}

View file

@ -37,6 +37,7 @@ body {
}
.toc-holder {
position: -webkit-sticky;
position: sticky;
top: 4.5rem;
overflow-x: hidden;
@ -205,6 +206,69 @@ h6 {
padding: 10px;
}
.share-buttons .btn {
color: #e5e9f2 !important;
transition: all 0.3s ease-out !important;
}
.share-buttons .btn:hover,
.share-buttons .btn:focus {
background-color: #248aaa !important;
border-color: #248aaa !important;
transition: all 0.3s ease-out !important;
}
.share-buttons .facebook-btn {
background-color: #4267b2 !important;
border-color: #4267b2 !important;
}
.share-buttons .twitter-btn {
background-color: #1da1f2 !important;
border-color: #1da1f2 !important;
}
.share-buttons .reddit-btn {
background-color: #ff4500 !important;
border-color: #ff4500 !important;
}
.share-buttons .tumblr-btn {
background-color: #34465d !important;
border-color: #34465d !important;
}
.share-buttons .pocket-btn {
background-color: #ef4056 !important;
border-color: #ef4056 !important;
}
.share-buttons .linkedin-btn {
background-color: #2867b2 !important;
border-color: #2867b2 !important;
}
.share-buttons .diaspora-btn {
background-color: #3c4858 !important;
border-color: #3c4858 !important;
}
.share-buttons .mastodon-btn {
background-color: #2791da !important;
border-color: #2791da !important;
}
.share-buttons .whatsapp-btn {
background-color: #4ac959 !important;
border-color: #4ac959 !important;
}
.share-buttons .email-btn {
background-color: #3c4858 !important;
border-color: #3c4858 !important;
transition: all 0.3s ease-out !important;
}
.btn-improve-page {
text-align: right;
}
@ -236,6 +300,19 @@ h6 {
#scroll-to-top.show {
visibility: visible;
}
.taxonomy-terms {
text-align: center;
}
.taxonomy-terms li {
font-size: 0.8em;
list-style-type: none;
display: inline-block;
background: #248aaa;
}
.taxonomy-terms a {
color: #f9fafc;
}
/* ============= Device specific fixes ======= */

View file

@ -6,8 +6,8 @@
height: 50px;
z-index: 99999;
transition: all 0.4s ease-out;
margin: 0;
padding-top: 0.1rem;
margin: 0px;
padding-top: 0.4rem;
text-align: center;
}
@ -30,6 +30,7 @@
.initial-navbar li a:hover {
color: #f9fafc;
transition: all 0.3s ease-out;
transform: translateY(-2px);
}
.navbar-collapse {

View file

@ -8,6 +8,7 @@
.sidebar-holder {
top: 2.5rem;
position: -webkit-sticky;
position: sticky;
background-color: #f9fafc;
height: 100vh;
@ -191,6 +192,7 @@ a.focused {
transition: all ease-out 0.3s;
}
.sidebar-holder {
position: -webkit-sticky;
position: sticky;
top: 2.5rem;
width: 100%;
@ -220,6 +222,7 @@ a.focused {
transition: all ease-out 0.3s;
}
.sidebar-holder {
position: -webkit-sticky;
position: sticky;
top: 2.5rem;
width: 100%;

File diff suppressed because one or more lines are too long

View file

@ -87,11 +87,14 @@
background: #3c4858;
font-size: 1rem;
color: #f9fafc;
line-height: 135px;
line-height: initial;
text-align: center;
position: absolute;
top: 5%;
left: 5%;
display: flex;
justify-content: center;
align-items: center;
}
.circular-progress.blue .circular-progress-bar {
@ -496,11 +499,24 @@
.about-section.container {
max-width: 100%;
}
.circular-progress {
width: 135px;
height: 135px;
}
}
/* Small devices (landscape phones, 576px and up) */
@media only screen and (max-width: 576px) {
.circular-progress {
width: 150px;
height: 150px;
}
.circular-progress .circular-progress-value {
font-size: 1rem;
}
}
/* iPhoneX, iPhone 6,7,8 */
@ -513,4 +529,12 @@
/* iPhone 5 or before */
@media only screen and (max-width: 320px) {
.col-6 {
flex: auto;
max-width: 100%;
}
.social-link {
flex-wrap: wrap;
}
}

View file

@ -1,3 +1,9 @@
.accomplishments-section h1 > span{
margin-top: -55px; /* Size of fixed header */
padding-bottom:55px;
display: block;
}
.accomplishments-section .card {
background: #fff;
border-top: 2px solid #248aaa;

View file

@ -2,6 +2,12 @@
padding-top: 0.5rem;
}
.achievements-section h1 > span{
margin-top: -55px; /* Size of fixed header */
padding-bottom:55px;
display: block;
}
#gallery .achievement-entry {
cursor: pointer;
margin-top: 5px;

View file

@ -19,6 +19,12 @@
text-align: right;
}
.education-section h1 > span{
margin-top: -55px; /* Size of fixed header */
padding-bottom:55px;
display: block;
}
.education-section .icon {
width: 2rem;
padding-left: 0;
@ -36,7 +42,7 @@
}
.education-section .education-info-table tr:first-child .hline {
height: 60%;
height: 65%;
top: auto;
}
@ -102,7 +108,9 @@
border: none;
color: #212529;
}
.education-section .taken-courses th.course-name-header{
width: 50%;
}
.education-section .taken-courses .hidden-course {
display: none;
transition: all 1s ease-out;

View file

@ -6,6 +6,12 @@
margin-top: 1.5rem !important;
}
.experiences-section h1 > span{
margin-top: -55px; /* Size of fixed header */
padding-bottom:55px;
display: block;
}
.experiences-section ul {
padding-left: 1rem;
}

View file

@ -45,7 +45,7 @@
margin-bottom: 10px;
}
.home .greeting {
.home .greeting, .home .greeting-subtitle {
color: #f9fafc;
}

View file

@ -2,6 +2,12 @@
padding-top: 1rem;
}
.recent-posts-section h1 > span{
margin-top: -55px; /* Size of fixed header */
padding-bottom:55px;
display: block;
}
.recent-posts-section .card .card-footer span {
font-size: 10pt;
color: #6c757d !important;

View file

@ -8,6 +8,12 @@
border-bottom: 0.0625rem solid rgba(0, 0, 0, 0.125);
}
.skills-section h1 > span{
margin-top: -55px; /* Size of fixed header */
padding-bottom:55px;
display: block;
}
.skills-section .skill-card-link {
text-decoration: none;
}
@ -19,6 +25,7 @@
.skills-section .card {
margin-top: 0.5rem;
margin-bottom: 0.5rem;
height: 100%;
}
.skills-section .card .card-body {
@ -57,7 +64,7 @@
padding-right: 0;
}
.skills-section .container {
max-width: 100%;
max-width: 95%;
}
}

1
static/js/auto-render.min.js vendored Normal file
View file

@ -0,0 +1 @@
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("katex")):"function"==typeof define&&define.amd?define(["katex"],t):"object"==typeof exports?exports.renderMathInElement=t(require("katex")):e.renderMathInElement=t(e.katex)}("undefined"!=typeof self?self:this,(function(e){return function(){"use strict";var t={771:function(t){t.exports=e}},r={};function n(e){var a=r[e];if(void 0!==a)return a.exports;var i=r[e]={exports:{}};return t[e](i,i.exports,n),i.exports}n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,{a:t}),t},n.d=function(e,t){for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)};var a={};return function(){n.d(a,{default:function(){return s}});var e=n(771),t=n.n(e),r=function(e,t,r){for(var n=r,a=0,i=e.length;n<t.length;){var o=t[n];if(a<=0&&t.slice(n,n+i)===e)return n;"\\"===o?n++:"{"===o?a++:"}"===o&&a--,n++}return-1},i=/^\\begin{/,o=function(e,t){for(var n,a=[],o=new RegExp("("+t.map((function(e){return e.left.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&")})).join("|")+")");-1!==(n=e.search(o));){n>0&&(a.push({type:"text",data:e.slice(0,n)}),e=e.slice(n));var l=t.findIndex((function(t){return e.startsWith(t.left)}));if(-1===(n=r(t[l].right,e,t[l].left.length)))break;var d=e.slice(0,n+t[l].right.length),s=i.test(d)?d:e.slice(t[l].left.length,n);a.push({type:"math",data:s,rawData:d,display:t[l].display}),e=e.slice(n+t[l].right.length)}return""!==e&&a.push({type:"text",data:e}),a},l=function(e,r){var n=o(e,r.delimiters);if(1===n.length&&"text"===n[0].type)return null;for(var a=document.createDocumentFragment(),i=0;i<n.length;i++)if("text"===n[i].type)a.appendChild(document.createTextNode(n[i].data));else{var l=document.createElement("span"),d=n[i].data;r.displayMode=n[i].display;try{r.preProcess&&(d=r.preProcess(d)),t().render(d,l,r)}catch(e){if(!(e instanceof t().ParseError))throw e;r.errorCallback("KaTeX auto-render: Failed to parse `"+n[i].data+"` with ",e),a.appendChild(document.createTextNode(n[i].rawData));continue}a.appendChild(l)}return a},d=function e(t,r){for(var n=0;n<t.childNodes.length;n++){var a=t.childNodes[n];if(3===a.nodeType){var i=l(a.textContent,r);i&&(n+=i.childNodes.length-1,t.replaceChild(i,a))}else 1===a.nodeType&&function(){var t=" "+a.className+" ";-1===r.ignoredTags.indexOf(a.nodeName.toLowerCase())&&r.ignoredClasses.every((function(e){return-1===t.indexOf(" "+e+" ")}))&&e(a,r)}()}},s=function(e,t){if(!e)throw new Error("No element provided to render");var r={};for(var n in t)t.hasOwnProperty(n)&&(r[n]=t[n]);r.delimiters=r.delimiters||[{left:"$$",right:"$$",display:!0},{left:"\\(",right:"\\)",display:!1},{left:"\\begin{equation}",right:"\\end{equation}",display:!0},{left:"\\begin{align}",right:"\\end{align}",display:!0},{left:"\\begin{alignat}",right:"\\end{alignat}",display:!0},{left:"\\begin{gather}",right:"\\end{gather}",display:!0},{left:"\\begin{CD}",right:"\\end{CD}",display:!0},{left:"\\[",right:"\\]",display:!0}],r.ignoredTags=r.ignoredTags||["script","noscript","style","textarea","pre","code","option"],r.ignoredClasses=r.ignoredClasses||[],r.errorCallback=r.errorCallback||console.error,r.macros=r.macros||{},d(e,r)}}(),a=a.default}()}));

View file

@ -63,28 +63,6 @@ var projectCards;
}
}
// ==================== Adjust height of the skills card =============
function adjustSkillCardsHeight() {
if (!isMobile) { // no need to adjust height for mobile devices
// primary skills
var skillCards = document.getElementById("primary-skills");
if (skillCards != null) {
var cardElems = skillCards.getElementsByClassName("card");
var maxHeight = 0;
for (let i = 0; i < cardElems.length; i++) {
if (cardElems.item(i).clientHeight > maxHeight) {
maxHeight = cardElems.item(i).clientHeight;
}
}
for (let i = 0; i < cardElems.length; i++) {
cardElems.item(i).setAttribute("style", "min-height: " + maxHeight + "px;");
}
}
}
}
$(window).on("load", function () {
adjustSkillCardsHeight();
});
// ================== Project cards =====================
// Add click action on project category selector buttons
@ -331,17 +309,17 @@ var projectCards;
this.parentElement.classList.toggle("col-sm-12");
if (this.children["SmallImage"].hasAttribute("active")) {
let mainLogo = this.children["LargeImage"].getAttribute("Style");
this.children["LargeImage"].setAttribute("active",true);
this.children["LargeImage"].setAttribute("active", true);
this.children["SmallImage"].removeAttribute("active");
this.setAttribute("Style", mainLogo);
} else {
let mainLogo = this.children["SmallImage"].getAttribute("Style");
this.children["SmallImage"].setAttribute("active",true);
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");
}
@ -360,7 +338,6 @@ var projectCards;
// re-render custom functions on window resize
window.onresize = function () {
detectDevice();
adjustSkillCardsHeight();
adjustRecentPostsHeight();
showAchievements();
};

1
static/js/katex.min.js vendored Normal file

File diff suppressed because one or more lines are too long

View file

@ -158,18 +158,16 @@ function toggleCourseVisibility(elem) {
}
// toggle hidden-course class from the third elements
for (var i = 0; i < courses.length; i++) {
if (i > 1 && courses[i].classList !== null) {
courses[i].classList.toggle("hidden-course");
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 current button visibility
elem.classList.toggle("hidden");
// toggle the alternate button visibility
if (elem.id === "show-more-btn"){
document.getElementById("show-less-btn").classList.toggle("hidden");
}else{
document.getElementById("show-more-btn").classList.toggle("hidden");
// toggle the buttons visibility
let buttonsToToggle = elem.parentNode.getElementsByClassName("show-more-btn");
for (const buttonToToggle of buttonsToToggle) {
buttonToToggle.classList.toggle("hidden");
}
}

View file

@ -1,5 +1,36 @@
"use strict";
const updateNavBar = () => {
if ($(document).scrollTop() > 40) {
$('#top-navbar').removeClass('initial-navbar');
$('#top-navbar').addClass('final-navbar shadow');
$('#navbar-toggler').removeClass('navbar-dark');
$('#navbar-toggler').addClass('navbar-light');
// get the main logo from hidden img tag
let mainLogo = document.getElementById("main-logo")
if (mainLogo !== null) {
let logoURL = mainLogo.getAttribute("src");
$('#logo').attr("src", logoURL);
}
} else {
$('#top-navbar').removeClass('final-navbar shadow');
$('#top-navbar').addClass('initial-navbar');
$('#navbar-toggler').removeClass('navbar-light');
$('#navbar-toggler').addClass('navbar-dark');
// get the inverted logo from hidden img tag
let invertedLogo = document.getElementById("inverted-logo")
if (invertedLogo !== null) {
let logoURL = invertedLogo.getAttribute("src");
$('#logo').attr("src", logoURL);
}
}
};
(function ($) {
jQuery(document).ready(function () {
@ -8,27 +39,7 @@
// When the user scrolls down 80px from the top of the document, resize the navbar's padding and the logo's font size
// $.onscroll = function() {scrollFunction()};
$(document).scroll(function () {
if ($(document).scrollTop() > 40) {
$('#top-navbar').removeClass('initial-navbar');
$('#top-navbar').addClass('final-navbar shadow');
$('#navbar-toggler').removeClass('navbar-dark');
$('#navbar-toggler').addClass('navbar-light');
// get the main logo from hidden img tag
let mainLogo = document.getElementById("main-logo").getAttribute("src");
$('#logo').attr("src", mainLogo);
} else {
$('#top-navbar').removeClass('final-navbar shadow');
$('#top-navbar').addClass('initial-navbar');
$('#navbar-toggler').removeClass('navbar-light');
$('#navbar-toggler').addClass('navbar-dark');
// get the inverted logo from hidden img tag
let invertedLogo = document.getElementById("inverted-logo").getAttribute("src");
$('#logo').attr("src", invertedLogo);
}
updateNavBar();
});
// Creates a click handler to collapse the navigation when
@ -39,6 +50,8 @@
$('.navbar-collapse').collapse('hide');
});
}
updateNavBar();
});
})(jQuery);

File diff suppressed because one or more lines are too long

View file

@ -4,7 +4,7 @@ description = "A simple hugo theme for personal portfolio"
homepage = "https://hugo-toha.github.io/"
license = "MIT"
licenselink = "https://github.com/hugo-toha/toha/blob/master/LICENSE"
min_version = "0.68.0"
min_version = "0.87.0"
name = "Toha"
features = [