Compare commits
127 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 3b0f9ca0ae | |||
| 06fd8e8919 | |||
| 02db3d3044 | |||
| fe14b0fbf5 | |||
| d3c2c6d1fc | |||
| 65c71f88ea | |||
| 58ef60dc65 | |||
| 2d43234614 | |||
| dedd6ca0b7 | |||
| 65de557d60 | |||
| 75845423c9 | |||
| bafd3034ae | |||
| 71d2db71d9 | |||
| 657c50d941 | |||
| 1f22a677ca | |||
| 6704952afa | |||
| 108bd93598 | |||
| 996346b249 | |||
| 2cfe671487 | |||
| 7c849ccf21 | |||
| f475ddcef8 | |||
| c3dc76652e | |||
| a78b031ca9 | |||
| 76ff0e4e40 | |||
| c3f0bd449e | |||
| a16652581b | |||
| 7175b0d21f | |||
| 33d91af120 | |||
| 1dc00ccb1e | |||
| 36f42bde9d | |||
| 33c10915a8 | |||
| 0e8e182e33 | |||
| 211a0785fa | |||
| 32c5c04632 | |||
| c52b1f8dcc | |||
| 1685b0a3c4 | |||
| bd10f18553 | |||
| 1ca18416d1 | |||
| 3ef375f488 | |||
| 747106edcc | |||
| 1f17e61ad6 | |||
| 799572c792 | |||
| ca85a71230 | |||
| ea9812ec7c | |||
| d61d39b9fb | |||
| 56615bfa43 | |||
| 35ccacacd2 | |||
| 237a79332a | |||
| 872e2119c2 | |||
| 2500174f94 | |||
| e2463abc4e | |||
| 79282571eb | |||
| 6585f002a9 | |||
| d32ac9a43e | |||
| 412376fdc1 | |||
| 63931ee8f6 | |||
| bb87ee29ac | |||
| eefb6166eb | |||
| 55dd90a0dd | |||
| fe5d8af56d | |||
| b81fd5078b | |||
| eb167e0155 | |||
| 8cb07ffeb4 | |||
| 27c3d0f4cc | |||
| ad3dee71c2 | |||
| bf6f63976b | |||
| 6c8ab46a73 | |||
| 3d6246f3c9 | |||
| 4a5f6ce426 | |||
| 20bc7dd71f | |||
| 65049cfbb7 | |||
| 869eba97a2 | |||
| ddbb4bf7ce | |||
| 2ae15e5235 | |||
| eacae1be3e | |||
| 43fe14bfa1 | |||
| 06ee3c1e1f | |||
| baa4774862 | |||
| a22474538d | |||
| 827a940995 | |||
| f6440e69d5 | |||
| a50f947384 | |||
| a1bff16050 | |||
| e8615c64e2 | |||
| c43da0089d | |||
| c9cebe5fe8 | |||
| 4025a6e321 | |||
| 3809d298ca | |||
| 974d4485ba | |||
| 91b18c0f04 | |||
| c89fe66332 | |||
| 8caa12724e | |||
| 309118c068 | |||
| be903cfd69 | |||
| fe647ce34f | |||
| 17128e9388 | |||
| de221c342d | |||
| 6f5e748b5b | |||
| e151dad461 | |||
| 711d4c7749 | |||
| 56e1bc5a69 | |||
| d3b20dc424 | |||
| 8ac46052e4 | |||
| 6b4b367c13 | |||
| abca4629bc | |||
| 4c6e7d404d | |||
| 2c5f991275 | |||
| 1e951589ef | |||
| 896db21fa5 | |||
| 9e8d0c401d | |||
| 5772734a34 | |||
| 69132a1dae | |||
| 46769a2b6d | |||
| d74549f870 | |||
| 42a0e5100a | |||
| bfa1e4c2b3 | |||
| a159ff65b1 | |||
| e4cda24f7f | |||
| 585c1ef847 | |||
| 2b9ce8fb29 | |||
| d93c49d82a | |||
| 91f6b69fa7 | |||
| 99a131fe43 | |||
| 4ebbb523a5 | |||
| d0a6eb4b28 | |||
| 5e172bca28 | |||
| 93f422675f |
@@ -0,0 +1 @@
|
||||
node_modules
|
||||
@@ -0,0 +1,12 @@
|
||||
env:
|
||||
browser: true
|
||||
es2021: true
|
||||
extends:
|
||||
- standard
|
||||
- plugin:no-jquery/all
|
||||
- prettier
|
||||
plugins:
|
||||
- no-jquery
|
||||
parserOptions:
|
||||
ecmaVersion: latest
|
||||
sourceType: module
|
||||
@@ -6,8 +6,8 @@ title: 'Feature Request'
|
||||
|
||||
<!---
|
||||
Before filing an issue, please review the following:
|
||||
Existing Features: https://github.com/hossainemruz/toha#features
|
||||
Project Roadmap: https://github.com/hossainemruz/toha#project-roadmap
|
||||
Existing Features: https://github.com/hugo-toha/toha#features
|
||||
Project Roadmap: https://github.com/hugo-toha/toha#project-roadmap
|
||||
-->
|
||||
|
||||
### Describe the solution you'd like
|
||||
|
||||
@@ -8,10 +8,10 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout to latest commit
|
||||
uses: actions/checkout@v2.4.0
|
||||
uses: actions/checkout@v3.2.0
|
||||
|
||||
- name: Setup Node
|
||||
uses: actions/setup-node@v2.5.1
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: "15.x"
|
||||
|
||||
@@ -21,7 +21,7 @@ jobs:
|
||||
npm run autoprefixer
|
||||
|
||||
- name: Create Pull Request
|
||||
uses: peter-evans/create-pull-request@v3.12.0
|
||||
uses: peter-evans/create-pull-request@v4
|
||||
with:
|
||||
branch: autoprefixer
|
||||
branch-suffix: timestamp
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
name: Run Build
|
||||
|
||||
# Run action on pull request event
|
||||
on: [pull_request]
|
||||
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-18.04
|
||||
steps:
|
||||
# checkout to the commit that has been pushed
|
||||
- uses: actions/checkout@v3.2.0
|
||||
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
|
||||
@@ -39,11 +39,11 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v2.4.0
|
||||
uses: actions/checkout@v3.2.0
|
||||
|
||||
# Initializes the CodeQL tools for scanning.
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v1
|
||||
uses: github/codeql-action/init@v2
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||
@@ -54,7 +54,7 @@ jobs:
|
||||
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
||||
# If this step fails, then you should remove it and run the build manually (see below)
|
||||
- name: Autobuild
|
||||
uses: github/codeql-action/autobuild@v1
|
||||
uses: github/codeql-action/autobuild@v2
|
||||
|
||||
# ℹ️ Command-line programs to run using the OS shell.
|
||||
# 📚 https://git.io/JvXDl
|
||||
@@ -68,4 +68,4 @@ jobs:
|
||||
# make release
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v1
|
||||
uses: github/codeql-action/analyze@v2
|
||||
|
||||
@@ -10,6 +10,6 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
# Create/Update release draft
|
||||
- uses: release-drafter/release-drafter@v5.16.1
|
||||
- uses: release-drafter/release-drafter@v5.22.0
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
@@ -8,6 +8,6 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
# checkout to latest commit
|
||||
- uses: actions/checkout@v2.4.0
|
||||
- uses: actions/checkout@v3.2.0
|
||||
# run markdown linter
|
||||
- uses: gaurav-nelson/github-action-markdown-link-check@1.0.13
|
||||
- uses: gaurav-nelson/github-action-markdown-link-check@1.0.14
|
||||
|
||||
@@ -106,7 +106,7 @@ jobs:
|
||||
|
||||
# Set the "Type" field to appropriate option
|
||||
gh api graphql -f query='
|
||||
mutation ($project: ID!, $item: ID!, $field: ID!, $opt_id: ID!) {
|
||||
mutation ($project: ID!, $item: ID!, $field: ID!, $opt_id: String!) {
|
||||
updateProjectNextItemField(input: {
|
||||
projectId: $project
|
||||
itemId: $item
|
||||
@@ -136,7 +136,7 @@ jobs:
|
||||
fi
|
||||
|
||||
gh api graphql -f query='
|
||||
mutation ($project: ID!, $item: ID!, $field: ID!, $status_id: ID!) {
|
||||
mutation ($project: ID!, $item: ID!, $field: ID!, $status_id: String!) {
|
||||
updateProjectNextItemField(input: {
|
||||
projectId: $project
|
||||
itemId: $item
|
||||
|
||||
@@ -109,7 +109,7 @@ jobs:
|
||||
|
||||
# Set the "Type" field to appropriate option
|
||||
gh api graphql -f query='
|
||||
mutation ($project: ID!, $item: ID!, $field: ID!, $opt_id: ID!) {
|
||||
mutation ($project: ID!, $item: ID!, $field: ID!, $opt_id: String!) {
|
||||
updateProjectNextItemField(input: {
|
||||
projectId: $project
|
||||
itemId: $item
|
||||
@@ -153,7 +153,7 @@ jobs:
|
||||
echo 'PR_STATUS='$OPTION_ID >> $GITHUB_ENV
|
||||
|
||||
gh api graphql -f query='
|
||||
mutation ($project: ID!, $item: ID!, $field: ID!, $status_id: ID!) {
|
||||
mutation ($project: ID!, $item: ID!, $field: ID!, $status_id: String!) {
|
||||
updateProjectNextItemField(input: {
|
||||
projectId: $project
|
||||
itemId: $item
|
||||
@@ -204,7 +204,7 @@ jobs:
|
||||
|
||||
# Update the Issue Status
|
||||
gh api graphql -f query='
|
||||
mutation ($project: ID!, $item: ID!, $field: ID!, $status_id: ID!) {
|
||||
mutation ($project: ID!, $item: ID!, $field: ID!, $status_id: String!) {
|
||||
updateProjectNextItemField(input: {
|
||||
projectId: $project
|
||||
itemId: $item
|
||||
|
||||
+3
-1
@@ -2,4 +2,6 @@
|
||||
node_modules/
|
||||
.DS_Store
|
||||
.history/
|
||||
resources/
|
||||
resources/
|
||||
public/
|
||||
.hugo_build.lock
|
||||
@@ -0,0 +1,5 @@
|
||||
printWidth: 100
|
||||
tabWidth: 2
|
||||
semi: false
|
||||
singleQuote: true
|
||||
trailingComma: "all"
|
||||
@@ -0,0 +1 @@
|
||||
nodejs 18.12.1
|
||||
@@ -30,8 +30,16 @@ A [Hugo](https://gohugo.io/) theme for a personal portfolio with minimalist desi
|
||||
- Achievement Gallery
|
||||
- Sidebar to Categorize the Posts
|
||||
- Short Codes
|
||||
- Google Analytics Support
|
||||
- Disqus Comment Support
|
||||
- Analytics Support
|
||||
- GoatCounter
|
||||
- counter.dev
|
||||
- Google Analytics
|
||||
- Matomo/Piwik
|
||||
- Comment Support
|
||||
- [Disqus](https://disqus.com/)
|
||||
- [Valine](https://valine.js.org/)
|
||||
- [Uttarances](https://utteranc.es/)
|
||||
- [Giscus](https://giscus.app/)
|
||||
|
||||
For more details about the features please visit [here](https://toha-guides.netlify.app/posts/features/).
|
||||
|
||||
@@ -49,7 +57,12 @@ For more details about the features please visit [here](https://toha-guides.netl
|
||||
- 日本語
|
||||
- 한국어
|
||||
- русский
|
||||
- suomi
|
||||
- Tiếng Việt
|
||||
- Turkish
|
||||
- Arabic (العربية)
|
||||
- Português
|
||||
- Català
|
||||
|
||||
To know more about how to translate your site, please visit [here](https://toha-guides.netlify.app/posts/translation/). Follow, the data and post format from this [example site](https://hugo-toha.github.io).
|
||||
|
||||
@@ -71,7 +84,7 @@ Here are few screenshots from the [example site](https://hugo-toha.github.io).
|
||||
|
||||
## Requirements
|
||||
|
||||
- Hugo Version 0.68.0 or higher
|
||||
- Hugo Version 0.87.0 or higher
|
||||
|
||||
## Usage
|
||||
|
||||
@@ -137,6 +150,9 @@ params:
|
||||
# specify whether you want to show Table of Contents in reading page
|
||||
enableTOC: true
|
||||
|
||||
# specify whether you want the language flags to be displayed.
|
||||
showFlags: true
|
||||
|
||||
# Provide newsletter configuration.
|
||||
# This feature has been implemented for Mailchimp only for now.
|
||||
# You can also hide it from the footer.
|
||||
@@ -165,10 +181,12 @@ When you run your site for first time, it will start with the default parameters
|
||||
|
||||
Here, are some handy shortcodes you can use with this theme.
|
||||
|
||||
- [Alert](https://toha-guides.netlify.app/posts/short-codes/alert/)
|
||||
- [Image](https://toha-guides.netlify.app/posts/short-codes/img/)
|
||||
- [Split](https://toha-guides.netlify.app/posts/short-codes/split/)
|
||||
- [Vertical Space](https://toha-guides.netlify.app/posts/short-codes/vs/)
|
||||
- [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)
|
||||
|
||||
## Project Roadmap
|
||||
|
||||
@@ -230,13 +248,14 @@ Here is the check list for portfolio mode,
|
||||
|
||||
- [ ] **Publications**
|
||||
|
||||
- [ ] Category Filter
|
||||
- [ ] Card
|
||||
- [ ] Abstract
|
||||
- [ ] Authors
|
||||
- [ ] Tags
|
||||
- [ ] Links
|
||||
- [ ] Gallery
|
||||
- [x] Category Filter
|
||||
- [x] Card
|
||||
- [x] Tags
|
||||
- [x] Links
|
||||
- [ ] Dedicated Page
|
||||
- [ ] Abstract
|
||||
- [ ] Authors
|
||||
- [ ] Gallery
|
||||
|
||||
- [x] **Accomplishment / Courses**
|
||||
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
import 'popper.js'
|
||||
import 'bootstrap'
|
||||
import '@fortawesome/fontawesome-free/js/all'
|
||||
|
||||
import './core'
|
||||
import './features'
|
||||
import './sections'
|
||||
import './pages'
|
||||
@@ -0,0 +1,36 @@
|
||||
let deviceState = {
|
||||
isMobile: false,
|
||||
isTablet: false,
|
||||
isLaptop: false
|
||||
}
|
||||
|
||||
function detectDeviceState () {
|
||||
if (window.innerWidth <= 425) {
|
||||
deviceState = {
|
||||
isMobile: true,
|
||||
isTablet: false,
|
||||
isLaptop: false
|
||||
}
|
||||
} else if (window.innerWidth <= 768) {
|
||||
deviceState = {
|
||||
isMobile: false,
|
||||
isTablet: true,
|
||||
isLaptop: false
|
||||
}
|
||||
} else {
|
||||
deviceState = {
|
||||
isMobile: false,
|
||||
isTablet: false,
|
||||
isLaptop: true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
detectDeviceState()
|
||||
window.addEventListener('resize', detectDeviceState)
|
||||
|
||||
// returns a copy of the device state
|
||||
// so other parts of code can't override this.
|
||||
export function getDeviceState () {
|
||||
return { ...deviceState }
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
export * from './device'
|
||||
export * from './insertScript'
|
||||
@@ -0,0 +1,14 @@
|
||||
export const insertScript = (id, src, onload) => {
|
||||
// script is already inserted, do nothing
|
||||
if (document.getElementById(id)) return
|
||||
|
||||
// insert script
|
||||
const firstScriptTag = document.getElementsByTagName('script')[0]
|
||||
const scriptTag = document.createElement('script')
|
||||
scriptTag.id = id
|
||||
scriptTag.onload = onload
|
||||
scriptTag.src = src
|
||||
scriptTag.defer = true
|
||||
scriptTag.async = true
|
||||
firstScriptTag.parentNode.insertBefore(scriptTag, firstScriptTag)
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
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 }
|
||||
@@ -0,0 +1,60 @@
|
||||
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)
|
||||
})
|
||||
})
|
||||
})
|
||||
@@ -0,0 +1,165 @@
|
||||
import { insertScript } from '../../core'
|
||||
|
||||
const PDFJS_BUNDLE = 'https://cdn.jsdelivr.net/npm/pdfjs-dist@3.0.279/build/pdf.min.js'
|
||||
const WORKER_BUNDLE = 'https://cdn.jsdelivr.net/npm/pdfjs-dist@3.0.279/build/pdf.worker.min.js'
|
||||
|
||||
class PDFViewer {
|
||||
constructor (el) {
|
||||
const {
|
||||
url,
|
||||
hidePaginator,
|
||||
hideLoader,
|
||||
scale,
|
||||
pageNum
|
||||
} = el.dataset
|
||||
|
||||
if (url == null) {
|
||||
throw new Error('Cannot load PDF! Attribute `data-url` is not set.')
|
||||
}
|
||||
|
||||
// props
|
||||
this.url = url
|
||||
this.hidePaginator = hidePaginator !== 'false'
|
||||
this.hideLoader = hideLoader !== 'false'
|
||||
this.scale = scale || 3
|
||||
|
||||
// initial state
|
||||
this.pageNum = parseInt(pageNum, 10) || 1
|
||||
this.loaded = false
|
||||
this.pageRendering = false
|
||||
this.pageNumPending = null
|
||||
|
||||
// DOM elements
|
||||
this.canvas = el.getElementsByClassName('pdf-canvas')[0]
|
||||
if (this.canvas == null) {
|
||||
throw new Error('canvas element not found!')
|
||||
};
|
||||
this.paginator = el.getElementsByClassName('paginator')[0]
|
||||
this.loadingWrapper = el.getElementsByClassName('loading-wrapper')[0]
|
||||
this.next = el.getElementsByClassName('next')[0]
|
||||
this.prev = el.getElementsByClassName('prev')[0]
|
||||
this.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))
|
||||
})
|
||||
@@ -0,0 +1,3 @@
|
||||
if (process.env.FEATURE_FLOWCHART_MERMAID === '1') {
|
||||
import('./mermaid')
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
import mermaid from 'mermaid'
|
||||
import * as params from '@params'
|
||||
|
||||
const mermaidOptions = params.flowchart?.mermaid || {}
|
||||
const options = Object.assign({}, mermaidOptions, { startOnLoad: true })
|
||||
|
||||
mermaid.initialize(options)
|
||||
@@ -0,0 +1,27 @@
|
||||
if (process.env.FEATURE_VIDEOPLAYER === '1') {
|
||||
import('./videoplayer')
|
||||
}
|
||||
|
||||
if (process.env.FEATURE_TOC === '1') {
|
||||
import('./toc')
|
||||
}
|
||||
|
||||
if (process.env.FEATURE_DARKMODE === '1') {
|
||||
import('./darkmode')
|
||||
}
|
||||
|
||||
if (process.env.FEATURE_FLOWCHART === '1') {
|
||||
import('./flowchart')
|
||||
}
|
||||
|
||||
if (process.env.FEATURE_SYNTAXHIGHLIGHT === '1') {
|
||||
import('./syntaxhighlight')
|
||||
}
|
||||
|
||||
if (process.env.FEATURE_MATH === '1') {
|
||||
import('./math')
|
||||
}
|
||||
|
||||
if (process.env.FEATURE_EMBEDPDF === '1') {
|
||||
import('./embedpdf')
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
if (process.env.FEATURE_MATH_KATEX === '1') {
|
||||
import('./katex')
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
import renderMathInElement from 'katex/contrib/auto-render'
|
||||
import * as params from '@params'
|
||||
|
||||
const defaultOptions = {
|
||||
delimiters: [
|
||||
{ left: '$$', right: '$$', display: true },
|
||||
{ left: '\\[', right: '\\]', display: true },
|
||||
{ left: '$', right: '$', display: false },
|
||||
{ left: '\\(', right: '\\)', display: false }
|
||||
]
|
||||
}
|
||||
|
||||
window.addEventListener('DOMContentLoaded', () => {
|
||||
renderMathInElement(
|
||||
document.body,
|
||||
{
|
||||
...defaultOptions,
|
||||
...(params.math?.katex || {})
|
||||
}
|
||||
)
|
||||
})
|
||||
@@ -0,0 +1,4 @@
|
||||
import hljs from 'highlight.js'
|
||||
import * as params from '@params'
|
||||
|
||||
hljs.highlightAll(params.syntaxhighlight?.hljs)
|
||||
@@ -0,0 +1,3 @@
|
||||
if (process.env.FEATURE_SYNTAXHIGHLIGHT_HLJS === '1') {
|
||||
import('./hljs')
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
import { getDeviceState } from '../../core'
|
||||
|
||||
// Toggle Table of Contents on click. Here, class "hide" open the toc
|
||||
function toggleTOC () {
|
||||
const toc = document.getElementById('toc-section')
|
||||
if (toc == null) {
|
||||
return
|
||||
}
|
||||
|
||||
if (toc.classList.contains('hide')) {
|
||||
toc.classList.remove('hide')
|
||||
} else {
|
||||
// if sidebar-section is open, then close it first
|
||||
const sidebar = document.getElementById('sidebar-section')
|
||||
if (sidebar != null && sidebar.classList.contains('hide')) {
|
||||
sidebar.classList.remove('hide')
|
||||
}
|
||||
// add "hide" class
|
||||
toc.classList.add('hide')
|
||||
// if it is mobile device. then scroll to top.
|
||||
const { isMobile } = getDeviceState()
|
||||
if (isMobile && toc.classList.contains('hide')) {
|
||||
document.body.scrollTop = 0
|
||||
document.documentElement.scrollTop = 0
|
||||
}
|
||||
}
|
||||
if (document.getElementById('hero-area') != null) {
|
||||
document.getElementById('hero-area').classList.toggle('hide')
|
||||
}
|
||||
}
|
||||
|
||||
window.addEventListener('DOMContentLoaded', () => {
|
||||
// bind click event to #toc-toggle in navbar-2.html
|
||||
const toggle = document.getElementById('toc-toggler')
|
||||
if (toggle) toggle.addEventListener('click', toggleTOC)
|
||||
|
||||
// hide TOC when user clicks on a TOC link.
|
||||
// Only applies if it's mobile.
|
||||
const toc = document.getElementById('TableOfContents')
|
||||
if (toc) {
|
||||
toc.addEventListener('click', (event) => {
|
||||
const { isMobile } = getDeviceState()
|
||||
if (isMobile && event.target.nodeName === 'A') {
|
||||
toggleTOC()
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
@@ -0,0 +1,3 @@
|
||||
if (process.env.FEATURE_VIDEOPLAYER_PLYR === '1') {
|
||||
import('./plyr')
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
import Plyr from 'plyr'
|
||||
import * as params from '@params'
|
||||
|
||||
const options = params.videoplayer?.plyr
|
||||
window.addEventListener('DOMContentLoaded', () => Plyr.setup('.video-player', options))
|
||||
@@ -0,0 +1,16 @@
|
||||
import { init } from 'ityped'
|
||||
|
||||
// =========== Typing Carousel ================
|
||||
// get data from hidden ul and set as typing data
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
const $ul = document.getElementById('typing-carousel-data')?.children
|
||||
if ($ul == null || $ul.length === 0) return
|
||||
|
||||
const strings = Array.from($ul).map($el => $el.textContent)
|
||||
|
||||
init('#ityped', {
|
||||
strings,
|
||||
startDelay: 200,
|
||||
loop: true
|
||||
})
|
||||
})
|
||||
@@ -0,0 +1,4 @@
|
||||
import './note'
|
||||
import './search'
|
||||
import './single'
|
||||
import './home'
|
||||
@@ -0,0 +1,30 @@
|
||||
import imagesLoaded from 'imagesloaded'
|
||||
|
||||
document.addEventListener('DOMContentLoaded', function () {
|
||||
function resizeGridItem (item) {
|
||||
const grid = document.getElementsByClassName('note-card-holder')[0]
|
||||
const rowHeight = parseInt(window.getComputedStyle(grid).getPropertyValue('grid-auto-rows'))
|
||||
const rowGap = parseInt(window.getComputedStyle(grid).getPropertyValue('grid-row-gap'))
|
||||
const rowSpan = Math.ceil((item.querySelector('.item').getBoundingClientRect().height + rowGap) / (rowHeight + rowGap))
|
||||
item.style.gridRowEnd = 'span ' + rowSpan
|
||||
}
|
||||
|
||||
function resizeAllGridItems () {
|
||||
const allItems = document.getElementsByClassName('note-card')
|
||||
for (let x = 0; x < allItems.length; x++) {
|
||||
resizeGridItem(allItems[x])
|
||||
}
|
||||
}
|
||||
|
||||
function resizeInstance (instance) {
|
||||
const item = instance.elements[0]
|
||||
resizeGridItem(item)
|
||||
}
|
||||
|
||||
window.addEventListener('resize', resizeAllGridItems)
|
||||
|
||||
const allItems = document.getElementsByClassName('note-card')
|
||||
for (let x = 0; x < allItems.length; x++) {
|
||||
imagesLoaded(allItems[x], resizeInstance)
|
||||
}
|
||||
})
|
||||
@@ -0,0 +1,133 @@
|
||||
import Fuse from 'fuse.js'
|
||||
import Mark from 'mark.js'
|
||||
|
||||
window.addEventListener('DOMContentLoaded', () => {
|
||||
const summaryInclude = 60
|
||||
|
||||
const fuseOptions = {
|
||||
shouldSort: true,
|
||||
includeMatches: true,
|
||||
threshold: 0.0,
|
||||
tokenize: true,
|
||||
location: 0,
|
||||
distance: 100,
|
||||
maxPatternLength: 32,
|
||||
minMatchCharLength: 1,
|
||||
keys: [
|
||||
{ name: 'title', weight: 0.8 },
|
||||
{ name: 'hero', weight: 0.7 },
|
||||
{ name: 'summary', weight: 0.6 },
|
||||
{ name: 'date', weight: 0.5 },
|
||||
{ name: 'contents', weight: 0.5 },
|
||||
{ name: 'tags', weight: 0.3 },
|
||||
{ name: 'categories', weight: 0.3 }
|
||||
]
|
||||
}
|
||||
|
||||
const searchQuery = param('keyword')
|
||||
if (searchQuery) {
|
||||
document.getElementById('search-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
|
||||
}
|
||||
})
|
||||
@@ -0,0 +1,60 @@
|
||||
window.addEventListener('DOMContentLoaded', () => {
|
||||
// =========== Add anchor to the headers ================
|
||||
function addAnchor (element) {
|
||||
element.innerHTML = `<a href="#${element.id}" class="header-anchor">${element.innerHTML}<sup><i class="fas fa-link fa-sm"></i></sup></a>`
|
||||
}
|
||||
|
||||
const postContent = document.getElementById('post-content')
|
||||
if (postContent != null) {
|
||||
const headerTypes = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6']
|
||||
for (let i = 0; i < headerTypes.length; i++) {
|
||||
const headers = postContent.querySelectorAll(headerTypes[i])
|
||||
if (headers) {
|
||||
headers.forEach(addAnchor)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// =============== Make TOC Compatible wit Bootstrap Scroll Spy ========
|
||||
// add "navbar" class to the "nav" element
|
||||
const toc = document.getElementById('TableOfContents')
|
||||
if (toc) {
|
||||
toc.classList.add('navbar')
|
||||
// add "nav-pills" class to the "ul" elements
|
||||
let elems = toc.getElementsByTagName('ul')
|
||||
for (let i = 0; i < elems.length; i++) {
|
||||
elems[i].classList.add('nav-pills')
|
||||
}
|
||||
// add "nav-item" class to the "li" elements
|
||||
elems = toc.getElementsByTagName('li')
|
||||
for (let i = 0; i < elems.length; i++) {
|
||||
elems[i].classList.add('nav-item')
|
||||
}
|
||||
// add "nav-link" class to the "a" elements
|
||||
elems = toc.getElementsByTagName('a')
|
||||
for (let i = 0; i < elems.length; i++) {
|
||||
elems[i].classList.add('nav-link')
|
||||
}
|
||||
}
|
||||
|
||||
// add scroll to top button
|
||||
const btn = document.getElementById('scroll-to-top')
|
||||
|
||||
if(btn) {
|
||||
window.addEventListener('scroll', function () {
|
||||
if (window.scrollY > 300) {
|
||||
btn.classList.add('show')
|
||||
} else {
|
||||
btn.classList.remove('show')
|
||||
}
|
||||
})
|
||||
|
||||
btn.addEventListener('click', function (e) {
|
||||
e.preventDefault()
|
||||
window.scrollTo({
|
||||
top: 0,
|
||||
behavior: 'smooth'
|
||||
})
|
||||
})
|
||||
}
|
||||
})
|
||||
@@ -0,0 +1,3 @@
|
||||
export const process = {
|
||||
env: {}
|
||||
}
|
||||
@@ -0,0 +1,220 @@
|
||||
import { getDeviceState } from '../core'
|
||||
|
||||
function fourColumRow (gallery, entries, i) {
|
||||
const entry1 = document.createElement('div')
|
||||
entry1.classList.add('col-lg-6', 'm-0', 'p-0')
|
||||
entry1.appendChild(entries[i].cloneNode(true))
|
||||
entry1.children[0].classList.add('img-type-1')
|
||||
gallery.appendChild(entry1)
|
||||
i++
|
||||
|
||||
const entry2 = document.createElement('div')
|
||||
entry2.classList.add('col-lg-3', 'm-0', 'p-0')
|
||||
entry2.appendChild(entries[i].cloneNode(true))
|
||||
entry2.children[0].classList.add('img-type-1')
|
||||
gallery.appendChild(entry2)
|
||||
i++
|
||||
|
||||
const entry3 = document.createElement('div')
|
||||
entry3.classList.add('col-lg-3', 'm-0', 'p-0')
|
||||
entry3.appendChild(entries[i].cloneNode(true))
|
||||
entry3.children[0].classList.add('img-type-2')
|
||||
i++
|
||||
entry3.appendChild(entries[i].cloneNode(true))
|
||||
entry3.children[1].classList.add('img-type-2')
|
||||
gallery.appendChild(entry3)
|
||||
i++
|
||||
}
|
||||
|
||||
function fourColumnReversedRow (gallery, entries, i) {
|
||||
const entry1 = document.createElement('div')
|
||||
entry1.classList.add('col-lg-3', 'm-0', 'p-0')
|
||||
entry1.appendChild(entries[i].cloneNode(true))
|
||||
entry1.children[0].classList.add('img-type-2')
|
||||
i++
|
||||
entry1.appendChild(entries[i].cloneNode(true))
|
||||
entry1.children[1].classList.add('img-type-2')
|
||||
gallery.appendChild(entry1)
|
||||
i++
|
||||
|
||||
const entry2 = document.createElement('div')
|
||||
entry2.classList.add('col-lg-3', 'm-0', 'p-0')
|
||||
entry2.appendChild(entries[i].cloneNode(true))
|
||||
entry2.children[0].classList.add('img-type-1')
|
||||
gallery.appendChild(entry2)
|
||||
i++
|
||||
|
||||
const entry3 = document.createElement('div')
|
||||
entry3.classList.add('col-lg-6', 'm-0', 'p-0')
|
||||
entry3.appendChild(entries[i].cloneNode(true))
|
||||
entry3.children[0].classList.add('img-type-1')
|
||||
gallery.appendChild(entry3)
|
||||
i++
|
||||
}
|
||||
|
||||
function threeColumnRow (gallery, entries, i) {
|
||||
console.log(i)
|
||||
const entry1 = document.createElement('div')
|
||||
entry1.classList.add('col-lg-6', 'col-md-6', 'm-0', 'p-0')
|
||||
entry1.appendChild(entries[i].cloneNode(true))
|
||||
entry1.children[0].classList.add('img-type-1')
|
||||
gallery.appendChild(entry1)
|
||||
i++
|
||||
|
||||
const entry2 = document.createElement('div')
|
||||
entry2.classList.add('col-lg-3', 'col-md-3', 'm-0', 'p-0')
|
||||
entry2.appendChild(entries[i].cloneNode(true))
|
||||
entry2.children[0].classList.add('img-type-1')
|
||||
gallery.appendChild(entry2)
|
||||
i++
|
||||
|
||||
const entry3 = document.createElement('div')
|
||||
entry3.classList.add('col-lg-3', 'col-md-3', 'm-0', 'p-0')
|
||||
entry3.appendChild(entries[i].cloneNode(true))
|
||||
entry3.children[0].classList.add('img-type-1')
|
||||
gallery.appendChild(entry3)
|
||||
i++
|
||||
}
|
||||
|
||||
function threeColumnReversedRow (gallery, entries, i) {
|
||||
const entry1 = document.createElement('div')
|
||||
entry1.classList.add('col-lg-3', 'col-md-3', 'm-0', 'p-0')
|
||||
entry1.appendChild(entries[i].cloneNode(true))
|
||||
entry1.children[0].classList.add('img-type-1')
|
||||
gallery.appendChild(entry1)
|
||||
i++
|
||||
|
||||
const entry2 = document.createElement('div')
|
||||
entry2.classList.add('col-lg-3', 'col-md-3', 'm-0', 'p-0')
|
||||
entry2.appendChild(entries[i].cloneNode(true))
|
||||
entry2.children[0].classList.add('img-type-1')
|
||||
gallery.appendChild(entry2)
|
||||
i++
|
||||
|
||||
const entry3 = document.createElement('div')
|
||||
entry3.classList.add('col-lg-6', 'col-md-3', 'm-0', 'p-0')
|
||||
entry3.appendChild(entries[i].cloneNode(true))
|
||||
entry3.children[0].classList.add('img-type-1')
|
||||
gallery.appendChild(entry3)
|
||||
i++
|
||||
}
|
||||
|
||||
function twoColumnRow (gallery, entries, i) {
|
||||
const entry1 = document.createElement('div')
|
||||
entry1.classList.add('col-6', 'm-0', 'p-0')
|
||||
entry1.appendChild(entries[i].cloneNode(true))
|
||||
entry1.children[0].classList.add('img-type-1')
|
||||
gallery.appendChild(entry1)
|
||||
i++
|
||||
|
||||
const entry2 = document.createElement('div')
|
||||
entry2.classList.add('col-6', 'm-0', 'p-0')
|
||||
entry2.appendChild(entries[i].cloneNode(true))
|
||||
entry2.children[0].classList.add('img-type-1')
|
||||
gallery.appendChild(entry2)
|
||||
i++
|
||||
}
|
||||
|
||||
function singleColumnRow (gallery, entries, i) {
|
||||
const entry1 = document.createElement('div')
|
||||
entry1.classList.add('col-12', 'm-0', 'p-0')
|
||||
entry1.appendChild(entries[i].cloneNode(true))
|
||||
entry1.children[0].classList.add('img-type-1')
|
||||
gallery.appendChild(entry1)
|
||||
i++
|
||||
}
|
||||
|
||||
function showAchievements () {
|
||||
const { isLaptop, isTablet } = getDeviceState()
|
||||
// show achievements from achievements-holder div
|
||||
const gallery = document.getElementById('gallery')
|
||||
if (gallery == null) {
|
||||
return
|
||||
}
|
||||
gallery.innerHTML = ''
|
||||
const entries = document.getElementById('achievements-holder').children
|
||||
let len = entries.length
|
||||
let i = 0
|
||||
let rowNumber = 1
|
||||
while (i < len) {
|
||||
if (isLaptop) {
|
||||
if (i + 4 <= len) {
|
||||
if (rowNumber % 2) {
|
||||
fourColumRow(gallery, entries, i)
|
||||
} else {
|
||||
fourColumnReversedRow(gallery, entries, i)
|
||||
}
|
||||
i += 4
|
||||
} else if (i + 3 <= len) {
|
||||
if (rowNumber % 2) {
|
||||
threeColumnRow(gallery, entries, i)
|
||||
} else {
|
||||
threeColumnReversedRow(gallery, entries, i)
|
||||
}
|
||||
i += 3
|
||||
} else if (i + 2 <= len) {
|
||||
twoColumnRow(gallery, entries, i)
|
||||
i += 2
|
||||
} else {
|
||||
singleColumnRow(gallery, entries, i)
|
||||
i++
|
||||
}
|
||||
} else if (isTablet) {
|
||||
if (i + 2 <= len) {
|
||||
twoColumnRow(gallery, entries, i)
|
||||
i += 2
|
||||
} else {
|
||||
singleColumnRow(gallery, entries, i)
|
||||
i++
|
||||
}
|
||||
} else {
|
||||
singleColumnRow(gallery, entries, i)
|
||||
i++
|
||||
}
|
||||
rowNumber++
|
||||
}
|
||||
|
||||
// show full image on click
|
||||
const elements = document.getElementsByClassName('achievement-entry')
|
||||
len = elements.length
|
||||
for (let i = 0; i < len; i++) {
|
||||
elements[i].onclick = function () {
|
||||
const achievements = document.getElementsByClassName('achievement-entry')
|
||||
const len2 = achievements.length
|
||||
for (let j = 0; j < len2; j++) {
|
||||
achievements[j].classList.toggle('hidden')
|
||||
}
|
||||
this.classList.toggle('achievement-details')
|
||||
this.classList.toggle('hidden')
|
||||
this.parentElement.classList.toggle('col-lg-12')
|
||||
this.parentElement.classList.toggle('col-md-12')
|
||||
this.parentElement.classList.toggle('col-sm-12')
|
||||
if (this.children.SmallImage.hasAttribute('active')) {
|
||||
const mainLogo = this.children.LargeImage.getAttribute('Style')
|
||||
this.children.LargeImage.setAttribute('active', true)
|
||||
this.children.SmallImage.removeAttribute('active')
|
||||
|
||||
this.setAttribute('Style', mainLogo)
|
||||
} else {
|
||||
const mainLogo = this.children.SmallImage.getAttribute('Style')
|
||||
this.children.SmallImage.setAttribute('active', true)
|
||||
this.children.LargeImage.removeAttribute('active')
|
||||
this.setAttribute('Style', mainLogo)
|
||||
}
|
||||
|
||||
if (this.children.caption !== undefined) {
|
||||
this.children.caption.classList.toggle('hidden')
|
||||
}
|
||||
if (this.children['enlarge-icon'] !== undefined) {
|
||||
this.getElementsByClassName('fa-xmark')[0].classList.toggle('hidden')
|
||||
this.getElementsByClassName('fa-magnifying-glass-plus')[0].classList.toggle('hidden')
|
||||
}
|
||||
if (this.children['achievement-title'] !== undefined) {
|
||||
this.children['achievement-title'].classList.toggle('hidden')
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
['DOMContentLoaded', 'resize'].forEach((event) =>
|
||||
document.addEventListener(event, showAchievements))
|
||||
@@ -0,0 +1,33 @@
|
||||
// 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)))
|
||||
})
|
||||
@@ -0,0 +1,7 @@
|
||||
import './navbar'
|
||||
import './sidebar'
|
||||
|
||||
import './education'
|
||||
import './achievements'
|
||||
import './projects'
|
||||
import './publications'
|
||||
@@ -0,0 +1,60 @@
|
||||
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()
|
||||
})
|
||||
@@ -0,0 +1,19 @@
|
||||
import Filterizr from 'filterizr'
|
||||
import { insertScript } from '../core'
|
||||
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
// ================== Project cards =====================
|
||||
|
||||
// setup project filter buttons
|
||||
const projectCardHolder = document.getElementById('project-card-holder')
|
||||
if (projectCardHolder != null && projectCardHolder.children.length !== 0) {
|
||||
// eslint-disable-next-line no-new
|
||||
new Filterizr('.filtr-projects', {
|
||||
layout: 'sameWidth',
|
||||
controlsSelector: '.project-filtr-control'
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
// dynamically insert github buttons script.
|
||||
insertScript('github-buttons', 'https://buttons.github.io/buttons.js')
|
||||
@@ -0,0 +1,13 @@
|
||||
import Filterizr from 'filterizr'
|
||||
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
const publicationCardHolder = document.getElementById('publication-card-holder')
|
||||
if (publicationCardHolder != null && publicationCardHolder.children.length !== 0) {
|
||||
// eslint-disable-next-line no-new
|
||||
new Filterizr('.filtr-publications', {
|
||||
layout: 'sameWidth',
|
||||
gridItemsSelector: '.pub-filtr-item',
|
||||
controlsSelector: '.pub-filtr-control'
|
||||
})
|
||||
}
|
||||
})
|
||||
@@ -0,0 +1,38 @@
|
||||
import { getDeviceState } from '../core/device'
|
||||
|
||||
// Toggle sidebar on click. Here, class "hide" open the sidebar
|
||||
function toggleSidebar () {
|
||||
const sidebar = document.getElementById('sidebar-section')
|
||||
if (sidebar == null) {
|
||||
return
|
||||
}
|
||||
if (sidebar.classList.contains('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)
|
||||
})
|
||||
@@ -15,7 +15,7 @@ No content shown here is rendered, all content is based in the template layouts/
|
||||
|
||||
Setting a very low sitemap priority will tell search engines this is not important content.
|
||||
|
||||
This implementation uses Fusejs, jquery and mark.js
|
||||
This implementation uses Fusejs and mark.js
|
||||
|
||||
|
||||
## Initial setup
|
||||
@@ -43,7 +43,7 @@ i.e. add `category`
|
||||
\```
|
||||
|
||||
### Edit fuse.js options to Search
|
||||
`static/js/search.js`
|
||||
`assets/scripts/pages/search.js`
|
||||
\```
|
||||
keys: [
|
||||
"title",
|
||||
|
||||
@@ -15,7 +15,7 @@ No content shown here is rendered, all content is based in the template layouts/
|
||||
|
||||
Setting a very low sitemap priority will tell search engines this is not important content.
|
||||
|
||||
This implementation uses Fusejs, jquery and mark.js
|
||||
This implementation uses Fusejs and mark.js
|
||||
|
||||
|
||||
## Initial setup
|
||||
@@ -43,7 +43,7 @@ i.e. add `category`
|
||||
\```
|
||||
|
||||
### Edit fuse.js options to Search
|
||||
`static/js/search.js`
|
||||
`assets/scripts/pages/search.js`
|
||||
\```
|
||||
keys: [
|
||||
"title",
|
||||
|
||||
@@ -15,7 +15,7 @@ No content shown here is rendered, all content is based in the template layouts/
|
||||
|
||||
Setting a very low sitemap priority will tell search engines this is not important content.
|
||||
|
||||
This implementation uses Fusejs, jquery and mark.js
|
||||
This implementation uses Fusejs and mark.js
|
||||
|
||||
|
||||
## Initial setup
|
||||
@@ -43,7 +43,7 @@ i.e. add `category`
|
||||
\```
|
||||
|
||||
### Edit fuse.js options to Search
|
||||
`static/js/search.js`
|
||||
`assets/scripts/pages/search.js`
|
||||
\```
|
||||
keys: [
|
||||
"title",
|
||||
|
||||
@@ -43,7 +43,7 @@ Esto expone los valores en /index.json: por ejemplo, para agregar `categories`
|
||||
\```
|
||||
|
||||
### Editar las opciones de fuse.js para buscar
|
||||
`static/js/search.js`
|
||||
`assets/scripts/pages/search.js`
|
||||
\```
|
||||
keys: [
|
||||
"title",
|
||||
|
||||
@@ -15,7 +15,7 @@ No content shown here is rendered, all content is based in the template layouts/
|
||||
|
||||
Setting a very low sitemap priority will tell search engines this is not important content.
|
||||
|
||||
This implementation uses Fusejs, jquery and mark.js
|
||||
This implementation uses Fusejs and mark.js
|
||||
|
||||
|
||||
## Initial setup
|
||||
@@ -43,7 +43,7 @@ i.e. add `category`
|
||||
\```
|
||||
|
||||
### Edit fuse.js options to Search
|
||||
`static/js/search.js`
|
||||
`assets/scripts/pages/search.js`
|
||||
\```
|
||||
keys: [
|
||||
"title",
|
||||
|
||||
@@ -15,7 +15,7 @@ No content shown here is rendered, all content is based in the template layouts/
|
||||
|
||||
Setting a very low sitemap priority will tell search engines this is not important content.
|
||||
|
||||
This implementation uses Fusejs, jquery and mark.js
|
||||
This implementation uses Fusejs and mark.js
|
||||
|
||||
|
||||
## Initial setup
|
||||
@@ -43,7 +43,7 @@ i.e. add `category`
|
||||
\```
|
||||
|
||||
### Edit fuse.js options to Search
|
||||
`static/js/search.js`
|
||||
`assets/scripts/pages/search.js`
|
||||
\```
|
||||
keys: [
|
||||
"title",
|
||||
|
||||
@@ -15,7 +15,7 @@ No content shown here is rendered, all content is based in the template layouts/
|
||||
|
||||
Setting a very low sitemap priority will tell search engines this is not important content.
|
||||
|
||||
This implementation uses Fusejs, jquery and mark.js
|
||||
This implementation uses Fusejs and mark.js
|
||||
|
||||
|
||||
## Initial setup
|
||||
@@ -43,7 +43,7 @@ i.e. add `category`
|
||||
\```
|
||||
|
||||
### Edit fuse.js options to Search
|
||||
`static/js/search.js`
|
||||
`assets/scripts/pages/search.js`
|
||||
\```
|
||||
keys: [
|
||||
"title",
|
||||
|
||||
@@ -15,7 +15,7 @@ No content shown here is rendered, all content is based in the template layouts/
|
||||
|
||||
Setting a very low sitemap priority will tell search engines this is not important content.
|
||||
|
||||
This implementation uses Fusejs, jquery and mark.js
|
||||
This implementation uses Fusejs and mark.js
|
||||
|
||||
|
||||
## Initial setup
|
||||
@@ -43,7 +43,7 @@ i.e. add `category`
|
||||
\```
|
||||
|
||||
### Edit fuse.js options to Search
|
||||
`static/js/search.js`
|
||||
`assets/scripts/pages/search.js`
|
||||
\```
|
||||
keys: [
|
||||
"title",
|
||||
|
||||
@@ -15,7 +15,7 @@ No content shown here is rendered, all content is based in the template layouts/
|
||||
|
||||
Setting a very low sitemap priority will tell search engines this is not important content.
|
||||
|
||||
This implementation uses Fusejs, jquery and mark.js
|
||||
This implementation uses Fusejs and mark.js
|
||||
|
||||
|
||||
## Initial setup
|
||||
@@ -43,7 +43,7 @@ i.e. add `category`
|
||||
\```
|
||||
|
||||
### Edit fuse.js options to Search
|
||||
`static/js/search.js`
|
||||
`assets/scripts/pages/search.js`
|
||||
\```
|
||||
keys: [
|
||||
"title",
|
||||
|
||||
@@ -15,7 +15,7 @@ No content shown here is rendered, all content is based in the template layouts/
|
||||
|
||||
Setting a very low sitemap priority will tell search engines this is not important content.
|
||||
|
||||
This implementation uses Fusejs, jquery and mark.js
|
||||
This implementation uses Fusejs and mark.js
|
||||
|
||||
|
||||
## Initial setup
|
||||
@@ -43,7 +43,7 @@ i.e. add `category`
|
||||
\```
|
||||
|
||||
### Edit fuse.js options to Search
|
||||
`static/js/search.js`
|
||||
`assets/scripts/pages/search.js`
|
||||
\```
|
||||
keys: [
|
||||
"title",
|
||||
|
||||
@@ -13,7 +13,7 @@ No content shown here is rendered, all content is based in the template layouts/
|
||||
|
||||
Setting a very low sitemap priority will tell search engines this is not important content.
|
||||
|
||||
This implementation uses Fusejs, jquery and mark.js
|
||||
This implementation uses Fusejs and mark.js
|
||||
|
||||
|
||||
## Initial setup
|
||||
@@ -41,7 +41,7 @@ i.e. add `category`
|
||||
\```
|
||||
|
||||
### Edit fuse.js options to Search
|
||||
`static/js/search.js`
|
||||
`assets/scripts/pages/search.js`
|
||||
\```
|
||||
keys: [
|
||||
"title",
|
||||
|
||||
@@ -15,7 +15,7 @@ No content shown here is rendered, all content is based in the template layouts/
|
||||
|
||||
Setting a very low sitemap priority will tell search engines this is not important content.
|
||||
|
||||
This implementation uses Fusejs, jquery and mark.js
|
||||
This implementation uses Fusejs and mark.js
|
||||
|
||||
|
||||
## Initial setup
|
||||
@@ -43,7 +43,7 @@ i.e. add `category`
|
||||
\```
|
||||
|
||||
### Edit fuse.js options to Search
|
||||
`static/js/search.js`
|
||||
`assets/scripts/pages/search.js`
|
||||
\```
|
||||
keys: [
|
||||
"title",
|
||||
|
||||
@@ -15,7 +15,7 @@ No content shown here is rendered, all content is based in the template layouts/
|
||||
|
||||
Setting a very low sitemap priority will tell search engines this is not important content.
|
||||
|
||||
This implementation uses Fusejs, jquery and mark.js
|
||||
This implementation uses Fusejs and mark.js
|
||||
|
||||
|
||||
## Initial setup
|
||||
@@ -43,7 +43,7 @@ i.e. add `category`
|
||||
\```
|
||||
|
||||
### Edit fuse.js options to Search
|
||||
`static/js/search.js`
|
||||
`assets/scripts/pages/search.js`
|
||||
\```
|
||||
keys: [
|
||||
"title",
|
||||
|
||||
@@ -15,7 +15,7 @@ No content shown here is rendered, all content is based in the template layouts/
|
||||
|
||||
Setting a very low sitemap priority will tell search engines this is not important content.
|
||||
|
||||
This implementation uses Fusejs, jquery and mark.js
|
||||
This implementation uses Fusejs and mark.js
|
||||
|
||||
|
||||
## Initial setup
|
||||
@@ -43,7 +43,7 @@ i.e. add `category`
|
||||
\```
|
||||
|
||||
### Edit fuse.js options to Search
|
||||
`static/js/search.js`
|
||||
`assets/scripts/pages/search.js`
|
||||
\```
|
||||
keys: [
|
||||
"title",
|
||||
|
||||
@@ -15,7 +15,7 @@ No content shown here is rendered, all content is based in the template layouts/
|
||||
|
||||
Setting a very low sitemap priority will tell search engines this is not important content.
|
||||
|
||||
This implementation uses Fusejs, jquery and mark.js
|
||||
This implementation uses Fusejs and mark.js
|
||||
|
||||
|
||||
## Initial setup
|
||||
@@ -43,7 +43,7 @@ i.e. add `category`
|
||||
\```
|
||||
|
||||
### Edit fuse.js options to Search
|
||||
`static/js/search.js`
|
||||
`assets/scripts/pages/search.js`
|
||||
\```
|
||||
keys: [
|
||||
"title",
|
||||
|
||||
@@ -15,7 +15,7 @@ No content shown here is rendered, all content is based in the template layouts/
|
||||
|
||||
Setting a very low sitemap priority will tell search engines this is not important content.
|
||||
|
||||
This implementation uses Fusejs, jquery and mark.js
|
||||
This implementation uses Fusejs and mark.js
|
||||
|
||||
|
||||
## Initial setup
|
||||
@@ -43,7 +43,7 @@ i.e. add `category`
|
||||
\```
|
||||
|
||||
### Edit fuse.js options to Search
|
||||
`static/js/search.js`
|
||||
`assets/scripts/pages/search.js`
|
||||
\```
|
||||
keys: [
|
||||
"title",
|
||||
|
||||
@@ -43,7 +43,7 @@ Esto expone los valores en /index.json: por ejemplo, para agregar `categories`
|
||||
\```
|
||||
|
||||
### Editar las opciones de fuse.js para buscar
|
||||
`static/js/search.js`
|
||||
`assets/scripts/pages/search.js`
|
||||
\```
|
||||
keys: [
|
||||
"title",
|
||||
|
||||
@@ -15,7 +15,7 @@ No content shown here is rendered, all content is based in the template layouts/
|
||||
|
||||
Setting a very low sitemap priority will tell search engines this is not important content.
|
||||
|
||||
This implementation uses Fusejs, jquery and mark.js
|
||||
This implementation uses Fusejs and mark.js
|
||||
|
||||
|
||||
## Initial setup
|
||||
@@ -43,7 +43,7 @@ i.e. add `category`
|
||||
\```
|
||||
|
||||
### Edit fuse.js options to Search
|
||||
`static/js/search.js`
|
||||
`assets/scripts/pages/search.js`
|
||||
\```
|
||||
keys: [
|
||||
"title",
|
||||
|
||||
@@ -15,7 +15,7 @@ No content shown here is rendered, all content is based in the template layouts/
|
||||
|
||||
Setting a very low sitemap priority will tell search engines this is not important content.
|
||||
|
||||
This implementation uses Fusejs, jquery and mark.js
|
||||
This implementation uses Fusejs and mark.js
|
||||
|
||||
|
||||
## Initial setup
|
||||
@@ -43,7 +43,7 @@ i.e. add `category`
|
||||
\```
|
||||
|
||||
### Edit fuse.js options to Search
|
||||
`static/js/search.js`
|
||||
`assets/scripts/pages/search.js`
|
||||
\```
|
||||
keys: [
|
||||
"title",
|
||||
|
||||
@@ -15,7 +15,7 @@ No content shown here is rendered, all content is based in the template layouts/
|
||||
|
||||
Setting a very low sitemap priority will tell search engines this is not important content.
|
||||
|
||||
This implementation uses Fusejs, jquery and mark.js
|
||||
This implementation uses Fusejs and mark.js
|
||||
|
||||
|
||||
## Initial setup
|
||||
@@ -43,7 +43,7 @@ i.e. add `category`
|
||||
\```
|
||||
|
||||
### Edit fuse.js options to Search
|
||||
`static/js/search.js`
|
||||
`assets/scripts/pages/search.js`
|
||||
\```
|
||||
keys: [
|
||||
"title",
|
||||
|
||||
@@ -15,7 +15,7 @@ No content shown here is rendered, all content is based in the template layouts/
|
||||
|
||||
Setting a very low sitemap priority will tell search engines this is not important content.
|
||||
|
||||
This implementation uses Fusejs, jquery and mark.js
|
||||
This implementation uses Fusejs and mark.js
|
||||
|
||||
|
||||
## Initial setup
|
||||
@@ -43,7 +43,7 @@ i.e. add `category`
|
||||
\```
|
||||
|
||||
### Edit fuse.js options to Search
|
||||
`static/js/search.js`
|
||||
`assets/scripts/pages/search.js`
|
||||
\```
|
||||
keys: [
|
||||
"title",
|
||||
|
||||
@@ -15,7 +15,7 @@ No content shown here is rendered, all content is based in the template layouts/
|
||||
|
||||
Setting a very low sitemap priority will tell search engines this is not important content.
|
||||
|
||||
This implementation uses Fusejs, jquery and mark.js
|
||||
This implementation uses Fusejs and mark.js
|
||||
|
||||
|
||||
## Initial setup
|
||||
@@ -43,7 +43,7 @@ i.e. add `category`
|
||||
\```
|
||||
|
||||
### Edit fuse.js options to Search
|
||||
`static/js/search.js`
|
||||
`assets/scripts/pages/search.js`
|
||||
\```
|
||||
keys: [
|
||||
"title",
|
||||
|
||||
@@ -15,7 +15,7 @@ No content shown here is rendered, all content is based in the template layouts/
|
||||
|
||||
Setting a very low sitemap priority will tell search engines this is not important content.
|
||||
|
||||
This implementation uses Fusejs, jquery and mark.js
|
||||
This implementation uses Fusejs and mark.js
|
||||
|
||||
|
||||
## Initial setup
|
||||
@@ -43,7 +43,7 @@ i.e. add `category`
|
||||
\```
|
||||
|
||||
### Edit fuse.js options to Search
|
||||
`static/js/search.js`
|
||||
`assets/scripts/pages/search.js`
|
||||
\```
|
||||
keys: [
|
||||
"title",
|
||||
|
||||
@@ -15,7 +15,7 @@ No content shown here is rendered, all content is based in the template layouts/
|
||||
|
||||
Setting a very low sitemap priority will tell search engines this is not important content.
|
||||
|
||||
This implementation uses Fusejs, jquery and mark.js
|
||||
This implementation uses Fusejs and mark.js
|
||||
|
||||
|
||||
## Initial setup
|
||||
@@ -43,7 +43,7 @@ i.e. add `category`
|
||||
\```
|
||||
|
||||
### Edit fuse.js options to Search
|
||||
`static/js/search.js`
|
||||
`assets/scripts/pages/search.js`
|
||||
\```
|
||||
keys: [
|
||||
"title",
|
||||
|
||||
@@ -15,7 +15,7 @@ No content shown here is rendered, all content is based in the template layouts/
|
||||
|
||||
Setting a very low sitemap priority will tell search engines this is not important content.
|
||||
|
||||
This implementation uses Fusejs, jquery and mark.js
|
||||
This implementation uses Fusejs and mark.js
|
||||
|
||||
|
||||
## Initial setup
|
||||
@@ -43,7 +43,7 @@ i.e. add `category`
|
||||
\```
|
||||
|
||||
### Edit fuse.js options to Search
|
||||
`static/js/search.js`
|
||||
`assets/scripts/pages/search.js`
|
||||
\```
|
||||
keys: [
|
||||
"title",
|
||||
|
||||
@@ -15,7 +15,7 @@ No content shown here is rendered, all content is based in the template layouts/
|
||||
|
||||
Setting a very low sitemap priority will tell search engines this is not important content.
|
||||
|
||||
This implementation uses Fusejs, jquery and mark.js
|
||||
This implementation uses Fusejs and mark.js
|
||||
|
||||
|
||||
## Initial setup
|
||||
@@ -43,7 +43,7 @@ i.e. add `category`
|
||||
\```
|
||||
|
||||
### Edit fuse.js options to Search
|
||||
`static/js/search.js`
|
||||
`assets/scripts/pages/search.js`
|
||||
\```
|
||||
keys: [
|
||||
"title",
|
||||
|
||||
@@ -0,0 +1,292 @@
|
||||
|
||||
baseURL: http://example.org/
|
||||
languageCode: en-us
|
||||
title: Example Site
|
||||
|
||||
module:
|
||||
imports:
|
||||
- path: github.com/hugo-toha/hugo-toha.github.io
|
||||
disable: false
|
||||
mounts:
|
||||
- source: content
|
||||
target: content
|
||||
- source: layouts
|
||||
target: layouts
|
||||
- source: data
|
||||
target: data
|
||||
- source: assets
|
||||
target: assets
|
||||
- source: static
|
||||
target: static
|
||||
- path: github.com/hugo-toha/toha/v4
|
||||
|
||||
# Manage languages
|
||||
# For any more details, you can check the official documentation: https://gohugo.io/content-management/multilingual/
|
||||
languages:
|
||||
en:
|
||||
languageName: English
|
||||
weight: 1
|
||||
bn:
|
||||
languageName: বাংলা
|
||||
weight: 3
|
||||
|
||||
# Force a locale to be use, really useful to develop the application ! Should be commented in production, the "weight" should rocks.
|
||||
# DefaultContentLanguage: bn
|
||||
|
||||
# Allow raw html in markdown file
|
||||
markup:
|
||||
goldmark:
|
||||
renderer:
|
||||
unsafe: true
|
||||
tableOfContents:
|
||||
startLevel: 2
|
||||
endLevel: 6
|
||||
ordered: false
|
||||
|
||||
# At least HTML and JSON are required for the main HTML content and
|
||||
# client-side JavaScript search
|
||||
outputs:
|
||||
home:
|
||||
- HTML
|
||||
- RSS
|
||||
- JSON
|
||||
|
||||
# Enable global emoji support
|
||||
enableEmoji: true
|
||||
|
||||
# Site parameters
|
||||
params:
|
||||
# Background image of the landing page
|
||||
background: /images/site/background.jpg
|
||||
|
||||
# Provide logos for your site. The inverted logo will be used in the initial
|
||||
# transparent navbar and the main logo will be used in the non-transparent navbar.
|
||||
logo:
|
||||
main: /images/site/main-logo.png
|
||||
inverted: /images/site/inverted-logo.png
|
||||
favicon: /images/site/favicon.png
|
||||
|
||||
# GitHub repo of your site
|
||||
gitRepo: https://github.com/hugo-toha/hugo-toha.github.io
|
||||
# Default branch of your Git repo
|
||||
gitBranch: main
|
||||
|
||||
# Configure the number of section title visible in the top navbar
|
||||
topNavbar:
|
||||
maxVisibleSections: 5
|
||||
|
||||
# Configure various features of this theme
|
||||
features:
|
||||
|
||||
# Enable dark theme
|
||||
darkMode:
|
||||
enable: false
|
||||
services:
|
||||
darkreader:
|
||||
defaultColorScheme: system # options are 'system', 'dark', 'light'
|
||||
fixes:
|
||||
invert: ['img[src$=".svg"]'] # inverts svg colors.
|
||||
theme:
|
||||
brightness: 100
|
||||
contrast: 100
|
||||
sepia: 0
|
||||
|
||||
# Enable and configure portfolio
|
||||
portfolio:
|
||||
enable: true
|
||||
|
||||
# Enable and configure blog posts
|
||||
blog:
|
||||
enable: true
|
||||
# Share post on different social media
|
||||
shareButtons:
|
||||
facebook: true
|
||||
twitter: true
|
||||
linkedin: true
|
||||
reddit: true
|
||||
whatsapp: true
|
||||
email: true
|
||||
# tumblr: true
|
||||
# pocket: true
|
||||
# diaspora: true
|
||||
# mastodon: true
|
||||
|
||||
# Enable & configure "Notes" features
|
||||
notes:
|
||||
enable: true
|
||||
|
||||
# Enable comment feature. There, should be only one of them.
|
||||
comment:
|
||||
enable: false
|
||||
services:
|
||||
disqus:
|
||||
shortName: toha-example-site
|
||||
# valine:
|
||||
# appId: HTV6askWxVo3vOxlqjjaq2hd-MsYXbMMI
|
||||
# appKey: pVrT3C85KGIuk27t07eh6bUC
|
||||
# avatar: retro
|
||||
# placeholder: Share your thought.
|
||||
# lang: en
|
||||
# recordIP: true
|
||||
# enableQQ: true
|
||||
# utteranc:
|
||||
# repo: github.com/hugo-toha/hugo-toha.github.io
|
||||
# issueTerm: title
|
||||
# theme: github-light
|
||||
# giscus:
|
||||
# repo: your-repo/name
|
||||
# repoID: your-repo-id
|
||||
# category: your-category
|
||||
# categoryID: your-category-id
|
||||
# theme: light
|
||||
# map: url
|
||||
# reaction: 1
|
||||
# metadata: 0
|
||||
# inputPosition: bottom
|
||||
# crossOrigin: anonymous
|
||||
# commento:
|
||||
# serverURL: cdn.commento.io
|
||||
# autoInit: true
|
||||
# hideDeleted: false
|
||||
|
||||
# Enable Analytics
|
||||
analytics:
|
||||
enabled: false
|
||||
services:
|
||||
# Google Analytics
|
||||
google:
|
||||
id: G-H4LBG7NDFZ
|
||||
# # CounterDev
|
||||
# counterDev:
|
||||
# id: <your counterdev id>
|
||||
# # GoatCounter
|
||||
# goatCounter:
|
||||
# code: <your goat counter code>
|
||||
# # Matomo / Piwik
|
||||
# matomo:
|
||||
# instance: matomo.example.com
|
||||
# siteId: 1 # Or any other number
|
||||
|
||||
# Enable Support
|
||||
support:
|
||||
enable: false
|
||||
services:
|
||||
kofi:
|
||||
user: hossainemruz
|
||||
text: Tip Me
|
||||
textColor: '#f9fafc'
|
||||
backgroundColor: '#248aaa'
|
||||
# buymeacoffee:
|
||||
# user: <your buymeacoffee.com user>
|
||||
# text: Support me on Buy me a coffee!
|
||||
# info: Buy me a coffee!
|
||||
# color: '#FFDD00'
|
||||
|
||||
# specify whether you want to show Table of Contents in reading page
|
||||
toc:
|
||||
enable: true
|
||||
|
||||
# Show tags under the post title
|
||||
tags:
|
||||
enable: true
|
||||
|
||||
# Specify whether to show flag in the language selector. Default is true.
|
||||
flags:
|
||||
enable: true
|
||||
# # If you want to use different country flag for a language, specify them here.
|
||||
# flagOverwrites:
|
||||
# - languageCode: en
|
||||
# countryCode: us
|
||||
|
||||
# Enable this to use `embed-pdf` shortcode.
|
||||
embedpdf:
|
||||
enable: false
|
||||
|
||||
# Enable this to create flowcharts using shortcodes.
|
||||
flowchart:
|
||||
enable: false
|
||||
services:
|
||||
# Uncomment for `mermaid` shortcode.
|
||||
mermaid:
|
||||
# For config options, see: https://mermaid-js.github.io/mermaid/#/Setup?id=configuration
|
||||
# theme: dark
|
||||
|
||||
# Enable this to create mathematic expressions using `$$` blocks
|
||||
math:
|
||||
enable: false
|
||||
services:
|
||||
# https://katex.org/docs/autorender.html#api for more configurations
|
||||
katex:
|
||||
delimiters:
|
||||
- left: $$
|
||||
right: $$
|
||||
display: true
|
||||
- left: \\[
|
||||
right: \\]
|
||||
display: true
|
||||
- left: $
|
||||
right: $
|
||||
display: false
|
||||
- left: \\(
|
||||
right: \\)
|
||||
display: false
|
||||
|
||||
# Enable to use custom syntax highlight
|
||||
# Please note, Hugo comes with it's own html based syntax highlighter.
|
||||
# Your code block will still be syntax highlighted by hugo.
|
||||
# For more details: https://gohugo.io/content-management/syntax-highlighting/
|
||||
# To disable Hugo's builtin syntax highlight,
|
||||
# see: https://gohugo.io/getting-started/configuration-markup#highlight
|
||||
# ```
|
||||
# # config.yaml
|
||||
# markup:
|
||||
# # this disables hugo's syntax highlighting.
|
||||
# codeFences: false
|
||||
# ```
|
||||
syntaxHighlight:
|
||||
enable: true
|
||||
services:
|
||||
hljs:
|
||||
# see: https://highlightjs.readthedocs.io/en/latest/api.html#configure
|
||||
noHighlightRe: /^no-highlight$/i
|
||||
|
||||
# Enable to use `video-player` shortcode
|
||||
videoPlayer:
|
||||
enable: false
|
||||
services:
|
||||
# convert .js-player class into video player via https://plyr.io/
|
||||
# Can play HTML5 Video, Audio, Youtube, Vimeo.
|
||||
# For more info on setup: https://github.com/sampotts/plyr#quick-setup
|
||||
plyr:
|
||||
# options doc: https://github.com/sampotts/plyr#options
|
||||
# fullscreen: true
|
||||
|
||||
|
||||
# Provide footer configuration.
|
||||
footer:
|
||||
enable: true
|
||||
# You can provide your custom footer template using this option.
|
||||
# Put your template in "layouts/partials" folder of your repo.
|
||||
template: footer.html
|
||||
# Show/hide navigation in the footer. Default is "true".
|
||||
navigation:
|
||||
enable: true
|
||||
# show custom menus in the footer
|
||||
customMenus: true
|
||||
# Show/hide "Contact Me" section in the footer. Default is "true".
|
||||
contactMe:
|
||||
enable: true
|
||||
# Show/hide credentials section in the footer. Default is "true".
|
||||
credentials:
|
||||
enable: true
|
||||
|
||||
# Show/hide newsletter section in the footer. Default is "true".
|
||||
# Currently, it supports "mailchimp".
|
||||
newsletter:
|
||||
enable: true
|
||||
provider: mailchimp
|
||||
mailchimpURL: https://github.us1.list-manage.com/subscribe/post?u=19de52a4603135aae97163fd8&id=094a24c76e
|
||||
|
||||
# Show/hide disclaimer notice in the footer. Default is "false".
|
||||
disclaimer:
|
||||
enable: true
|
||||
@@ -0,0 +1,7 @@
|
||||
module github.com/hugo-toha/toha/exampleSite
|
||||
|
||||
go 1.19
|
||||
|
||||
require github.com/hugo-toha/hugo-toha.github.io v0.0.0-20221228191121-007f31838bd6 // indirect
|
||||
|
||||
replace github.com/hugo-toha/toha/v4 => ../../toha
|
||||
@@ -0,0 +1,2 @@
|
||||
github.com/hugo-toha/hugo-toha.github.io v0.0.0-20221228191121-007f31838bd6 h1:TPFhOZAnuH4wjLIdzimswCRa2qCcc1teKVTatADJU2g=
|
||||
github.com/hugo-toha/hugo-toha.github.io v0.0.0-20221228191121-007f31838bd6/go.mod h1:OMMaP9Hh9NsKd41lVIazBQRPa0s6Z57AfJoY3DcCNNY=
|
||||
+126
@@ -0,0 +1,126 @@
|
||||
# More documentation here: https://github.com/nicksnyder/go-i18n
|
||||
[home]
|
||||
other = "Inici"
|
||||
|
||||
[posts]
|
||||
other = "Publicacions"
|
||||
|
||||
[toc_heading]
|
||||
other = "Taula de Continguts"
|
||||
|
||||
[tags]
|
||||
other = "Etiquetes"
|
||||
|
||||
[categories]
|
||||
other = "Categories"
|
||||
|
||||
[at]
|
||||
other = "a"
|
||||
|
||||
[resume]
|
||||
other = "El meu currículum"
|
||||
|
||||
[navigation]
|
||||
other = "Navegació"
|
||||
|
||||
[contact_me]
|
||||
other = "Contacta'm:"
|
||||
|
||||
[email]
|
||||
other = "Correu electrònic"
|
||||
|
||||
[phone]
|
||||
other = "Telèfon"
|
||||
|
||||
[newsletter_text]
|
||||
other = "Subscriure's"
|
||||
|
||||
[newsletter_input_placeholder]
|
||||
other = "Entra l'email"
|
||||
|
||||
[newsletter_warning]
|
||||
other = "Al entrar la vostra direcció de correu electrònic, esteu acceptant rebre el butlletí d'aquest lloc web."
|
||||
|
||||
[submit]
|
||||
other = "Enviar"
|
||||
|
||||
[hugoAttributionText]
|
||||
other = "Impulsat per"
|
||||
|
||||
[prev]
|
||||
other = "Anterior"
|
||||
|
||||
[next]
|
||||
other = "Següent"
|
||||
|
||||
[share_on]
|
||||
other = "Compartir a"
|
||||
|
||||
[improve_this_page]
|
||||
other = "Millorar aquesta pàgina"
|
||||
|
||||
[out_of]
|
||||
other = "de"
|
||||
|
||||
[publications]
|
||||
other = "Publicacions"
|
||||
|
||||
[taken_courses]
|
||||
other = "Cursos realitzats"
|
||||
|
||||
[course_name]
|
||||
other = "Nom del curs"
|
||||
|
||||
[total_credit]
|
||||
other = "Crèdits Totals"
|
||||
|
||||
[obtained_credit]
|
||||
other = "Crèdits Obtinguts"
|
||||
|
||||
[extracurricular_activities]
|
||||
other = "Activitats Extracurriculars"
|
||||
|
||||
[show_more]
|
||||
other = "Mostra'n més"
|
||||
|
||||
[show_less]
|
||||
other = "Mostra'n menys"
|
||||
|
||||
[responsibilities]
|
||||
other = "Responsabilitats:"
|
||||
|
||||
[present]
|
||||
other = "Actualitat"
|
||||
|
||||
[comments_javascript]
|
||||
other = "Si us plau, activa Javascript per mostrar"
|
||||
|
||||
[comments_by]
|
||||
other = "Comentaris per"
|
||||
|
||||
[read]
|
||||
other = "Llegir"
|
||||
|
||||
[project_star]
|
||||
other = "Preferit"
|
||||
|
||||
[project_details]
|
||||
other = "Detalls"
|
||||
|
||||
[err_404]
|
||||
other = "La pàgina que està cercant encara no existeix."
|
||||
|
||||
[more]
|
||||
other = "Més"
|
||||
|
||||
[view_certificate]
|
||||
other = "Mostrar Certificat"
|
||||
|
||||
[notes]
|
||||
other = "Notes"
|
||||
|
||||
[disclaimer_text]
|
||||
other = "Avís de Responsabilitat"
|
||||
|
||||
[search]
|
||||
other = "Cerca"
|
||||
+126
@@ -0,0 +1,126 @@
|
||||
# More documentation here: https://github.com/nicksnyder/go-i18n
|
||||
[home]
|
||||
other = "الصفحة الرئيسية"
|
||||
|
||||
[posts]
|
||||
other = "المنشورات"
|
||||
|
||||
[toc_heading]
|
||||
other = "قائمة المحتويات"
|
||||
|
||||
[tags]
|
||||
other = "الوسوم"
|
||||
|
||||
[categories]
|
||||
other = "الأقسام"
|
||||
|
||||
[at]
|
||||
other = "at"
|
||||
|
||||
[resume]
|
||||
other = "سيرتي الذاتية"
|
||||
|
||||
[navigation]
|
||||
other = "التصفح"
|
||||
|
||||
[contact_me]
|
||||
other = "اتصل بي:"
|
||||
|
||||
[email]
|
||||
other = "البريد الإلكتروني"
|
||||
|
||||
[phone]
|
||||
other = "الهاتف"
|
||||
|
||||
[newsletter_text]
|
||||
other = "ابق على اتصال من خلال القائمة البريدية"
|
||||
|
||||
[newsletter_input_placeholder]
|
||||
other = "ادخل بريدك الالكتروني"
|
||||
|
||||
[newsletter_warning]
|
||||
other = "بإدخال بريدك الإلكتروني، أنت توافق على تلقي رسائل إلكترونية دورية من هذا الموقع."
|
||||
|
||||
[submit]
|
||||
other = "إرسال"
|
||||
|
||||
[hugoAttributionText]
|
||||
other = "صنع باستخدام"
|
||||
|
||||
[prev]
|
||||
other = "السابق"
|
||||
|
||||
[next]
|
||||
other = "التالي"
|
||||
|
||||
[share_on]
|
||||
other = "المشاركة على"
|
||||
|
||||
[improve_this_page]
|
||||
other = "ساعد في تحسين هذه الصفحة"
|
||||
|
||||
[out_of]
|
||||
other = "من"
|
||||
|
||||
[publications]
|
||||
other = "المنشورات"
|
||||
|
||||
[taken_courses]
|
||||
other = "الدروس"
|
||||
|
||||
[course_name]
|
||||
other = "اسم المادة"
|
||||
|
||||
[total_credit]
|
||||
other = "العلامة العامة"
|
||||
|
||||
[obtained_credit]
|
||||
other = "العلامة"
|
||||
|
||||
[extracurricular_activities]
|
||||
other = "نشاطات خارجية"
|
||||
|
||||
[show_more]
|
||||
other = "إظهار المزيد"
|
||||
|
||||
[show_less]
|
||||
other = "إخفاء"
|
||||
|
||||
[responsibilities]
|
||||
other = "المسؤوليات:"
|
||||
|
||||
[present]
|
||||
other = "حاليا"
|
||||
|
||||
[comments_javascript]
|
||||
other = "من فضلك قم بتفعيل جافاسكريب لإظهار"
|
||||
|
||||
[comments_by]
|
||||
other = "التعليقات موفرة بواسطة"
|
||||
|
||||
[read]
|
||||
other = "قراءة"
|
||||
|
||||
[project_star]
|
||||
other = "نجمة"
|
||||
|
||||
[project_details]
|
||||
other = "التفاصيل"
|
||||
|
||||
[err_404]
|
||||
other = "الصفحة التي تبحث عنها ليست بعد هناك."
|
||||
|
||||
[more]
|
||||
other = "المزيد"
|
||||
|
||||
[view_certificate]
|
||||
other = "إظهار الشهادة"
|
||||
|
||||
[notes]
|
||||
other = "ملاحظات"
|
||||
|
||||
[disclaimer_text]
|
||||
other = "إشعار بالمسؤولية"
|
||||
|
||||
[search]
|
||||
other = "بحث"
|
||||
@@ -118,3 +118,6 @@ other = "নোট সমূহ"
|
||||
|
||||
[disclaimer_text]
|
||||
other = "দায় বিজ্ঞপ্তি"
|
||||
|
||||
[search]
|
||||
other = "অনুসন্ধান করুন"
|
||||
|
||||
+6
-3
@@ -72,10 +72,10 @@ other = "Belegte Kurse"
|
||||
other = "Kursname"
|
||||
|
||||
[total_credit]
|
||||
other = "Gesamtguthaben"
|
||||
other = "Mögliche Punktzahl"
|
||||
|
||||
[obtained_credit]
|
||||
other = "Erhaltenes Guthaben"
|
||||
other = "Note"
|
||||
|
||||
[extracurricular_activities]
|
||||
other = "Außerschulische Aktivitäten"
|
||||
@@ -108,7 +108,7 @@ other = "Star"
|
||||
other = "Details"
|
||||
|
||||
[err_404]
|
||||
other = "Die Seite nach der Seite ist noch nicht vorhanden."
|
||||
other = "Die von Ihnen gesuchte Seite ist noch nicht vorhanden."
|
||||
|
||||
[more]
|
||||
other = "Mehr"
|
||||
@@ -121,3 +121,6 @@ other = "Notizen"
|
||||
|
||||
[disclaimer_text]
|
||||
other = "Haftungshinweis"
|
||||
|
||||
[search]
|
||||
other = "Suche"
|
||||
|
||||
@@ -121,3 +121,6 @@ other = "Notes"
|
||||
|
||||
[disclaimer_text]
|
||||
other = "Liability Notice"
|
||||
|
||||
[search]
|
||||
other = "Search"
|
||||
|
||||
@@ -121,3 +121,6 @@ other = "Notas"
|
||||
|
||||
[disclaimer_text]
|
||||
other = "Aviso de responsabilidad"
|
||||
|
||||
[search]
|
||||
other = "Búsqueda"
|
||||
|
||||
+126
@@ -0,0 +1,126 @@
|
||||
# More documentation here: https://github.com/nicksnyder/go-i18n
|
||||
[home]
|
||||
other = "Koti"
|
||||
|
||||
[posts]
|
||||
other = "Artikkelit"
|
||||
|
||||
[toc_heading]
|
||||
other = "Sisällysluettelo"
|
||||
|
||||
[tags]
|
||||
other = "Tagit"
|
||||
|
||||
[categories]
|
||||
other = "Kategoriat"
|
||||
|
||||
[at]
|
||||
other = "at"
|
||||
|
||||
[resume]
|
||||
other = "Ansioluetteloni"
|
||||
|
||||
[navigation]
|
||||
other = "Navigointi"
|
||||
|
||||
[contact_me]
|
||||
other = "Ota yhteyttä minuun:"
|
||||
|
||||
[email]
|
||||
other = "Sähköposti"
|
||||
|
||||
[phone]
|
||||
other = "Puhelin"
|
||||
|
||||
[newsletter_text]
|
||||
other = "Pysy ajan tasalla tilaamalla sähköposti-ilmoitukset"
|
||||
|
||||
[newsletter_input_placeholder]
|
||||
other = "Syötä sähköpostiosoite"
|
||||
|
||||
[newsletter_warning]
|
||||
other = "Syöttämällä sähköpostin, hyväksyt että haluat vastaanottaa uutiskirjeen tältä sivustolta."
|
||||
|
||||
[submit]
|
||||
other = "Lähetä"
|
||||
|
||||
[hugoAttributionText]
|
||||
other = "Voimanlähteenä"
|
||||
|
||||
[prev]
|
||||
other = "Edellinen"
|
||||
|
||||
[next]
|
||||
other = "Seuraava"
|
||||
|
||||
[share_on]
|
||||
other = "Jaa"
|
||||
|
||||
[improve_this_page]
|
||||
other = "Paranna tätä sivua"
|
||||
|
||||
[out_of]
|
||||
other = "out of"
|
||||
|
||||
[publications]
|
||||
other = "Julkaisut"
|
||||
|
||||
[taken_courses]
|
||||
other = "Käydyt kurssit"
|
||||
|
||||
[course_name]
|
||||
other = "Kurssin nimi"
|
||||
|
||||
[total_credit]
|
||||
other = "Opintopisteet yhteensä"
|
||||
|
||||
[obtained_credit]
|
||||
other = "Saadut opintopisteet"
|
||||
|
||||
[extracurricular_activities]
|
||||
other = "Opetusohjelman ulkopuolinen toiminta"
|
||||
|
||||
[show_more]
|
||||
other = "Näytä lisää"
|
||||
|
||||
[show_less]
|
||||
other = "Näytä vähemmän"
|
||||
|
||||
[responsibilities]
|
||||
other = "Työtehtävät:"
|
||||
|
||||
[present]
|
||||
other = "Tämä päivä"
|
||||
|
||||
[comments_javascript]
|
||||
other = "Ole hyvä ja enabloi JavaScript katsoaksesi"
|
||||
|
||||
[comments_by]
|
||||
other = "kommentit mahdollistavat"
|
||||
|
||||
[read]
|
||||
other = "Lue"
|
||||
|
||||
[project_star]
|
||||
other = "Tähti"
|
||||
|
||||
[project_details]
|
||||
other = "Yksityiskohdat"
|
||||
|
||||
[err_404]
|
||||
other = "Sivua jota etsit ei löydy."
|
||||
|
||||
[more]
|
||||
other = "Lisää"
|
||||
|
||||
[view_certificate]
|
||||
other = "Katso todistus"
|
||||
|
||||
[notes]
|
||||
other = "Muistiinpanot"
|
||||
|
||||
[disclaimer_text]
|
||||
other = "Vastuuilmoitus"
|
||||
|
||||
[search]
|
||||
other = "Haku"
|
||||
+4
-1
@@ -87,7 +87,7 @@ other = "En savoir plus"
|
||||
other = "Montrer moins"
|
||||
|
||||
[responsibilities]
|
||||
other = "Responsabilitiés :"
|
||||
other = "Responsabilités :"
|
||||
|
||||
[present]
|
||||
other = "Aujourd'hui"
|
||||
@@ -121,3 +121,6 @@ other = "Remarques"
|
||||
|
||||
[disclaimer_text]
|
||||
other = "Avis de responsabilité"
|
||||
|
||||
[search]
|
||||
other = "Chercher"
|
||||
|
||||
@@ -121,3 +121,6 @@ other = "टिप्पणियाँ"
|
||||
|
||||
[disclaimer_text]
|
||||
other = "दायित्व सूचना"
|
||||
|
||||
[search]
|
||||
other = "खोज"
|
||||
|
||||
@@ -121,3 +121,6 @@ other = "Catatan"
|
||||
|
||||
[disclaimer_text]
|
||||
other = "Pemberitahuan Kewajiban"
|
||||
|
||||
[search]
|
||||
other = "Mencari"
|
||||
|
||||
@@ -121,3 +121,6 @@ other = "Appunti"
|
||||
|
||||
[disclaimer_text]
|
||||
other = "Avviso di responsabilità"
|
||||
|
||||
[search]
|
||||
other = "Ricerca"
|
||||
|
||||
@@ -118,3 +118,6 @@ other = "ノート"
|
||||
|
||||
[disclaimer_text]
|
||||
other = "責任通知"
|
||||
|
||||
[search]
|
||||
other = "検索"
|
||||
|
||||
@@ -121,3 +121,6 @@ other = "메모"
|
||||
|
||||
[disclaimer_text]
|
||||
other = "책임 고지"
|
||||
|
||||
[search]
|
||||
other = "찾다"
|
||||
|
||||
+30
-27
@@ -1,11 +1,11 @@
|
||||
[home]
|
||||
other = "Startseite"
|
||||
other = "Hoofdpagina"
|
||||
|
||||
[posts]
|
||||
other = "Beiträge"
|
||||
other = "Posts"
|
||||
|
||||
[toc_heading]
|
||||
other = "Inhaltsverzeichnis"
|
||||
other = "Inhoudsopgave"
|
||||
|
||||
[tags]
|
||||
other = "Tags"
|
||||
@@ -14,49 +14,49 @@ other = "Tags"
|
||||
other = "Categorieën"
|
||||
|
||||
[at]
|
||||
other = "bei"
|
||||
other = "bij"
|
||||
|
||||
[resume]
|
||||
other = "Mein Lebenslauf"
|
||||
other = "Curriculum Vitae"
|
||||
|
||||
[navigation]
|
||||
other = "Navigation"
|
||||
other = "Navigatie"
|
||||
|
||||
[contact_me]
|
||||
other = "Kontakt aufnehmen"
|
||||
other = "Contactgegevens"
|
||||
|
||||
[email]
|
||||
other = "E-Mail"
|
||||
|
||||
[phone]
|
||||
other = "Telefon"
|
||||
other = "Telefoon"
|
||||
|
||||
[newsletter_text]
|
||||
other = "Mit dem Newsletter auf dem neuesten Stand bleiben"
|
||||
other = "Ontvang updates via email"
|
||||
|
||||
[newsletter_input_placeholder]
|
||||
other = "E-Mail-Adresse eingeben"
|
||||
other = "Email ingeven"
|
||||
|
||||
[newsletter_warning]
|
||||
other = "Door uw e-mailadres in te voeren, gaat u akkoord met het ontvangen van de nieuwsbrief van deze website."
|
||||
|
||||
[submit]
|
||||
other = "Absenden"
|
||||
other = "Opslaan"
|
||||
|
||||
[hugoAttributionText]
|
||||
other = "Unterstützt von"
|
||||
other = "Mogelijk gemaakt met"
|
||||
|
||||
[prev]
|
||||
other = "Vorherige"
|
||||
other = "Vorige"
|
||||
|
||||
[next]
|
||||
other = "Nächste"
|
||||
other = "Volgende"
|
||||
|
||||
# [share_on]
|
||||
# other = "Share on"
|
||||
[share_on]
|
||||
other = "Delen op"
|
||||
|
||||
[improve_this_page]
|
||||
other = "Diese Seite verbessern"
|
||||
other = "Deze pagina verbeteren"
|
||||
|
||||
[out_of]
|
||||
other = "van de"
|
||||
@@ -65,7 +65,7 @@ other = "van de"
|
||||
other = "Publicaties"
|
||||
|
||||
[taken_courses]
|
||||
other = "Cursussen gevolgd"
|
||||
other = "Gevolgde cursussen"
|
||||
|
||||
[course_name]
|
||||
other = "Cursus naam"
|
||||
@@ -85,11 +85,11 @@ other = "Bekijk meer"
|
||||
[show_less]
|
||||
other = "Laat minder zien"
|
||||
|
||||
# [responsibilities]
|
||||
# other = "Responsibilities:"
|
||||
[responsibilities]
|
||||
other = "Verantwoordelijkheden:"
|
||||
|
||||
# [present]
|
||||
# other = "Present"
|
||||
[present]
|
||||
other = "Heden"
|
||||
|
||||
# [comments_javascript]
|
||||
# other = "Please enable JavaScript to view the"
|
||||
@@ -103,11 +103,11 @@ other = "Laat minder zien"
|
||||
# [project_star]
|
||||
# other = "Star"
|
||||
|
||||
# [project_details]
|
||||
# other = "Details"
|
||||
[project_details]
|
||||
other = "Details"
|
||||
|
||||
# [err_404]
|
||||
# other = "The page you are looking for is not there yet."
|
||||
[err_404]
|
||||
other = "De pagina waar je voor zoekt bestaat nog niet."
|
||||
|
||||
[more]
|
||||
other = "Meer"
|
||||
@@ -119,4 +119,7 @@ other = "Bekijk certificaat"
|
||||
other = "Opmerkingen"
|
||||
|
||||
[disclaimer_text]
|
||||
other = "Haftungshinweis"
|
||||
other = "Aansprakelijkheidsverklaring"
|
||||
|
||||
[search]
|
||||
other = "Zoek"
|
||||
|
||||
+126
@@ -0,0 +1,126 @@
|
||||
# More documentation here: https://github.com/nicksnyder/go-i18n
|
||||
[home]
|
||||
other = "Início"
|
||||
|
||||
[posts]
|
||||
other = "Artigos"
|
||||
|
||||
[toc_heading]
|
||||
other = "Tabela de conteúdos"
|
||||
|
||||
[tags]
|
||||
other = "Etiquetas"
|
||||
|
||||
[categories]
|
||||
other = "Categorias"
|
||||
|
||||
[at]
|
||||
other = "em"
|
||||
|
||||
[resume]
|
||||
other = "O meu Currículo"
|
||||
|
||||
[navigation]
|
||||
other = "Navegação"
|
||||
|
||||
[contact_me]
|
||||
other = "Contacte-me:"
|
||||
|
||||
[email]
|
||||
other = "Email"
|
||||
|
||||
[phone]
|
||||
other = "Telefone"
|
||||
|
||||
[newsletter_text]
|
||||
other = "Mantenha-se actualizado com notificações por email"
|
||||
|
||||
[newsletter_input_placeholder]
|
||||
other = "Inserir email"
|
||||
|
||||
[newsletter_warning]
|
||||
other = "Ao submeter o seu endereço de email, concorda em receber a newsletter deste website."
|
||||
|
||||
[submit]
|
||||
other = "Enviar"
|
||||
|
||||
[hugoAttributionText]
|
||||
other = "Desenvolvido por"
|
||||
|
||||
[prev]
|
||||
other = "Anterior"
|
||||
|
||||
[next]
|
||||
other = "Próximo"
|
||||
|
||||
[share_on]
|
||||
other = "Partilha"
|
||||
|
||||
[improve_this_page]
|
||||
other = "Melhore esta página"
|
||||
|
||||
[out_of]
|
||||
other = "de"
|
||||
|
||||
[publications]
|
||||
other = "Publicações"
|
||||
|
||||
[taken_courses]
|
||||
other = "Cursos frequentados"
|
||||
|
||||
[course_name]
|
||||
other = "Nome do Curso"
|
||||
|
||||
[total_credit]
|
||||
other = "Créditos Totais"
|
||||
|
||||
[obtained_credit]
|
||||
other = "Créditos Obtidos"
|
||||
|
||||
[extracurricular_activities]
|
||||
other = "Actividades Extracurriculares"
|
||||
|
||||
[show_more]
|
||||
other = "Ver Mais"
|
||||
|
||||
[show_less]
|
||||
other = "Ver Menos"
|
||||
|
||||
[responsibilities]
|
||||
other = "Responsabilidades:"
|
||||
|
||||
[present]
|
||||
other = "Presente"
|
||||
|
||||
[comments_javascript]
|
||||
other = "Por favor active JavaScript para ver o"
|
||||
|
||||
[comments_by]
|
||||
other = "comentários por"
|
||||
|
||||
[read]
|
||||
other = "Ler"
|
||||
|
||||
[project_star]
|
||||
other = "Star"
|
||||
|
||||
[project_details]
|
||||
other = "Detalhes"
|
||||
|
||||
[err_404]
|
||||
other = "A página que procura ainda não está aqui."
|
||||
|
||||
[more]
|
||||
other = "Mais"
|
||||
|
||||
[view_certificate]
|
||||
other = "Ver Certificado"
|
||||
|
||||
[notes]
|
||||
other = "Notas"
|
||||
|
||||
[disclaimer_text]
|
||||
other = "Nota legal"
|
||||
|
||||
[search]
|
||||
other = "Pesquisar"
|
||||
@@ -121,3 +121,6 @@ other = "Ноты"
|
||||
|
||||
[disclaimer_text]
|
||||
other = "Уведомление об ответственности"
|
||||
|
||||
[search]
|
||||
other = "Поиск"
|
||||
|
||||
+126
@@ -0,0 +1,126 @@
|
||||
# More documentation here: https://github.com/nicksnyder/go-i18n
|
||||
[home]
|
||||
other = "Anasayfa"
|
||||
|
||||
[posts]
|
||||
other = "Gönderiler"
|
||||
|
||||
[toc_heading]
|
||||
other = "İçerik Tablosu"
|
||||
|
||||
[tags]
|
||||
other = "Etiketler"
|
||||
|
||||
[categories]
|
||||
other = "Kategoriler"
|
||||
|
||||
[at]
|
||||
other = ","
|
||||
|
||||
[resume]
|
||||
other = "Özgeçmişim"
|
||||
|
||||
[navigation]
|
||||
other = "Menü"
|
||||
|
||||
[contact_me]
|
||||
other = "İletişime geç:"
|
||||
|
||||
[email]
|
||||
other = "E-Posta"
|
||||
|
||||
[phone]
|
||||
other = "Telefon"
|
||||
|
||||
[newsletter_text]
|
||||
other = "Yeni içeriklerden haberdar olmak için E-Posta adresinizi giriniz."
|
||||
|
||||
[newsletter_input_placeholder]
|
||||
other = "E-Posta adresi giriniz."
|
||||
|
||||
[newsletter_warning]
|
||||
other = "E-Posta adresini girerseniz, bu web sitesinin haber bültenini almayı kabul ediyorsunuz."
|
||||
|
||||
[submit]
|
||||
other = "Onayla"
|
||||
|
||||
[hugoAttributionText]
|
||||
other = ""
|
||||
|
||||
[prev]
|
||||
other = "Önceki"
|
||||
|
||||
[next]
|
||||
other = "Sonraki"
|
||||
|
||||
[share_on]
|
||||
other = "Paylaş"
|
||||
|
||||
[improve_this_page]
|
||||
other = "Bu sayfaya katkıda bulunun"
|
||||
|
||||
[out_of]
|
||||
other = "/"
|
||||
|
||||
[publications]
|
||||
other = "Akademik Yayınlar"
|
||||
|
||||
[taken_courses]
|
||||
other = "Alınan Dersler"
|
||||
|
||||
[course_name]
|
||||
other = "Ders Adı"
|
||||
|
||||
[total_credit]
|
||||
other = "Üzerinden"
|
||||
|
||||
[obtained_credit]
|
||||
other = "Alınan Not"
|
||||
|
||||
[extracurricular_activities]
|
||||
other = "Ders Dışı Aktiviteler"
|
||||
|
||||
[show_more]
|
||||
other = "Devamını Göster"
|
||||
|
||||
[show_less]
|
||||
other = "Gizle"
|
||||
|
||||
[responsibilities]
|
||||
other = "Sorumluluklar:"
|
||||
|
||||
[present]
|
||||
other = "Halen"
|
||||
|
||||
[comments_javascript]
|
||||
other = "Görüntüleyebilmek için lüften Javascript etkinleştirin"
|
||||
|
||||
[comments_by]
|
||||
other = "comments powered by"
|
||||
|
||||
[read]
|
||||
other = "Oku"
|
||||
|
||||
[project_star]
|
||||
other = "Star"
|
||||
|
||||
[project_details]
|
||||
other = "Detaylar"
|
||||
|
||||
[err_404]
|
||||
other = "Aradığınız sayfa bulunamadı."
|
||||
|
||||
[more]
|
||||
other = "Devamını Göster"
|
||||
|
||||
[view_certificate]
|
||||
other = "Sertifikayı Görüntüle"
|
||||
|
||||
[notes]
|
||||
other = "Notlar"
|
||||
|
||||
[disclaimer_text]
|
||||
other = "Yükümlülük Bildirisi"
|
||||
|
||||
[search]
|
||||
other = "Ara"
|
||||
@@ -121,3 +121,6 @@ other = "Ghi chú"
|
||||
|
||||
[disclaimer_text]
|
||||
other = "Thông báo trách nhiệm"
|
||||
|
||||
[search]
|
||||
other = "Tìm kiếm"
|
||||
|
||||
@@ -121,3 +121,6 @@ other = "笔记"
|
||||
|
||||
[disclaimer_text]
|
||||
other = "免责声明"
|
||||
|
||||
[search]
|
||||
other = "搜索"
|
||||
|
||||
+19
-16
@@ -86,29 +86,29 @@ other = "查看更多"
|
||||
[show_less]
|
||||
other = "顯示較少"
|
||||
|
||||
# [responsibilities]
|
||||
# other = "Responsibilities:"
|
||||
[responsibilities]
|
||||
other = "職責:"
|
||||
|
||||
# [present]
|
||||
# other = "Present"
|
||||
[present]
|
||||
other = "現在"
|
||||
|
||||
# [comments_javascript]
|
||||
# other = "Please enable JavaScript to view the"
|
||||
[comments_javascript]
|
||||
other = "請開啟 JavaScript 查看"
|
||||
|
||||
# [comments_by]
|
||||
# other = "comments powered by"
|
||||
[comments_by]
|
||||
other = "評論由"
|
||||
|
||||
# [read]
|
||||
# other = "Read"
|
||||
[read]
|
||||
other = "閱讀"
|
||||
|
||||
# [project_star]
|
||||
# other = "Star"
|
||||
[project_star]
|
||||
other = "Star"
|
||||
|
||||
# [project_details]
|
||||
# other = "Details"
|
||||
[project_details]
|
||||
other = "詳情"
|
||||
|
||||
# [err_404]
|
||||
# other = "The page you are looking for is not there yet."
|
||||
[err_404]
|
||||
other = "您訪問的頁面不存在"
|
||||
|
||||
[more]
|
||||
other = "更多的"
|
||||
@@ -121,3 +121,6 @@ other = "筆記"
|
||||
|
||||
[disclaimer_text]
|
||||
other = "免責聲明"
|
||||
|
||||
[search]
|
||||
other = "搜索"
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
<a href="{{ .Destination | safeURL }}"{{ with .Title}} title="{{ . }}"{{ end }}{{ if strings.HasPrefix .Destination "http" }} target="_blank" rel="noopener"{{ end }}>{{ .Text | safeHTML }}</a>
|
||||
@@ -9,16 +9,9 @@
|
||||
<!------ ADD PAGE SPECIFIC HEADERS ------->
|
||||
{{ block "header" . }} {{ end }}
|
||||
|
||||
<!-- ADD GOOGLE ANALYTICS IF ENABLED -->
|
||||
{{ if site.GoogleAnalytics }}
|
||||
<!-- Google Analytics v3 ID -->
|
||||
{{ if hasPrefix site.GoogleAnalytics "UA-"}}
|
||||
{{ template "_internal/google_analytics_async.html" . }}
|
||||
{{ else }}
|
||||
<!-- Google Analytics v4 ID -->
|
||||
{{ template "_internal/google_analytics.html" . }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
<!--================= add analytics if enabled =========================-->
|
||||
{{- partial "analytics.html" . -}}
|
||||
|
||||
</head>
|
||||
|
||||
<body data-spy="scroll" data-target="#TableOfContents" data-offset="80">
|
||||
@@ -45,5 +38,9 @@
|
||||
|
||||
<!------- ADD PAGE SPECIFIC SCRIPTS ------>
|
||||
{{ block "scripts" . }} {{ end }}
|
||||
|
||||
<!------ IF WANTED, ADD SUPPORT LINKS -------->
|
||||
{{- partial "misc/support.html" . -}}
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{{- $.Scratch.Add "index" slice -}}
|
||||
{{- range .Site.RegularPages -}}
|
||||
{{- range (where .Site.RegularPages "Layout" "!=" "search") -}}
|
||||
{{- $.Scratch.Add "index" (dict "title" .Title "hero" (partial "helpers/get-hero.html" .) "date" (.Date.Format "January 2, 2006") "summary" .Summary "tags" .Params.tags "categories" .Params.categories "contents" .Plain "permalink" .Permalink) -}}
|
||||
{{- end -}}
|
||||
{{- $.Scratch.Get "index" | jsonify -}}
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
<div class="sidebar-holder">
|
||||
<div class="sidebar" id="sidebar">
|
||||
<form class="mx-auto" method="get" action="{{ "search" | relLangURL }}">
|
||||
<input type="text" name="keyword" value="" placeholder="Search" data-search="" id="search-box" />
|
||||
<input type="text" name="keyword" value="" placeholder="{{ i18n "search" }}" data-search="" id="search-box" />
|
||||
</form>
|
||||
<div class="sidebar-tree">
|
||||
<ul class="tree" id="tree">
|
||||
@@ -55,7 +55,3 @@
|
||||
</div>
|
||||
</section>
|
||||
{{ end }}
|
||||
|
||||
{{ define "scripts" }}
|
||||
<script src="{{ "/js/list.js" | relURL }}"></script>
|
||||
{{ end }}
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
{{- $pctx := . -}}
|
||||
{{- if .IsHome -}}{{ $pctx = .Site }}{{- end -}}
|
||||
{{- $pages := slice -}}
|
||||
{{- if $.IsHome -}}
|
||||
{{- $pages = sort $pctx.RegularPages "Date" "desc" -}}
|
||||
{{- else if $.IsSection -}}
|
||||
{{- $pages = sort $pctx.RegularPagesRecursive "Date" "desc" -}}
|
||||
{{- else -}}
|
||||
{{- $pages = sort $pctx.RegularPagesRecursive "Date" "desc" -}}
|
||||
{{- end -}}
|
||||
{{- $limit := .Site.Config.Services.RSS.Limit -}}
|
||||
{{- if ge $limit 1 -}}
|
||||
{{- $pages = $pages | first $limit -}}
|
||||
{{- end -}}
|
||||
{{- printf "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>" | safeHTML }}
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||
<channel>
|
||||
<title>{{ if eq .Title .Site.Title }}{{ .Site.Title }}{{ else }}{{ with .Title }}{{.}} on {{ end }}{{ .Site.Title }}{{ end }}</title>
|
||||
<link>{{ .Permalink }}</link>
|
||||
<description>Recent content {{ if ne .Title .Site.Title }}{{ with .Title }}in {{.}} {{ end }}{{ end }}on {{ .Site.Title }}</description>
|
||||
<generator>Hugo -- gohugo.io</generator>{{ with .Site.LanguageCode }}
|
||||
<language>{{.}}</language>{{end}}{{ with .Site.Author.email }}
|
||||
<managingEditor>{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}</managingEditor>{{end}}{{ with .Site.Author.email }}
|
||||
<webMaster>{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}</webMaster>{{end}}{{ with .Site.Copyright }}
|
||||
<copyright>{{.}}</copyright>{{end}}{{ if not .Date.IsZero }}
|
||||
<lastBuildDate>{{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</lastBuildDate>{{ end }}
|
||||
{{- with .OutputFormats.Get "RSS" -}}
|
||||
{{ printf "<atom:link href=%q rel=\"self\" type=%q />" .Permalink .MediaType | safeHTML }}
|
||||
{{- end -}}
|
||||
{{ range $pages }}
|
||||
{{- if ne .RelPermalink "/search/" -}}
|
||||
<item>
|
||||
<title>{{ .Title }}</title>
|
||||
<link>{{ .Permalink }}</link>
|
||||
<pubDate>{{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</pubDate>
|
||||
{{ with .Site.Author.email }}<author>{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}</author>{{end}}
|
||||
<guid>{{ .Permalink }}</guid>
|
||||
<description>{{ .Summary | html }}</description>
|
||||
</item>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
</channel>
|
||||
</rss>
|
||||
@@ -20,7 +20,7 @@
|
||||
<div class="sidebar-holder">
|
||||
<div class="sidebar" id="sidebar">
|
||||
<form class="mx-auto" method="get" action="{{ "search" | relLangURL }}">
|
||||
<input type="text" name="keyword" value="" placeholder="Search" data-search="" id="search-box" />
|
||||
<input type="text" name="keyword" value="" placeholder="{{ i18n "search" }}" data-search="" id="search-box" />
|
||||
</form>
|
||||
<div class="sidebar-tree">
|
||||
<ul class="tree" id="tree">
|
||||
@@ -66,9 +66,3 @@
|
||||
</div>
|
||||
</section>
|
||||
{{ end }}
|
||||
|
||||
{{ define "scripts" }}
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/fuse.js/3.2.0/fuse.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/mark.js/8.11.1/jquery.mark.min.js"></script>
|
||||
<script src="{{ "/js/search.js" | absURL }}"></script>
|
||||
{{ end }}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user