Automatic Updates

This commit is contained in:
Vibhu2 2023-05-18 01:41:19 +05:30
parent 83d10c59ad
commit 751c99191e
230 changed files with 0 additions and 20229 deletions

View file

@ -1 +0,0 @@
node_modules

View file

@ -1,12 +0,0 @@
env:
browser: true
es2021: true
extends:
- standard
- plugin:no-jquery/all
- prettier
plugins:
- no-jquery
parserOptions:
ecmaVersion: latest
sourceType: module

19
.github/.kodiak.toml vendored
View file

@ -1,19 +0,0 @@
# .kodiak.toml
version = 1
[merge]
method = "squash" # default: "merge"
delete_branch_on_merge = true # default: false
optimistic_updates = true # default: true
prioritize_ready_to_merge = true # default: false
[merge.message]
title = "pull_request_title" # default: "github_default"
body = "github_default" # default: "github_default"
strip_html_comments = true # default: false
[update]
always = true # default: false
[approve]
auto_approve_usernames = ["hossainemruz"]

View file

@ -1,37 +0,0 @@
---
name: Bug
about: File a bug report.
title: 'bug'
---
## Expected Behavior
<!--- Tell us what should happen -->
## Current Behavior
<!--- Tell us what happens instead of the expected behavior -->
## Possible Solution
<!--- Not obligatory, but suggest a fix/reason for the bug, -->
## Steps to Reproduce
<!--- Provide a link to a live example, or an unambiguous set of steps to -->
<!--- reproduce this bug. Include code to reproduce, if relevant -->
1.
2.
3.
4.
### Screenshots
<!--- Provide any screenshots or links to deployments -->
### Browsers Affected
<!-- Check all that apply -->
- [ ] Chrome
- [ ] Firefox
- [ ] Edge
- [ ] Safari 11
- [ ] Safari 10
- [ ] IE 11
## Detailed Description
<!--- Provide a detailed description of the change or addition you are proposing -->

View file

@ -1,30 +0,0 @@
---
name: Feature Request
about: File a Feature Request.
title: 'Feature Request'
---
<!---
Before filing an issue, please review the following:
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
<!--
Provide a clear and concise description of what you want to happen.
-->
### Describe alternatives you've considered
<!--
Let us know about other solutions you've tried or researched.
-->
### Additional context
<!--
Is there anything else you can add about the proposal?
You might want to link to related issues here, if you haven't already.
-->

View file

@ -1,9 +0,0 @@
---
name: Question
about: Ask a general question.
---
<!--- Use this template for general questions. For bug reports or feature requests, please use those templates -->
### Question
<!--- Insert your question here. Please provide as much detail as possible. -->

View file

@ -1,10 +0,0 @@
### Issue
<!--- Insert a link to the associated github issue here. -->
### Description
<!-- Insert details about what the changes being proposed are. -->
### Test Evidence
<!-- Provide screenshot evidence and/or testing steps to validate the proposed changes. -->

View file

@ -1,13 +0,0 @@
# Update dependencies
version: 2
updates:
# Update the Github Action versions
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "daily"
labels:
- "dependencies"
- "automerge"
- "enhancement"

View file

@ -1,41 +0,0 @@
name-template: 'v$RESOLVED_VERSION'
tag-template: 'v$RESOLVED_VERSION'
template: |
I am very excited to announce [Hugo](https://gohugo.io/) theme [Toha](https://themes.gohugo.io/toha/) **v$RESOLVED_VERSION**. This release incorporates some improvements and fixes. Please, read the release note and update your theme to enjoy the new changes.
Thanks to $CONTRIBUTORS for their valuable contribution in this release.
$CHANGES
This release note has been generated automatically by [Release Drafter](https://github.com/marketplace/actions/release-drafter).
categories:
- title: 'Breaking Changes'
label: 'breaking-change'
- title: 'New Features & Enhancements'
labels:
- 'feature'
- 'enhancement'
- title: 'Translations'
label: 'translation'
- title: 'Bug Fixes'
labels:
- 'bug'
- 'bug-fix'
version-resolver:
major:
labels:
- 'breaking-change'
- 'breaking'
minor:
labels:
- 'feature'
- 'enhancement'
- 'translation'
patch:
labels:
- 'bug'
- 'bug-fix'

View file

@ -1,35 +0,0 @@
name: Autoprefixer
on:
push:
branches:
- main
jobs:
autoprefixer:
runs-on: ubuntu-latest
steps:
- name: Checkout to latest commit
uses: actions/checkout@v3.5.2
- name: Setup Node
uses: actions/setup-node@v3
with:
node-version: "15.x"
- name: Run autoprefixer
run: |
npm install postcss postcss-cli autoprefixer --save-dev
npm run autoprefixer
- name: Create Pull Request
uses: peter-evans/create-pull-request@v5
with:
branch: autoprefixer
branch-suffix: timestamp
commit-message: add vendor specific css prefixes
title: "Update and run autoprefixer"
body: |
This PR runs [postcss/autoprefixer](https://github.com/postcss/autoprefixer) to update vendor specific CSS prefixes.
>This PR has been created automatically by Github Action [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request).
labels: "enhancement,automerge"
reviewers: hossainemruz

View file

@ -1,34 +0,0 @@
name: Run Build
# Run action on pull request event
on: [pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
# checkout to the commit that has been pushed
- uses: actions/checkout@v3.5.2
with:
submodules: true # Fetch Hugo themes (true OR recursive)
fetch-depth: 0 # Fetch all history for .GitInfo and .Lastmod
- name: Setup Node
uses: actions/setup-node@v3
with:
node-version: 16
- 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

View file

@ -1,71 +0,0 @@
# For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
#
# ******** NOTE ********
# We have attempted to detect the languages in your repository. Please check
# the `language` matrix defined below to confirm you have the correct set of
# supported CodeQL languages.
#
name: "CodeQL"
on:
push:
branches: [ main ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ main ]
schedule:
- cron: '19 16 * * 2'
jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
permissions:
actions: read
contents: read
security-events: write
strategy:
fail-fast: false
matrix:
language: [ 'javascript' ]
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ]
# Learn more:
# https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed
steps:
- name: Checkout repository
uses: actions/checkout@v3.5.2
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
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.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
# queries: ./path/to/local/query, your-org/your-repo/queries@main
# 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@v2
# Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
# and modify them (or add more) to build your code if your project
# uses a compiled language
#- run: |
# make bootstrap
# make release
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v2

View file

@ -1,15 +0,0 @@
name: Release Drafter
# Run action on push in mater branch
on:
push:
branches:
- main
jobs:
update_release_draft:
runs-on: ubuntu-latest
steps:
# Create/Update release draft
- uses: release-drafter/release-drafter@v5.23.0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

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']"

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@v3.5.2
# run markdown linter
- uses: gaurav-nelson/github-action-markdown-link-check@1.0.15

View file

@ -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: String!) {
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: String!) {
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

@ -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: String!) {
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: String!) {
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: String!) {
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

7
.gitignore vendored
View file

@ -1,7 +0,0 @@
.vscode/
node_modules/
.DS_Store
.history/
resources/
public/
.hugo_build.lock

View file

@ -1,5 +0,0 @@
printWidth: 100
tabWidth: 2
semi: false
singleQuote: true
trailingComma: "all"

View file

@ -1 +0,0 @@
nodejs 18.12.1

21
LICENSE
View file

@ -1,21 +0,0 @@
MIT License
Copyright (c) 2020 Md. Emruz Hossain
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

240
README.md
View file

@ -1,240 +0,0 @@
**Warning: This theme is going through a heavy re-write. The `main` branch contains some undocumented changes. Please, do not use `main` branch. Use latest release instead. We will release a new version once the re-write is done and the changes are documented.**
# Toha
[![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.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)
![Open Issues](https://img.shields.io/github/issues/hugo-toha/toha?color=important)
![Open Pull Requests](https://img.shields.io/github/issues-pr/hugo-toha/toha?color=yellowgreen)
![License](https://img.shields.io/github/license/hugo-toha/toha)
![Security Headers](https://img.shields.io/security-headers?url=https%3A%2F%2Fhugo-toha.github.io%2F)
[![This project is using Percy.io for visual regression testing.](https://percy.io/static/images/percy-badge.svg)](https://percy.io/b7cb60ab/hugo-toha.github.io)
A [Hugo](https://gohugo.io/) theme for a personal portfolio with minimalist design and responsiveness.
![Thumbnail](https://raw.githubusercontent.com/hugo-toha/toha/main/images/screenshot.png)
- **Example Site:** [hugo-toha.github.io](https://hugo-toha.github.io)
- **Documentation:** [toha-guides.netlify.app](https://toha-guides.netlify.app/posts)
## Features
- Minimalist Design
- Fully Responsive
- Multiple Language Support
- Carefully Designed Cards
- Experience Timeline
- Achievement Gallery
- Sidebar to Categorize the Posts
- Short Codes
- 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/).
## Available Translations
- English
- বাংলা
- Français
- Indonesian
- Deutsch
- Español
- 简体中文
- हिन्दी
- Italiano
- 日本語
- 한국어
- русский
- 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).
## Screenshots
Here are few screenshots from the [example site](https://hugo-toha.github.io).
##### Home Page Sections
![Home Page Sections](https://raw.githubusercontent.com/hugo-toha/toha/main/images/about.png)
##### List Page
![List Page](https://raw.githubusercontent.com/hugo-toha/toha/main/images/list.png)
##### Reading Page
![Reading Page](https://raw.githubusercontent.com/hugo-toha/toha/main/images/single.png)
## Requirements
- Hugo Version 0.109.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
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.
If you want to start from scratch, then follow these steps:
##### 1. Initialize Hugo module on you repo
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>
```
##### 2. Add this theme as your module dependency
Now, in your `config.yaml` file, add a `module` section.
```yaml
# Use Hugo modules to add theme
module:
imports:
- path: github.com/hugo-toha/toha/v4
```
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 locally with the following steps:
##### 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/).
## Shortcodes
Here, are some handy shortcodes you can use with this theme.
- [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
You can contribute to this theme in various ways. You can report a [bug](https://github.com/hugo-toha/toha/issues/new?template=bug.md), file an [feature request](https://github.com/hugo-toha/toha/issues/new?template=feature_request.md), send a PR, [share your thoughts](https://github.com/hugo-toha/toha/issues/new?template=question.md) etc.
Pull requests are most welcome and I will be happy to review. Just follow the following principles:
- Keep it simple.
- Keep it consistent with the design.
- Use as few dependencies as possible.
- Have patience.
> I am not a web developer. I have created this theme for my personal needs. So, it is reasonable to have some flaws in the codes. Feel free to open issues and PRs acknowledging the problems.
## Local Development
For local development, you can make changes in the theme submodule and test the changes against your own site or this [example site](https://github.com/hugo-toha/hugo-toha.github.io) locally.
### Fork
At first, fork [this repo](https://github.com/hugo-toha/toha). Then, follow the following steps to use the forked theme for local developments,
**Using the forked theme in your own site:**
If you want to run your local development against your own site, follow the following steps:
```bash
# add the original theme as a submodule of your site if you haven't done already
$ git submodule add https://github.com/hugo-toha/toha.git themes/toha
# navigate into the toha theme folder
$ cd themes/toha
# add your own fork as a remote
$ git remote add my-fork https://github.com/<your-github-user>/toha
# create a new branch for your changes
$ git checkout -b my-feature-branch
```
**Using the forked theme in the example site:**
If your want to run your local development against this [example site](https://github.com/hugo-toha/hugo-toha.github.io), follow the following steps:
```bash
# clone the example site along with the submodules
$ git clone git@github.com:hugo-toha/hugo-toha.github.io.git --recursive
# navigate into the toha theme folder
$ cd themes/toha
# add your own fork as a remote
$ git remote add my-fork https://github.com/<your-github-user>/toha
# create a new branch for your changes
$ git checkout -b my-feature-branch
```
From there you can make changes to the source code of the theme while testing with your running Hugo site or the example site.
### Open a PR
When the changes look good, commit and push them to your fork.
```bash
# stage all the changes
$ git add .
# commit the changes with a meaning full commit message
$ git commit -m "A meaningful commit message"
# push the commit to your fork
$ git push my-fork my-feature-branch
```
Then, open a PR against `main` branch of [hugo-toha/toha](https://github.com/hugo-toha/toha) from the `my-feature-branch` branch of your own fork.
## Attribution
- Thanks [Anup Deb](https://dribbble.com/anupdeb) for his design guidance.
- Many of the illustrations have been taken from [iconscout](http://iconscout.com/).

View file

@ -1,6 +0,0 @@
---
hero: /images/background/sunrise.jpg
author:
name: Md. Emruz Hossain
image: /images/profile-image.jpg
---

Binary file not shown.

Before

Width:  |  Height:  |  Size: 108 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

View file

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" stroke-width="27" aria-label="Logo" viewBox="0 0 1493 391"><path fill="#ebb951" stroke="#fcd804" d="M1345.211 24.704l112.262 64.305a43 43 0 0 1 21.627 37.312v142.237a40 40 0 0 1-20.702 35.037l-120.886 66.584a42 42 0 0 1-41.216-.389l-106.242-61.155a57 57 0 0 1-28.564-49.4V138.71a64 64 0 0 1 31.172-54.939l98.01-58.564a54 54 0 0 1 54.54-.503z"/><path fill="#33ba91" stroke="#00a88a" d="M958.07 22.82l117.31 66.78a41 41 0 0 1 20.72 35.64v139.5a45 45 0 0 1-23.1 39.32L955.68 369.4a44 44 0 0 1-43.54-.41l-105.82-61.6a56 56 0 0 1-27.83-48.4V140.07a68 68 0 0 1 33.23-58.44l98.06-58.35a48 48 0 0 1 48.3-.46z"/><path fill="#0594cb" stroke="#0083c0" d="M575.26 20.97l117.23 68.9a40 40 0 0 1 19.73 34.27l.73 138.67a48 48 0 0 1-24.64 42.2l-115.13 64.11a45 45 0 0 1-44.53-.42l-105.83-61.6a55 55 0 0 1-27.33-47.53V136.52a63 63 0 0 1 29.87-53.59l99.3-61.4a49 49 0 0 1 50.6-.56z"/><path fill="#ff4088" stroke="#c9177e" d="M195.81 24.13l114.41 66.54a44 44 0 0 1 21.88 38.04v136.43a48 48 0 0 1-24.45 41.82L194.1 370.9a49 49 0 0 1-48.48-.23L41.05 310.48a53 53 0 0 1-26.56-45.93V135.08a55 55 0 0 1 26.1-46.8l102.8-63.46a51 51 0 0 1 52.42-.69z"/><path fill="#fff" d="M1320.72 89.15c58.79 0 106.52 47.73 106.52 106.51 0 58.8-47.73 106.52-106.52 106.52-58.78 0-106.52-47.73-106.52-106.52 0-58.78 47.74-106.51 106.52-106.51zm0 39.57c36.95 0 66.94 30 66.94 66.94a66.97 66.97 0 0 1-66.94 66.94c-36.95 0-66.94-29.99-66.94-66.94a66.97 66.97 0 0 1 66.93-66.94h.01zm-283.8 65.31c0 47.18-8.94 60.93-26.81 80.58-17.87 19.65-41.57 27.57-71.1 27.57-27 0-48.75-9.58-67.61-26.23-20.88-18.45-36.08-47.04-36.08-78.95 0-31.37 11.72-58.48 32.49-78.67 18.22-17.67 45.34-29.18 73.3-29.18 33.77 0 68.83 15.98 90.44 47.53l-31.73 26.82c-13.45-25.03-32.94-33.46-60.82-34.26-30.83-.88-64.77 28.53-62.25 67.75 1.4 21.94 11.65 59.65 60.96 66.57 25.9 3.63 55.36-24.02 55.36-39.04H944.4v-37.5h92.5V194l.02.03zm-562.6-94.65h42.29v112.17c0 17.8.49 29.33 1.47 34.61 1.69 8.48 4.81 14.37 11.17 19.5 6.37 5.13 13.8 6.59 24.84 6.59 11.2 0 14.96-1.74 20.66-6.6 5.69-4.85 9.12-9.46 10.28-16.53 1.15-7.07 3.07-18.8 3.07-35.18V99.38h42.28v108.78c0 24.86-1.07 42.43-3.21 52.69-2.14 10.27-6.08 18.93-11.82 26-5.74 7.06-13.42 12.69-23.03 16.88-9.62 4.19-22.16 6.28-37.65 6.28-18.7 0-32.87-2.28-42.52-6.85-9.66-4.57-17.3-10.5-22.9-17.8-5.61-7.3-9.3-14.95-11.08-22.96-2.58-11.86-3.88-29.38-3.88-52.55V99.38h.03zM93.91 299.92V92.7h43.35v75.48h71.92V92.7h43.48v207.22h-43.48v-90.61h-71.92v90.61z"/></svg>

Before

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

View file

@ -1,10 +0,0 @@
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"*": [
"*"
]
}
}
}

View file

@ -1,8 +0,0 @@
import 'popper.js'
import 'bootstrap'
import '@fortawesome/fontawesome-free/js/all'
import './core'
import './features'
import './sections'
import './pages'

View file

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

View file

@ -1,2 +0,0 @@
export * from './device'
export * from './insertScript'

View file

@ -1,14 +0,0 @@
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)
}

View file

@ -1,30 +0,0 @@
import { enable, disable, auto, setFetchMethod } from 'darkreader'
import * as params from '@params'
const darkreader = params?.darkmode?.darkreader || {}
const defaultColorScheme = darkreader.defaultcolorscheme || 'system'
const theme = {
brightness: 100,
contrast: 100,
sepia: 0,
...(darkreader.theme || {})
}
const fixes = {
invert: ['img[src$=".svg"]'],
...(darkreader.fixes || {})
}
setFetchMethod(window.fetch)
export function setSchemeDark () {
enable(theme, fixes)
}
export function setSchemeLight () {
disable()
}
export function setSchemeSystem () {
auto(theme, fixes)
}
export { defaultColorScheme }

View file

@ -1,60 +0,0 @@
const PERSISTENCE_KEY = 'darkmode:color-scheme'
async function getService () {
if (process.env.FEATURE_DARKMODE_DARKREADER === '1') {
return await import('./darkreader')
}
throw Error(' No service defined for feature darkMode.')
}
window.addEventListener('DOMContentLoaded', 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
}, {})
const {
setSchemeDark,
setSchemeLight,
setSchemeSystem,
defaultColorScheme
} = await getService()
function loadScheme () {
return localStorage.getItem(PERSISTENCE_KEY) || defaultColorScheme
}
function saveScheme (scheme) {
localStorage.setItem(PERSISTENCE_KEY, scheme)
}
function setScheme (newScheme) {
$icon.src = iconMap[newScheme]
if (newScheme === 'dark') {
setSchemeDark()
} else if (newScheme === 'system') {
setSchemeSystem()
} else {
setSchemeLight()
}
saveScheme(newScheme)
}
setScheme(loadScheme())
Array.from(menu.getElementsByTagName('a')).forEach((btn) => {
btn.addEventListener('click', () => {
const { scheme } = btn.dataset
setScheme(scheme)
})
})
})

View file

@ -1,165 +0,0 @@
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.pageNum = 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.pageNum.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))
})

View file

@ -1,3 +0,0 @@
if (process.env.FEATURE_FLOWCHART_MERMAID === '1') {
import('./mermaid')
}

View file

@ -1,7 +0,0 @@
import mermaid from 'mermaid'
import * as params from '@params'
const mermaidOptions = params.flowchart?.mermaid || {}
const options = Object.assign({}, mermaidOptions, { startOnLoad: true })
mermaid.initialize(options)

View file

@ -1,27 +0,0 @@
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')
}

View file

@ -1,3 +0,0 @@
if (process.env.FEATURE_MATH_KATEX === '1') {
import('./katex')
}

View file

@ -1,21 +0,0 @@
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 || {})
}
)
})

View file

@ -1,12 +0,0 @@
import hljs from 'highlight.js'
import * as params from '@params'
const defaultOptions = {
ignoreUnescapedHTML: true
}
hljs.configure({
...defaultOptions,
...(params.syntaxhighlight?.hljs || {}),
});
hljs.highlightAll();

View file

@ -1,3 +0,0 @@
if (process.env.FEATURE_SYNTAXHIGHLIGHT_HLJS === '1') {
import('./hljs')
}

View file

@ -1,48 +0,0 @@
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()
}
})
}
})

View file

@ -1,3 +0,0 @@
if (process.env.FEATURE_VIDEOPLAYER_PLYR === '1') {
import('./plyr')
}

View file

@ -1,5 +0,0 @@
import Plyr from 'plyr'
import * as params from '@params'
const options = params.videoplayer?.plyr
window.addEventListener('DOMContentLoaded', () => Plyr.setup('.video-player', options))

View file

@ -1,16 +0,0 @@
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
})
})

View file

@ -1,4 +0,0 @@
import './note'
import './search'
import './single'
import './home'

View file

@ -1,30 +0,0 @@
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)
}
})

View file

@ -1,133 +0,0 @@
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-query').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(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 doc = new DOMParser().parseFromString(output, 'text/html')
document.getElementById('search-results').append(doc)
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
}
})

View file

@ -1,60 +0,0 @@
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'
})
})
}
})

View file

@ -1,3 +0,0 @@
export const process = {
env: {}
}

View file

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

View file

@ -1,33 +0,0 @@
// 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 = [
document.getElementById('show-more-btn'),
document.getElementById('show-less-btn')
]
els.filter((el) => el != null).forEach((el) =>
el.addEventListener('click', ({ target }) =>
toggleCourseVisibility(target)))
})

View file

@ -1,7 +0,0 @@
import './navbar'
import './sidebar'
import './education'
import './achievements'
import './projects'
import './publications'

View file

@ -1,60 +0,0 @@
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('initial-navbar')
topNavbar?.classList.add('final-navbar', 'shadow')
navbarToggler?.classList.remove('navbar-dark')
navbarToggler?.classList.add('navbar-light')
// color theme selector a.k.a. dark mode
themeIcon?.classList.remove('navbar-icon-svg-dark')
// 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('final-navbar', 'shadow')
topNavbar?.classList.add('initial-navbar')
navbarToggler?.classList.remove('navbar-light')
navbarToggler?.classList.add('navbar-dark')
// color theme selector a.k.a. dark mode
themeIcon?.classList.add('navbar-icon-svg-dark')
// 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
document.addEventListener('scroll', 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')
}
})
})
updateNavBar()
})

View file

@ -1,19 +0,0 @@
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')

View file

@ -1,13 +0,0 @@
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'
})
}
})

View file

@ -1,38 +0,0 @@
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('hide')) {
sidebar.classList.remove('hide')
} 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 "hide" class
sidebar.classList.add('hide')
// if it is mobile device. then scroll to top.
const { isMobile } = getDeviceState()
if (isMobile && sidebar.classList.contains('hide')) {
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)
})

View file

@ -1,64 +0,0 @@
// loading bootstrap
// TODO: Refactor to use bootstrap sass variable for theming.
@import 'bootstrap/scss/bootstrap';
// 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';
// 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';
// 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 }}

View file

@ -1,20 +0,0 @@
/* Note: No need to invert when the screen is small because the navbar is
collapsed to a hamburger menu. */
@media only screen and (min-width: 1200px) {
.dynamic-navbar .navbar-icon-svg-dark {
filter: invert(1);
};
}
@media only screen and (min-width: 1200px) {
.dropdown-menu-icons-only {
width: 25px;
min-width: 3rem;
}
}
.menu-icon-center {
display: block;
margin-left: auto;
margin-right: auto;
}

View file

@ -1,95 +0,0 @@
body.kind-404 {
.navbar-toggler {
display: none;
}
.notFound {
padding-top: 5rem;
text-align: center;
padding-bottom: 8rem;
}
.notFound img {
height: 500px;
}
.notFound h1 {
font-style: italic;
}
.notFound .message {
position: absolute;
max-width: 20rem;
top: 40%;
left: 30%;
}
/* ============= Device specific fixes ======= */
/* Large screens such as TV */
@media only screen and (min-width: 1824px) {
}
/* Extra large devices (large desktops, 1200px and up) */
@media (max-width: 1400px) {
}
@media (max-width: 1200px) {
.notFound .message {
top: 50%;
left: 25%;
}
}
/* IPad Pro */
@media (max-width: 1024px) {
}
/* Large devices (desktops, 992px and up) */
@media (max-width: 992px) {
.notFound .message {
top: 46%;
left: 25%;
}
}
/* Medium devices (tablets, 768px and up) */
@media only screen and (max-width: 768px) {
.notFound img {
height: 400px;
}
.notFound .message {
top: 20rem;
left: 4rem;
}
}
/* Small devices (landscape phones, 576px and up) */
@media only screen and (max-width: 576px) {
.notFound img {
height: 250px;
}
.notFound .message {
top: 20rem;
left: 2rem;
}
}
/* iPhoneX, iPhone 6,7,8 */
@media only screen and (max-width: 375px) {
}
/* Galaxy S5, Moto G4 */
@media only screen and (max-width: 360px) {
}
/* iPhone 5 or before */
@media only screen and (max-width: 320px) {
}
}

View file

@ -1,251 +0,0 @@
// 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 {
.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;
}
.post-card-holder .post-card {
width: calc(100% / 3);
display: inline-flex;
}
.post-card-holder .card {
margin: 5px;
position: relative;
}
.post-card-holder .card .card-footer span {
font-size: 10pt;
color: #6c757d !important;
padding-top: 5px;
}
.post-card-holder .card .card-footer {
background: #fff;
margin-top: auto;
}
.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;
}
.post-card-holder .post-card-link {
text-decoration: none;
}
.paginator {
width: -moz-fit-content;
width: fit-content;
margin: auto;
}
.paginator .page-item > a {
color: #248aaa;
}
.paginator .page-item.active > a {
background-color: #248aaa;
color: #f9fafc;
}
.navbar-toggler {
display: none;
}
.pagination {
margin-left: auto;
margin-right: auto;
margin-top: 0.5rem;
margin-bottom: 0.5rem;
width: -moz-fit-content;
width: fit-content;
}
/* ============= Device specific fixes ======= */
/* Large screens such as TV */
@media only screen and (min-width: 1824px) {
.content-section {
padding-left: 1rem;
padding-right: 1rem;
flex: 85%;
max-width: 85%;
}
.post-card-holder .post-card {
width: calc(100% / 5);
}
}
/* Extra large devices (large desktops, 1200px and up) */
@media (max-width: 1400px) {
.post-card-holder {
margin-left: 0px;
}
.post-card-holder .post-card {
width: calc(100% / 3);
}
}
@media (max-width: 1200px) {
}
/* IPad Pro */
@media (max-width: 1024px) {
.wrapper {
padding-left: 0px;
padding-right: 0px;
}
.content-section {
padding: 0;
flex: 60%;
order: 2;
padding-bottom: 0.5rem;
}
.content {
overflow: hidden;
}
.container {
max-width: 100%;
}
.navbar-toggler {
display: block;
}
#toc-toggler {
visibility: hidden;
}
.navbar-collapse.lang-selector {
display: block !important;
position: absolute;
right: 0;
top: 0.5rem;
}
.post-card-holder {
margin: 0;
margin-top: 1.5rem;
padding-left: 0.5rem;
padding-right: 0.5rem;
position: relative;
transition: all ease-out 0.3s;
}
.post-card-holder .post-card {
width: calc(100% / 3);
}
.content-section.hide .post-card-holder .post-card {
width: 50%;
}
}
/* Large devices (desktops, 992px and up) */
@media (max-width: 992px) {
.post-card-holder .post-card {
width: 50%;
}
.content-section.hide .post-card-holder .post-card {
width: 100%;
}
}
/* Medium devices (tablets, 768px and up) */
@media only screen and (max-width: 768px) {
}
/* Small devices (landscape phones, 576px and up) */
@media only screen and (max-width: 576px) {
.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;
transition: all ease-out 0.3s;
}
.content-section.hide .content {
margin-top: 0;
padding-top: 0;
transition: all ease-out 0.3s;
}
.content-section.hide .post-card-holder {
margin-top: 0.5rem;
transition: all ease-out 0.3s;
}
.post-card-holder .post-card {
margin-left: 1%;
margin-right: 1%;
width: 98%;
}
}
/* iPhoneX, iPhone 6,7,8 */
@media only screen and (max-width: 375px) {
}
/* Galaxy S5, Moto G4 */
@media only screen and (max-width: 360px) {
}
/* iPhone 5 or before */
@media only screen and (max-width: 320px) {
}
}

View file

@ -1,517 +0,0 @@
/* ========= Colors ============
Heading: #1C2D41
Paragraph: #3C4858
Iconography: #8392A5
Secondary: #C0CCDA
Dirty Snow: #E5E9F2
Snow: #F9FAFC
Magenta: #7551E9
Orange: #FF7D51
Pink: #ED63D2
Green: #2DCA73
Yellow: #FFC212
*/
/*
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;
}
/*
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: #f9fafc;
font-family: "Mulish";
}
h1,
h2,
h3,
h4,
h5 {
color: #1c2d41;
}
strong {
color: #1c2d41 !important;
}
p {
color: #3c4858;
}
a {
color: #248aaa;
}
a:hover {
color: #207089;
}
.nav-button {
background-color: transparent;
border: 1px solid transparent;
border-radius: 0.25rem;
color: #8392a5;
}
.btn-dark {
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!important;
border-color: #248aaa!important;
transition: all 0.3s ease-out!important;
}
.btn-outline-info {
color: #2098d1 !important;
border-color: #2098d1 !important;
}
.btn-outline-info:hover {
background-color: #2098d1 !important;
color: #e5e9f2 !important;
}
.btn-info {
background-color: #248aaa !important;
color: #e5e9f2 !important;
}
.btn-info:hover {
background-color: #2098d1 !important;
color: #e5e9f2 !important;
}
.btn-link {
color: #248aaa;
}
.btn-link:hover {
color: #207089;
}
.bg-white {
background-color: #f9fafc !important;
}
.bg-dimmed {
background-color: #e5e9f2;
}
.anchor {
padding-top: 3.5rem;
}
img.center {
display: block;
margin-left: auto;
margin-right: auto;
}
img.left {
display: block;
margin-right: auto;
}
img.right {
display: block;
margin-left: auto;
}
.card {
box-shadow: none;
transition: all 0.3s ease-out;
overflow: hidden;
}
.card-img-sm {
width: 32px;
height: 32px;
}
.card-img-xs {
width: 24px;
height: 24px;
}
.card:hover,
.card:focus {
box-shadow: 0px 8px 56px rgba(15, 80, 100, 0.16);
border: 1px solid #fff;
transition: all 0.3s ease-out;
}
.card .card-head {
height: 172px;
display: flex;
justify-content: center;
align-items: center;
overflow: hidden;
}
.card-img-top {
transition: all 0.3s ease-out !important;
}
.card:hover .card-head .card-img-top,
.card:focus .card-head .card-img-top {
transition: all 0.3s ease-out;
transform: scale(1.2);
}
.card-body {
text-align: justify;
}
.sub-title {
color: #c0ccda;
font-size: 10pt;
}
.flag-icon {
width: 16px !important;
margin-top: 3px;
margin-right: 3px;
}
/* ====== table ====== */
table {
border-radius: 0.1rem;
background: #e5e9f2;
border: 1px solid #c0ccda;
padding: 0.1rem;
}
table tr {
height: 40px !important;
}
table th,
td {
padding: 0.5rem;
border-left: 1px solid #8392a5;
border-bottom: 1px solid #8392a5;
}
table thead tr {
background: #248aaa;
color: #e5e9f2;
}
tbody tr:nth-child(odd) {
background-color: #e5e9f2;
}
tbody tr:hover {
background: #c0ccda;
}
/* ====== don't apply css to tables inside gist ====== */
.gist table {
border-radius: unset;
background: unset;
border: unset;
padding: unset;
}
.gist table tr {
height: unset !important;
}
.gist table th,
td {
padding: unset;
border-left: unset;
border-bottom: unset;
}
.gist table thead tr {
background: unset;
color: unset;
}
.gist tbody tr:nth-child(odd) {
background-color: unset;
}
.gist tbody tr:hover {
background: unset;
}
.gist table td, .gist table tc{
border-right: 1px solid #eee;
}
figure {
border: 1px solid #c0ccda;
height: -moz-fit-content;
height: fit-content;
width: -moz-fit-content;
width: fit-content;
align-self: center;
margin: auto;
}
img {
max-width: 100%;
}
caption,
figcaption {
caption-side: bottom;
text-align: center;
color: #8392a5;
}
pre {
margin: 5px;
}
pre > code {
padding: 10px !important;
}
a.header-anchor {
text-decoration: none;
color: #1c2d41;
}
a.header-anchor i, a.header-anchor svg {
font-size: 10pt;
color: #3c4858;
display: none;
margin-left: 0.5rem;
}
a.header-anchor:hover i, a.header-anchor:hover svg {
display: inline-block;
}
a.header-anchor code {
color: #e83e8c;
}
.content ul > ol,
.content ol > ul,
.content ul > ul,
.content ol > ol,
.content li > ol,
.content li > ul {
-webkit-padding-start: 1rem;
padding-inline-start: 1rem;
}
kbd {
background-color: #248aaa !important;
color: #f9fafc;
}
mark {
background-color: #ffc21280;
}
/* ======= Paginator ========= */
.paginator {
width: -moz-fit-content;
width: fit-content;
margin: auto;
vertical-align: bottom;
}
.paginator .page-item > a {
color: #248aaa;
}
.paginator .page-item.active > a {
background-color: #248aaa;
color: #f9fafc;
}
/* --- FOOTER START --- */
.footer {
color: #8392a5 !important;
background-color: #1c2d41;
position: relative;
z-index: 9999;
}
.footer h5 {
color: #c0ccda;
}
.footer a {
color: #8392a5;
transition: all 0.3s ease-out;
}
.footer a:hover {
margin-left: 5px;
transition: all 0.3s ease-out;
}
.footer ul {
list-style: none;
padding-left: 0;
}
.footer li {
margin-top: 5px;
}
.footer hr {
background-color: #8392a5;
}
.footer p:first-child {
color: #c0ccda;
}
.footer input {
background-color: #c0ccda;
}
.footer input:focus {
background-color: #e5e9f2;
}
.footer #disclaimer{
color: #8392a5 !important;
text-align: justify;
}
.footer #disclaimer>strong{
color: #c0ccda!important;
}
.footer #theme {
color: #c0ccda;
}
.footer #theme img {
width: 32px;
}
.footer #hugo:hover {
margin-right: 5px;
transition: all 0.3s ease-out;
}
/* --- FOOTER END ---- */
/* ============= Device specific fixes ======= */
/* Large screens such as TV */
@media only screen and (min-width: 1824px) {
}
/* Extra large devices (large desktops, 1200px and up) */
@media (max-width: 1400px) {
}
@media (max-width: 1200px) {
}
/* IPad Pro */
@media (max-width: 1024px) {
.content-section .languageSelector {
position: fixed;
right: 0.5rem;
bottom: 1rem;
z-index: 10000000;
background-color: #f9fafc;
box-shadow: 0px 8px 56px rgba(15, 80, 100, 0.16);
}
pre {
margin: 0px;
}
code {
padding: 0px;
}
}
/* Large devices (desktops, 992px and up) */
@media (max-width: 992px) {
}
/* Medium devices (tablets, 768px and up) */
@media only screen and (max-width: 768px) {
}
/* Small devices (landscape phones, 576px and up) */
@media only screen and (max-width: 576px) {
.skills-section .container,
.projects-section .container,
.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;
}
pre {
margin: 0px;
}
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

@ -1,252 +0,0 @@
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{
padding-top: 2rem;
display: grid;
grid-gap: 0.5rem;
grid-template-columns: repeat(auto-fill, minmax(30rem,1fr));
grid-auto-rows: 20px;
}
/* .note-collection {
display: flex;
flex-wrap: wrap;
} */
.note-card {
align-self: flex-start;
}
.note-card .card{
margin: 0.5rem;
}
.note-title{
padding-left: 1rem;
color: #248aaa;
}
.note-title span{
background: #e5e9f2;
padding-right: 5px;
}
.note-title:before{
content:'';
display:inline-block;
width:98%;
height:100%;
margin-bottom:-26px;
border-bottom: 1px solid #248aaa;
}
.note-card .card-body{
padding: 1rem;
}
.note-card pre {
margin: 0;
border-radius: 3px;
}
/* .small-note{
max-width: 15rem;
}
.medium-note{
max-width: 25rem;
}
.large-note{
max-width: 40rem;
}
.huge-note{} */
.note-badge{
font-size: 10pt;
}
/* ============= Device specific fixes ======= */
/* Large screens such as TV */
@media only screen and (min-width: 1824px) {
.content-section {
padding-left: 1rem;
padding-right: 1rem;
flex: 85%;
max-width: 85%;
}
}
/* Extra large devices (large desktops, 1200px and up) */
@media (max-width: 1400px) {
.note-card-holder {
margin-left: 0px;
}
}
@media (max-width: 1200px) {
}
/* IPad Pro */
@media (max-width: 1024px) {
.wrapper {
padding-left: 0px;
padding-right: 0px;
}
.content-section {
padding: 0;
max-width: 100%;
order: 2;
padding-bottom: 0.5rem;
transition: all ease-out 0.3s;
}
.content-section.hide {
max-width: 60%;
transition: all ease-out 0.3s;
}
.content {
overflow: hidden;
}
.container {
max-width: 100%;
}
.navbar-toggler {
display: block;
}
#toc-toggler {
visibility: hidden;
}
.navbar-collapse.lang-selector {
display: block !important;
position: absolute;
right: 0;
top: 0.5rem;
}
.note-card-holder {
margin: 0;
margin-top: 1.5rem;
padding-left: 0.5rem;
padding-right: 0.5rem;
position: relative;
transition: all ease-out 0.3s;
}
.content-section.hide .note-card-holder{
grid-template-columns: repeat(auto-fill, minmax(30rem,1fr));
transition: all ease-out 0.3s;
}
}
/* Large devices (desktops, 992px and up) */
@media (max-width: 992px) {
.note-card-holder .note-card {
max-width: 100%;
min-width: 50%;
transition: all ease-out 0.3s;
}
.content-section.hide .note-card-holder .note-card {
max-width: 100%;
min-width: 100%;
transition: all ease-out 0.3s;
}
}
/* Medium devices (tablets, 768px and up) */
@media only screen and (max-width: 768px) {
}
/* Small devices (landscape phones, 576px and up) */
@media only screen and (max-width: 576px) {
.wrapper {
padding-left: 0px;
padding-right: 0px;
flex-flow: column;
overflow: hidden;
}
.content-section, .content-section.hide {
flex: 100%;
max-width: 100%;
padding-left: 0;
width: 100%;
transition: all ease-out 0.3s;
}
.content {
width: 100%;
padding-left: 0;
padding-right: 0;
transition: all ease-out 0.3s;
}
.content-section.hide .content {
margin-top: 0;
padding-top: 0;
transition: all ease-out 0.3s;
}
.content-section.hide .note-card-holder {
margin-top: 0.5rem;
transition: all ease-out 0.3s;
}
.note-card-holder .note-card, .content-section.hide .note-card-holder .note-card {
margin-left: 1%;
margin-right: 1%;
max-width: 98%;
min-width: 98%;
transition: all ease-out 0.3s;
}
}
/* iPhoneX, iPhone 6,7,8 */
@media only screen and (max-width: 375px) {
}
/* Galaxy S5, Moto G4 */
@media only screen and (max-width: 360px) {
}
/* iPhone 5 or before */
@media only screen and (max-width: 320px) {
}
}

View file

@ -1,517 +0,0 @@
body.kind-page {
background-color: #e5e9f2;
position: relative;
.read-area {
background-color: #f9fafc;
}
.wrapper {
display: flex;
padding: 0;
margin: 0;
width: 100%;
justify-content: space-between;
position: relative;
}
.content-section {
flex: 60%;
max-width: 60%;
order: 2;
/* background-color: lightseagreen; */
padding: 0;
position: relative;
padding-left: 1rem;
padding-right: 1rem;
}
.content {
background: #e5e9f2;
}
.toc-section {
flex: 20%;
order: 3;
max-width: 20%;
/* background-color: lightpink; */
transition: all ease-out 0.5s;
}
.toc-holder {
position: sticky;
top: 4.5rem;
overflow-x: hidden;
overflow-y: auto;
background-color: #f9fafc;
margin-right: 0.5rem;
/* box-shadow: 0px 8px 56px rgba(15, 80, 100, 0.16); */
transition: all ease-out 0.3s;
}
.toc {
position: relative;
padding-top: 0px;
transition: all ease-out 0.3s;
}
.toc nav {
padding-top: 0px;
margin-top: 0px;
display: flex;
flex-direction: column;
align-items: flex-start;
transition: all ease-out 0.3s;
}
.toc ul {
list-style: none;
padding-left: 0.5rem;
margin-bottom: 0rem;
width: 100%;
}
.toc .nav-link {
padding: 0;
padding-left: 0.5rem;
transition: all ease-out 0.3s;
color: #1c2d41;
}
.toc .nav-link:hover,
.toc .nav-link:focus,
.toc .nav-link.active {
padding-left: 1rem;
padding-right: 0.5rem;
background-color: #248aaa;
color: #f9f9f9;
transition: all ease-out 0.3s;
}
.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;
}
.author-profile img {
height: 120px;
width: 120px;
-o-object-fit: cover;
object-fit: cover;
background-color: #f9fafc;
padding: 5px;
}
.author-profile p {
color: #8392a5;
}
.title {
text-align: center;
}
.post-content {
padding: 15px;
}
.post-content h1,
h2 {
margin-top: 1.4rem;
}
.post-content h3,
h4,
h5,
h6 {
margin-top: 1.3rem;
}
.post-content blockquote {
border-left: 4px solid #248aaa;
background-color: #248baa15;
padding: 0.3rem;
padding-left: 1rem;
}
.post-content blockquote > p {
color: #3c4858;
margin-top: 0.5rem;
margin-bottom: 0.5rem;
}
.next-prev-navigator {
padding-left: 10px;
padding-right: 10px;
}
.next-prev-navigator a {
color: #2098d1;
transition: all 0.3s ease-out;
}
.next-prev-navigator a:hover {
color: #3c4858;
transition: all 0.3 ease-out;
}
.next-prev-navigator .next-article {
text-align: right;
}
.next-prev-navigator .next-article a {
transition: all 0.3s ease-out;
}
.next-prev-navigator .previous-article a {
transition: all 0.3s ease-out;
}
.next-prev-navigator .btn-outline-info {
color: #f9fafc !important;
border-color: #e5e9f2 !important;
background-color: #248aaa !important;
transition: all 0.3s ease-out;
}
.next-prev-navigator .next-prev-text {
white-space: break-spaces;
}
.next-prev-navigator .btn-outline-info:hover {
color: #3c4858 !important;
background-color: #e5e9f2 !important;
transition: all 0.3s ease-out;
}
.disquss {
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;
}
.languageSelector {
display: none;
}
#scroll-to-top {
position: fixed;
bottom: 0rem;
right: 1rem;
color: #248aaa;
font-size: 24pt;
z-index: 900000;
visibility: hidden;
}
#scroll-to-top i {
box-shadow: 0px 8px 56px rgba(15, 80, 100, 0.16);
background-color: #f9f9f9;
border-radius: 50%;
}
#scroll-to-top:hover {
color: #2098d1;
}
#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;
margin-left: 0.2em;
margin-right: 0.2em;
}
.taxonomy-terms a {
color: #f9fafc;
}
/* ============= Device specific fixes ======= */
/* Large screens such as TV */
@media only screen and (min-width: 1824px) {
.content-section {
flex: 65%;
max-width: 65%;
}
.content-section .container {
max-width: 100%;
}
}
/* Extra large devices (large desktops, 1200px and up) */
@media (max-width: 1400px) {
}
@media (max-width: 1200px) {
}
/* IPad Pro */
@media (max-width: 1024px) {
.wrapper {
padding-left: 0px;
padding-right: 0px;
}
.content-section {
padding: 0;
flex: 60%;
max-width: 100%;
order: 2;
overflow: hidden;
}
.content {
overflow: hidden;
}
.container {
max-width: 100%;
}
.toc-section {
order: 3;
flex: 0%;
max-width: 0%;
transition: all ease-out 0.3s;
}
.toc-section.hide {
flex: 40%;
max-width: 40%;
margin-left: 0.5rem;
transition: all ease-out 0.3s;
}
.toc-holder {
top: 3rem;
max-height: calc(100vh - 3rem);
}
.navbar-toggler {
display: block;
}
.navbar-collapse.lang-selector {
display: none;
}
.languageSelector {
display: block;
}
.hero-area {
height: 300px;
margin-top: 1rem;
}
.page-content {
padding: 0px;
}
.btn-improve-page {
margin-right: 1rem;
}
#disqus_thread,
.dsq-brlink {
padding: 5px;
}
}
/* Large devices (desktops, 992px and up) */
@media (max-width: 992px) {
}
/* Medium devices (tablets, 768px and up) */
@media only screen and (max-width: 768px) {
#scroll-to-top {
right: 8rem;
}
}
/* Small devices (landscape phones, 576px and up) */
@media only screen and (max-width: 576px) {
.wrapper {
padding: 0px;
display: flex;
flex-direction: column;
}
.content-section {
padding: 0;
flex: 100%;
max-width: 100%;
order: 3;
}
.toc-section {
order: 2;
width: 100%;
height: -moz-fit-content;
height: fit-content;
max-height: 0;
max-width: 100%;
transition: all ease-out 0.5s;
}
.toc-section.hide {
margin-top: 2.5rem;
position: relative;
/* height: fit-content; */
flex: 100%;
height: -moz-fit-content;
height: fit-content;
max-height: 200vh;
max-width: 100%;
margin-left: 0;
padding-right: 0;
box-shadow: 0px 8px 56px rgba(15, 80, 100, 0.16);
transition: all ease-out 0.5s;
}
.toc-holder {
max-height: 0;
margin-right: 0;
overflow: hidden;
transition: all ease-out 0.5s;
}
.toc-section.hide .toc-holder {
max-height: 200vh;
transition: all ease-out 0.5s;
}
.navbar-toggler {
display: block;
}
.hero-area {
height: 200px;
margin-top: 1rem;
}
.page-content {
padding: 0px;
}
.next-prev-navigator .previous-article {
text-align: center;
margin: 5px;
}
.next-prev-navigator .next-article {
text-align: center;
margin: 5px;
}
.previous-article a,
.next-article a {
width: 100%;
}
#disqus_thread,
.dsq-brlink {
padding: 5px;
}
}
/* iPhoneX, iPhone 6,7,8 */
@media only screen and (max-width: 375px) {
}
/* Galaxy S5, Moto G4 */
@media only screen and (max-width: 360px) {
}
/* iPhone 5 or before */
@media only screen and (max-width: 320px) {
}
}

View file

@ -1,298 +0,0 @@
.top-navbar {
position: fixed;
left: 0;
top: 0;
width: 100%;
height: 50px;
z-index: 99999;
transition: all 0.4s ease-out;
margin: 0px;
padding-top: 0.4rem;
text-align: center;
/* --- initial state start ------ */
&.initial-navbar {
background-color: transparent;
}
&.initial-navbar .navbar-brand {
color: #c0ccda;
font-weight: 600;
}
&.initial-navbar li a {
color: #c0ccda;
}
&.initial-navbar .navbar-nav .active,
&.initial-navbar li a:hover {
color: #f9fafc;
transition: all 0.3s ease-out;
transform: translateY(-2px);
}
.navbar-collapse {
margin-top: -5px;
}
.navbar-collapse.show,
.navbar-collapse.collapsing {
background-color: #f9fafc;
padding-left: 1rem;
}
/* --- initial state end ------ */
/* --- state after scroll start --- */
&.final-navbar {
background-color: #f9fafc;
color: #1c2d41;
transition: all 0.3s ease-out;
}
&.final-navbar .navbar-brand {
color: #1c2d41;
font-weight: 600;
}
&.final-navbar li a {
color: #1c2d41;
font-weight: 500;
transition: all 0.3s ease-out;
border-bottom: 2px solid#F9FAFC;
}
&.final-navbar .navbar-nav .active,
&.final-navbar li a:hover {
color: #2098d1;
transition: all 0.3s ease-out;
border-bottom: 2px solid #2098d1;
background: rgb(2, 0, 36);
background: linear-gradient(
90deg,
rgba(2, 0, 36, 1) 0%,
rgba(34, 136, 168, 0.1) 0%
);
}
.navbar-collapse.show li a,
.navbar-collapse.collapsing li a {
color: #1c2d41;
font-weight: 500;
transition: all 0.3s ease-out;
}
.navbar-collapse.show .navbar-nav .active,
.navbar-collapse.show .navbar-nav a:hover {
color: #2098d1;
}
#top-navbar-divider {
margin-top: 10px;
}
/* --- state after scroll end --- */
#top-navbar-divider {
background: rgba(192, 204, 218, 0.8);
height: 20px;
width: 2px;
}
&.final-navbar #top-navbar-divider {
background: rgba(0, 0, 0, 0.6);
}
#top-navbar-divider {
height: 20px;
width: 2px;
}
.navbar-brand img {
width: 42px;
padding: 5px;
margin-left: -10px;
}
.dropdown-menu {
box-shadow: 0px 8px 56px rgba(15, 80, 100, 0.16);
border: 1px solid #fff;
max-height: 0vh;
overflow: hidden;
display: block;
visibility: hidden;
transition: all 0.3s ease-out;
}
.dropdown-menu.show {
max-height: 100vh;
visibility: visible;
transition: all 0.3s ease-in;
}
.dropdown-menu a {
color: #1c2d41;
border-bottom: none;
}
.dropdown-menu a:hover {
color: #2098d1;
transition: all 0.3s ease-out;
border-bottom: none;
background: rgb(2, 0, 36);
background: linear-gradient(
90deg,
rgba(2, 0, 36, 1) 0%,
rgba(34, 136, 168, 0.2) 0%
);
}
/* ============= Device specific fixes ======= */
/* Large screens such as TV */
@media only screen and (min-width: 1824px) {
}
/* Extra large devices (large desktops, 1200px and up) */
@media (max-width: 1400px) {
}
@media (max-width: 1200px) {
}
/* IPad Pro */
@media (max-width: 1024px) {
height: -moz-fit-content;
height: fit-content;
padding-bottom: 0px;
padding-top: 0px;
.container {
max-width: 100%;
}
&.initial-navbar .navbar-nav .active,
&.initial-navbar li a:hover {
color: #2098d1;
transition: all 0.3s ease-out;
}
&.final-navbar .navbar-nav .active,
&.final-navbar li a:hover {
color: #2098d1;
transition: none;
border-bottom: none;
background: transparent;
}
&.final-navbar li a {
border-bottom: none;
}
.dropdown-divider {
border-top: 1px solid #c0ccda;
}
#top-navbar-divider {
background: rgba(0, 0, 0, 0.6);
height: auto;
width: auto;
margin-right: 15px;
}
.dropdown-menu {
text-align: center;
margin-bottom: 0.5rem;
margin-right: 1rem;
transition: all 0.3s ease-out;
}
}
/* Large devices (desktops, 992px and up) */
@media (max-width: 992px) {
&.initial-navbar .navbar-nav .active,
&.initial-navbar li a:hover {
color: #2098d1;
transition: all 0.3s ease-out;
}
&.final-navbar .navbar-nav .active,
&.final-navbar li a:hover {
color: #2098d1;
transition: none;
border-bottom: none;
background: transparent;
}
&.final-navbar li a {
border-bottom: none;
}
.dropdown-divider {
border-top: 1px solid #c0ccda;
}
#top-navbar-divider {
background: rgba(0, 0, 0, 0.6);
height: auto;
width: auto;
margin-right: 15px;
}
}
/* Medium devices (tablets, 768px and up) */
@media only screen and (max-width: 768px) {
&.initial-navbar .navbar-nav .active,
&.initial-navbar li a:hover {
color: #2098d1;
transition: all 0.3s ease-out;
}
&.final-navbar .navbar-nav .active,
&.final-navbar li a:hover {
color: #2098d1;
transition: none;
border-bottom: none;
background: transparent;
}
&.final-navbar li a {
border-bottom: none;
}
.dropdown-divider {
border-top: 1px solid #c0ccda;
}
#top-navbar-divider {
background: rgba(0, 0, 0, 0.6);
height: auto;
width: auto;
margin-right: 15px;
}
}
/* Small devices (landscape phones, 576px and up) */
@media only screen and (max-width: 576px) {
.dropdown-menu {
margin-left: -1rem;
margin-right: 0rem;
}
}
/* iPhoneX, iPhone 6,7,8 */
@media only screen and (max-width: 375px) {
}
/* Galaxy S5, Moto G4 */
@media only screen and (max-width: 360px) {
}
/* iPhone 5 or before */
@media only screen and (max-width: 320px) {
}
}

View file

@ -1,299 +0,0 @@
.sidebar-section {
order: 1;
flex: 20%;
max-width: 20%;
/* background-color: lightsalmon; */
transition: all ease-out 0.5s;
.sidebar-holder {
top: 2.5rem;
position: sticky;
background-color: #f9fafc;
height: 100vh;
overflow: auto;
box-shadow: 0px 8px 56px rgba(15, 80, 100, 0.16);
transition: all ease-out 0.3s;
}
.sidebar {
background: #f9fafc;
height: 100vh;
transition: all ease-out 0.3s;
}
.sidebar-tree {
padding-left: 1rem;
position: relative;
width: -moz-max-content;
width: max-content;
}
#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: #e5e9f2;
transition: all 0.3s ease-out;
border: 1px solid #c0ccda;
}
#search-box:focus {
border: 1pt solid #248aaa;
outline: none;
}
#list-heading {
padding-left: 0px !important;
}
.tree,
.tree ul {
margin: 0;
padding: 0;
list-style: none;
}
.tree li {
margin: 0;
padding: 0 1em;
line-height: 2em;
color: #3c4858;
position: relative;
}
.tree li a {
text-decoration: none;
color: #131313;
transition: all 0.3s ease-out;
}
.tree li a.active {
display: inline;
color: #2098d1;
}
.tree li a:hover {
margin-left: 3px;
color: #2098d1;
transition: all 0.3s ease-out;
}
.tree i {
color: #3c4858;
font-size: 12px;
margin-right: 5px;
}
.tree .shift-right {
margin-left: 5px;
}
.tree .active,
.tree .active > ul {
display: block;
}
.subtree {
padding-left: 0.7rem;
}
.subtree:before {
content: "";
display: block;
width: 0;
position: absolute;
top: 2.5rem;
left: 1.5rem;
bottom: 0.9rem;
border-left: 1px solid;
}
.subtree ul,
ul > ul {
position: relative;
padding-left: 0.5rem;
display: none;
}
.subtree ul:before {
content: "";
display: block;
width: 0;
position: absolute;
top: -10px;
left: 0.3rem;
bottom: 0.9rem;
border-left: 1px solid;
}
.subtree li:before {
content: "";
display: block;
width: 20px;
height: 0;
border-top: 1px solid;
margin-top: -1px;
position: absolute;
top: 18px;
left: -3px;
}
.subtree li:last-child:before {
background: #f9fafc;
height: auto;
top: 1.1rem;
bottom: 0;
}
a.focused {
color: #2098d1 !important;
}
/* ============= Device specific fixes ======= */
/* Large screens such as TV */
@media only screen and (min-width: 1824px) {
flex: 15%;
max-width: 15%;
.sidebar-holder {
max-width: 100%;
}
}
/* Extra large devices (large desktops, 1200px and up) */
@media (max-width: 1400px) {
.sidebar-holder {
max-width: 20rem;
}
}
@media (max-width: 1200px) {
.sidebar-tree {
margin-left: 1rem;
}
}
/* IPad Pro */
@media (max-width: 1024px) {
flex: 0%;
max-width: 0%;
min-height: 100vh;
transition: all ease-out 0.3s;
.sidebar-holder {
position: sticky;
top: 2.5rem;
width: 100%;
max-height: calc(100vh - 2.5rem);
}
&.hide {
flex: 30%;
max-width: 30%;
margin-right: 0.5rem;
transition: all ease-out 0.3s;
}
}
/* Large devices (desktops, 992px and up) */
@media (max-width: 992px) {
}
/* Medium devices (tablets, 768px and up) */
@media only screen and (max-width: 768px) {
flex: 0%;
max-width: 0%;
min-height: 100vh;
transition: all ease-out 0.3s;
.sidebar-holder {
position: sticky;
top: 2.5rem;
width: 100%;
}
&.hide {
flex: 40%;
max-width: 40%;
margin-right: 0.5rem;
transition: all ease-out 0.3s;
}
}
/* Small devices (landscape phones, 576px and up) */
@media only screen and (max-width: 576px) {
width: 100%;
min-height: 0;
max-height: 0;
max-width: 100%;
transition: all ease-out 0.5s;
&.hide {
margin-top: 2rem;
position: relative;
height: -moz-fit-content;
height: fit-content;
flex: none;
max-height: 300vh;
max-width: 100%;
transition: all ease-out 0.5s;
}
.sidebar-holder {
max-height: 0;
height: -moz-fit-content;
height: fit-content;
overflow: hidden;
max-width: 100%;
transition: all ease-out 0.5s;
}
&.hide .sidebar-holder {
max-height: 200vh;
transition: all ease-out 0.5s;
}
.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;
transition: all ease-out 0.5s;
}
.sidebar-tree {
margin-left: 0rem;
max-height: 0;
transition: all 0.5s ease-out;
}
&.hide .sidebar-tree {
max-height: 200vh;
transition: all 0.5s ease-out;
}
}
/* iPhoneX, iPhone 6,7,8 */
@media only screen and (max-width: 375px) {
}
/* Galaxy S5, Moto G4 */
@media only screen and (max-width: 360px) {
}
/* iPhone 5 or before */
@media only screen and (max-width: 320px) {
}
}

View file

@ -1,15 +0,0 @@
/* 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;
// }
// }

View file

@ -1,387 +0,0 @@
#about {
.social-link {
list-style: none;
padding: 0.2rem;
}
.social-link a {
font-size: 1.5rem;
color: #3c4858;
padding: 0.5rem;
}
.social-link a:hover {
color: #248aaa;
transition: all 0.3s ease-in;
}
.circular-progress {
width: 150px;
height: 150px;
line-height: 150px;
background: none;
margin: 0 auto;
box-shadow: none;
position: relative;
}
.circular-progress:after {
content: "";
width: 100%;
height: 100%;
border-radius: 50%;
border: 12px solid #f9fafc;
position: absolute;
top: 0;
left: 0;
}
.circular-progress > span {
width: 50%;
height: 100%;
overflow: hidden;
position: absolute;
top: 0;
z-index: 1;
}
.circular-progress .circular-progress-left {
left: 0;
}
.circular-progress .circular-progress-bar {
width: 100%;
height: 100%;
background: none;
border-width: 12px;
border-style: solid;
position: absolute;
top: 0;
}
.circular-progress .circular-progress-left .circular-progress-bar {
left: 100%;
border-top-right-radius: 80px;
border-bottom-right-radius: 80px;
border-left: 0;
transform-origin: center left;
}
.circular-progress .circular-progress-right {
right: 0;
}
.circular-progress .circular-progress-right .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 .circular-progress-value {
width: 90%;
height: 90%;
padding: 1rem;
border-radius: 50%;
background: #3c4858;
font-size: 1rem;
color: #f9fafc;
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 {
border-color: #048dff;
}
.circular-progress.yellow .circular-progress-bar {
border-color: #eebb4d;
}
.circular-progress.pink .circular-progress-bar {
border-color: #ed63d2;
}
.circular-progress.green .circular-progress-bar {
border-color: #2dca73;
}
.circular-progress.sky .circular-progress-bar {
border-color: #00c9e3;
}
.circular-progress.orange .circular-progress-bar {
border-color: #ff7c7c;
}
.circular-progress-percentage-50 {
animation: circular-loading-50 0s linear forwards 1.8s;
}
.circular-progress-percentage-55 {
animation: circular-loading-55 0.18s linear forwards 1.8s;
}
.circular-progress-percentage-60 {
animation: circular-loading-60 0.36s linear forwards 1.8s;
}
.circular-progress-percentage-65 {
animation: circular-loading-65 0.54s linear forwards 1.8s;
}
.circular-progress-percentage-70 {
animation: circular-loading-70 0.72s linear forwards 1.8s;
}
.circular-progress-percentage-75 {
animation: circular-loading-75 0.9s linear forwards 1.8s;
}
.circular-progress-percentage-80 {
animation: circular-loading-80 1.08s linear forwards 1.8s;
}
.circular-progress-percentage-85 {
animation: circular-loading-85 1.26s linear forwards 1.8s;
}
.circular-progress-percentage-90 {
animation: circular-loading-90 1.44s linear forwards 1.8s;
}
.circular-progress-percentage-95 {
animation: circular-loading-95 1.62s linear forwards 1.8s;
}
.circular-progress-percentage-100 {
animation: circular-loading-100 1.8s linear forwards 1.8s;
}
@keyframes circular-loading-50 {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(0deg);
}
}
@keyframes circular-loading-55 {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(18deg);
}
}
@keyframes circular-loading-60 {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(36deg);
}
}
@keyframes circular-loading-65 {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(54deg);
}
}
@keyframes circular-loading-70 {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(72deg);
}
}
@keyframes circular-loading-75 {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(90deg);
}
}
@keyframes circular-loading-80 {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(108deg);
}
}
@keyframes circular-loading-85 {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(126deg);
}
}
@keyframes circular-loading-90 {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(144deg);
}
}
@keyframes circular-loading-95 {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(162deg);
}
}
@keyframes circular-loading-100 {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(180deg);
}
}
@keyframes circular-loading-1 {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(180deg);
}
}
@keyframes circular-loading-2 {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(144deg);
}
}
@keyframes circular-loading-3 {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(90deg);
}
}
@keyframes circular-loading-4 {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(36deg);
}
}
@keyframes circular-loading-5 {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(126deg);
}
}
@media only screen and (max-width: 990px) {
.circular-progress {
margin-bottom: 20px;
}
}
/* ============= Device specific fixes ======= */
/* Large screens such as TV */
@media only screen and (min-width: 1824px) {
}
/* Extra large devices (large desktops, 1200px and up) */
@media (max-width: 1400px) {
}
@media (max-width: 1200px) {
}
/* IPad Pro */
@media (max-width: 1024px) {
}
/* Large devices (desktops, 992px and up) */
@media (max-width: 992px) {
}
/* Medium devices (tablets, 768px and up) */
@media only screen and (max-width: 768px) {
.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 */
@media only screen and (max-width: 375px) {
}
/* Galaxy S5, Moto G4 */
@media only screen and (max-width: 360px) {
}
/* 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,97 +0,0 @@
.accomplishments-section {
h1 > span{
margin-top: -55px; /* Size of fixed header */
padding-bottom:55px;
display: block;
}
.card {
background: #fff;
border-top: 2px solid #248aaa;
height: 100%;
}
.card .card-header {
background: none;
border: none;
}
.card .card-header .sub-title {
color: #8392a5;
margin-top: 0.4rem;
}
.card .sub-title :nth-child(2) {
float: none !important;
}
.card .card-body {
padding: 0;
padding-left: 1rem;
padding-right: 1rem;
}
.card .card-footer {
background: #fff;
border: none;
padding: 0;
padding-left: 0.7rem;
padding-bottom: 0.3rem;
}
/* ============= Device specific fixes ======= */
/* Large screens such as TV */
@media only screen and (min-width: 1824px) {
}
/* Extra large devices (large desktops, 1200px and up) */
@media (max-width: 1400px) {
}
@media (max-width: 1200px) {
}
/* IPad Pro */
@media (max-width: 1024px) {
width: 100%;
padding: 0;
padding-left: 0.2rem;
padding-right: 0.2rem;
.container {
max-width: 100%;
}
}
/* Large devices (desktops, 992px and up) */
@media (max-width: 992px) {
}
/* Medium devices (tablets, 768px and up) */
@media only screen and (max-width: 768px) {
}
/* Small devices (landscape phones, 576px and up) */
@media only screen and (max-width: 576px) {
flex: 100%;
max-width: 100%;
margin-top: 2rem;
}
/* iPhoneX, iPhone 6,7,8 */
@media only screen and (max-width: 375px) {
}
/* Galaxy S5, Moto G4 */
@media only screen and (max-width: 360px) {
}
/* iPhone 5 or before */
@media only screen and (max-width: 320px) {
}
}

View file

@ -1,180 +0,0 @@
.achievements-section {
.container {
padding-top: 0.5rem;
}
h1 > span{
margin-top: -55px; /* Size of fixed header */
padding-bottom:55px;
display: block;
}
#gallery .achievement-entry {
cursor: pointer;
margin-top: 5px;
margin-bottom: 5px;
margin-left: 7px;
margin-right: 7px;
z-index: 1;
background-color: #e5e9f2;
background-size: cover;
background-repeat: no-repeat;
background-position: center;
position: relative;
overflow: hidden;
transition: all 0.3s ease-out;
}
#gallery .achievement-entry:hover {
cursor: pointer;
z-index: 1;
transform: scale(1.1);
transition: all 0.3s ease-out;
z-index: 20000;
}
#gallery .achievement-details {
cursor: pointer;
z-index: 1;
opacity: 1 !important;
transition: none !important;
transform: none !important;
}
#gallery .img-type-1 {
height: 300px;
}
#gallery .img-type-2 {
height: 146px;
margin-bottom: 8px;
}
#gallery .svg-inline--fa {
color: #8392a5;
background-color: rgba(0, 0, 0, 0.7);
padding: 10px;
font-size: 0rem;
opacity: 0;
}
#gallery .achievement-entry:hover .svg-inline--fa {
opacity: 1;
font-size: 1rem;
transition: all 0.3s ease-out;
}
#gallery .img-type-1 .svg-inline--fa {
margin-top: 135px;
}
#gallery .img-type-2 .svg-inline--fa {
margin-top: 50px;
}
#gallery .achievement-details.img-type-1 .svg-inline--fa,
.achievement-details.img-type-2 .svg-inline--fa {
margin-top: 0px !important;
transition: none !important;
float: right;
}
#gallery .achievement-entry .title {
color: #e5e9f2;
background-color: rgba(0, 0, 0, 0.7);
opacity: 0;
padding: 5px;
position: absolute;
bottom: 0px;
width: 100%;
margin-bottom: 0px;
bottom: -5px;
}
#gallery .achievement-entry:hover .title {
opacity: 1;
bottom: 0px;
transition: bottom 0.3s ease-out;
}
#gallery .caption {
background-color: rgba(0, 0, 0, 0.7);
bottom: 1rem;
left: 1rem;
color: #e5e9f2;
padding: 15px;
position: absolute;
transition: all 0.3s ease-out;
}
#gallery .caption h4 {
color: #e5e9f2;
}
#gallery .caption p {
font-size: 16px;
font-weight: 300;
color: #e5e9f2;
}
.hidden {
display: none !important;
}
#gallery .achievement-details {
height: 75vh !important;
}
/* ============= Device specific fixes ======= */
/* Large screens such as TV */
@media only screen and (min-width: 1824px) {
}
/* Extra large devices (large desktops, 1200px and up) */
@media (max-width: 1400px) {
}
@media (max-width: 1200px) {
}
/* IPad Pro */
@media (max-width: 1024px) {
}
/* Large devices (desktops, 992px and up) */
@media (max-width: 992px) {
}
/* Medium devices (tablets, 768px and up) */
@media only screen and (max-width: 768px) {
.container {
max-width: 100%;
}
.col-md-6 {
flex: 50%;
width: 50%;
}
}
/* Small devices (landscape phones, 576px and up) */
@media only screen and (max-width: 576px) {
#gallery .achievement-entry:hover {
transform: scale(1.05);
}
}
/* iPhoneX, iPhone 6,7,8 */
@media only screen and (max-width: 375px) {
}
/* Galaxy S5, Moto G4 */
@media only screen and (max-width: 360px) {
}
/* iPhone 5 or before */
@media only screen and (max-width: 320px) {
}
}

View file

@ -1,199 +0,0 @@
.education-section {
.education-info-table {
width: 100%;
border: none;
background: none;
}
.education-info-table tr:hover {
background: none;
}
.education-info-table tr,
.education-info-table th,
.education-info-table td {
border: none;
padding: 0;
background: none;
}
.timeframe {
color: #8392a5;
text-align: right;
}
h1 > span{
margin-top: -55px; /* Size of fixed header */
padding-bottom:55px;
display: block;
}
.icon {
width: 2rem;
padding-left: 0;
padding-right: 0;
position: relative;
}
.icon .hline {
position: absolute;
left: 1rem;
top: 0;
background-color: #248aaa;
height: 100%;
width: 2px;
}
.education-info-table tr:first-child .hline {
height: 65%;
top: auto;
}
.education-info-table tr:last-child .hline {
height: 50%;
}
.icon-holder {
background-color: #248aaa;
border-radius: 50%;
height: 2rem;
width: 2rem;
padding: 0.2rem;
text-align: center;
color: #e5e9f2;
position: relative;
}
.line {
width: 5%;
padding-left: 0;
padding-right: 0;
}
.line div {
height: 2px;
/* width: 100%; */
margin-right: -1px;
background-color: #248aaa;
}
.degree-info {
padding: 1rem;
margin-top: 0.5rem;
margin-bottom: 0.5rem;
border-left: 2px solid #248aaa;
border-top: 1px solid #c0ccda;
border-bottom: 1px solid #c0ccda;
border-right: 1px solid #c0ccda;
border-radius: 5px;
}
.degree-info h5 {
margin-bottom: 0.3rem;
}
.taken-courses table {
margin-left: 1rem;
width: 100%;
transition: all 0.3s ease-out;
background: none;
border: none;
}
.taken-courses tr {
height: auto !important;
}
.taken-courses tr,
.taken-courses td,
.taken-courses th {
background: none;
border: none;
color: #212529;
}
.taken-courses th.course-name-header{
width: 50%;
}
.taken-courses .hidden-course {
display: none;
transition: all 1s ease-out;
}
.taken-courses ul {
margin-bottom: 0;
}
/*============ Education Alter Template =============*/
.education-alt .degree-info {
border-right: 2px solid #248aaa;
}
/* ============= Device specific fixes ======= */
/* Large screens such as TV */
@media only screen and (min-width: 1824px) {
}
/* Extra large devices (large desktops, 1200px and up) */
@media (max-width: 1400px) {
}
@media (max-width: 1200px) {
}
/* IPad Pro */
@media (max-width: 1024px) {
.container {
padding-left: 0;
}
}
/* Large devices (desktops, 992px and up) */
@media (max-width: 992px) {
}
/* Medium devices (tablets, 768px and up) */
@media only screen and (max-width: 768px) {
}
/* Small devices (landscape phones, 576px and up) */
@media only screen and (max-width: 576px) {
padding-left: 0.5rem;
padding-right: 0.5rem;
.container {
padding-right: 0;
}
.icon {
display: none;
}
.line {
display: none;
}
.timeframe {
text-align: left;
}
}
/* iPhoneX, iPhone 6,7,8 */
@media only screen and (max-width: 375px) {
}
/* Galaxy S5, Moto G4 */
@media only screen and (max-width: 360px) {
}
/* iPhone 5 or before */
@media only screen and (max-width: 320px) {
}
}

View file

@ -1,171 +0,0 @@
.experiences-section {
padding-bottom: 1rem;
.timeline {
margin-top: 1.5rem !important;
}
h1 > span{
margin-top: -55px; /* Size of fixed header */
padding-bottom:55px;
display: block;
}
ul {
padding-left: 1rem;
}
ul > li {
margin-left: 0;
color: #3c4858;
}
.designation {
font-weight: 600;
}
.circle {
padding: 13px 20px;
border-radius: 50%;
background-color: #248aaa;
color: #f9fafc;
max-height: 50px;
z-index: 2;
}
.timeline .vertical-line {
align-self: stretch;
}
.timeline .vertical-line::after {
content: "";
position: absolute;
border-left: 3px solid #248aaa;
z-index: 1;
height: 100%;
left: 50%;
}
.timeline .vertical-line:nth-child(even)::after {
left: calc(50% - 3px) !important;
}
.timeline .horizontal-line div {
padding: 0;
height: 40px;
}
.timeline .horizontal-line hr {
border-top: 3px solid #248aaa;
margin: 0;
top: 17px;
position: relative;
}
.timeline .horizontal-line .timeline-side-div {
display: flex;
overflow: hidden;
}
.timeline .horizontal-line .corner {
border: 3px solid #248aaa;
width: 100%;
position: relative;
border-radius: 15px;
}
.timeline .row:nth-child(2n) div:nth-child(1) .corner {
left: 50%;
top: -50%;
}
.timeline .row:nth-child(2n) div:nth-child(3) .corner {
left: -50%;
top: calc(50% - 3px);
}
.timeline .row:nth-child(4n) div:nth-child(1) .corner {
left: 50%;
top: calc(50% - 3px);
}
.timeline .row:nth-child(4n) div:nth-child(3) .corner {
left: -50%;
top: -50%;
}
/* ============= Device specific fixes ======= */
/* Large screens such as TV */
@media only screen and (min-width: 1824px) {
}
/* Extra large devices (large desktops, 1200px and up) */
@media (max-width: 1400px) {
}
@media (max-width: 1200px) {
}
/* IPad Pro */
@media (max-width: 1024px) {
}
/* Large devices (desktops, 992px and up) */
@media (max-width: 992px) {
}
/* Medium devices (tablets, 768px and up) */
@media only screen and (max-width: 768px) {
.container {
max-width: 100%;
}
}
/* Small devices (landscape phones, 576px and up) */
@media only screen and (max-width: 576px) {
}
/* iPhoneX, iPhone 6,7,8 */
@media only screen and (max-width: 375px) {
.timeline .row:nth-child(4n) div:nth-child(3) .corner {
left: -55%;
top: -50%;
}
.timeline .row:nth-child(2n) div:nth-child(1) .corner {
left: 55%;
top: -50%;
}
}
/* Galaxy S5, Moto G4 */
@media only screen and (max-width: 360px) {
.timeline .row:nth-child(4n) div:nth-child(3) .corner {
left: -60%;
top: -50%;
}
.timeline .row:nth-child(2n) div:nth-child(1) .corner {
left: 60%;
top: -50%;
}
}
/* iPhone 5 or before */
@media only screen and (max-width: 320px) {
.timeline .row:nth-child(4n) div:nth-child(3) .corner {
left: -64%;
top: -50%;
}
.timeline .row:nth-child(2n) div:nth-child(1) .corner {
left: 64%;
top: -50%;
}
}
}

View file

@ -1,151 +0,0 @@
.home {
height: 100vh;
padding: 0;
margin: 0;
color: #f9fafc;
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: #e7e7ef;
padding: 5px;
margin-bottom: 10px;
}
.greeting, .greeting-subtitle {
color: #f9fafc;
}
.typing-carousel {
font-size: 14pt;
color: #f0f0f0;
}
#typing-carousel-data {
display: none;
}
.arrow {
position: absolute;
color: #f9fafc;
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);
}
}
/* ============= Device specific fixes ======= */
/* Large screens such as TV */
@media only screen and (min-width: 1824px) {
}
/* Extra large devices (large desktops, 1200px and up) */
@media (max-width: 1400px) {
}
@media (max-width: 1200px) {
}
/* IPad Pro */
@media (max-width: 1024px) {
}
/* Large devices (desktops, 992px and up) */
@media (max-width: 992px) {
}
/* Medium devices (tablets, 768px and up) */
@media only screen and (max-width: 768px) {
}
/* Small devices (landscape phones, 576px and up) */
@media only screen and (max-width: 576px) {
.content {
position: relative;
top: -75%;
height: 65%;
}
img {
width: 140px;
max-width: 50%;
height: auto;
}
.greeting {
font-size: 24pt;
}
}
/* iPhoneX, iPhone 6,7,8 */
@media only screen and (max-width: 375px) {
}
/* Galaxy S5, Moto G4 */
@media only screen and (max-width: 360px) {
}
/* iPhone 5 or before */
@media only screen and (max-width: 320px) {
}
}

View file

@ -1,41 +0,0 @@
.pdf-viewer {
canvas {
border: 1px solid black;
direction: ltr;
width: 100%;
height: auto;
display: none;
}
.paginator {
display: none;
text-align: center;
margin-bottom: 10px;
}
.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); }
}
}

View file

@ -1,134 +0,0 @@
.projects-section {
.card .card-header {
background-color: #f9fafc;
padding: 0.7rem;
padding-bottom: 0rem;
text-decoration: none;
}
.card .card-img-xs {
margin-right: 0.5rem;
}
.card .card-header .sub-title span:nth-child(1) {
float: left;
}
.card .card-header .sub-title span:nth-child(2) {
float: right;
}
.card .card-body {
padding: 0.7rem;
}
.card .card-header .sub-title {
color: #8392a5;
margin-top: 0.4rem;
}
.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;
}
.project-btn-holder span {
justify-content: flex-end;
display: flex;
}
/* ============= Device specific fixes ======= */
/* Large screens such as TV */
@media only screen and (min-width: 1824px) {
}
/* Extra large devices (large desktops, 1200px and up) */
@media (max-width: 1400px) {
}
@media (max-width: 1200px) {
}
/* IPad Pro */
@media (max-width: 1024px) {
padding-left: 0;
padding-right: 0;
width: 100%;
.container {
max-width: 100%;
}
.filtr-projects {
padding: 0;
}
.filtr-item {
padding-left: 0.2rem;
padding-right: 0.2rem;
}
}
/* Large devices (desktops, 992px and up) */
@media (max-width: 992px) {
}
/* Medium devices (tablets, 768px and up) */
@media only screen and (max-width: 768px) {
padding-left: 0;
padding-right: 0;
width: 100%;
.container {
max-width: 100%;
}
.filtr-projects {
padding: 0;
}
.filtr-item {
padding-left: 0.2rem;
padding-right: 0.2rem;
flex: 50%;
max-width: calc(100% / 2 - 0.2rem);
}
}
/* Small devices (landscape phones, 576px and up) */
@media only screen and (max-width: 576px) {
.btn {
margin-top: 0.3125rem;
}
.filtr-item {
flex: 100%;
max-width: 100%;
}
}
/* iPhoneX, iPhone 6,7,8 */
@media only screen and (max-width: 375px) {
}
/* Galaxy S5, Moto G4 */
@media only screen and (max-width: 360px) {
}
/* iPhone 5 or before */
@media only screen and (max-width: 320px) {
}
}

View file

@ -1,149 +0,0 @@
.publications-section {
h1 > span{
margin-top: -55px; /* Size of fixed header */
padding-bottom:55px;
display: block;
}
.card {
background: #fff;
border-top: 2px solid #248aaa;
}
.card .card-header {
background: none;
border: none;
display: flex;
flex-direction: column;
}
.card .card-header .sub-title {
color: #8392a5;
margin-top: 0.4rem;
}
.card .sub-title :nth-child(2) {
float: right !important;
}
.card .card-body {
padding: 0;
padding-left: 1rem;
padding-right: 1rem;
}
.card .card-footer {
background: #fff;
border: none;
padding: 0;
padding-left: 1rem;
padding-right: 1rem;
padding-bottom: 0.3rem;
display: flex;
justify-content: space-between;
flex-wrap: wrap;
}
.card .card-footer .tags {
display: flex;
flex-direction: row;
justify-content: flex-start;
align-items: flex-start;
}
.card .card-footer .tags .badge {
cursor: auto;
}
.filtr-publications {
padding: 1rem !important;
}
.btn-group{
justify-content: center;
}
/* ============= Device specific fixes ======= */
/* Large screens such as TV */
@media only screen and (min-width: 1824px) {
}
/* Extra large devices (large desktops, 1200px and up) */
@media (max-width: 1400px) {
}
@media (max-width: 1200px) {
}
/* IPad Pro */
@media (max-width: 1024px) {
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;
}
}
/* Large devices (desktops, 992px and up) */
@media (max-width: 992px) {
}
/* Medium devices (tablets, 768px and up) */
@media only screen and (max-width: 768px) {
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;
flex: 100%;
}
}
/* Small devices (landscape phones, 576px and up) */
@media only screen and (max-width: 576px) {
.btn {
margin-top: 0.3125rem;
}
.pub-filtr-item {
flex: 100%;
max-width: 100%;
}
.card .card-footer .tags {
flex: 100%;
}
}
/* iPhoneX, iPhone 6,7,8 */
@media only screen and (max-width: 375px) {
}
/* Galaxy S5, Moto G4 */
@media only screen and (max-width: 360px) {
}
/* iPhone 5 or before */
@media only screen and (max-width: 320px) {
}
}

View file

@ -1,95 +0,0 @@
.recent-posts-section {
.container {
padding-top: 1rem;
}
h1 > span{
margin-top: -55px; /* Size of fixed header */
padding-bottom:55px;
display: block;
}
.card {
height: 100%;
min-height: 100%;
}
.card .card-footer span {
font-size: 10pt;
color: #6c757d !important;
padding-top: 5px;
}
.card .card-footer {
background: #fff;
margin-top: auto;
}
.post-card-link {
text-decoration: none;
}
.post-summary {
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
/* line-height: 24px; fallback */
max-height: 144px; /* fallback */
-webkit-line-clamp: 5; /* number of lines to show */
-webkit-box-orient: vertical;
}
/* ============= Device specific fixes ======= */
/* Large screens such as TV */
@media only screen and (min-width: 1824px) {
}
/* Extra large devices (large desktops, 1200px and up) */
@media (max-width: 1400px) {
}
@media (max-width: 1200px) {
}
/* IPad Pro */
@media (max-width: 1024px) {
}
/* Large devices (desktops, 992px and up) */
@media (max-width: 992px) {
}
/* Medium devices (tablets, 768px and up) */
@media only screen and (max-width: 768px) {
.container {
max-width: 100%;
}
.post-card {
width: 50%;
}
}
/* Small devices (landscape phones, 576px and up) */
@media only screen and (max-width: 576px) {
.post-card {
width: 100%;
}
}
/* iPhoneX, iPhone 6,7,8 */
@media only screen and (max-width: 375px) {
}
/* Galaxy S5, Moto G4 */
@media only screen and (max-width: 360px) {
}
/* iPhone 5 or before */
@media only screen and (max-width: 320px) {
}
}

View file

@ -1,86 +0,0 @@
.skills-section {
.card .card-head {
background-color: #f9fafc;
height: -moz-fit-content;
height: fit-content;
padding: 0.7rem;
padding-bottom: 0rem;
border-bottom: 0.0625rem solid rgba(0, 0, 0, 0.125);
}
h1 > span{
margin-top: -55px; /* Size of fixed header */
padding-bottom:55px;
display: block;
}
.skill-card-link {
text-decoration: none;
}
.card .card-img-xs {
margin-right: 0.5rem;
}
.card {
margin-top: 0.5rem;
margin-bottom: 0.5rem;
height: 100%;
}
.card .card-body {
padding-top: 0.2rem;
padding-left: 0.7rem;
}
/* ============= Device specific fixes ======= */
/* Large screens such as TV */
@media only screen and (min-width: 1824px) {
}
/* Extra large devices (large desktops, 1200px and up) */
@media (max-width: 1400px) {
}
@media (max-width: 1200px) {
}
/* IPad Pro */
@media (max-width: 1024px) {
}
/* Large devices (desktops, 992px and up) */
@media (max-width: 992px) {
}
/* Medium devices (tablets, 768px and up) */
@media only screen and (max-width: 768px) {
padding-left: 0;
padding-right: 0;
.container {
max-width: 95%;
}
}
/* Small devices (landscape phones, 576px and up) */
@media only screen and (max-width: 576px) {
}
/* iPhoneX, iPhone 6,7,8 */
@media only screen and (max-width: 375px) {
}
/* Galaxy S5, Moto G4 */
@media only screen and (max-width: 360px) {
}
/* iPhone 5 or before */
@media only screen and (max-width: 320px) {
}
}

View file

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

View file

@ -1,54 +0,0 @@
---
title: "অনুসন্ধানের ফলাফল"
date: 2010-06-08T08:06:25+06:00
weight: 999999
sitemap:
priority : 0.1
layout: "search"
url: search
---
This file exists solely to respond to /search URL with the related `search` layout template.
No content shown here is rendered, all content is based in the template layouts/page/search.html
Setting a very low sitemap priority will tell search engines this is not important content.
This implementation uses Fusejs and mark.js
## Initial setup
Search depends on additional output content type of JSON in config.toml
\```
[outputs]
home = ["HTML", "JSON"]
\```
## Searching additional fileds
To search additional fields defined in front matter, you must add it in 2 places.
### Edit layouts/_default/index.JSON
This exposes the values in /index.json
i.e. add `category`
\```
...
"contents":{{ .Content | plainify | jsonify }}
{{ if .Params.tags }},
"tags":{{ .Params.tags | jsonify }}{{end}},
"categories" : {{ .Params.categories | jsonify }},
...
\```
### Edit fuse.js options to Search
`assets/scripts/pages/search.js`
\```
keys: [
"title",
"contents",
"tags",
"categories"
]
\```

View file

@ -1,54 +0,0 @@
---
title: "Search Results"
date: 2010-06-08T08:06:25+06:00
weight: 999999
sitemap:
priority : 0.1
layout: "search"
url: search
---
This file exists solely to respond to /search URL with the related `search` layout template.
No content shown here is rendered, all content is based in the template layouts/page/search.html
Setting a very low sitemap priority will tell search engines this is not important content.
This implementation uses Fusejs and mark.js
## Initial setup
Search depends on additional output content type of JSON in config.toml
\```
[outputs]
home = ["HTML", "JSON"]
\```
## Searching additional fileds
To search additional fields defined in front matter, you must add it in 2 places.
### Edit layouts/_default/index.JSON
This exposes the values in /index.json
i.e. add `category`
\```
...
"contents":{{ .Content | plainify | jsonify }}
{{ if .Params.tags }},
"tags":{{ .Params.tags | jsonify }}{{end}},
"categories" : {{ .Params.categories | jsonify }},
...
\```
### Edit fuse.js options to Search
`assets/scripts/pages/search.js`
\```
keys: [
"title",
"contents",
"tags",
"categories"
]
\```

View file

@ -1,54 +0,0 @@
---
title: "Search Results"
date: 2010-06-08T08:06:25+06:00
weight: 999999
sitemap:
priority : 0.1
layout: "search"
url: search
---
This file exists solely to respond to /search URL with the related `search` layout template.
No content shown here is rendered, all content is based in the template layouts/page/search.html
Setting a very low sitemap priority will tell search engines this is not important content.
This implementation uses Fusejs and mark.js
## Initial setup
Search depends on additional output content type of JSON in config.toml
\```
[outputs]
home = ["HTML", "JSON"]
\```
## Searching additional fileds
To search additional fields defined in front matter, you must add it in 2 places.
### Edit layouts/_default/index.JSON
This exposes the values in /index.json
i.e. add `category`
\```
...
"contents":{{ .Content | plainify | jsonify }}
{{ if .Params.tags }},
"tags":{{ .Params.tags | jsonify }}{{end}},
"categories" : {{ .Params.categories | jsonify }},
...
\```
### Edit fuse.js options to Search
`assets/scripts/pages/search.js`
\```
keys: [
"title",
"contents",
"tags",
"categories"
]
\```

View file

@ -1,54 +0,0 @@
---
title: "Resultados de Búsqueda"
date: 2010-06-08T08:06:25+06:00
weight: 999999
sitemap:
priority : 0.1
layout: "search"
url: search
---
Este archivo existe únicamente para responder a la URL /search con la plantilla de diseño `search` relacionada.
No se muestra ningún contenido aquí, todo el contenido se basa en la plantilla layouts/page/search.html
Establecer una prioridad muy baja en el mapa del sitio le dirá a los motores de búsqueda que éste no es un contenido importante.
Esta implementación utiliza Fusejs, jquery y mark.js
## Configuración inicial
La búsqueda depende del tipo de contenido de salida adicional de JSON en config.toml
\```
[outputs]
home = ["HTML", "JSON"]
\```
## Búsqueda de archivos adicionales
Para buscar campos adicionales definidos en el front matter, debes añadirlo en 2 lugares.
### Editar layouts/_default/index.JSON
Esto expone los valores en /index.json: por ejemplo, para agregar `categories`
\```
...
"contents":{{ .Content | plainify | jsonify }}
{{ if .Params.tags }},
"tags":{{ .Params.tags | jsonify }}{{end}},
"categories" : {{ .Params.categories | jsonify }},
...
\```
### Editar las opciones de fuse.js para buscar
`assets/scripts/pages/search.js`
\```
keys: [
"title",
"contents",
"tags",
"categories"
]
\```

View file

@ -1,54 +0,0 @@
---
title: "Search Results"
date: 2010-06-08T08:06:25+06:00
weight: 999999
sitemap:
priority : 0.1
layout: "search"
url: search
---
This file exists solely to respond to /search URL with the related `search` layout template.
No content shown here is rendered, all content is based in the template layouts/page/search.html
Setting a very low sitemap priority will tell search engines this is not important content.
This implementation uses Fusejs and mark.js
## Initial setup
Search depends on additional output content type of JSON in config.toml
\```
[outputs]
home = ["HTML", "JSON"]
\```
## Searching additional fileds
To search additional fields defined in front matter, you must add it in 2 places.
### Edit layouts/_default/index.JSON
This exposes the values in /index.json
i.e. add `category`
\```
...
"contents":{{ .Content | plainify | jsonify }}
{{ if .Params.tags }},
"tags":{{ .Params.tags | jsonify }}{{end}},
"categories" : {{ .Params.categories | jsonify }},
...
\```
### Edit fuse.js options to Search
`assets/scripts/pages/search.js`
\```
keys: [
"title",
"contents",
"tags",
"categories"
]
\```

View file

@ -1,54 +0,0 @@
---
title: "Search Results"
date: 2010-06-08T08:06:25+06:00
weight: 999999
sitemap:
priority : 0.1
layout: "search"
url: search
---
This file exists solely to respond to /search URL with the related `search` layout template.
No content shown here is rendered, all content is based in the template layouts/page/search.html
Setting a very low sitemap priority will tell search engines this is not important content.
This implementation uses Fusejs and mark.js
## Initial setup
Search depends on additional output content type of JSON in config.toml
\```
[outputs]
home = ["HTML", "JSON"]
\```
## Searching additional fileds
To search additional fields defined in front matter, you must add it in 2 places.
### Edit layouts/_default/index.JSON
This exposes the values in /index.json
i.e. add `category`
\```
...
"contents":{{ .Content | plainify | jsonify }}
{{ if .Params.tags }},
"tags":{{ .Params.tags | jsonify }}{{end}},
"categories" : {{ .Params.categories | jsonify }},
...
\```
### Edit fuse.js options to Search
`assets/scripts/pages/search.js`
\```
keys: [
"title",
"contents",
"tags",
"categories"
]
\```

View file

@ -1,54 +0,0 @@
---
title: "Search Results"
date: 2010-06-08T08:06:25+06:00
weight: 999999
sitemap:
priority : 0.1
layout: "search"
url: search
---
This file exists solely to respond to /search URL with the related `search` layout template.
No content shown here is rendered, all content is based in the template layouts/page/search.html
Setting a very low sitemap priority will tell search engines this is not important content.
This implementation uses Fusejs and mark.js
## Initial setup
Search depends on additional output content type of JSON in config.toml
\```
[outputs]
home = ["HTML", "JSON"]
\```
## Searching additional fileds
To search additional fields defined in front matter, you must add it in 2 places.
### Edit layouts/_default/index.JSON
This exposes the values in /index.json
i.e. add `category`
\```
...
"contents":{{ .Content | plainify | jsonify }}
{{ if .Params.tags }},
"tags":{{ .Params.tags | jsonify }}{{end}},
"categories" : {{ .Params.categories | jsonify }},
...
\```
### Edit fuse.js options to Search
`assets/scripts/pages/search.js`
\```
keys: [
"title",
"contents",
"tags",
"categories"
]
\```

View file

@ -1,54 +0,0 @@
---
title: "Search Results"
date: 2010-06-08T08:06:25+06:00
weight: 999999
sitemap:
priority : 0.1
layout: "search"
url: search
---
This file exists solely to respond to /search URL with the related `search` layout template.
No content shown here is rendered, all content is based in the template layouts/page/search.html
Setting a very low sitemap priority will tell search engines this is not important content.
This implementation uses Fusejs and mark.js
## Initial setup
Search depends on additional output content type of JSON in config.toml
\```
[outputs]
home = ["HTML", "JSON"]
\```
## Searching additional fileds
To search additional fields defined in front matter, you must add it in 2 places.
### Edit layouts/_default/index.JSON
This exposes the values in /index.json
i.e. add `category`
\```
...
"contents":{{ .Content | plainify | jsonify }}
{{ if .Params.tags }},
"tags":{{ .Params.tags | jsonify }}{{end}},
"categories" : {{ .Params.categories | jsonify }},
...
\```
### Edit fuse.js options to Search
`assets/scripts/pages/search.js`
\```
keys: [
"title",
"contents",
"tags",
"categories"
]
\```

View file

@ -1,54 +0,0 @@
---
title: "Search Results"
date: 2010-06-08T08:06:25+06:00
weight: 999999
sitemap:
priority : 0.1
layout: "search"
url: search
---
This file exists solely to respond to /search URL with the related `search` layout template.
No content shown here is rendered, all content is based in the template layouts/page/search.html
Setting a very low sitemap priority will tell search engines this is not important content.
This implementation uses Fusejs and mark.js
## Initial setup
Search depends on additional output content type of JSON in config.toml
\```
[outputs]
home = ["HTML", "JSON"]
\```
## Searching additional fileds
To search additional fields defined in front matter, you must add it in 2 places.
### Edit layouts/_default/index.JSON
This exposes the values in /index.json
i.e. add `category`
\```
...
"contents":{{ .Content | plainify | jsonify }}
{{ if .Params.tags }},
"tags":{{ .Params.tags | jsonify }}{{end}},
"categories" : {{ .Params.categories | jsonify }},
...
\```
### Edit fuse.js options to Search
`assets/scripts/pages/search.js`
\```
keys: [
"title",
"contents",
"tags",
"categories"
]
\```

View file

@ -1,54 +0,0 @@
---
title: "Search Results"
date: 2010-06-08T08:06:25+06:00
weight: 999999
sitemap:
priority : 0.1
layout: "search"
url: search
---
This file exists solely to respond to /search URL with the related `search` layout template.
No content shown here is rendered, all content is based in the template layouts/page/search.html
Setting a very low sitemap priority will tell search engines this is not important content.
This implementation uses Fusejs and mark.js
## Initial setup
Search depends on additional output content type of JSON in config.toml
\```
[outputs]
home = ["HTML", "JSON"]
\```
## Searching additional fileds
To search additional fields defined in front matter, you must add it in 2 places.
### Edit layouts/_default/index.JSON
This exposes the values in /index.json
i.e. add `category`
\```
...
"contents":{{ .Content | plainify | jsonify }}
{{ if .Params.tags }},
"tags":{{ .Params.tags | jsonify }}{{end}},
"categories" : {{ .Params.categories | jsonify }},
...
\```
### Edit fuse.js options to Search
`assets/scripts/pages/search.js`
\```
keys: [
"title",
"contents",
"tags",
"categories"
]
\```

View file

@ -1,52 +0,0 @@
---
title: "Search Results"
sitemap:
priority : 0.1
layout: "search"
url: search
---
This file exists solely to respond to /search URL with the related `search` layout template.
No content shown here is rendered, all content is based in the template layouts/page/search.html
Setting a very low sitemap priority will tell search engines this is not important content.
This implementation uses Fusejs and mark.js
## Initial setup
Search depends on additional output content type of JSON in config.toml
\```
[outputs]
home = ["HTML", "JSON"]
\```
## Searching additional fileds
To search additional fields defined in front matter, you must add it in 2 places.
### Edit layouts/_default/index.JSON
This exposes the values in /index.json
i.e. add `category`
\```
...
"contents":{{ .Content | plainify | jsonify }}
{{ if .Params.tags }},
"tags":{{ .Params.tags | jsonify }}{{end}},
"categories" : {{ .Params.categories | jsonify }},
...
\```
### Edit fuse.js options to Search
`assets/scripts/pages/search.js`
\```
keys: [
"title",
"contents",
"tags",
"categories"
]
\```

View file

@ -1,54 +0,0 @@
---
title: "Search Results"
date: 2010-06-08T08:06:25+06:00
weight: 999999
sitemap:
priority : 0.1
layout: "search"
url: search
---
This file exists solely to respond to /search URL with the related `search` layout template.
No content shown here is rendered, all content is based in the template layouts/page/search.html
Setting a very low sitemap priority will tell search engines this is not important content.
This implementation uses Fusejs and mark.js
## Initial setup
Search depends on additional output content type of JSON in config.toml
\```
[outputs]
home = ["HTML", "JSON"]
\```
## Searching additional fileds
To search additional fields defined in front matter, you must add it in 2 places.
### Edit layouts/_default/index.JSON
This exposes the values in /index.json
i.e. add `category`
\```
...
"contents":{{ .Content | plainify | jsonify }}
{{ if .Params.tags }},
"tags":{{ .Params.tags | jsonify }}{{end}},
"categories" : {{ .Params.categories | jsonify }},
...
\```
### Edit fuse.js options to Search
`assets/scripts/pages/search.js`
\```
keys: [
"title",
"contents",
"tags",
"categories"
]
\```

View file

@ -1,54 +0,0 @@
---
title: "Search Results"
date: 2010-06-08T08:06:25+06:00
weight: 999999
sitemap:
priority : 0.1
layout: "search"
url: search
---
This file exists solely to respond to /search URL with the related `search` layout template.
No content shown here is rendered, all content is based in the template layouts/page/search.html
Setting a very low sitemap priority will tell search engines this is not important content.
This implementation uses Fusejs and mark.js
## Initial setup
Search depends on additional output content type of JSON in config.toml
\```
[outputs]
home = ["HTML", "JSON"]
\```
## Searching additional fileds
To search additional fields defined in front matter, you must add it in 2 places.
### Edit layouts/_default/index.JSON
This exposes the values in /index.json
i.e. add `category`
\```
...
"contents":{{ .Content | plainify | jsonify }}
{{ if .Params.tags }},
"tags":{{ .Params.tags | jsonify }}{{end}},
"categories" : {{ .Params.categories | jsonify }},
...
\```
### Edit fuse.js options to Search
`assets/scripts/pages/search.js`
\```
keys: [
"title",
"contents",
"tags",
"categories"
]
\```

View file

@ -1,54 +0,0 @@
---
title: "অনুসন্ধানের ফলাফল"
date: 2010-06-08T08:06:25+06:00
weight: 999999
sitemap:
priority : 0.1
layout: "search"
url: search
---
This file exists solely to respond to /search URL with the related `search` layout template.
No content shown here is rendered, all content is based in the template layouts/page/search.html
Setting a very low sitemap priority will tell search engines this is not important content.
This implementation uses Fusejs and mark.js
## Initial setup
Search depends on additional output content type of JSON in config.toml
\```
[outputs]
home = ["HTML", "JSON"]
\```
## Searching additional fileds
To search additional fields defined in front matter, you must add it in 2 places.
### Edit layouts/_default/index.JSON
This exposes the values in /index.json
i.e. add `category`
\```
...
"contents":{{ .Content | plainify | jsonify }}
{{ if .Params.tags }},
"tags":{{ .Params.tags | jsonify }}{{end}},
"categories" : {{ .Params.categories | jsonify }},
...
\```
### Edit fuse.js options to Search
`assets/scripts/pages/search.js`
\```
keys: [
"title",
"contents",
"tags",
"categories"
]
\```

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