ajout Dockerfil
9
Dockerfile
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
FROM debian:bullseye-slim
|
||||||
|
RUN apt update -y
|
||||||
|
RUN apt install tree less openssh-server wamerican accountsservice -y
|
||||||
|
RUN useradd -rm -d /home/debian -s /bin/bash -g root -G sudo -u 1000 test
|
||||||
|
RUN service ssh start
|
||||||
|
COPY . /home/debian
|
||||||
|
EXPOSE 22
|
||||||
|
RUN /home/debian/deploy.sh
|
||||||
|
CMD ["/usr/sbin/sshd", "-D"]
|
||||||
93
README.md
@ -1,93 +1,8 @@
|
|||||||
# enter-bash
|
# enter-bash
|
||||||
|
|
||||||
|
Bash-enter is a game to discover Bash.
|
||||||
|
You have to go through different levels, using ssh.
|
||||||
|
For each level, you have to find the password for the next level.
|
||||||
|
Each level's user is named level1, level2, level3, etc.
|
||||||
|
|
||||||
|
|
||||||
## Getting started
|
|
||||||
|
|
||||||
To make it easy for you to get started with GitLab, here's a list of recommended next steps.
|
|
||||||
|
|
||||||
Already a pro? Just edit this README.md and make it your own. Want to make it easy? [Use the template at the bottom](#editing-this-readme)!
|
|
||||||
|
|
||||||
## Add your files
|
|
||||||
|
|
||||||
- [ ] [Create](https://gitlab.com/-/experiment/new_project_readme_content:e5017ec4bd6fd02187cc90d26fafb563?https://docs.gitlab.com/ee/user/project/repository/web_editor.html#create-a-file) or [upload](https://gitlab.com/-/experiment/new_project_readme_content:e5017ec4bd6fd02187cc90d26fafb563?https://docs.gitlab.com/ee/user/project/repository/web_editor.html#upload-a-file) files
|
|
||||||
- [ ] [Add files using the command line](https://gitlab.com/-/experiment/new_project_readme_content:e5017ec4bd6fd02187cc90d26fafb563?https://docs.gitlab.com/ee/gitlab-basics/add-file.html#add-a-file-using-the-command-line) or push an existing Git repository with the following command:
|
|
||||||
|
|
||||||
```
|
|
||||||
cd existing_repo
|
|
||||||
git remote add origin https://gitlab.com/garagenum/greg/enter-bash.git
|
|
||||||
git branch -M main
|
|
||||||
git push -uf origin main
|
|
||||||
```
|
|
||||||
|
|
||||||
## Integrate with your tools
|
|
||||||
|
|
||||||
- [ ] [Set up project integrations](https://gitlab.com/-/experiment/new_project_readme_content:e5017ec4bd6fd02187cc90d26fafb563?https://gitlab.com/garagenum/greg/enter-bash/-/settings/integrations)
|
|
||||||
|
|
||||||
## Collaborate with your team
|
|
||||||
|
|
||||||
- [ ] [Invite team members and collaborators](https://gitlab.com/-/experiment/new_project_readme_content:e5017ec4bd6fd02187cc90d26fafb563?https://docs.gitlab.com/ee/user/project/members/)
|
|
||||||
- [ ] [Create a new merge request](https://gitlab.com/-/experiment/new_project_readme_content:e5017ec4bd6fd02187cc90d26fafb563?https://docs.gitlab.com/ee/user/project/merge_requests/creating_merge_requests.html)
|
|
||||||
- [ ] [Automatically close issues from merge requests](https://gitlab.com/-/experiment/new_project_readme_content:e5017ec4bd6fd02187cc90d26fafb563?https://docs.gitlab.com/ee/user/project/issues/managing_issues.html#closing-issues-automatically)
|
|
||||||
- [ ] [Enable merge request approvals](https://gitlab.com/-/experiment/new_project_readme_content:e5017ec4bd6fd02187cc90d26fafb563?https://docs.gitlab.com/ee/user/project/merge_requests/approvals/)
|
|
||||||
- [ ] [Automatically merge when pipeline succeeds](https://gitlab.com/-/experiment/new_project_readme_content:e5017ec4bd6fd02187cc90d26fafb563?https://docs.gitlab.com/ee/user/project/merge_requests/merge_when_pipeline_succeeds.html)
|
|
||||||
|
|
||||||
## Test and Deploy
|
|
||||||
|
|
||||||
Use the built-in continuous integration in GitLab.
|
|
||||||
|
|
||||||
- [ ] [Get started with GitLab CI/CD](https://gitlab.com/-/experiment/new_project_readme_content:e5017ec4bd6fd02187cc90d26fafb563?https://docs.gitlab.com/ee/ci/quick_start/index.html)
|
|
||||||
- [ ] [Analyze your code for known vulnerabilities with Static Application Security Testing(SAST)](https://gitlab.com/-/experiment/new_project_readme_content:e5017ec4bd6fd02187cc90d26fafb563?https://docs.gitlab.com/ee/user/application_security/sast/)
|
|
||||||
- [ ] [Deploy to Kubernetes, Amazon EC2, or Amazon ECS using Auto Deploy](https://gitlab.com/-/experiment/new_project_readme_content:e5017ec4bd6fd02187cc90d26fafb563?https://docs.gitlab.com/ee/topics/autodevops/requirements.html)
|
|
||||||
- [ ] [Use pull-based deployments for improved Kubernetes management](https://gitlab.com/-/experiment/new_project_readme_content:e5017ec4bd6fd02187cc90d26fafb563?https://docs.gitlab.com/ee/user/clusters/agent/)
|
|
||||||
- [ ] [Set up protected environments](https://gitlab.com/-/experiment/new_project_readme_content:e5017ec4bd6fd02187cc90d26fafb563?https://docs.gitlab.com/ee/ci/environments/protected_environments.html)
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
# Editing this README
|
|
||||||
|
|
||||||
When you're ready to make this README your own, just edit this file and use the handy template below (or feel free to structure it however you want - this is just a starting point!). Thank you to [makeareadme.com](https://gitlab.com/-/experiment/new_project_readme_content:e5017ec4bd6fd02187cc90d26fafb563?https://www.makeareadme.com/) for this template.
|
|
||||||
|
|
||||||
## Suggestions for a good README
|
|
||||||
Every project is different, so consider which of these sections apply to yours. The sections used in the template are suggestions for most open source projects. Also keep in mind that while a README can be too long and detailed, too long is better than too short. If you think your README is too long, consider utilizing another form of documentation rather than cutting out information.
|
|
||||||
|
|
||||||
## Name
|
|
||||||
Choose a self-explaining name for your project.
|
|
||||||
|
|
||||||
## Description
|
|
||||||
Let people know what your project can do specifically. Provide context and add a link to any reference visitors might be unfamiliar with. A list of Features or a Background subsection can also be added here. If there are alternatives to your project, this is a good place to list differentiating factors.
|
|
||||||
|
|
||||||
## Badges
|
|
||||||
On some READMEs, you may see small images that convey metadata, such as whether or not all the tests are passing for the project. You can use Shields to add some to your README. Many services also have instructions for adding a badge.
|
|
||||||
|
|
||||||
## Visuals
|
|
||||||
Depending on what you are making, it can be a good idea to include screenshots or even a video (you'll frequently see GIFs rather than actual videos). Tools like ttygif can help, but check out Asciinema for a more sophisticated method.
|
|
||||||
|
|
||||||
## Installation
|
|
||||||
Within a particular ecosystem, there may be a common way of installing things, such as using Yarn, NuGet, or Homebrew. However, consider the possibility that whoever is reading your README is a novice and would like more guidance. Listing specific steps helps remove ambiguity and gets people to using your project as quickly as possible. If it only runs in a specific context like a particular programming language version or operating system or has dependencies that have to be installed manually, also add a Requirements subsection.
|
|
||||||
|
|
||||||
## Usage
|
|
||||||
Use examples liberally, and show the expected output if you can. It's helpful to have inline the smallest example of usage that you can demonstrate, while providing links to more sophisticated examples if they are too long to reasonably include in the README.
|
|
||||||
|
|
||||||
## Support
|
|
||||||
Tell people where they can go to for help. It can be any combination of an issue tracker, a chat room, an email address, etc.
|
|
||||||
|
|
||||||
## Roadmap
|
|
||||||
If you have ideas for releases in the future, it is a good idea to list them in the README.
|
|
||||||
|
|
||||||
## Contributing
|
|
||||||
State if you are open to contributions and what your requirements are for accepting them.
|
|
||||||
|
|
||||||
For people who want to make changes to your project, it's helpful to have some documentation on how to get started. Perhaps there is a script that they should run or some environment variables that they need to set. Make these steps explicit. These instructions could also be useful to your future self.
|
|
||||||
|
|
||||||
You can also document commands to lint the code or run tests. These steps help to ensure high code quality and reduce the likelihood that the changes inadvertently break something. Having instructions for running tests is especially helpful if it requires external setup, such as starting a Selenium server for testing in a browser.
|
|
||||||
|
|
||||||
## Authors and acknowledgment
|
|
||||||
Show your appreciation to those who have contributed to the project.
|
|
||||||
|
|
||||||
## License
|
|
||||||
For open source projects, say how it is licensed.
|
|
||||||
|
|
||||||
## Project status
|
|
||||||
If you have run out of energy or time for your project, put a note at the top of the README saying that development has slowed down or stopped completely. Someone may choose to fork your project or volunteer to step in as a maintainer or owner, allowing your project to keep going. You can also make an explicit request for maintainers.
|
|
||||||
|
|
||||||
|
|||||||
3
aside/questions.md
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
- Niveau 2
|
||||||
|
- Qu'est-ce qu'un système d'exploitation
|
||||||
|
|
||||||
46
config.toml
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
baseurl = "https://devops.legaragenumerique.fr/"
|
||||||
|
contentdir = "content"
|
||||||
|
layoutdir = "layouts"
|
||||||
|
publishdir = "public"
|
||||||
|
title = "Enter Bash"
|
||||||
|
canonifyurls = true
|
||||||
|
|
||||||
|
DefaultContentLanguage = "fr"
|
||||||
|
theme = "beautifulhugo"
|
||||||
|
metaDataFormat = "yaml"
|
||||||
|
pygmentsUseClasses = true
|
||||||
|
pygmentCodeFences = true
|
||||||
|
#disqusShortname = "XXX"
|
||||||
|
#googleAnalytics = "XXX"
|
||||||
|
|
||||||
|
[Params]
|
||||||
|
subtitle = "Un jeu pour découvrir Bash"
|
||||||
|
logo = "img/SIGNALweb.png"
|
||||||
|
favicon = "img/LOGOweb.png"
|
||||||
|
dateFormat = "2 January 2 2006"
|
||||||
|
commit = false
|
||||||
|
rss = false
|
||||||
|
comments = true
|
||||||
|
# gcse = "012345678901234567890:abcdefghijk" # Get your code from google.com/cse. Make sure to go to "Look and Feel" and change Layout to "Full Width" and Theme to "Classic"
|
||||||
|
|
||||||
|
#[[Params.bigimg]]
|
||||||
|
# src = "img/triangle.jpg"
|
||||||
|
# desc = "Triangle"
|
||||||
|
#[[Params.bigimg]]
|
||||||
|
# src = "img/sphere.jpg"
|
||||||
|
# desc = "Sphere"
|
||||||
|
#[[Params.bigimg]]
|
||||||
|
# src = "img/hexagon.jpg"
|
||||||
|
# desc = "Hexagon"
|
||||||
|
|
||||||
|
[Author]
|
||||||
|
name = "Le Garage Numérique"
|
||||||
|
email = "contact@legaragenumerique.fr"
|
||||||
|
facebook = "garagenumeriqueparis"
|
||||||
|
gitlab = "garagenum"
|
||||||
|
twitter = "garagenumerique"
|
||||||
|
linkedin = "le-garage-num%C3%A9rique"
|
||||||
|
snapchat = "legarage_num"
|
||||||
|
instagram = "legaragenum"
|
||||||
|
|
||||||
|
|
||||||
18
content/_index.md
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
Pour découvrir bash ,
|
||||||
|
|
||||||
|
démarrez un terminal et connectez-vous avec la commande suivante:
|
||||||
|
**ssh level1@bash.legaragenumerique.fr**
|
||||||
|
|
||||||
|
```
|
||||||
|
visiteur@mypc:~$ ssh level1@bash.legaragenumerique.fr
|
||||||
|
level1@bash.legaragenumerique.fr's password:
|
||||||
|
```
|
||||||
|
|
||||||
|
Écrivez le mot de passe: **knj-yhn-576**.
|
||||||
|
|
||||||
|
Rien ne s'affiche, c'est normal, c'est pour que la personne qui regarde derrière votre épaule ne connaisse pas le nombre de caractères du mot de passe.
|
||||||
|
|
||||||
|
Appuyez ensuite sur Entrée pour valider le mot de passe.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
46
deploy.sh
Executable file
@ -0,0 +1,46 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Execute the script as root
|
||||||
|
|
||||||
|
|
||||||
|
### add some packages
|
||||||
|
apt -y update
|
||||||
|
apt -y install tree wamerican
|
||||||
|
|
||||||
|
### Création des utilisateurs
|
||||||
|
|
||||||
|
touch /etc/skel/.hushlogin # To suppress /etc/motd and Gandi message
|
||||||
|
|
||||||
|
for i in {1..10} ; do deluser level$i ; delgroup level$i ; rm -Rfv /home/level$i ; done
|
||||||
|
|
||||||
|
# hashes are done with mkpassword -m shA-512 PASSWORD . First column ($ as sep.) is for method, 2nd is for seed, 3 is encrypted pwd.
|
||||||
|
|
||||||
|
useradd -m -s /bin/bash -p '$6$12345678$z6Yi8kgUombQ0LWF6tYGnRpKjqMgm.NULCC03xD6mDMclpCsfSZfVR5ehRTdEgb0i09PVLN51cUTJAyjWZTr41' level1 #knj-yhn-576
|
||||||
|
useradd -m -s /bin/bash -p '$6$12345678$QLwlPOpn3lOH988Xamb1GaSSkG5JSIWcrkx.b0sFhPU9ceSpPOSLeE265PX23zXEWF3dz/nbJEDMpIRMW7OB0.' level2 #kbc-209-xdf
|
||||||
|
useradd -m -s /bin/bash -p '$6$12345678$h4IhZhhMPr/h6gVyWVZwTYFldW/clQwTDdheLhiTKmrgj.vv4KSBTYaOEchzfz73X0hpFjRcE6bDc6l8FXZfW1' level3 #ihj-pli-444
|
||||||
|
useradd -m -s /bin/bash -p '$6$eG7L5FVdvn$WnxWH5Cjt.mOUElddKez66cW4SAOQGwslbChK5EiQgac9rDln/c1VYjXjSzY9XrkmeWQCTjgWOtQ4oD9Qly9s/' level4 #bvi-rsk-820
|
||||||
|
useradd -m -s /bin/bash -p '$6$qA//d3/4X$KNnEkQiGHzJcahwZdKs6PBgTB7NHDj6QKMWMcErD0qkbltAV6/8QuSym6yGTUs8b3ksPlMHrX2kdWIrUqbidL1' level5 #830-bus-fux
|
||||||
|
useradd -m -s /bin/bash -p '$6$e1.zNiSsuIB$xYF7oMVVcHoQDLljdcSGN4g/Gj3/TxU1mdHv5LX5gtplOA5RBOMh1Jr.JFcGNPbg1SDjUCit7jpF//2L0m1AV.' level6 #wdo-bou-fun
|
||||||
|
useradd -m -s /bin/bash -p '$6$P6Olk2sRKl$JUJlERtQxYivrW.igFcg7N0K2p83Ed1RyYws..LrblMLQYopxGApPnjTyAYxOjr75l5O73hFBNie0BneBBvWp/' level7 #ocj-eyf-thc
|
||||||
|
useradd -m -s /bin/bash -p '$6$CrgxMXpbZDTE6Ta6$iYtpCcmRk9Bo.KSCSzL.99B309ZhD5qgvNr8K3jYz5ugiLknKP6m.hORlfJx2QUfsASeSj4m25vlDX3c4unBV1' level8 #fuf-612-vhi
|
||||||
|
useradd -m -s /bin/bash -p '$6$2lgI6wKPuF98gNW$fG8kCkaQkxxTEsg/PKnMCdqXblN9UHVSr6xESJlmHA9luUqFm4.zPLCFHDx6IwgTSo95Z9CKLY09q19lkrYNn/' level9 #wqp-230-ang
|
||||||
|
useradd -m -s /bin/bash -p '$6$qRV0jKJxhWmb$kxs4fKMkLg2diqNdAqPpA8lZ4cW5OoR8Rf7xBnJp1L2btsKDKFpIAA9manXUMsXplmGoEqwjGcBH0QG4ws7nA.' level10 #qpe-fvx-718
|
||||||
|
|
||||||
|
|
||||||
|
for i in {1..10}; do
|
||||||
|
#bash chmod +x scripts/level$i-init.sh
|
||||||
|
bash /home/debian/scripts/level$i-init.sh
|
||||||
|
done
|
||||||
|
|
||||||
|
for i in {1..10}; do chown -Rfv level$i:level$i /home/level$i ; chmod ug+x /home/level$i/.*.sh ; chmod ug+x /home/level$i/*.sh ; chmod -R a-w /home/level$i ; chmod ug+w /home/level8/script.sh; done
|
||||||
|
|
||||||
|
touch /var/lib/AccountsService/users/level{1..10}
|
||||||
|
for i in /var/lib/AccountsService/users/level{1..10} ; do
|
||||||
|
cat << EOF >> $i
|
||||||
|
[User]
|
||||||
|
Language=
|
||||||
|
XSession=gnome
|
||||||
|
SystemAccount=true
|
||||||
|
|
||||||
|
EOF
|
||||||
|
done
|
||||||
82
log.log
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
removed '/home/level1/.bashrc'
|
||||||
|
removed directory '/home/level1'
|
||||||
|
removed '/home/level2/ihj-pli-444'
|
||||||
|
removed '/home/level2/fichier3'
|
||||||
|
removed directory '/home/level2/dossier2'
|
||||||
|
removed '/home/level2/fichier6'
|
||||||
|
removed '/home/level2/.bashrc'
|
||||||
|
removed directory '/home/level2/dossier3'
|
||||||
|
removed '/home/level2/fichier2'
|
||||||
|
removed directory '/home/level2/dossier1'
|
||||||
|
removed '/home/level2/fichier5'
|
||||||
|
removed '/home/level2/fichier1'
|
||||||
|
removed '/home/level2/fichier4'
|
||||||
|
removed directory '/home/level2'
|
||||||
|
removed '/home/level3/README'
|
||||||
|
removed '/home/level3/.bashrc'
|
||||||
|
removed directory '/home/level3'
|
||||||
|
removed '/home/level4/README'
|
||||||
|
removed '/home/level4/.bashrc'
|
||||||
|
removed directory '/home/level4'
|
||||||
|
removed '/home/level5/README'
|
||||||
|
removed '/home/level5/.bashrc'
|
||||||
|
removed '/home/level5/script.sh'
|
||||||
|
removed directory '/home/level5'
|
||||||
|
removed '/home/level6/README'
|
||||||
|
removed '/home/level6/.bashrc'
|
||||||
|
removed '/home/level6/script.sh'
|
||||||
|
removed directory '/home/level6'
|
||||||
|
removed '/home/level7/README'
|
||||||
|
removed '/home/level7/.bashrc'
|
||||||
|
removed '/home/level7/script.sh'
|
||||||
|
removed directory '/home/level7'
|
||||||
|
removed '/home/level8/README'
|
||||||
|
removed '/home/level8/.bashrc'
|
||||||
|
removed '/home/level8/.clear.sh'
|
||||||
|
removed '/home/level8/debug.sh'
|
||||||
|
removed '/home/level8/script.sh'
|
||||||
|
removed directory '/home/level8'
|
||||||
|
removed '/home/level9/.bashrc'
|
||||||
|
removed directory '/home/level9'
|
||||||
|
removed directory '/home/level10'
|
||||||
|
changed ownership of '/home/level1/.bashrc' from root:root to level1:level1
|
||||||
|
ownership of '/home/level1' retained as level1:level1
|
||||||
|
changed ownership of '/home/level2/ihj-pli-444' from root:root to level2:level2
|
||||||
|
changed ownership of '/home/level2/fichier3' from root:root to level2:level2
|
||||||
|
changed ownership of '/home/level2/dossier2' from root:root to level2:level2
|
||||||
|
changed ownership of '/home/level2/fichier6' from root:root to level2:level2
|
||||||
|
changed ownership of '/home/level2/.bashrc' from root:root to level2:level2
|
||||||
|
changed ownership of '/home/level2/dossier3' from root:root to level2:level2
|
||||||
|
changed ownership of '/home/level2/fichier2' from root:root to level2:level2
|
||||||
|
changed ownership of '/home/level2/dossier1' from root:root to level2:level2
|
||||||
|
changed ownership of '/home/level2/fichier5' from root:root to level2:level2
|
||||||
|
changed ownership of '/home/level2/fichier1' from root:root to level2:level2
|
||||||
|
changed ownership of '/home/level2/fichier4' from root:root to level2:level2
|
||||||
|
ownership of '/home/level2' retained as level2:level2
|
||||||
|
changed ownership of '/home/level3/README' from root:root to level3:level3
|
||||||
|
changed ownership of '/home/level3/.bashrc' from root:root to level3:level3
|
||||||
|
ownership of '/home/level3' retained as level3:level3
|
||||||
|
changed ownership of '/home/level4/README' from root:root to level4:level4
|
||||||
|
changed ownership of '/home/level4/.bashrc' from root:root to level4:level4
|
||||||
|
ownership of '/home/level4' retained as level4:level4
|
||||||
|
changed ownership of '/home/level5/README' from root:root to level5:level5
|
||||||
|
changed ownership of '/home/level5/.bashrc' from root:root to level5:level5
|
||||||
|
changed ownership of '/home/level5/script.sh' from root:root to level5:level5
|
||||||
|
ownership of '/home/level5' retained as level5:level5
|
||||||
|
changed ownership of '/home/level6/README' from root:root to level6:level6
|
||||||
|
changed ownership of '/home/level6/.bashrc' from root:root to level6:level6
|
||||||
|
changed ownership of '/home/level6/script.sh' from root:root to level6:level6
|
||||||
|
ownership of '/home/level6' retained as level6:level6
|
||||||
|
changed ownership of '/home/level7/README' from root:root to level7:level7
|
||||||
|
changed ownership of '/home/level7/.bashrc' from root:root to level7:level7
|
||||||
|
changed ownership of '/home/level7/script.sh' from root:root to level7:level7
|
||||||
|
ownership of '/home/level7' retained as level7:level7
|
||||||
|
changed ownership of '/home/level8/README' from root:root to level8:level8
|
||||||
|
changed ownership of '/home/level8/.bashrc' from root:root to level8:level8
|
||||||
|
changed ownership of '/home/level8/.clear.sh' from root:root to level8:level8
|
||||||
|
changed ownership of '/home/level8/debug.sh' from root:root to level8:level8
|
||||||
|
changed ownership of '/home/level8/script.sh' from root:root to level8:level8
|
||||||
|
ownership of '/home/level8' retained as level8:level8
|
||||||
|
changed ownership of '/home/level9/.bashrc' from root:root to level9:level9
|
||||||
|
ownership of '/home/level9' retained as level9:level9
|
||||||
|
ownership of '/home/level10' retained as level10:level10
|
||||||
29
scripts/level1-init.sh
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
cat <<- EOF1 >> /home/level1/.bashrc
|
||||||
|
cat << NestedEOF1
|
||||||
|
|
||||||
|
Bienvenue!
|
||||||
|
|
||||||
|
Vous avez réussi à vous connecter au serveur!
|
||||||
|
|
||||||
|
Pour passer au niveau 2, il faut écrire la commande suivante:
|
||||||
|
|
||||||
|
su - level2
|
||||||
|
|
||||||
|
La commande su permet de changer d'utilisateur (Switch User).
|
||||||
|
N'oubliez pas le "-" (tiret du 6) entre "su" et "level2"
|
||||||
|
|
||||||
|
Appuyez ensuite sur Entrée, et saisissez le mot de passe suivant:
|
||||||
|
|
||||||
|
kbc-209-xdf
|
||||||
|
|
||||||
|
|
||||||
|
puis appuyez sur Entrée à nouveau!
|
||||||
|
|
||||||
|
|
||||||
|
NestedEOF1
|
||||||
|
EOF1
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
44
scripts/level2-init.sh
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
cat <<- EOF1 >> /home/level2/.bashrc
|
||||||
|
cat << NestedEOF1
|
||||||
|
|
||||||
|
Super!
|
||||||
|
|
||||||
|
|
||||||
|
Bienvenue dans le niveau 2 !
|
||||||
|
|
||||||
|
Vous êtes en train d'utiliser Linux, un SYSTÈME D'EXPLOITATION OPEN-SOURCE.
|
||||||
|
|
||||||
|
Nous allons apprendre quelques commandes de base pour manipuler le système.
|
||||||
|
|
||||||
|
Commencez par écrire la commande "ls" (ne mettez pas les guillemets)
|
||||||
|
|
||||||
|
Appuyez ensuite sur Entrée
|
||||||
|
|
||||||
|
Vous voyez la liste des fichiers du DOSSIER COURANT
|
||||||
|
|
||||||
|
Le nom de l'un des fichiers est le mot de passe pour le niveau 3.
|
||||||
|
|
||||||
|
Tapez su - level3 puis Entrée et saisissez le mot de passe
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
NestedEOF1
|
||||||
|
EOF1
|
||||||
|
|
||||||
|
|
||||||
|
for i in {1..6} ; do
|
||||||
|
touch /home/level2/fichier$i ;
|
||||||
|
cat <<- EOF2 >> /home/level2/fichier$i
|
||||||
|
|
||||||
|
Ceci est le contenu du fichier nommé fichier$i
|
||||||
|
|
||||||
|
EOF2
|
||||||
|
done
|
||||||
|
|
||||||
|
for i in {1..3} ; do
|
||||||
|
mkdir /home/level2/dossier$i ;
|
||||||
|
done
|
||||||
|
|
||||||
|
touch /home/level2/ihj-pli-444
|
||||||
28
scripts/level3-init.sh
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
cat <<- EOF1 >> /home/level3/.bashrc
|
||||||
|
cat << NestedEOF1
|
||||||
|
|
||||||
|
|
||||||
|
Bravo, vous êtes déjà arrivés au 3eme niveau!
|
||||||
|
|
||||||
|
Nous allons maintenant apprendre à regarder le contenu d'un fichier.
|
||||||
|
|
||||||
|
Avec la commande ls, vous voyer un fichier nommé "README" (Lisez-moi).
|
||||||
|
|
||||||
|
Saisissez la commande suivante pour afficher son contenu:
|
||||||
|
|
||||||
|
cat README
|
||||||
|
|
||||||
|
Écrivez bien README en majuscules
|
||||||
|
|
||||||
|
Connectez-vous maintenant au niveau 4 avec la commande
|
||||||
|
|
||||||
|
su - level4
|
||||||
|
|
||||||
|
NestedEOF1
|
||||||
|
EOF1
|
||||||
|
|
||||||
|
touch /home/level3/README
|
||||||
|
echo "mot de passe : bvi-rsk-820" > /home/level3/README
|
||||||
|
|
||||||
38
scripts/level4-init.sh
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
cat <<- EOF1 >> /home/level4/.bashrc
|
||||||
|
cat << NestedEOF1
|
||||||
|
|
||||||
|
|
||||||
|
Vous êtes au 4eme niveau.
|
||||||
|
|
||||||
|
Certains fichiers sont trop longs être lus avec cat.
|
||||||
|
|
||||||
|
Nous allons utiliser la commande "less" pour naviguer dans le fichier.
|
||||||
|
|
||||||
|
Une fois dans "less", utilisez les flèches haut et bas pour naviquer,
|
||||||
|
|
||||||
|
et appuyez sur q pour quitter.
|
||||||
|
|
||||||
|
Vous trouverez le mot de passe au milieu du fichier.
|
||||||
|
|
||||||
|
Saisissez la commande suivante:
|
||||||
|
|
||||||
|
less README
|
||||||
|
|
||||||
|
Quand vous aurez trouvé le mot de passe, connectez-vous au niveau 5:
|
||||||
|
|
||||||
|
su - level5
|
||||||
|
|
||||||
|
NestedEOF1
|
||||||
|
EOF1
|
||||||
|
|
||||||
|
touch /home/level4/README
|
||||||
|
|
||||||
|
for i in {1..90} ; do shuf -n4 /usr/share/dict/words |tr '\n' ' ' >> /home/level4/README \
|
||||||
|
&& echo ' ' >> /home/level4/README ; done
|
||||||
|
echo "mot de passe : 830-bus-fux" >> /home/level4/README
|
||||||
|
for i in {1..90} ; do shuf -n4 /usr/share/dict/words |tr '\n' ' ' >> /home/level4/README \
|
||||||
|
&& echo ' ' >> /home/level4/README ; done
|
||||||
|
|
||||||
|
|
||||||
58
scripts/level5-init.sh
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
cat <<- EOF1 >> /home/level5/.bashrc
|
||||||
|
cat << NestedEOF1
|
||||||
|
|
||||||
|
|
||||||
|
Vous êtes au 5eme niveau.
|
||||||
|
|
||||||
|
C'est presque la dernière fois que vous verrez un message d'accueil.
|
||||||
|
|
||||||
|
Il vous faudra désormais lire le contenu du fichier README.
|
||||||
|
|
||||||
|
Saisissez la commande
|
||||||
|
|
||||||
|
less README
|
||||||
|
|
||||||
|
et suivez les indications.
|
||||||
|
|
||||||
|
Appuyez sur la touche q pour quitter less !
|
||||||
|
|
||||||
|
|
||||||
|
NestedEOF1
|
||||||
|
EOF1
|
||||||
|
|
||||||
|
touch /home/level5/README
|
||||||
|
|
||||||
|
cat << EOF2 > /home/level5/README
|
||||||
|
|
||||||
|
Pour trouver le mot de passe du 5ème niveau,
|
||||||
|
|
||||||
|
vous allez exécuter un script.
|
||||||
|
|
||||||
|
Un script, c'est comme un petit logiciel, qui tient dans un seul fichier.
|
||||||
|
|
||||||
|
Pour exécuter un script, on utilise la commande bash,
|
||||||
|
suivi du nom du fichier.
|
||||||
|
|
||||||
|
Saisissez la commande
|
||||||
|
|
||||||
|
bash script.sh
|
||||||
|
|
||||||
|
et appuyez sur Entrée. Connectez-vous ensuite au niveau 6 avec
|
||||||
|
|
||||||
|
su - level6
|
||||||
|
|
||||||
|
EOF2
|
||||||
|
|
||||||
|
touch /home/level5/script.sh
|
||||||
|
chmod u+x /home/level5/script.sh
|
||||||
|
|
||||||
|
cat << EOF3 > /home/level5/script.sh
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
echo " le mot de passe est wdo-810-289-bou-104-910-429-fun " |sed 's/[[:digit:]]\+\-//g'
|
||||||
|
|
||||||
|
EOF3
|
||||||
|
|
||||||
|
|
||||||
38
scripts/level6-init.sh
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
echo "echo 'Lisez le README avec la commande less README (q pour quitter) ' " >> /home/level6/.bashrc
|
||||||
|
|
||||||
|
touch /home/level6/README
|
||||||
|
|
||||||
|
cat << EOF2 > /home/level6/README
|
||||||
|
|
||||||
|
Les scripts peuvent aussi être interactifs, et demander à l'utilisateur
|
||||||
|
de confirmer une action ou d'écrire une information.
|
||||||
|
|
||||||
|
Éxecutez le script présent dans le dossier avec la commande:
|
||||||
|
|
||||||
|
bash script.sh
|
||||||
|
|
||||||
|
EOF2
|
||||||
|
|
||||||
|
touch /home/level6/script.sh
|
||||||
|
chmod u+x /home/level6/script.sh
|
||||||
|
|
||||||
|
cat << 'EOF3' > /home/level6/script.sh
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
cat <<- 'EOF4'
|
||||||
|
Pour obtenir le mot de passe,
|
||||||
|
|
||||||
|
Répondez à la question suivante et validez avec Entrée:
|
||||||
|
|
||||||
|
Quel est le système d'exploitation que nous utilisons actuellement?
|
||||||
|
|
||||||
|
EOF4
|
||||||
|
|
||||||
|
read os_used
|
||||||
|
os_low="$(echo $os_used |tr [:upper:] [:lower:])"
|
||||||
|
[[ "$os_low" = "linux" ]] \
|
||||||
|
&& printf "\nC'est bien ça ! \n\nle mot de passe du niveau 7 est ocj-728-289-eyf-267-108-thc \n\nConnectez-vous avec le commande \n\n su - level7 \n" |sed 's/[[:digit:]]\+\-//g' \
|
||||||
|
|| printf "Non, ce n\'est pas $os_low, relancez le script pour essayer à nouveau\n"
|
||||||
|
|
||||||
|
|
||||||
|
EOF3
|
||||||
32
scripts/level7-init.sh
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
echo "echo 'Lisez le README avec la commande less README' \(q pour quitter\)" >> /home/level7/.bashrc
|
||||||
|
|
||||||
|
touch /home/level7/README
|
||||||
|
|
||||||
|
cat << EOF1 > /home/level7/README
|
||||||
|
|
||||||
|
La différence entre un script et un logiciel classique, c'est qu'un script,
|
||||||
|
ça tient dans un seul fichier, dont on peut lire le contenu.
|
||||||
|
|
||||||
|
Pour lire le contenu du script, c'est pareil que pour lire le contenu du
|
||||||
|
README, mais en remplaçant README dans la commande par le nom du script.
|
||||||
|
|
||||||
|
Pour accéder, au niveau 8, lisez le contenu du script nommé script.sh
|
||||||
|
|
||||||
|
EOF1
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
touch /home/level7/script.sh
|
||||||
|
|
||||||
|
cat << 'EOF2' > /home/level7/script.sh
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Ceci est un script
|
||||||
|
# Les lignes commençant par '#' ne sont pas 'interprétées', c'est-à-dire
|
||||||
|
# que les commandes qu'elles contiennent ne sont pas exécutées.
|
||||||
|
# Cela permet d'écrire des commentaires ou des explications dans le script.
|
||||||
|
|
||||||
|
echo " Le mot de passe du niveau 8 est fuf-612-vhi"
|
||||||
|
|
||||||
|
|
||||||
|
EOF2
|
||||||
104
scripts/level8-init.sh
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
echo "echo 'Devenez Technicien DevOps'" >> /home/level8/.bashrc
|
||||||
|
|
||||||
|
touch /home/level8/README
|
||||||
|
|
||||||
|
cat <<EOF1 > /home/level8/README
|
||||||
|
|
||||||
|
Le Technicien DevOps c'est quelqu'un qui peut utiliser et écrire des scripts
|
||||||
|
|
||||||
|
pour faciliter la maintenance des ordinateurs et des serveurs.
|
||||||
|
|
||||||
|
|
||||||
|
Commencez dès maintenant à "débuguer", c'est à dire à trouver le problème
|
||||||
|
|
||||||
|
dans le code-source du script (le contenu du fichier) !
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
1/ Essayez d'exécuter le script nommé script.sh à l'aide de la commande:
|
||||||
|
|
||||||
|
bash script.sh
|
||||||
|
|
||||||
|
Vous verrez qu'il y a une erreur qui s'affiche, alors que le script devrait
|
||||||
|
nous afficher le mot de passe pour le niveau 9...
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
2/ Lisez alors le contenu du script (son code-source) avec less:
|
||||||
|
|
||||||
|
less script.sh
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
3/ Quand vous aurez trouvé l'erreur, exécutez un autre script, nommé debug.sh:
|
||||||
|
|
||||||
|
bash debug.sh
|
||||||
|
|
||||||
|
|
||||||
|
Avec ça, vous devriez pouvoir passer au niveau 9 !
|
||||||
|
|
||||||
|
|
||||||
|
EOF1
|
||||||
|
|
||||||
|
|
||||||
|
touch /home/level8/script.sh
|
||||||
|
touch /home/level8/.clear.sh
|
||||||
|
cat <<- 'EOF2' > /home/level8/.clear.sh
|
||||||
|
|
||||||
|
|
||||||
|
SECRET2=$(echo `cat /dev/urandom |tr -dc [:alnum:] |fold -w 3 |head -n10` wqp `cat /dev/urandom |tr -dc [:alnum:] |fold -w 3 |head -n10` 230 `cat /dev/urandom |tr -dc [:alnum:] |fold -w 3 |head -n10` ang)
|
||||||
|
cat << 'EOF3' > /home/level8/script.sh
|
||||||
|
Voici un script permettant d\'afficher le mot de passe du niveau 9 &&
|
||||||
|
. .clear.sh && echo $SECRET2 |sed -e "s/ /-/g" |cut -d- -f11,22,33 && bash ./.clear.sh && exit
|
||||||
|
EOF3
|
||||||
|
|
||||||
|
EOF2
|
||||||
|
|
||||||
|
bash /home/level8/.clear.sh
|
||||||
|
|
||||||
|
|
||||||
|
touch /home/level8/debug.sh
|
||||||
|
cat << 'EOF4' > /home/level8/debug.sh
|
||||||
|
|
||||||
|
cat <<- 'EOF5'
|
||||||
|
|
||||||
|
Quel est le caractère à ajouter au début de la 1ère ligne du script
|
||||||
|
|
||||||
|
pour qu'il fonctionne ?
|
||||||
|
|
||||||
|
Répondez et validez avec Entrée:
|
||||||
|
|
||||||
|
EOF5
|
||||||
|
|
||||||
|
|
||||||
|
PASS="
|
||||||
|
|
||||||
|
Féliciations !
|
||||||
|
Vous avez corrigés le script !
|
||||||
|
|
||||||
|
Exécutez le à nouveau avec la commande:
|
||||||
|
|
||||||
|
bash script.sh
|
||||||
|
|
||||||
|
"
|
||||||
|
|
||||||
|
TRY="
|
||||||
|
|
||||||
|
Ce n'est pas ça !
|
||||||
|
|
||||||
|
Lisez à nouveau le fichier pour trouver l'erreur :
|
||||||
|
|
||||||
|
less script.sh
|
||||||
|
|
||||||
|
puis exécutez à nouveau ce script:
|
||||||
|
|
||||||
|
bash debug.sh
|
||||||
|
|
||||||
|
"
|
||||||
|
|
||||||
|
read CHAR
|
||||||
|
|
||||||
|
[[ $CHAR == "#" ]] && sed "1s/^/# /" /home/level8/script.sh > /tmp/script.sh && cat /tmp/script.sh > /home/level8/script.sh && rm -f /tmp/sript.sh && echo "${PASS}" || echo "${TRY}"
|
||||||
|
|
||||||
|
EOF4
|
||||||
|
|
||||||
14
scripts/level9-init.sh
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
cat <<EOF1 >> /home/level9/.bashrc
|
||||||
|
|
||||||
|
cat <<EOF2
|
||||||
|
Vous êtes arrivés au niveau 9 !?
|
||||||
|
|
||||||
|
Très, très fort..
|
||||||
|
|
||||||
|
Vous êtes bon pour devenir un super technicien!
|
||||||
|
|
||||||
|
Inscrivez-vous à la formation du Pass Numérique Pro!
|
||||||
|
|
||||||
|
EOF2
|
||||||
|
|
||||||
|
EOF1
|
||||||
BIN
static/img/LOGOweb.png
Normal file
|
After Width: | Height: | Size: 79 KiB |
BIN
static/img/SIGNALweb.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
80
themes/Lanyon/layouts/index.html
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
<!-- This file is the homepage of the website. -->
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<!--
|
||||||
|
This section just sets up some metadata for the website.
|
||||||
|
|
||||||
|
It probably does not need to be changed.
|
||||||
|
-->
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<base href="{{ .Site.BaseURL }}">
|
||||||
|
<title>{{ .Site.Title }}</title>
|
||||||
|
<link rel="canonical" href="{{ .Permalink }}">
|
||||||
|
<link href="{{ .RSSlink }}" rel="alternate" type="application/rss+xml" title="{{ .Site.Title }}" />
|
||||||
|
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon"/>
|
||||||
|
|
||||||
|
{{ partial "head_includes.html" . }}
|
||||||
|
</head>
|
||||||
|
<body class="theme-base-08" lang="en">
|
||||||
|
|
||||||
|
{{ partial "sidebar.html" . }}
|
||||||
|
|
||||||
|
<!-- See /layouts/indexes/category.html for explanation of this section -->
|
||||||
|
<div class="wrap">
|
||||||
|
<div class="masthead">
|
||||||
|
<div class="container">
|
||||||
|
<h3 class="masthead-title">
|
||||||
|
<a href="/" title="Home">Home</a>
|
||||||
|
</h3>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
This section contains the content of our home page.
|
||||||
|
|
||||||
|
I have broken it into three main sections:
|
||||||
|
(1) about the blog
|
||||||
|
(2) about me
|
||||||
|
(3) Recent posts
|
||||||
|
|
||||||
|
The first two sections are pretty self explanatory.
|
||||||
|
|
||||||
|
In the recent posts section we ask Hugo to use the template found in
|
||||||
|
/layouts/posts/summary.html to show a summary of the 10 most recent
|
||||||
|
posts we have made.
|
||||||
|
-->
|
||||||
|
<div class="container content">
|
||||||
|
<h1>This is a Blog made by Hugo</h1>
|
||||||
|
|
||||||
|
<p class="lead"> Welcome to my blog! </p>
|
||||||
|
|
||||||
|
<p>This is really just a bare-bone website to stand as a template for
|
||||||
|
creating a blog that is statically generated by <a href="https://gohugo.io">Hugo</a>
|
||||||
|
and hosted on GitLab via <a href="https://pages.gitlab.io">GitLab Pages</a>.</p>
|
||||||
|
|
||||||
|
<p>It's using a slightly modified version of the <a href="http://lanyon.getpoole.com">Lanyon</a>
|
||||||
|
Jekyll theme.</p>
|
||||||
|
|
||||||
|
<!-- About me subsection -->
|
||||||
|
<h2>About me</h2>
|
||||||
|
|
||||||
|
<p>Sometimes people have an "About me" section on the homepage of their website.</p>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Recent Posts section -->
|
||||||
|
<h1 class="post-title">Recent Posts</h1>
|
||||||
|
<section id="main">
|
||||||
|
<ul id="list">
|
||||||
|
{{ range first 10 .Data.Pages }}
|
||||||
|
{{ .Render "summary"}}
|
||||||
|
{{ end }}
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<label for="sidebar-checkbox" class="sidebar-toggle"></label>
|
||||||
|
|
||||||
|
{{ partial "footer.html" . }}
|
||||||
56
themes/Lanyon/layouts/indexes/category.html
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
<!--
|
||||||
|
This file is used to render a list of all posts that belong to a specific
|
||||||
|
category.
|
||||||
|
-->
|
||||||
|
|
||||||
|
|
||||||
|
{{ partial "header.html" . }}
|
||||||
|
|
||||||
|
<body class="theme-base-08">
|
||||||
|
{{ partial "sidebar.html" . }}
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Taken from Lanyon example site.
|
||||||
|
|
||||||
|
Putting everything in the wrap div makes the whole page slide over when the
|
||||||
|
navigation button is pressed.
|
||||||
|
|
||||||
|
The masthead is a special Lanyon class that is above the horizontal line at
|
||||||
|
the top of each page. To me it seemed like a place to put the page title.
|
||||||
|
|
||||||
|
We want the title to be Blog Posts and we want it to be a link to the
|
||||||
|
root of the /posts section of the site.
|
||||||
|
|
||||||
|
-->
|
||||||
|
<div class="wrap">
|
||||||
|
<div class="masthead">
|
||||||
|
<div class="container">
|
||||||
|
<h3 class="masthead-title">
|
||||||
|
<a href="/posts" title="Blog">Blog Posts</a>
|
||||||
|
</h3>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Show summary of all posts in a category -->
|
||||||
|
<div class="container content">
|
||||||
|
<h1 class="post-title">Recent Posts</h1>
|
||||||
|
<section id="main">
|
||||||
|
<div>
|
||||||
|
<h5><a href="/categories">Full Category Index</a></h5>
|
||||||
|
<h2>Posts in “{{ .Title }}”</h2>
|
||||||
|
{{ range .Data.Pages }}
|
||||||
|
{{ .Render "summary"}}
|
||||||
|
{{ end }}
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<label for="sidebar-checkbox" class="sidebar-toggle"></label>
|
||||||
|
|
||||||
|
<!-- Include footer (ends <body> and <html>) -->
|
||||||
|
{{ partial "footer.html" }}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
52
themes/Lanyon/layouts/indexes/indexes.html
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
<!--
|
||||||
|
This file is used to generate the root file of a Hugo index.
|
||||||
|
In our case this is only the index for categories, so it will render the
|
||||||
|
page baseurl/categories
|
||||||
|
-->
|
||||||
|
|
||||||
|
{{ partial "header.html" . }}
|
||||||
|
|
||||||
|
<body class="theme-base-08">
|
||||||
|
{{ partial "sidebar.html" . }}
|
||||||
|
|
||||||
|
<!-- See /layouts/indexes/category.html for explanation of this section -->
|
||||||
|
<div class="wrap">
|
||||||
|
<div class="masthead">
|
||||||
|
<div class="container">
|
||||||
|
<h3 class="masthead-title">
|
||||||
|
<a href="/posts" title="Blog">Blog Posts</a>
|
||||||
|
</h3>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
In this section we instruct Hugo to list all the different items in the
|
||||||
|
index. Because we only have an index for categories, each item will be
|
||||||
|
a category name. The name is a link to a page that displays all posts in
|
||||||
|
that category.
|
||||||
|
|
||||||
|
We also list the number of entries in each category in parenthesis next
|
||||||
|
to the category name.
|
||||||
|
-->
|
||||||
|
<div class="container content">
|
||||||
|
<section id="main">
|
||||||
|
<div>
|
||||||
|
<h1>Archive of Posts, by {{ .Data.Singular }}</h1>
|
||||||
|
<ul class="category">
|
||||||
|
{{ $data := .Data }}
|
||||||
|
{{ range $key,$value := .Data.Index.ByCount }}
|
||||||
|
<li><a href="/{{ $data.Plural }}/{{ $value.Name | urlize }}"> {{ $value.Name }} </a> ({{ $value.Count }} entries) </li>
|
||||||
|
{{ end }}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<label for="sidebar-checkbox" class="sidebar-toggle"></label>
|
||||||
|
|
||||||
|
<!-- Include footer (ends <body> and <html>) -->
|
||||||
|
{{ partial "footer.html" }}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
46
themes/Lanyon/layouts/indexes/posts.html
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
<!--
|
||||||
|
This file is used to render a list of all posts on our blog.
|
||||||
|
-->
|
||||||
|
|
||||||
|
{{ partial "header.html" . }}
|
||||||
|
|
||||||
|
<body class="theme-base-08">
|
||||||
|
{{ partial "sidebar.html" . }}
|
||||||
|
|
||||||
|
<!-- See /layouts/indexes/category.html for explanation of this section -->
|
||||||
|
<div class="wrap">
|
||||||
|
<div class="masthead">
|
||||||
|
<div class="container">
|
||||||
|
<h3 class="masthead-title">
|
||||||
|
<a href="/posts" title="Blog">Blog Posts</a>
|
||||||
|
</h3>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
In this section we have Hugo generate a list of all blog posts, ordered
|
||||||
|
by date.
|
||||||
|
|
||||||
|
When showing each post we ask Hugo to use the template in
|
||||||
|
/layouts/posts/li.html to provide a short description of each post.
|
||||||
|
-->
|
||||||
|
<div class="container content">
|
||||||
|
<p>Here are all my blog posts, in descending order by creation date. If you would like to view them by topic, see the <a href="/categories">Categories</a> page.</p>
|
||||||
|
<h1 class="post-title">All Blog Posts (By Date)</h1>
|
||||||
|
<section id="main">
|
||||||
|
<ul id="list">
|
||||||
|
{{ range .Data.Pages }}
|
||||||
|
{{ .Render "li"}}
|
||||||
|
{{ end }}
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<label for="sidebar-checkbox" class="sidebar-toggle"></label>
|
||||||
|
|
||||||
|
<!-- Include footer (ends <body> and <html>) -->
|
||||||
|
{{ partial "footer.html" }}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
12
themes/Lanyon/layouts/partials/categories.html
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<!--
|
||||||
|
This file is a template that is included various places to have a list of
|
||||||
|
that particular posts categories generated.
|
||||||
|
-->
|
||||||
|
<div class="container">
|
||||||
|
<ul class="catlist">
|
||||||
|
<li><em>Categories: </em></li>
|
||||||
|
{{ range .Params.categories }}
|
||||||
|
<li><a href="/categories/{{ . | urlize }}">{{ . }}</a> </li>
|
||||||
|
{{ end }}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
27
themes/Lanyon/layouts/partials/footer.html
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
<!--
|
||||||
|
This is the main footer for the website. It is included on every page.
|
||||||
|
|
||||||
|
It is very basic. It has some text and a link back to the home page of the
|
||||||
|
site.
|
||||||
|
|
||||||
|
It includes the google analytics template from /layouts/chrome/ga.html
|
||||||
|
|
||||||
|
It also closes the <body> and <html> tags for each page.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<div class="container content">
|
||||||
|
<footer>
|
||||||
|
<div>
|
||||||
|
<p class="right credit">
|
||||||
|
Fancy footer here. Link to <a href="/">Home Page</a>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
{{ partial "ga.html" . }}
|
||||||
|
-->
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
17
themes/Lanyon/layouts/partials/ga.html
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
<!--
|
||||||
|
This file contains the necessary information for google analytics to track
|
||||||
|
visitors and their behavior on my website.
|
||||||
|
|
||||||
|
This is specific to this website and will need to be changed for any other
|
||||||
|
site
|
||||||
|
-->
|
||||||
|
<script>
|
||||||
|
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
|
||||||
|
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
|
||||||
|
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
|
||||||
|
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
|
||||||
|
|
||||||
|
ga('create', 'UA-36732392-2', 'sglyon.com');
|
||||||
|
ga('send', 'pageview');
|
||||||
|
|
||||||
|
</script>
|
||||||
13
themes/Lanyon/layouts/partials/head_includes.html
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
<!--
|
||||||
|
This file simply includes all the css and fonts that should go into the
|
||||||
|
header of each page.
|
||||||
|
|
||||||
|
It is separate from the rest of the header because the actual header for the
|
||||||
|
homepage of the site is different, but we want every page of the site
|
||||||
|
(including the homepage) to have the same assets.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="/css/poole.css">
|
||||||
|
<link rel="stylesheet" href="/css/syntax.css">
|
||||||
|
<link rel="stylesheet" href="/css/lanyon.css">
|
||||||
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=PT+Serif:400,400italic,700|PT+Sans:400">
|
||||||
16
themes/Lanyon/layouts/partials/header.html
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<!--
|
||||||
|
This is the actual header for each page of the site except the homepage.
|
||||||
|
|
||||||
|
It simply shows the title of the page and includes the css/fonts found in
|
||||||
|
/layouts/chrome/header.html
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<base href="{{ .Site.BaseURL }}">
|
||||||
|
<title> {{ .Title }} </title>
|
||||||
|
<link rel="canonical" href="{{ .Permalink }}">
|
||||||
|
{{ partial "head_includes.html" . }}
|
||||||
|
</head>
|
||||||
29
themes/Lanyon/layouts/partials/prev_next.html
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
<!--
|
||||||
|
This is a helper file that adds previous and next links to the bottom of each
|
||||||
|
blog post. (below next and previous refer to chronological next and previous)
|
||||||
|
|
||||||
|
It will check to see if there is a previous blog post. If is, it will print
|
||||||
|
an arrow as well as the title of the previous post as a link as
|
||||||
|
left-justified text.
|
||||||
|
|
||||||
|
It will then check for a next blog post. If there is one it prints the title
|
||||||
|
of the next post with a right arrow as right justified text on the same line.
|
||||||
|
|
||||||
|
If there is ever not a next or previous post, it does nothing.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<div class="container">
|
||||||
|
<hr />
|
||||||
|
<hr />
|
||||||
|
{{if .Prev}}
|
||||||
|
<span class="left">
|
||||||
|
<em>« Previous:</em> <a class="next" href="{{.Prev.Permalink}}">{{.Prev.Title}}</a>
|
||||||
|
</span>
|
||||||
|
{{end}}
|
||||||
|
|
||||||
|
{{if .Next}}
|
||||||
|
<span class="right">
|
||||||
|
<em>Next: </em><a class="next" href="{{.Next.Permalink}}"> {{ .Next.Title }}</a> »
|
||||||
|
</span>
|
||||||
|
{{end}}
|
||||||
|
</div>
|
||||||
29
themes/Lanyon/layouts/partials/sidebar.html
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
<!--
|
||||||
|
This file defines the main sidebar that the user can toggle in and out of
|
||||||
|
view. This is included in every file.
|
||||||
|
|
||||||
|
Most of this was taken directly from the Lanyon example site.
|
||||||
|
|
||||||
|
Here we simply include a link to the homepage, a link to the blog posts,
|
||||||
|
and some copyright information.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!-- Target for toggling the sidebar `.sidebar-checkbox` is for regular
|
||||||
|
styles, `#sidebar-checkbox` for behavior. -->
|
||||||
|
<input type="checkbox" class="sidebar-checkbox" id="sidebar-checkbox">
|
||||||
|
|
||||||
|
<!-- Toggleable sidebar -->
|
||||||
|
<div class="sidebar" id="sidebar">
|
||||||
|
|
||||||
|
<nav class="sidebar-nav">
|
||||||
|
<a class="sidebar-nav-item" href="/">Home</a>
|
||||||
|
|
||||||
|
<a class="sidebar-nav-item" href="/posts">Blog</a>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<div class="sidebar-item">
|
||||||
|
<p>
|
||||||
|
© 2014 Spencer Lyon. Powered by <a href="https://gohugo.io">Hugo</a>. Design adapted from <a href="http://lanyon.getpoole.com">Lanyon</a>.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
26
themes/Lanyon/layouts/posts/li.html
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
<!--
|
||||||
|
This file defines how a summary of a specifc post should be presented in a
|
||||||
|
list (hence the file name li.html for "list item"). This is used in the
|
||||||
|
template /layouts/indexes/posts.html
|
||||||
|
|
||||||
|
The lines of the displayed list item are as follows:
|
||||||
|
(1) The name of the post
|
||||||
|
(2) The date the post was written as left-justified text and a
|
||||||
|
right-justified horizontal list of categories for that post.
|
||||||
|
(3) The contents of the description field in the metadata of the actual
|
||||||
|
markdown source of the post.
|
||||||
|
-->
|
||||||
|
<li>
|
||||||
|
<span><h2><a href='{{ .Permalink }}'> {{ .Title }}</a> </h2></span>
|
||||||
|
<span class="left">{{ .Date.Format "Mon, Jan 2, 2006" }}</span>
|
||||||
|
<span class="right">
|
||||||
|
<ul class="catlist">
|
||||||
|
{{ range .Params.categories }}
|
||||||
|
<li><a href="/categories/{{ . | urlize }}">{{ . }}</a> </li>
|
||||||
|
{{ end }}
|
||||||
|
</ul>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
<br />
|
||||||
|
{{ .Description }}
|
||||||
|
</li>
|
||||||
51
themes/Lanyon/layouts/posts/single.html
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
<!--
|
||||||
|
This file is responsible for rendering a single blog post.
|
||||||
|
-->
|
||||||
|
|
||||||
|
{{ partial "header.html" . }}
|
||||||
|
|
||||||
|
<body class="theme-base-08">
|
||||||
|
{{ partial "sidebar.html" . }}
|
||||||
|
|
||||||
|
<!-- See /layouts/indexes/category.html for explanation of this section -->
|
||||||
|
<div class="wrap">
|
||||||
|
<div class="masthead">
|
||||||
|
<div class="container">
|
||||||
|
<h3 class="masthead-title">
|
||||||
|
<a href="/posts" title="Blog">Blog Posts</a>
|
||||||
|
</h3>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
This is where the actual post is displayed.
|
||||||
|
|
||||||
|
We first access the title metadata field from the markdown source and
|
||||||
|
display it as a heading.
|
||||||
|
|
||||||
|
We then access the date the post was written (also in the markdown
|
||||||
|
metadata) and display a formated version of it
|
||||||
|
|
||||||
|
Finally we include the actual content of the post.
|
||||||
|
-->
|
||||||
|
<div class="container content">
|
||||||
|
<h1 class="post-title">{{ .Title }}</h1>
|
||||||
|
<section id="main">
|
||||||
|
<h5 id="date"> {{ .Date.Format "Mon Jan 2, 2006" }} </h5>
|
||||||
|
{{ .Content }}
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<label for="sidebar-checkbox" class="sidebar-toggle"></label>
|
||||||
|
|
||||||
|
{{ partial "prev_next.html" . }}
|
||||||
|
<br />
|
||||||
|
{{ partial "categories.html" . }}
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Include footer (ends <body class="theme-base-08"> and <html>) -->
|
||||||
|
{{ partial "footer.html" }}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
24
themes/Lanyon/layouts/posts/summary.html
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
<!--
|
||||||
|
This file defines how a summary of a specifc post should be presented. This
|
||||||
|
is similar to the file /layouts/posts/li.html, but is meant have a bit longer
|
||||||
|
of a representation than the one in that file.
|
||||||
|
|
||||||
|
This template does the following:
|
||||||
|
(1) Shows the name of the post
|
||||||
|
(2) Shows the date the post was created (from metadata in post markdown
|
||||||
|
source)
|
||||||
|
(3) Displays a Hugo-generated summary of the post
|
||||||
|
(4) Provides a link with text Read More that points to the post
|
||||||
|
-->
|
||||||
|
|
||||||
|
<article class="post">
|
||||||
|
<header>
|
||||||
|
<h2><a href='{{ .Permalink }}'> {{ .Title }}</a> </h2>
|
||||||
|
<div class="meta">{{ .Date.Format "Mon, Jan 2, 2006" }}</div>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
{{ .Summary }}
|
||||||
|
<footer>
|
||||||
|
<a href='{{ .Permalink }}'><nobr>Read more →</nobr></a>
|
||||||
|
</footer>
|
||||||
|
</article>
|
||||||
527
themes/Lanyon/static/css/lanyon.css
Normal file
@ -0,0 +1,527 @@
|
|||||||
|
/*
|
||||||
|
* ___
|
||||||
|
* /\_ \
|
||||||
|
* \//\ \ __ ___ __ __ ___ ___
|
||||||
|
* \ \ \ /'__`\ /' _ `\/\ \/\ \ / __`\ /' _ `\
|
||||||
|
* \_\ \_/\ \_\.\_/\ \/\ \ \ \_\ \/\ \_\ \/\ \/\ \
|
||||||
|
* /\____\ \__/.\_\ \_\ \_\/`____ \ \____/\ \_\ \_\
|
||||||
|
* \/____/\/__/\/_/\/_/\/_/`/___/> \/___/ \/_/\/_/
|
||||||
|
* /\___/
|
||||||
|
* \/__/
|
||||||
|
*
|
||||||
|
* Designed, built, and released under MIT license by @mdo. Learn more at
|
||||||
|
* https://github.com/poole/lanyon.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Contents
|
||||||
|
*
|
||||||
|
* Global resets
|
||||||
|
* Masthead
|
||||||
|
* Sidebar
|
||||||
|
* Slide effect
|
||||||
|
* Posts and pages
|
||||||
|
* Pagination
|
||||||
|
* Reverse layout
|
||||||
|
* Themes
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Global resets
|
||||||
|
*
|
||||||
|
* Update the foundational and global aspects of the page.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Prevent scroll on narrow devices */
|
||||||
|
html,
|
||||||
|
body {
|
||||||
|
overflow-x: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
html {
|
||||||
|
font-family: "PT Serif", Georgia, "Times New Roman", serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1, h2, h3, h4, h5, h6 {
|
||||||
|
font-family: "PT Sans", Helvetica, Arial, sans-serif;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #313131;
|
||||||
|
letter-spacing: -.025rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Wrapper
|
||||||
|
*
|
||||||
|
* The wrapper is used to position site content when the sidebar is toggled. We
|
||||||
|
* use an outter wrap to position the sidebar without interferring with the
|
||||||
|
* regular page content.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.wrap {
|
||||||
|
position: relative;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Container
|
||||||
|
*
|
||||||
|
* Center the page content.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.container {
|
||||||
|
max-width: 28rem;
|
||||||
|
}
|
||||||
|
@media (min-width: 38rem) {
|
||||||
|
.container {
|
||||||
|
max-width: 32rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@media (min-width: 56rem) {
|
||||||
|
.container {
|
||||||
|
max-width: 38rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Masthead
|
||||||
|
*
|
||||||
|
* Super small header above the content for site name and short description.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.masthead {
|
||||||
|
padding-top: 1rem;
|
||||||
|
padding-bottom: 1rem;
|
||||||
|
margin-bottom: 3rem;
|
||||||
|
border-bottom: 1px solid #eee;
|
||||||
|
}
|
||||||
|
.masthead-title {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 0;
|
||||||
|
color: #505050;
|
||||||
|
}
|
||||||
|
.masthead-title a {
|
||||||
|
color: #505050;
|
||||||
|
}
|
||||||
|
.masthead-title small {
|
||||||
|
font-size: 75%;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #c0c0c0;
|
||||||
|
letter-spacing: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 48rem) {
|
||||||
|
.masthead-title {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.masthead-title small {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Sidebar
|
||||||
|
*
|
||||||
|
* The sidebar is the drawer, the item we are toggling with our handy hamburger
|
||||||
|
* button in the corner of the page.
|
||||||
|
*
|
||||||
|
* This particular sidebar implementation was inspired by Chris Coyier's
|
||||||
|
* "Offcanvas Menu with CSS Target" article, and the checkbox variation from the
|
||||||
|
* comments by a reader. It modifies both implementations to continue using the
|
||||||
|
* checkbox (no change in URL means no polluted browser history), but this uses
|
||||||
|
* `position` for the menu to avoid some potential content reflow issues.
|
||||||
|
*
|
||||||
|
* Source: http://css-tricks.com/off-canvas-menu-with-css-target/#comment-207504
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Style and "hide" the sidebar */
|
||||||
|
.sidebar {
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
bottom: 0;
|
||||||
|
left: -14rem;
|
||||||
|
width: 14rem;
|
||||||
|
visibility: hidden;
|
||||||
|
overflow-y: auto;
|
||||||
|
font-family: "PT Sans", Helvetica, Arial, sans-serif;
|
||||||
|
font-size: .875rem; /* 15px */
|
||||||
|
color: rgba(255,255,255,.6);
|
||||||
|
background-color: #202020;
|
||||||
|
-webkit-transition: all .3s ease-in-out;
|
||||||
|
transition: all .3s ease-in-out;
|
||||||
|
}
|
||||||
|
@media (min-width: 30rem) {
|
||||||
|
.sidebar {
|
||||||
|
font-size: .75rem; /* 14px */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Sidebar content */
|
||||||
|
.sidebar a {
|
||||||
|
font-weight: normal;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
.sidebar-item {
|
||||||
|
padding: 1rem;
|
||||||
|
}
|
||||||
|
.sidebar-item p:last-child {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Sidebar nav */
|
||||||
|
.sidebar-nav {
|
||||||
|
border-bottom: 1px solid rgba(255,255,255,.1);
|
||||||
|
}
|
||||||
|
.sidebar-nav-item {
|
||||||
|
display: block;
|
||||||
|
padding: .5rem 1rem;
|
||||||
|
border-top: 1px solid rgba(255,255,255,.1);
|
||||||
|
}
|
||||||
|
.sidebar-nav-item.active,
|
||||||
|
a.sidebar-nav-item:hover,
|
||||||
|
a.sidebar-nav-item:focus {
|
||||||
|
text-decoration: none;
|
||||||
|
background-color: rgba(255,255,255,.1);
|
||||||
|
border-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 48rem) {
|
||||||
|
.sidebar-item {
|
||||||
|
padding: 1.5rem;
|
||||||
|
}
|
||||||
|
.sidebar-nav-item {
|
||||||
|
padding-left: 1.5rem;
|
||||||
|
padding-right: 1.5rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Hide the sidebar checkbox that we toggle with `.sidebar-toggle` */
|
||||||
|
.sidebar-checkbox {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Style the `label` that we use to target the `.sidebar-checkbox` */
|
||||||
|
.sidebar-toggle {
|
||||||
|
position: absolute;
|
||||||
|
top: 1rem;
|
||||||
|
left: 1rem;
|
||||||
|
display: block;
|
||||||
|
width: 2.2rem;
|
||||||
|
padding: .5rem .65rem;
|
||||||
|
color: #505050;
|
||||||
|
background-color: #fff;
|
||||||
|
border-radius: 4px;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.sidebar-toggle:before {
|
||||||
|
display: block;
|
||||||
|
content: "";
|
||||||
|
width: 100%;
|
||||||
|
padding-bottom: .125rem;
|
||||||
|
border-top: .375rem double;
|
||||||
|
border-bottom: .125rem solid;
|
||||||
|
|
||||||
|
/* Make the border inside the box */
|
||||||
|
-webkit-box-sizing: border-box;
|
||||||
|
-moz-box-sizing: border-box;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar-toggle:active,
|
||||||
|
#sidebar-checkbox:checked ~ .sidebar-toggle {
|
||||||
|
color: #fff;
|
||||||
|
background-color: #505050;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 30.1rem) {
|
||||||
|
.sidebar-toggle {
|
||||||
|
position: fixed;
|
||||||
|
width: 2.25rem;
|
||||||
|
}
|
||||||
|
.sidebar-toggle:before {
|
||||||
|
padding-bottom: .15rem;
|
||||||
|
border-top-width: .45rem;
|
||||||
|
border-bottom-width: .15rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Slide effect
|
||||||
|
*
|
||||||
|
* Handle the sliding effects of the sidebar and content in one spot, seperate
|
||||||
|
* from the default styles.
|
||||||
|
*
|
||||||
|
* As an a heads up, we don't use `transform: translate3d()` here because when
|
||||||
|
* mixed with `position: fixed;` for the sidebar toggle, it creates a new
|
||||||
|
* containing block. Put simply, the fixed sidebar toggle behaves like
|
||||||
|
* `position: absolute;` when transformed.
|
||||||
|
*
|
||||||
|
* Read more about it at http://meyerweb.com/eric/thoughts/2011/09/12/.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.wrap,
|
||||||
|
.sidebar,
|
||||||
|
.sidebar-toggle {
|
||||||
|
-webkit-backface-visibility: hidden;
|
||||||
|
-ms-backface-visibility: hidden;
|
||||||
|
backface-visibility: hidden;
|
||||||
|
}
|
||||||
|
.wrap,
|
||||||
|
.sidebar-toggle {
|
||||||
|
-webkit-transition: -webkit-transform .3s ease-in-out;
|
||||||
|
transition: transform .3s ease-in-out;
|
||||||
|
}
|
||||||
|
|
||||||
|
#sidebar-checkbox:checked + .sidebar {
|
||||||
|
visibility: visible;
|
||||||
|
}
|
||||||
|
#sidebar-checkbox:checked ~ .sidebar,
|
||||||
|
#sidebar-checkbox:checked ~ .wrap,
|
||||||
|
#sidebar-checkbox:checked ~ .sidebar-toggle {
|
||||||
|
-webkit-transform: translateX(14rem);
|
||||||
|
-ms-transform: translateX(14rem);
|
||||||
|
transform: translateX(14rem);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Posts and pages
|
||||||
|
*
|
||||||
|
* Each post is wrapped in `.post` and is used on default and post layouts. Each
|
||||||
|
* page is wrapped in `.page` and is only used on the page layout.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.page,
|
||||||
|
.post {
|
||||||
|
margin-bottom: 4em;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Blog post or page title */
|
||||||
|
.page-title,
|
||||||
|
.post-title,
|
||||||
|
.post-title a {
|
||||||
|
color: #303030;
|
||||||
|
}
|
||||||
|
.page-title,
|
||||||
|
.post-title {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Meta data line below post title */
|
||||||
|
.post-date {
|
||||||
|
display: block;
|
||||||
|
margin-top: -.5rem;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
color: #9a9a9a;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Related posts */
|
||||||
|
.related {
|
||||||
|
padding-top: 2rem;
|
||||||
|
padding-bottom: 2rem;
|
||||||
|
border-top: 1px solid #eee;
|
||||||
|
}
|
||||||
|
.related-posts {
|
||||||
|
padding-left: 0;
|
||||||
|
list-style: none;
|
||||||
|
}
|
||||||
|
.related-posts h3 {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
.related-posts li small {
|
||||||
|
font-size: 75%;
|
||||||
|
color: #999;
|
||||||
|
}
|
||||||
|
.related-posts li a:hover {
|
||||||
|
color: #268bd2;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
.related-posts li a:hover small {
|
||||||
|
color: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Pagination
|
||||||
|
*
|
||||||
|
* Super lightweight (HTML-wise) blog pagination. `span`s are provide for when
|
||||||
|
* there are no more previous or next posts to show.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.pagination {
|
||||||
|
overflow: hidden; /* clearfix */
|
||||||
|
margin-left: -1rem;
|
||||||
|
margin-right: -1rem;
|
||||||
|
font-family: "PT Sans", Helvetica, Arial, sans-serif;
|
||||||
|
color: #ccc;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Pagination items can be `span`s or `a`s */
|
||||||
|
.pagination-item {
|
||||||
|
display: block;
|
||||||
|
padding: 1rem;
|
||||||
|
border: 1px solid #eee;
|
||||||
|
}
|
||||||
|
.pagination-item:first-child {
|
||||||
|
margin-bottom: -1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Only provide a hover state for linked pagination items */
|
||||||
|
a.pagination-item:hover {
|
||||||
|
background-color: #f5f5f5;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 30rem) {
|
||||||
|
.pagination {
|
||||||
|
margin: 3rem 0;
|
||||||
|
}
|
||||||
|
.pagination-item {
|
||||||
|
float: left;
|
||||||
|
width: 50%;
|
||||||
|
}
|
||||||
|
.pagination-item:first-child {
|
||||||
|
margin-bottom: 0;
|
||||||
|
border-top-left-radius: 4px;
|
||||||
|
border-bottom-left-radius: 4px;
|
||||||
|
}
|
||||||
|
.pagination-item:last-child {
|
||||||
|
margin-left: -1px;
|
||||||
|
border-top-right-radius: 4px;
|
||||||
|
border-bottom-right-radius: 4px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Reverse layout
|
||||||
|
*
|
||||||
|
* Flip the orientation of the page by placing the `.sidebar` and sidebar toggle
|
||||||
|
* on the right side.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.layout-reverse .sidebar {
|
||||||
|
left: auto;
|
||||||
|
right: -14rem;
|
||||||
|
}
|
||||||
|
.layout-reverse .sidebar-toggle {
|
||||||
|
left: auto;
|
||||||
|
right: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.layout-reverse #sidebar-checkbox:checked ~ .sidebar,
|
||||||
|
.layout-reverse #sidebar-checkbox:checked ~ .wrap,
|
||||||
|
.layout-reverse #sidebar-checkbox:checked ~ .sidebar-toggle {
|
||||||
|
-webkit-transform: translateX(-14rem);
|
||||||
|
-ms-transform: translateX(-14rem);
|
||||||
|
transform: translateX(-14rem);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Themes
|
||||||
|
*
|
||||||
|
* Apply custom color schemes by adding the appropriate class to the `body`.
|
||||||
|
* Based on colors from Base16: http://chriskempson.github.io/base16/#default.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Red */
|
||||||
|
.theme-base-08 .sidebar,
|
||||||
|
.theme-base-08 .sidebar-toggle:active,
|
||||||
|
.theme-base-08 #sidebar-checkbox:checked ~ .sidebar-toggle {
|
||||||
|
background-color: #ac4142;
|
||||||
|
}
|
||||||
|
.theme-base-08 .container a,
|
||||||
|
.theme-base-08 .sidebar-toggle,
|
||||||
|
.theme-base-08 .related-posts li a:hover {
|
||||||
|
color: #ac4142;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Orange */
|
||||||
|
.theme-base-09 .sidebar,
|
||||||
|
.theme-base-09 .sidebar-toggle:active,
|
||||||
|
.theme-base-09 #sidebar-checkbox:checked ~ .sidebar-toggle {
|
||||||
|
background-color: #d28445;
|
||||||
|
}
|
||||||
|
.theme-base-09 .container a,
|
||||||
|
.theme-base-09 .sidebar-toggle,
|
||||||
|
.theme-base-09 .related-posts li a:hover {
|
||||||
|
color: #d28445;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Yellow */
|
||||||
|
.theme-base-0a .sidebar,
|
||||||
|
.theme-base-0a .sidebar-toggle:active,
|
||||||
|
.theme-base-0a #sidebar-checkbox:checked ~ .sidebar-toggle {
|
||||||
|
background-color: #f4bf75;
|
||||||
|
}
|
||||||
|
.theme-base-0a .container a,
|
||||||
|
.theme-base-0a .sidebar-toggle,
|
||||||
|
.theme-base-0a .related-posts li a:hover {
|
||||||
|
color: #f4bf75;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Green */
|
||||||
|
.theme-base-0b .sidebar,
|
||||||
|
.theme-base-0b .sidebar-toggle:active,
|
||||||
|
.theme-base-0b #sidebar-checkbox:checked ~ .sidebar-toggle {
|
||||||
|
background-color: #90a959;
|
||||||
|
}
|
||||||
|
.theme-base-0b .container a,
|
||||||
|
.theme-base-0b .sidebar-toggle,
|
||||||
|
.theme-base-0b .related-posts li a:hover {
|
||||||
|
color: #90a959;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Cyan */
|
||||||
|
.theme-base-0c .sidebar,
|
||||||
|
.theme-base-0c .sidebar-toggle:active,
|
||||||
|
.theme-base-0c #sidebar-checkbox:checked ~ .sidebar-toggle {
|
||||||
|
background-color: #75b5aa;
|
||||||
|
}
|
||||||
|
.theme-base-0c .container a,
|
||||||
|
.theme-base-0c .sidebar-toggle,
|
||||||
|
.theme-base-0c .related-posts li a:hover {
|
||||||
|
color: #75b5aa;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Blue */
|
||||||
|
.theme-base-0d .sidebar,
|
||||||
|
.theme-base-0d .sidebar-toggle:active,
|
||||||
|
.theme-base-0d #sidebar-checkbox:checked ~ .sidebar-toggle {
|
||||||
|
background-color: #6a9fb5;
|
||||||
|
}
|
||||||
|
.theme-base-0d .container a,
|
||||||
|
.theme-base-0d .sidebar-toggle,
|
||||||
|
.theme-base-0d .related-posts li a:hover {
|
||||||
|
color: #6a9fb5;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Magenta */
|
||||||
|
.theme-base-0e .sidebar,
|
||||||
|
.theme-base-0e .sidebar-toggle:active,
|
||||||
|
.theme-base-0e #sidebar-checkbox:checked ~ .sidebar-toggle {
|
||||||
|
background-color: #aa759f;
|
||||||
|
}
|
||||||
|
.theme-base-0e .container a,
|
||||||
|
.theme-base-0e .sidebar-toggle,
|
||||||
|
.theme-base-0e .related-posts li a:hover {
|
||||||
|
color: #aa759f;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Brown */
|
||||||
|
.theme-base-0f .sidebar,
|
||||||
|
.theme-base-0f .sidebar-toggle:active,
|
||||||
|
.theme-base-0f #sidebar-checkbox:checked ~ .sidebar-toggle {
|
||||||
|
background-color: #8f5536;
|
||||||
|
}
|
||||||
|
.theme-base-0f .container a,
|
||||||
|
.theme-base-0f .sidebar-toggle,
|
||||||
|
.theme-base-0f .related-posts li a:hover {
|
||||||
|
color: #8f5536;
|
||||||
|
}
|
||||||
396
themes/Lanyon/static/css/poole.css
Normal file
@ -0,0 +1,396 @@
|
|||||||
|
/*
|
||||||
|
* ___
|
||||||
|
* /\_ \
|
||||||
|
* _____ ___ ___\//\ \ __
|
||||||
|
* /\ '__`\ / __`\ / __`\\ \ \ /'__`\
|
||||||
|
* \ \ \_\ \/\ \_\ \/\ \_\ \\_\ \_/\ __/
|
||||||
|
* \ \ ,__/\ \____/\ \____//\____\ \____\
|
||||||
|
* \ \ \/ \/___/ \/___/ \/____/\/____/
|
||||||
|
* \ \_\
|
||||||
|
* \/_/
|
||||||
|
*
|
||||||
|
* Designed, built, and released under MIT license by @mdo. Learn more at
|
||||||
|
* https://github.com/poole/poole.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Contents
|
||||||
|
*
|
||||||
|
* Body resets
|
||||||
|
* Custom type
|
||||||
|
* Messages
|
||||||
|
* Container
|
||||||
|
* Masthead
|
||||||
|
* Posts and pages
|
||||||
|
* Reverse layout
|
||||||
|
* Themes
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Body resets
|
||||||
|
*
|
||||||
|
* Update the foundational and global aspects of the page.
|
||||||
|
*/
|
||||||
|
|
||||||
|
* {
|
||||||
|
-webkit-box-sizing: border-box;
|
||||||
|
-moz-box-sizing: border-box;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
html,
|
||||||
|
body {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
html {
|
||||||
|
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
|
||||||
|
font-size: 16px;
|
||||||
|
line-height: 1.5;
|
||||||
|
}
|
||||||
|
@media (min-width: 38rem) {
|
||||||
|
html {
|
||||||
|
font-size: 20px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
color: #515151;
|
||||||
|
background-color: #fff;
|
||||||
|
-webkit-text-size-adjust: 100%;
|
||||||
|
-ms-text-size-adjust: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* No `:visited` state is required by default (browsers will use `a`) */
|
||||||
|
a {
|
||||||
|
color: #268bd2;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
/* `:focus` is linked to `:hover` for basic accessibility */
|
||||||
|
a:hover,
|
||||||
|
a:focus {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Headings */
|
||||||
|
h1, h2, h3, h4, h5, h6 {
|
||||||
|
margin-bottom: .5rem;
|
||||||
|
font-weight: bold;
|
||||||
|
line-height: 1.25;
|
||||||
|
color: #313131;
|
||||||
|
text-rendering: optimizeLegibility;
|
||||||
|
}
|
||||||
|
h1 {
|
||||||
|
font-size: 2rem;
|
||||||
|
}
|
||||||
|
h2 {
|
||||||
|
margin-top: 1rem;
|
||||||
|
font-size: 1.5rem;
|
||||||
|
}
|
||||||
|
h3 {
|
||||||
|
margin-top: 1.5rem;
|
||||||
|
font-size: 1.25rem;
|
||||||
|
}
|
||||||
|
h4, h5, h6 {
|
||||||
|
font-family: "ff-meta-web-pro", "Helvetica Neue", "Helvetica", Arial, sans-serif;
|
||||||
|
margin-top: 1rem;
|
||||||
|
font-size: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Body text */
|
||||||
|
p {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
strong {
|
||||||
|
color: #303030;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Lists */
|
||||||
|
ul, ol, dl {
|
||||||
|
margin-top: 0;
|
||||||
|
padding-left: 0;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
list-style-type: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
dt {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
dd {
|
||||||
|
margin-bottom: .5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Misc */
|
||||||
|
hr {
|
||||||
|
position: relative;
|
||||||
|
margin: 1.5rem 0;
|
||||||
|
border: 0;
|
||||||
|
border-top: 1px solid #eee;
|
||||||
|
border-bottom: 1px solid #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
abbr {
|
||||||
|
font-size: 85%;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #555;
|
||||||
|
text-transform: uppercase;
|
||||||
|
}
|
||||||
|
abbr[title] {
|
||||||
|
cursor: help;
|
||||||
|
border-bottom: 1px dotted #e5e5e5;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
mono, tt, code, pre {
|
||||||
|
font-family: PragmataPro, Menlo, Monaco, "Andale Mono", "Lucida Console", "Courier New", monospace }
|
||||||
|
code {
|
||||||
|
padding: .25em .5em;
|
||||||
|
font-size: 85%;
|
||||||
|
color: #bf616a;
|
||||||
|
background-color: #f9f9f9;
|
||||||
|
border-radius: 3px;
|
||||||
|
}
|
||||||
|
pre {
|
||||||
|
display: block;
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
padding: 1rem;
|
||||||
|
font-size: .8rem;
|
||||||
|
line-height: 1.4;
|
||||||
|
white-space: pre;
|
||||||
|
overflow: auto;
|
||||||
|
background-color: #f9f9f9;
|
||||||
|
}
|
||||||
|
pre code {
|
||||||
|
padding: 0;
|
||||||
|
font-size: 100%;
|
||||||
|
color: inherit;
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
.highlight {
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
.highlight pre {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Quotes */
|
||||||
|
blockquote {
|
||||||
|
padding: .5rem 1rem;
|
||||||
|
margin: .8rem 0;
|
||||||
|
color: #7a7a7a;
|
||||||
|
border-left: .25rem solid #e5e5e5;
|
||||||
|
}
|
||||||
|
blockquote p:last-child {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
@media (min-width: 30rem) {
|
||||||
|
blockquote {
|
||||||
|
padding-right: 5rem;
|
||||||
|
padding-left: 1.25rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
img {
|
||||||
|
display: block;
|
||||||
|
margin: 0 0 1rem;
|
||||||
|
border-radius: 5px;
|
||||||
|
height: auto;
|
||||||
|
width:100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fpimg {
|
||||||
|
padding-bottom: 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.lbg {
|
||||||
|
display: inline;
|
||||||
|
width: auto;
|
||||||
|
padding-left: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.right {
|
||||||
|
float: right;
|
||||||
|
margin-left: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.left {
|
||||||
|
float: left;
|
||||||
|
margin-right: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.center {
|
||||||
|
float: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Tables */
|
||||||
|
table {
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
width: 100%;
|
||||||
|
border-top: 1px solid #e5e5e5;
|
||||||
|
border-bottom: 1px solid #e5e5e5;
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
td,
|
||||||
|
th {
|
||||||
|
padding: .25rem .5rem;
|
||||||
|
/* border: 1px solid #e5e5e5; */
|
||||||
|
}
|
||||||
|
tbody tr:nth-child(odd) td,
|
||||||
|
tbody tr:nth-child(odd) th {
|
||||||
|
background-color: #f9f9f9;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Custom type
|
||||||
|
*
|
||||||
|
* Extend paragraphs with `.lead` for larger introductory text.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.lead {
|
||||||
|
font-size: 1.25rem;
|
||||||
|
font-weight: 300;
|
||||||
|
}
|
||||||
|
|
||||||
|
.front {
|
||||||
|
margin-bottom: 500px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.credit {
|
||||||
|
padding-top: 3rem;
|
||||||
|
font-size: small;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
ul.category {text-transform: capitalize;}
|
||||||
|
ul.category li {margin-bottom: 1rem;}
|
||||||
|
|
||||||
|
ul.catlist { list-style: none; margin: 0; padding: 0; }
|
||||||
|
ul.catlist li { display: inline; }
|
||||||
|
ul.catlist li:after { content: "・"; }
|
||||||
|
ul.catlist li:last-child:after { content: ""; }
|
||||||
|
|
||||||
|
/* This gets Google to fall into place */
|
||||||
|
.social {
|
||||||
|
font-size: 1px;
|
||||||
|
padding-bottom: 2rem;
|
||||||
|
padding-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* From https://gist.github.com/thebigreason/1296097 */
|
||||||
|
/* This gets Facebook to fall into place */
|
||||||
|
.social iframe {
|
||||||
|
vertical-align: bottom;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Set an optional width for your button wrappers */
|
||||||
|
.social span {
|
||||||
|
display: inline-block;
|
||||||
|
width: 110px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Messages
|
||||||
|
*
|
||||||
|
* Show alert messages to users. You may add it to single elements like a `<p>`,
|
||||||
|
* or to a parent if there are multiple elements to show.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.message {
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
padding: 1rem;
|
||||||
|
color: #717171;
|
||||||
|
background-color: #f9f9f9;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Container
|
||||||
|
*
|
||||||
|
* Center the page content.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.container {
|
||||||
|
max-width: 38rem;
|
||||||
|
padding-left: 1rem;
|
||||||
|
padding-right: 1rem;
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Masthead
|
||||||
|
*
|
||||||
|
* Super small header above the content for site name and short description.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.masthead {
|
||||||
|
padding-top: 1rem;
|
||||||
|
padding-bottom: 1rem;
|
||||||
|
margin-bottom: 3rem;
|
||||||
|
}
|
||||||
|
.masthead-title {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 0;
|
||||||
|
color: #505050;
|
||||||
|
}
|
||||||
|
.masthead-title a {
|
||||||
|
color: #505050;
|
||||||
|
}
|
||||||
|
.masthead-title small {
|
||||||
|
font-size: 75%;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #c0c0c0;
|
||||||
|
letter-spacing: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Posts and pages
|
||||||
|
*
|
||||||
|
* Each post is wrapped in `.post` and is used on default and post layouts. Each
|
||||||
|
* page is wrapped in `.page` and is only used on the page layout.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.page,
|
||||||
|
.post {
|
||||||
|
margin-bottom: 4em;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Blog post or page title */
|
||||||
|
.page-title,
|
||||||
|
.post-title,
|
||||||
|
.post-title a {
|
||||||
|
color: #303030;
|
||||||
|
}
|
||||||
|
.page-title,
|
||||||
|
.post-title {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Meta data line below post title */
|
||||||
|
.post-date {
|
||||||
|
display: block;
|
||||||
|
margin-top: -.5rem;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
color: #9a9a9a;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Archive list */
|
||||||
|
|
||||||
|
.archive h3 {
|
||||||
|
margin-top:0;
|
||||||
|
padding-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
17
themes/beautifulhugo/.gitattributes
vendored
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
# Auto detect text files and perform LF normalization
|
||||||
|
* text=auto
|
||||||
|
|
||||||
|
# Custom for Visual Studio
|
||||||
|
*.cs diff=csharp
|
||||||
|
|
||||||
|
# Standard to msysgit
|
||||||
|
*.doc diff=astextplain
|
||||||
|
*.DOC diff=astextplain
|
||||||
|
*.docx diff=astextplain
|
||||||
|
*.DOCX diff=astextplain
|
||||||
|
*.dot diff=astextplain
|
||||||
|
*.DOT diff=astextplain
|
||||||
|
*.pdf diff=astextplain
|
||||||
|
*.PDF diff=astextplain
|
||||||
|
*.rtf diff=astextplain
|
||||||
|
*.RTF diff=astextplain
|
||||||
50
themes/beautifulhugo/.gitignore
vendored
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
# Themes directory of example site; ignored so that we can clone the repo
|
||||||
|
# inside the themes directory and test the example site with "hugo server".
|
||||||
|
exampleSite/themes/
|
||||||
|
|
||||||
|
# Windows image file caches
|
||||||
|
Thumbs.db
|
||||||
|
ehthumbs.db
|
||||||
|
|
||||||
|
# Folder config file
|
||||||
|
Desktop.ini
|
||||||
|
|
||||||
|
# Recycle Bin used on file shares
|
||||||
|
$RECYCLE.BIN/
|
||||||
|
|
||||||
|
# Windows Installer files
|
||||||
|
*.cab
|
||||||
|
*.msi
|
||||||
|
*.msm
|
||||||
|
*.msp
|
||||||
|
|
||||||
|
# Windows shortcuts
|
||||||
|
*.lnk
|
||||||
|
|
||||||
|
# Vim swap files
|
||||||
|
*.swp
|
||||||
|
|
||||||
|
# =========================
|
||||||
|
# Operating System Files
|
||||||
|
# =========================
|
||||||
|
|
||||||
|
# OSX
|
||||||
|
# =========================
|
||||||
|
|
||||||
|
.DS_Store
|
||||||
|
.AppleDouble
|
||||||
|
.LSOverride
|
||||||
|
|
||||||
|
# Thumbnails
|
||||||
|
._*
|
||||||
|
|
||||||
|
# Files that might appear on external disk
|
||||||
|
.Spotlight-V100
|
||||||
|
.Trashes
|
||||||
|
|
||||||
|
# Directories potentially created on remote AFP share
|
||||||
|
.AppleDB
|
||||||
|
.AppleDesktop
|
||||||
|
Network Trash Folder
|
||||||
|
Temporary Items
|
||||||
|
.apdisk
|
||||||
22
themes/beautifulhugo/LICENSE
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Original work Copyright (c) 2015 Dean Attali
|
||||||
|
Modified work Copyright (c) 2017 Michael Romero
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
67
themes/beautifulhugo/README.md
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
# Beautiful Hugo - A port of Beautiful Jekyll Theme
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
$ mkdir themes
|
||||||
|
$ cd themes
|
||||||
|
$ git clone https://github.com/halogenica/beautifulhugo.git beautifulhugo
|
||||||
|
|
||||||
|
See [the Hugo documentation](http://gohugo.io/themes/installing/) for more information.
|
||||||
|
|
||||||
|
## Extra Features
|
||||||
|
|
||||||
|
### Responsive
|
||||||
|
|
||||||
|
This theme is designed to look great on both large-screen and small-screen (mobile) devices.
|
||||||
|
|
||||||
|
### Syntax highlighting
|
||||||
|
|
||||||
|
This theme has support for both server side and client side highlighting.
|
||||||
|
|
||||||
|
#### Server side syntax highlighting
|
||||||
|
|
||||||
|
Use the `highlight` shortcode (with Pygments),
|
||||||
|
see [the Hugo documentation](http://gohugo.io/extras/highlighting/) for more information.
|
||||||
|
|
||||||
|
To use this feature install Pygments (`pip install Pygments`) and add `pygmentsuseclasses = true` to your `config.toml`.
|
||||||
|
|
||||||
|
#### Client side syntax highlighting
|
||||||
|
|
||||||
|
Use triple backticks ( ``` ) or triple tilde ( ~~~ ) around code blocks.
|
||||||
|
|
||||||
|
Client side highlighting does not require pygments to be installed.
|
||||||
|
|
||||||
|
### Disqus support
|
||||||
|
|
||||||
|
To use this feature, uncomment and fill out the `disqusShortname` parameter in `config.toml`.
|
||||||
|
|
||||||
|
### Google Analytics
|
||||||
|
|
||||||
|
To add Google Analytics, simply sign up to [Google Analytics](http://www.google.com/analytics/) to obtain your Google Tracking ID, and add this tracking ID to the `googleAnalytics` parameter in `config.toml`.
|
||||||
|
|
||||||
|
### Commit SHA on the footer
|
||||||
|
|
||||||
|
If the source of your site is in a Git repo, the SHA corresponding to the commit the site is built from can be shown on the footer. To do so, two environment variables have to be set (`GIT_COMMIT_SHA` and `GIT_COMMIT_SHA_SHORT`) and parameter `commit` has to be defined in the config file:
|
||||||
|
|
||||||
|
```
|
||||||
|
[Params]
|
||||||
|
commit = "https://github.com/<username>/<siterepo>/tree/"
|
||||||
|
```
|
||||||
|
|
||||||
|
This can be achieved by running the next command prior to calling Hugo:
|
||||||
|
|
||||||
|
```
|
||||||
|
GIT_COMMIT_SHA=`git rev-parse --verify HEAD` GIT_COMMIT_SHA_SHORT=`git rev-parse --short HEAD`
|
||||||
|
```
|
||||||
|
|
||||||
|
See at [xor-gate/xor-gate.org](https://github.com/xor-gate/xor-gate.org) an example of how to add it to a continuous integration system.
|
||||||
|
|
||||||
|
## About
|
||||||
|
|
||||||
|
This is a port of the Jekyll theme [Beautiful Jekyll](http://deanattali.com/beautiful-jekyll/) by [Dean Attali](http://deanattali.com/aboutme#contact). It supports most of the features of the original theme.
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
MIT Licensed, see [LICENSE](https://github.com/halogenica/Hugo-BeautifulHugo/blob/master/LICENSE).
|
||||||
4
themes/beautifulhugo/archetypes/default.md
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
---
|
||||||
|
subtitle: ""
|
||||||
|
tags: []
|
||||||
|
---
|
||||||
121
themes/beautifulhugo/data/beautifulhugo/social.toml
Normal file
@ -0,0 +1,121 @@
|
|||||||
|
[[social_icons]]
|
||||||
|
id = "email"
|
||||||
|
url = "mailto:%s"
|
||||||
|
title = "Email me"
|
||||||
|
icon = "fas fa-envelope"
|
||||||
|
|
||||||
|
[[social_icons]]
|
||||||
|
id = "facebook"
|
||||||
|
url = "https://www.facebook.com/%s"
|
||||||
|
title = "Facebook"
|
||||||
|
icon = "fab fa-facebook"
|
||||||
|
|
||||||
|
[[social_icons]]
|
||||||
|
id = "googleplus"
|
||||||
|
url = "https://www.plus.google.com/%s"
|
||||||
|
title = "Google+"
|
||||||
|
icon = "fab fa-google-plus"
|
||||||
|
|
||||||
|
[[social_icons]]
|
||||||
|
id = "gitlab"
|
||||||
|
url = "https://gitlab.com/%s"
|
||||||
|
title = "GitLab"
|
||||||
|
icon = "fab fa-gitlab"
|
||||||
|
|
||||||
|
[[social_icons]]
|
||||||
|
id = "github"
|
||||||
|
url = "https://github.com/%s"
|
||||||
|
title = "GitHub"
|
||||||
|
icon = "fab fa-github"
|
||||||
|
|
||||||
|
[[social_icons]]
|
||||||
|
id = "twitter"
|
||||||
|
url = "https://twitter.com/%s"
|
||||||
|
title = "Twitter"
|
||||||
|
icon = "fab fa-twitter"
|
||||||
|
|
||||||
|
[[social_icons]]
|
||||||
|
id = "reddit"
|
||||||
|
url = "https://reddit.com/u/%s"
|
||||||
|
title = "Reddit"
|
||||||
|
icon = "fab fa-reddit-alien"
|
||||||
|
|
||||||
|
[[social_icons]]
|
||||||
|
id = "linkedin"
|
||||||
|
url = "https://linkedin.com/in/%s"
|
||||||
|
title = "LinkedIn"
|
||||||
|
icon = "fab fa-linkedin"
|
||||||
|
|
||||||
|
[[social_icons]]
|
||||||
|
id = "xing"
|
||||||
|
url = "https://www.xing.com/profile/%s"
|
||||||
|
title = "Xing"
|
||||||
|
icon = "fab fa-xing"
|
||||||
|
|
||||||
|
[[social_icons]]
|
||||||
|
id = "stackoverflow"
|
||||||
|
url = "https://stackoverflow.com/%s"
|
||||||
|
title = "StackOverflow"
|
||||||
|
icon = "fab fa-stack-overflow"
|
||||||
|
|
||||||
|
[[social_icons]]
|
||||||
|
id = "snapchat"
|
||||||
|
url = "https://www.snapchat.com/add/%s"
|
||||||
|
title = "Snapchat"
|
||||||
|
icon = "fab fa-snapchat-ghost"
|
||||||
|
|
||||||
|
[[social_icons]]
|
||||||
|
id = "instagram"
|
||||||
|
url = "https://www.instagram.com/%s"
|
||||||
|
title = "Instagram"
|
||||||
|
icon = "fab fa-instagram"
|
||||||
|
|
||||||
|
[[social_icons]]
|
||||||
|
id = "youtube"
|
||||||
|
url = "https://www.youtube.com/%s"
|
||||||
|
title = "Youtube"
|
||||||
|
icon = "fab fa-youtube"
|
||||||
|
|
||||||
|
[[social_icons]]
|
||||||
|
id = "soundcloud"
|
||||||
|
url = "https://soundcloud.com/%s"
|
||||||
|
title = "SoundCloud"
|
||||||
|
icon = "fab fa-soundcloud"
|
||||||
|
|
||||||
|
[[social_icons]]
|
||||||
|
id = "spotify"
|
||||||
|
url = "https://open.spotify.com/user/%s"
|
||||||
|
title = "Spotify"
|
||||||
|
icon = "fab fa-spotify"
|
||||||
|
|
||||||
|
[[social_icons]]
|
||||||
|
id = "bandcamp"
|
||||||
|
url = "https://%s.bandcamp.com/"
|
||||||
|
title = "Bandcamp"
|
||||||
|
icon = "fab fa-bandcamp"
|
||||||
|
|
||||||
|
[[social_icons]]
|
||||||
|
id = "itchio"
|
||||||
|
url = "https://itch.io/profile/%s"
|
||||||
|
title = "itch.io"
|
||||||
|
icon = "fas fa-gamepad"
|
||||||
|
|
||||||
|
[[social_icons]]
|
||||||
|
id = "steam"
|
||||||
|
url = "https://steamcommunity.com/id/%s"
|
||||||
|
title = "Steam"
|
||||||
|
icon = "fab fa-steam"
|
||||||
|
|
||||||
|
[[social_icons]]
|
||||||
|
id = "keybase"
|
||||||
|
url = "https://keybase.io/%s"
|
||||||
|
title = "Keybase"
|
||||||
|
icon = "fab fa-keybase"
|
||||||
|
|
||||||
|
[[social_icons]]
|
||||||
|
id = "Goodreads"
|
||||||
|
url = "https://www.goodreads.com/%s"
|
||||||
|
title = "Goodreads"
|
||||||
|
icon = "fab fa-goodreads"
|
||||||
|
|
||||||
|
|
||||||
40
themes/beautifulhugo/i18n/en.yaml
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
# Content
|
||||||
|
- id: dateFormat
|
||||||
|
translation: "January 2, 2006"
|
||||||
|
- id: postedOnDate
|
||||||
|
translation: "Posted on {{ .Count }}"
|
||||||
|
- id: translationsLabel
|
||||||
|
translation: "Other languages: "
|
||||||
|
- id: translationsSeparator
|
||||||
|
translation: ", "
|
||||||
|
- id: readMore
|
||||||
|
translation: "Read More"
|
||||||
|
- id: olderPosts
|
||||||
|
translation: "Older Posts"
|
||||||
|
- id: newerPosts
|
||||||
|
translation: "Newer Posts"
|
||||||
|
- id: previousPost
|
||||||
|
translation: "Previous Post"
|
||||||
|
- id: nextPost
|
||||||
|
translation: "Next Post"
|
||||||
|
|
||||||
|
# 404 page
|
||||||
|
- id: pageNotFound
|
||||||
|
translation: "Whoops, this page doesn't exist. Move along. (404 error)"
|
||||||
|
|
||||||
|
# Footer
|
||||||
|
- id: poweredBy # Accepts HTML
|
||||||
|
translation: '<a href="http://gohugo.io">Hugo v{{ .Hugo.Version }}</a> powered • Theme by <a href="http://deanattali.com/beautiful-jekyll/">Beautiful Jekyll</a> adapted to <a href="https://github.com/halogenica/beautifulhugo">Beautiful Hugo</a>'
|
||||||
|
|
||||||
|
# Navigation
|
||||||
|
- id: toggleNavigation
|
||||||
|
translation: "Toggle navigation"
|
||||||
|
- id: languageSwitcherLabel
|
||||||
|
translation: "Language"
|
||||||
|
- id: gcseLabelShort
|
||||||
|
translation: "Search"
|
||||||
|
- id: gcseLabelLong
|
||||||
|
translation: "Search {{ .Site.Title }}"
|
||||||
|
- id: gcseClose
|
||||||
|
translation: "Close"
|
||||||
|
|
||||||
38
themes/beautifulhugo/i18n/ja.yaml
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
# Content
|
||||||
|
- id: dateFormat
|
||||||
|
translation: "2006年1月2日"
|
||||||
|
- id: postedOnDate
|
||||||
|
translation: "{{ .Count }}に投稿"
|
||||||
|
- id: translationsLabel
|
||||||
|
translation: "翻訳:"
|
||||||
|
- id: translationsSeparator
|
||||||
|
translation: "・"
|
||||||
|
- id: readMore
|
||||||
|
translation: "続きを読む"
|
||||||
|
- id: olderPosts
|
||||||
|
translation: "古いページ"
|
||||||
|
- id: newerPosts
|
||||||
|
translation: "新しいページ"
|
||||||
|
- id: previousPost
|
||||||
|
translation: "前ページ"
|
||||||
|
- id: nextPost
|
||||||
|
translation: "次ページ"
|
||||||
|
|
||||||
|
# 404 page
|
||||||
|
- id: pageNotFound
|
||||||
|
translation: "おっと、このページが存在しない。他にあたってください。(404エラー)"
|
||||||
|
|
||||||
|
# Footer
|
||||||
|
- id: poweredBy # Accepts HTML
|
||||||
|
translation: '起動力に<a href="http://gohugo.io">Hugo v{{ .Hugo.Version }}</a> • テーマに<a href="http://deanattali.com/beautiful-jekyll/">Beautiful Jekyll</a>に基づいている<a href="https://github.com/halogenica/beautifulhugo">Beautiful Hugo</a>'
|
||||||
|
|
||||||
|
# Navigation
|
||||||
|
- id: toggleNavigation
|
||||||
|
translation: "メニューを切り替え"
|
||||||
|
- id: gcseLabelShort
|
||||||
|
translation: "検索"
|
||||||
|
- id: gcseLabelLong
|
||||||
|
translation: "{{ .Site.Title }}を検索"
|
||||||
|
- id: gcseClose
|
||||||
|
translation: "閉じる"
|
||||||
|
|
||||||
40
themes/beautifulhugo/i18n/ru.yaml
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
# Content
|
||||||
|
- id: dateFormat
|
||||||
|
translation: "Январь 2, 2006"
|
||||||
|
- id: postedOnDate
|
||||||
|
translation: "Опубликовано {{ .Count }}"
|
||||||
|
- id: translationsLabel
|
||||||
|
translation: "Другие языки: "
|
||||||
|
- id: translationsSeparator
|
||||||
|
translation: ", "
|
||||||
|
- id: readMore
|
||||||
|
translation: "Далее"
|
||||||
|
- id: olderPosts
|
||||||
|
translation: "Предыдущие записи"
|
||||||
|
- id: newerPosts
|
||||||
|
translation: "Новые записи"
|
||||||
|
- id: previousPost
|
||||||
|
translation: "Предыдущий"
|
||||||
|
- id: nextPost
|
||||||
|
translation: "Следующий"
|
||||||
|
|
||||||
|
# 404 page
|
||||||
|
- id: pageNotFound
|
||||||
|
translation: "Уууупс, страница не найдена. Поищите ещё. (ошибка 404)"
|
||||||
|
|
||||||
|
# Footer
|
||||||
|
- id: poweredBy # Accepts HTML
|
||||||
|
translation: 'На базе <a href="http://gohugo.io">Hugo v{{ .Hugo.Version }}</a> • Тема <a href="https://github.com/halogenica/beautifulhugo">Beautiful Hugo</a> на базе <a href="http://deanattali.com/beautiful-jekyll/">Beautiful Jekyll</a>'
|
||||||
|
|
||||||
|
# Navigation
|
||||||
|
- id: toggleNavigation
|
||||||
|
translation: "Навигация"
|
||||||
|
- id: languageSwitcherLabel
|
||||||
|
translation: "Язык"
|
||||||
|
- id: gcseLabelShort
|
||||||
|
translation: "Поиск"
|
||||||
|
- id: gcseLabelLong
|
||||||
|
translation: "Поиск по {{ .Site.Title }}"
|
||||||
|
- id: gcseClose
|
||||||
|
translation: "Закрыть"
|
||||||
|
|
||||||
BIN
themes/beautifulhugo/images/screenshot.png
Normal file
|
After Width: | Height: | Size: 100 KiB |
BIN
themes/beautifulhugo/images/tn.png
Normal file
|
After Width: | Height: | Size: 74 KiB |
11
themes/beautifulhugo/layouts/404.html
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
{{ define "header" }}<!-- No header on 404 pages -->{{ end }}
|
||||||
|
{{ define "main" }}
|
||||||
|
<div role="main" class="container main-content">
|
||||||
|
<div class="text-center">
|
||||||
|
<h1>{{ i18n "pageNotFound" }}</h1>
|
||||||
|
<br/>
|
||||||
|
<img src="{{ .Site.BaseURL }}/img/404-southpark.jpg" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
11
themes/beautifulhugo/layouts/_default/baseof.html
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="{{ .Lang }}">
|
||||||
|
{{ partial "head.html" . }}
|
||||||
|
<body>
|
||||||
|
{{ partial "nav.html" . }}
|
||||||
|
{{ block "header" . }}{{ partial "header.html" . }}{{ end }}
|
||||||
|
{{ block "main" . }}{{ end }}
|
||||||
|
{{ partial "footer.html" . }}
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
||||||
80
themes/beautifulhugo/layouts/_default/list.html
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
{{ define "header" }}
|
||||||
|
<header class="header-section ">
|
||||||
|
<div class="intro-header no-img">
|
||||||
|
<div class="container">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1">
|
||||||
|
<div class="page-heading">
|
||||||
|
<h1>{{ if .Data.Singular }}#{{ end }}{{ .Title }}</h1>
|
||||||
|
<hr class="small">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
{{ end }}
|
||||||
|
{{ define "main" }}
|
||||||
|
<div class="container" role="main">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1">
|
||||||
|
{{ with .Content }}
|
||||||
|
<div class="well">
|
||||||
|
{{.}}
|
||||||
|
</div>
|
||||||
|
{{ end }}
|
||||||
|
<div class="posts-list">
|
||||||
|
{{ range .Paginator.Pages }}
|
||||||
|
<article class="post-preview">
|
||||||
|
<a href="{{ .Permalink }}">
|
||||||
|
<h2 class="post-title">{{ .Title }}</h2>
|
||||||
|
|
||||||
|
{{ if .Params.subtitle }}
|
||||||
|
<h3 class="post-subtitle">
|
||||||
|
{{ .Params.subtitle }}
|
||||||
|
</h3>
|
||||||
|
{{ end }}
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<p class="post-meta">
|
||||||
|
{{ default (i18n "dateFormat") .Site.Params.dateformat | .Date.Format | i18n "postedOnDate" }}
|
||||||
|
</p>
|
||||||
|
<div class="post-entry">
|
||||||
|
{{ if .Truncated }}
|
||||||
|
{{ .Summary }}
|
||||||
|
<a href="{{ .Permalink }}" class="post-read-more">[{{ i18n "readMore" }}]</a>
|
||||||
|
{{ else }}
|
||||||
|
{{ .Content }}
|
||||||
|
{{ end }}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{{ if .Params.tags }}
|
||||||
|
<span class="post-meta">
|
||||||
|
{{ range .Params.tags }}
|
||||||
|
#<a href="{{ $.Site.LanguagePrefix }}/tags/{{ . | urlize }}">{{ . }}</a>
|
||||||
|
{{ end }}
|
||||||
|
</span>
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
</article>
|
||||||
|
{{ end }}
|
||||||
|
</div>
|
||||||
|
{{ if or (.Paginator.HasPrev) (.Paginator.HasNext) }}
|
||||||
|
<ul class="pager main-pager">
|
||||||
|
{{ if .Paginator.HasPrev }}
|
||||||
|
<li class="previous">
|
||||||
|
<a href="{{ .URL }}page/{{ .Paginator.Prev.PageNumber }}">← {{ i18n "newerPosts" }}</a>
|
||||||
|
</li>
|
||||||
|
{{ end }}
|
||||||
|
{{ if .Paginator.HasNext }}
|
||||||
|
<li class="next">
|
||||||
|
<a href="{{ .URL }}page/{{ .Paginator.Next.PageNumber }}">{{ i18n "olderPosts" }} →</a>
|
||||||
|
</li>
|
||||||
|
{{ end }}
|
||||||
|
</ul>
|
||||||
|
{{ end }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
33
themes/beautifulhugo/layouts/_default/single.html
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
{{ define "main" }}
|
||||||
|
<div class="container">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1">
|
||||||
|
<article role="main" class="blog-post">
|
||||||
|
{{ .Content }}
|
||||||
|
</article>
|
||||||
|
|
||||||
|
<ul class="pager blog-pager">
|
||||||
|
{{ if .PrevInSection }}
|
||||||
|
<li class="previous">
|
||||||
|
<a href="{{ .PrevInSection.Permalink }}" data-toggle="tooltip" data-placement="top" title="{{ .PrevInSection.Title }}">← {{ i18n "previousPost" }}</a>
|
||||||
|
</li>
|
||||||
|
{{ end }}
|
||||||
|
{{ if .NextInSection }}
|
||||||
|
<li class="next">
|
||||||
|
<a href="{{ .NextInSection.Permalink }}" data-toggle="tooltip" data-placement="top" title="{{ .NextInSection.Title }}">{{ i18n "nextPost" }} →</a>
|
||||||
|
</li>
|
||||||
|
{{ end }}
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
{{ if (.Params.comments) | or (and (or (not (isset .Params "comments")) (eq .Params.comments nil)) (.Site.Params.comments)) }}
|
||||||
|
{{ if .Site.DisqusShortname }}
|
||||||
|
<div class="disqus-comments">
|
||||||
|
{{ template "_internal/disqus.html" . }}
|
||||||
|
</div>
|
||||||
|
{{ end }}
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{{ end }}
|
||||||
14
themes/beautifulhugo/layouts/_default/terms.html
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
{{ define "main" }}
|
||||||
|
{{ $data := .Data }}
|
||||||
|
<div class="container" role="main">
|
||||||
|
<article class="post-preview">
|
||||||
|
<div class="list-group col-lg-4 col-lg-offset-4 col-md-6 col-md-offset-3">
|
||||||
|
{{ range $key, $value := .Data.Terms.ByCount }}
|
||||||
|
<a href="{{ $.Site.LanguagePrefix }}/{{ $data.Plural }}/{{ $value.Name | urlize }}" class="list-group-item">
|
||||||
|
{{ $value.Name }}<span class="badge">{{ $value.Count }}</span></a>
|
||||||
|
{{ end }}
|
||||||
|
</div>
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
63
themes/beautifulhugo/layouts/index.html
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
{{ define "main" }}
|
||||||
|
<div role="main" class="container">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1">
|
||||||
|
{{ with .Content }}
|
||||||
|
<div class="well">
|
||||||
|
{{.}}
|
||||||
|
</div>
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
<div class="posts-list">
|
||||||
|
{{ $pag := .Paginate (where .Data.Pages "Type" "post") }}
|
||||||
|
{{ range $pag.Pages }}
|
||||||
|
<article class="post-preview">
|
||||||
|
<a href="{{ .Permalink }}">
|
||||||
|
<h2 class="post-title">{{ .Title }}</h2>
|
||||||
|
{{ if .Params.subtitle }}
|
||||||
|
<h3 class="post-subtitle">
|
||||||
|
{{ .Params.subtitle }}
|
||||||
|
</h3>
|
||||||
|
{{ end }}
|
||||||
|
</a>
|
||||||
|
|
||||||
|
{{ partial "post_meta.html" . }}
|
||||||
|
<div class="post-entry">
|
||||||
|
{{ if .Truncated }}
|
||||||
|
{{ .Summary }}
|
||||||
|
<a href="{{ .Permalink }}" class="post-read-more">[{{ i18n "readMore" }}]</a>
|
||||||
|
{{ else }}
|
||||||
|
{{ .Content }}
|
||||||
|
{{ end }}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{{ if .Params.tags }}
|
||||||
|
<span class="post-meta">
|
||||||
|
{{ range .Params.tags }}
|
||||||
|
#<a href="{{ $.Site.LanguagePrefix }}/tags/{{ . | urlize }}">{{ . }}</a>
|
||||||
|
{{ end }}
|
||||||
|
</span>
|
||||||
|
{{ end }}
|
||||||
|
</article>
|
||||||
|
{{ end }}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{{ if or (.Paginator.HasPrev) (.Paginator.HasNext) }}
|
||||||
|
<ul class="pager main-pager">
|
||||||
|
{{ if .Paginator.HasPrev }}
|
||||||
|
<li class="previous">
|
||||||
|
<a href="{{ .URL }}page/{{ .Paginator.Prev.PageNumber }}">← {{ i18n "newerPosts" }}</a>
|
||||||
|
</li>
|
||||||
|
{{ end }}
|
||||||
|
{{ if .Paginator.HasNext }}
|
||||||
|
<li class="next">
|
||||||
|
<a href="{{ .URL }}page/{{ .Paginator.Next.PageNumber }}">{{ i18n "olderPosts" }} →</a>
|
||||||
|
</li>
|
||||||
|
{{ end }}
|
||||||
|
</ul>
|
||||||
|
{{ end }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
7
themes/beautifulhugo/layouts/partials/disqus.html
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
{{ if (.Params.comments) | or (and (or (not (isset .Params "comments")) (eq .Params.comments nil)) (.Site.Params.comments)) }}
|
||||||
|
{{ if .Site.DisqusShortname }}
|
||||||
|
<div class="comments">
|
||||||
|
{{ template "_internal/disqus.html" . }}
|
||||||
|
</div>
|
||||||
|
{{ end }}
|
||||||
|
{{ end }}
|
||||||
78
themes/beautifulhugo/layouts/partials/footer.html
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
<footer>
|
||||||
|
<div class="container">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1">
|
||||||
|
<ul class="list-inline text-center footer-links">
|
||||||
|
{{ range .Site.Data.beautifulhugo.social.social_icons }}
|
||||||
|
{{- if isset $.Site.Author .id }}
|
||||||
|
<li>
|
||||||
|
<a href="{{ printf .url (index $.Site.Author .id) }}" title="{{ .title }}">
|
||||||
|
<span class="fa-stack fa-lg">
|
||||||
|
<i class="fa fa-circle fa-stack-2x"></i>
|
||||||
|
<i class="{{ .icon }} fa-stack-1x fa-inverse"></i>
|
||||||
|
</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
{{- end -}}
|
||||||
|
{{ end }}
|
||||||
|
{{ if .Site.Params.rss }}
|
||||||
|
<li>
|
||||||
|
<a href="{{ "index.xml" | absLangURL }}" title="RSS">
|
||||||
|
<span class="fa-stack fa-lg">
|
||||||
|
<i class="fa fa-circle fa-stack-2x"></i>
|
||||||
|
<i class="fa fa-rss fa-stack-1x fa-inverse"></i>
|
||||||
|
</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
{{ end }}
|
||||||
|
</ul>
|
||||||
|
<p class="credits copyright text-muted">
|
||||||
|
{{ .Site.Author.name }}
|
||||||
|
•
|
||||||
|
{{ .Site.LastChange.Format "2006" }}
|
||||||
|
|
||||||
|
{{ if .Site.Title }}
|
||||||
|
•
|
||||||
|
<a href="{{ "" | absLangURL }}">{{ .Site.Title }}</a>
|
||||||
|
{{ end }}
|
||||||
|
</p>
|
||||||
|
<!-- Please don't remove this, keep my open source work credited :) -->
|
||||||
|
<p class="credits theme-by text-muted">
|
||||||
|
{{ i18n "poweredBy" . | safeHTML }}
|
||||||
|
{{ with .Site.Params.commit }} • [<a href="{{.}}{{ getenv "GIT_COMMIT_SHA" }}">{{ getenv "GIT_COMMIT_SHA_SHORT" }}</a>]{{ end }}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.7.1/katex.min.js" integrity="sha384-/y1Nn9+QQAipbNQWU65krzJralCnuOasHncUFXGkdwntGeSvQicrYkiUBwsgUqc1" crossorigin="anonymous"></script>
|
||||||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.7.1/contrib/auto-render.min.js" integrity="sha384-dq1/gEHSxPZQ7DdrM82ID4YVol9BYyU7GbWlIwnwyPzotpoc57wDw/guX8EaYGPx" crossorigin="anonymous"></script>
|
||||||
|
<script src="https://code.jquery.com/jquery-1.12.4.min.js" integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ=" crossorigin="anonymous"></script>
|
||||||
|
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
|
||||||
|
<script src="{{ "js/main.js" | absURL }}"></script>
|
||||||
|
<script src="{{ "js/highlight.min.js" | absURL }}"></script>
|
||||||
|
<script> hljs.initHighlightingOnLoad(); </script>
|
||||||
|
<script> renderMathInElement(document.body); </script>
|
||||||
|
<!-- Load PhotoSwipe js if the load-photoswipe shortcode has been used -->
|
||||||
|
{{ if ($.Scratch.Get "photoswipeloaded") }}
|
||||||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/photoswipe/4.1.1/photoswipe.min.js" integrity="sha256-UplRCs9v4KXVJvVY+p+RSo5Q4ilAUXh7kpjyIP5odyc=" crossorigin="anonymous"></script>
|
||||||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/photoswipe/4.1.1/photoswipe-ui-default.min.js" integrity="sha256-PWHOlUzc96pMc8ThwRIXPn8yH4NOLu42RQ0b9SpnpFk=" crossorigin="anonymous"></script>
|
||||||
|
<script src="/js/load-photoswipe.js"></script>
|
||||||
|
{{ end }}
|
||||||
|
<!-- Google Custom Search Engine -->
|
||||||
|
{{ if .Site.Params.gcse }}
|
||||||
|
<script>
|
||||||
|
(function() {
|
||||||
|
var cx = '{{ .Site.Params.gcse }}';
|
||||||
|
var gcse = document.createElement('script');
|
||||||
|
gcse.type = 'text/javascript';
|
||||||
|
gcse.async = true;
|
||||||
|
gcse.src = 'https://cse.google.com/cse.js?cx=' + cx;
|
||||||
|
var s = document.getElementsByTagName('script')[0];
|
||||||
|
s.parentNode.insertBefore(gcse, s);
|
||||||
|
})();
|
||||||
|
</script>
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
{{- partial "footer_custom.html" . }}
|
||||||
4
themes/beautifulhugo/layouts/partials/footer_custom.html
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<!--
|
||||||
|
If you want to include any custom html just before </body>, put it in /layouts/footer_custom.html
|
||||||
|
Do not put anything in this file - it's only here so that hugo won't throw an error if /layouts/footer_custom.html doesn't exist.
|
||||||
|
-->
|
||||||
51
themes/beautifulhugo/layouts/partials/head.html
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
<head>
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0">
|
||||||
|
<!-- Site Title, Description, Author, and Favicon -->
|
||||||
|
{{- with .Title | default .Site.Title }}
|
||||||
|
<title>{{ . }}</title>
|
||||||
|
<meta property="og:title" content="{{ . }}" />
|
||||||
|
<meta name="twitter:title" content="{{ . | truncate 70 }}" />
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Description | default .Params.subtitle | default .Summary }}
|
||||||
|
<meta name="description" content="{{ . }}">
|
||||||
|
<meta property="og:description" content="{{ . }}">
|
||||||
|
<meta name="twitter:description" content="{{ . | truncate 200 }}">
|
||||||
|
{{- end }}
|
||||||
|
<meta name="author" content="{{ .Site.Author.name }}"/>
|
||||||
|
{{- with .Site.Params.favicon }}
|
||||||
|
<link href='{{ . | absURL }}' rel='icon' type='image/x-icon'/>
|
||||||
|
{{- end -}}
|
||||||
|
<!-- Social Media Tags -->
|
||||||
|
{{- with .Params.share_img | default .Params.image | default .Site.Params.logo }}
|
||||||
|
<meta property="og:image" content="{{ . | absURL }}" />
|
||||||
|
<meta name="twitter:image" content="{{ . | absURL }}" />
|
||||||
|
{{- end }}
|
||||||
|
<meta name="twitter:card" content="summary" />
|
||||||
|
{{- with .Site.Author.twitter }}
|
||||||
|
<meta name="twitter:site" content="@{{ . }}" />
|
||||||
|
<meta name="twitter:creator" content="@{{ . }}" />
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Site.Params.fb_app_id }}
|
||||||
|
<meta property="fb:app_id" content="{{ . }}" />
|
||||||
|
{{- end }}
|
||||||
|
<meta property="og:url" content="{{ .URL | absLangURL }}" />
|
||||||
|
<meta property="og:type" content="website" />
|
||||||
|
<meta property="og:site_name" content="{{ .Site.Title }}" />
|
||||||
|
<!-- Hugo Version number -->
|
||||||
|
{{ .Hugo.Generator -}}
|
||||||
|
<!-- Links and stylesheets -->
|
||||||
|
<link rel="canonical" href="{{ .URL | absLangURL }}" />
|
||||||
|
<link rel="alternate" href="{{ "index.xml" | absLangURL }}" type="application/rss+xml" title="{{ .Site.Title }}">
|
||||||
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.7.1/katex.min.css" integrity="sha384-wITovz90syo1dJWVh32uuETPVEtGigN07tkttEqPv+uR2SE/mbQcG7ATL28aI9H0" crossorigin="anonymous">
|
||||||
|
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.0.13/css/all.css" integrity="sha384-DNOHZ68U8hZfKXOrtjWvjxusGo9WQnrNx2sqG0tfsghAvtVlRW3tvkXWZh58N9jp" crossorigin="anonymous">
|
||||||
|
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
|
||||||
|
<link rel="stylesheet" href="{{ "css/main.css" | absURL }}" />
|
||||||
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Lora:400,700,400italic,700italic" />
|
||||||
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800" />
|
||||||
|
<link rel="stylesheet" href="{{ "css/pygment_highlights.css" | absURL }}" />
|
||||||
|
<link rel="stylesheet" href="{{ "css/highlight.min.css" | absURL }}" />
|
||||||
|
{{- partial "head_custom.html" . }}
|
||||||
|
{{ template "_internal/google_analytics_async.html" . }}
|
||||||
|
</head>
|
||||||
4
themes/beautifulhugo/layouts/partials/head_custom.html
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<!--
|
||||||
|
If you want to include any custom html just before </head>, put it in /layouts/head_custom.html
|
||||||
|
Do not put anything in this file - it's only here so that hugo won't throw an error if /layouts/head_custom.html doesn't exist.
|
||||||
|
-->
|
||||||
70
themes/beautifulhugo/layouts/partials/header.html
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
{{ if .IsHome }}
|
||||||
|
{{ $.Scratch.Set "title" .Site.Title }}
|
||||||
|
{{ if .Site.Params.subtitle }}{{ $.Scratch.Set "subtitle" .Site.Params.subtitle }}{{ end }}
|
||||||
|
{{ if .Site.Params.bigimg }}{{ $.Scratch.Set "bigimg" .Site.Params.bigimg }}{{ end }}
|
||||||
|
{{ else }}
|
||||||
|
{{ $.Scratch.Set "title" .Title }}
|
||||||
|
{{ if .Params.subtitle }}{{ $.Scratch.Set "subtitle" .Params.subtitle }}{{ end }}
|
||||||
|
{{ if .Params.bigimg }}{{ $.Scratch.Set "bigimg" .Params.bigimg }}{{ end }}
|
||||||
|
{{ end }}
|
||||||
|
{{ $bigimg := $.Scratch.Get "bigimg" }}
|
||||||
|
|
||||||
|
{{ if or $bigimg ($.Scratch.Get "title") }}
|
||||||
|
{{ if $bigimg }}
|
||||||
|
<div id="header-big-imgs" data-num-img={{len $bigimg}} {{range $i, $img := $bigimg}}data-img-src-{{add $i 1}}="{{$img.src | absURL }}" {{ if $img.desc}}data-img-desc-{{add $i 1}}="{{$img.desc}}"{{end}}{{end}}></div>
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
<header class="header-section {{ if $bigimg }}has-img{{ end }}">
|
||||||
|
{{ if $bigimg }}
|
||||||
|
<div class="intro-header big-img">
|
||||||
|
{{ $subtitle := $.Scratch.Get "subtitle" }}
|
||||||
|
<div class="container">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1">
|
||||||
|
<div class="{{ .Type }}-heading">
|
||||||
|
<h1>{{ with $.Scratch.Get "title" }}{{.}}{{ else }}<br/>{{ end }}</h1>
|
||||||
|
{{ if $subtitle }}
|
||||||
|
{{ if eq .Type "page" }}
|
||||||
|
<hr class="small">
|
||||||
|
<span class="{{ .Type }}-subheading">{{ $subtitle }}</span>
|
||||||
|
{{ else }}
|
||||||
|
<h2 class="{{ .Type }}-subheading">{{ $subtitle }}</h2>
|
||||||
|
{{ end }}
|
||||||
|
{{ end }}
|
||||||
|
{{ if eq .Type "post" }}
|
||||||
|
{{ partial "post_meta.html" . }}
|
||||||
|
{{ end }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<span class="img-desc" style="display: inline;"></span>
|
||||||
|
</div>
|
||||||
|
{{end}}
|
||||||
|
<div class="intro-header no-img">
|
||||||
|
{{ $subtitle := $.Scratch.Get "subtitle" }}
|
||||||
|
<div class="container">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1">
|
||||||
|
<div class="{{ .Type }}-heading">
|
||||||
|
<h1>{{ with $.Scratch.Get "title" }}{{.}}{{ else }}<br/>{{ end }}</h1>
|
||||||
|
{{ if $subtitle }}
|
||||||
|
{{ if eq .Type "page" }}
|
||||||
|
<hr class="small">
|
||||||
|
<span class="{{ .Type }}-subheading">{{ $subtitle }}</span>
|
||||||
|
{{ else }}
|
||||||
|
<h2 class="{{ .Type }}-subheading">{{ $subtitle }}</h2>
|
||||||
|
{{ end }}
|
||||||
|
{{ end }}
|
||||||
|
{{ if eq .Type "post" }}
|
||||||
|
{{ partial "post_meta.html" . }}
|
||||||
|
{{ end }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
{{ else }}
|
||||||
|
<div class="intro-header"></div>
|
||||||
|
{{ end }}
|
||||||
96
themes/beautifulhugo/layouts/partials/nav.html
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
<nav class="navbar navbar-default navbar-fixed-top navbar-custom">
|
||||||
|
<div class="container-fluid">
|
||||||
|
<div class="navbar-header">
|
||||||
|
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#main-navbar">
|
||||||
|
<span class="sr-only">{{ i18n "toggleNavigation" }}</span>
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
</button>
|
||||||
|
<a class="navbar-brand" href="{{ "" | absLangURL }}">{{ .Site.Title }}</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="collapse navbar-collapse" id="main-navbar">
|
||||||
|
<ul class="nav navbar-nav navbar-right">
|
||||||
|
{{ range .Site.Menus.main.ByWeight }}
|
||||||
|
{{ if .HasChildren }}
|
||||||
|
<li class="navlinks-container">
|
||||||
|
<a class="navlinks-parent" href="javascript:void(0)">{{ .Name }}</a>
|
||||||
|
<div class="navlinks-children">
|
||||||
|
{{ range .Children }}
|
||||||
|
<a href="{{ .URL | relLangURL }}">{{ .Name }}</a>
|
||||||
|
{{ end }}
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
{{ else }}
|
||||||
|
<li>
|
||||||
|
<a title="{{ .Name }}" href="{{ .URL | relLangURL }}">{{ .Name }}</a>
|
||||||
|
</li>
|
||||||
|
{{ end }}
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
{{ if .Site.IsMultiLingual }}
|
||||||
|
{{ if ge (len .Site.Languages) 3 }}
|
||||||
|
<li class="navlinks-container">
|
||||||
|
<a class="navlinks-parent" href="javascript:void(0)">{{ i18n "languageSwitcherLabel" }}</a>
|
||||||
|
<div class="navlinks-children">
|
||||||
|
{{ range .Site.Languages }}
|
||||||
|
{{ if not (eq .Lang $.Site.Language.Lang) }}
|
||||||
|
<a href="/{{ .Lang }}" lang="{{ .Lang }}">{{ default .Lang .LanguageName }}</a>
|
||||||
|
{{ end }}
|
||||||
|
{{ end }}
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
{{ else }}
|
||||||
|
<li>
|
||||||
|
{{ range .Site.Languages }}
|
||||||
|
{{ if not (eq .Lang $.Site.Language.Lang) }}
|
||||||
|
<a href="/{{ .Lang }}" lang="{{ .Lang }}">{{ default .Lang .LanguageName }}</a>
|
||||||
|
{{ end }}
|
||||||
|
{{ end }}
|
||||||
|
</li>
|
||||||
|
{{ end }}
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
{{ if isset .Site.Params "gcse" }}
|
||||||
|
<li>
|
||||||
|
<a href="#modalSearch" data-toggle="modal" data-target="#modalSearch" style="outline: none;">
|
||||||
|
<span class="hidden-sm hidden-md hidden-lg">{{ i18n "gcseLabelShort" }}</span> <span id="searchGlyph" class="glyphicon glyphicon-search"></span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
{{ end }}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="avatar-container">
|
||||||
|
<div class="avatar-img-border">
|
||||||
|
{{ if isset .Site.Params "logo" }}
|
||||||
|
<a title="{{ .Site.Title }}" href="{{ "" | absLangURL }}">
|
||||||
|
<img class="avatar-img" src="{{ .Site.Params.logo | absURL }}" alt="{{ .Site.Title }}" />
|
||||||
|
</a>
|
||||||
|
{{ end }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<!-- Search Modal -->
|
||||||
|
{{ if isset .Site.Params "gcse" }}
|
||||||
|
<div id="modalSearch" class="modal fade" role="dialog">
|
||||||
|
<div class="modal-dialog">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<button type="button" class="close" data-dismiss="modal">×</button>
|
||||||
|
<h4 class="modal-title">{{ i18n "gcseLabelLong" . }}</h4>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
<gcse:search></gcse:search>
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="button" class="btn btn-default" data-dismiss="modal">{{ i18n "gcseClose" }}</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{{ end }}
|
||||||
11
themes/beautifulhugo/layouts/partials/post_meta.html
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<span class="post-meta">
|
||||||
|
{{ default (i18n "dateFormat") .Site.Params.dateformat | .Date.Format | i18n "postedOnDate" }}
|
||||||
|
{{ if .IsTranslated -}}
|
||||||
|
{{- $sortedTranslations := sort .Translations "Site.Language.Weight" -}}
|
||||||
|
{{- $links := apply $sortedTranslations "partial" "translation_link.html" "." -}}
|
||||||
|
{{- $cleanLinks := apply $links "chomp" "." -}}
|
||||||
|
{{- $linksOutput := delimit $cleanLinks (i18n "translationsSeparator") -}}
|
||||||
|
• {{ i18n "translationsLabel" }}{{ $linksOutput }}
|
||||||
|
{{- end }}
|
||||||
|
</span>
|
||||||
|
|
||||||
@ -0,0 +1,2 @@
|
|||||||
|
<a href="{{ .Permalink }}" lang="{{ .Lang }}">{{ default .Lang .Site.Language.LanguageName }}</a>
|
||||||
|
|
||||||
29
themes/beautifulhugo/layouts/shortcodes/figure.html
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
<!--
|
||||||
|
Put this file in /layouts/shortcodes/figure.html
|
||||||
|
NB this overrides Hugo's built-in "figure" shortcode but is backwards compatible
|
||||||
|
Documentation and licence at https://github.com/liwenyip/hugo-easy-gallery/
|
||||||
|
-->
|
||||||
|
<!-- count how many times we've called this shortcode; load the css if it's the first time -->
|
||||||
|
{{- if not ($.Page.Scratch.Get "figurecount") }}<link rel="stylesheet" href="/css/hugo-easy-gallery.css" />{{ end }}
|
||||||
|
{{- $.Page.Scratch.Add "figurecount" 1 -}}
|
||||||
|
<!-- use either src or link-thumb for thumbnail image -->
|
||||||
|
{{- $thumb := .Get "src" | default (printf "%s." (.Get "thumb") | replace (.Get "link") ".") }}
|
||||||
|
<div class="box{{ with .Get "caption-position" }} fancy-figure caption-position-{{.}}{{end}}{{ with .Get "caption-effect" }} caption-effect-{{.}}{{end}}" {{ with .Get "width" }}style="max-width:{{.}}"{{end}}>
|
||||||
|
<figure {{ with .Get "class" }}class="{{.}}"{{ end }} itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
|
||||||
|
<div class="img"{{ if .Parent }} style="background-image: url('{{ $thumb }}');"{{ end }}{{ with .Get "size" }} data-size="{{.}}"{{ end }}>
|
||||||
|
<img itemprop="thumbnail" src="{{ $thumb }}" {{ with .Get "alt" | default (.Get "caption") }}alt="{{.}}"{{ end }}/><!-- <img> hidden if in .gallery -->
|
||||||
|
</div>
|
||||||
|
{{- if or (or (.Get "title") (.Get "caption")) (.Get "attr")}}
|
||||||
|
<figcaption>
|
||||||
|
{{- with .Get "title" }}<h4>{{.}}</h4>{{ end }}
|
||||||
|
{{- if or (.Get "caption") (.Get "attr")}}
|
||||||
|
<p>
|
||||||
|
{{- .Get "caption" -}}
|
||||||
|
{{- with .Get "attrlink"}}<a href="{{.}}">{{ .Get "attr" }}</a>{{ else }}{{ .Get "attr"}}{{ end -}}
|
||||||
|
</p>
|
||||||
|
{{- end }}
|
||||||
|
</figcaption>
|
||||||
|
{{- end }}
|
||||||
|
{{ with .Get "link" | default (.Get "src") }}<a href="{{.}}" itemprop="contentUrl"></a>{{ end }}<!-- put <a> last so it is stacked on top -->
|
||||||
|
</figure>
|
||||||
|
</div>
|
||||||
40
themes/beautifulhugo/layouts/shortcodes/gallery.html
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
<!--
|
||||||
|
Put this file in /layouts/shortcodes/gallery.html
|
||||||
|
Documentation and licence at https://github.com/liwenyip/hugo-easy-gallery/
|
||||||
|
-->
|
||||||
|
<!-- count how many times we've called this shortcode; load the css if it's the first time -->
|
||||||
|
{{- if not ($.Page.Scratch.Get "figurecount") }}<link rel="stylesheet" href="/css/hugo-easy-gallery.css" />{{ end }}
|
||||||
|
{{- $.Page.Scratch.Add "figurecount" 1 }}
|
||||||
|
<div class="gallery caption-position-{{ with .Get "caption-position" | default "bottom" }}{{.}}{{end}} caption-effect-{{ with .Get "caption-effect" | default "slide" }}{{.}}{{end}} hover-effect-{{ with .Get "hover-effect" | default "zoom" }}{{.}}{{end}} {{ if ne (.Get "hover-transition") "none" }}hover-transition{{end}}" itemscope itemtype="http://schema.org/ImageGallery">
|
||||||
|
{{- with (.Get "dir") -}}
|
||||||
|
<!-- If a directory was specified, generate figures for all of the images in the directory -->
|
||||||
|
{{- $files := readDir (print "/static/" .) }}
|
||||||
|
{{- range $files -}}
|
||||||
|
<!-- skip files that aren't images, or that inlcude the thumb suffix in their name -->
|
||||||
|
{{- $thumbext := $.Get "thumb" | default "-thumb" }}
|
||||||
|
{{- $isthumb := .Name | findRE ($thumbext | printf "%s\\.") }}<!-- is the current file a thumbnail image? -->
|
||||||
|
{{- $isimg := lower .Name | findRE "\\.(gif|jpg|jpeg|tiff|png|bmp)" }}<!-- is the current file an image? -->
|
||||||
|
{{- if and $isimg (not $isthumb) }}
|
||||||
|
{{- $caption := .Name | replaceRE "\\..*" "" | humanize }}<!-- humanized filename without extension -->
|
||||||
|
{{- $linkURL := print ($.Get "dir") "/" .Name | absURL }}<!-- absolute URL to hi-res image -->
|
||||||
|
{{- $thumb := .Name | replaceRE "(\\.)" ($thumbext | printf "%s.") }}<!-- filename of thumbnail image -->
|
||||||
|
{{- $thumbexists := where $files "Name" $thumb }}<!-- does a thumbnail image exist? -->
|
||||||
|
{{- $thumbURL := print ($.Get "dir") "/" $thumb | absURL }}<!-- absolute URL to thumbnail image -->
|
||||||
|
<div class="box">
|
||||||
|
<figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
|
||||||
|
<div class="img" style="background-image: url('{{ if $thumbexists }}{{ $thumbURL }}{{ else }}{{ $linkURL }}{{ end }}');" >
|
||||||
|
<img itemprop="thumbnail" src="{{ if $thumbexists }}{{ $thumbURL }}{{ else }}{{ $linkURL }}{{ end }}" alt="{{ $caption }}" /><!-- <img> hidden if in .gallery -->
|
||||||
|
</div>
|
||||||
|
<figcaption>
|
||||||
|
<p>{{ $caption }}</p>
|
||||||
|
</figcaption>
|
||||||
|
<a href="{{ $linkURL }}" itemprop="contentUrl"></a><!-- put <a> last so it is stacked on top -->
|
||||||
|
</figure>
|
||||||
|
</div>
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- else -}}
|
||||||
|
<!-- If no directory was specified, include any figure shortcodes called within the gallery -->
|
||||||
|
{{ .Inner }}
|
||||||
|
{{- end }}
|
||||||
|
</div>
|
||||||
@ -0,0 +1,75 @@
|
|||||||
|
<!--
|
||||||
|
Put this file in /layouts/shortcodes/load-photoswipe.html
|
||||||
|
Documentation and licence at https://github.com/liwenyip/hugo-easy-gallery/
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!-- prevent this shortcode from being loaded more than once per page -->
|
||||||
|
{{ if not ($.Page.Scratch.Get "photoswipeloaded") }}
|
||||||
|
{{ $.Page.Scratch.Set "photoswipeloaded" 1 }}
|
||||||
|
|
||||||
|
<!--
|
||||||
|
*** jQuery must be loaded before load-photoswipe.js ***
|
||||||
|
- If your template already loads jQuery in the header then you don't need to load it again here.
|
||||||
|
- If your template already loads jQuery in the footer, then you could load load-photoswipe.js from the footer instead
|
||||||
|
-->
|
||||||
|
<!-- these files are loaded in the theme footer
|
||||||
|
<script src="https://code.jquery.com/jquery-1.12.4.min.js" integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ=" crossorigin="anonymous"></script>
|
||||||
|
<script src="/js/load-photoswipe.js"></script>
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!-- Photoswipe css/js libraries -->
|
||||||
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/photoswipe/4.1.1/photoswipe.min.css" integrity="sha256-sCl5PUOGMLfFYctzDW3MtRib0ctyUvI9Qsmq2wXOeBY=" crossorigin="anonymous" />
|
||||||
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/photoswipe/4.1.1/default-skin/default-skin.min.css" integrity="sha256-BFeI1V+Vh1Rk37wswuOYn5lsTcaU96hGaI7OUVCLjPc=" crossorigin="anonymous" />
|
||||||
|
<!-- these files are loaded in the theme footer
|
||||||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/photoswipe/4.1.1/photoswipe.min.js" integrity="sha256-UplRCs9v4KXVJvVY+p+RSo5Q4ilAUXh7kpjyIP5odyc=" crossorigin="anonymous"></script>
|
||||||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/photoswipe/4.1.1/photoswipe-ui-default.min.js" integrity="sha256-PWHOlUzc96pMc8ThwRIXPn8yH4NOLu42RQ0b9SpnpFk=" crossorigin="anonymous"></script>
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!-- Root element of PhotoSwipe. Must have class pswp. -->
|
||||||
|
<div class="pswp" tabindex="-1" role="dialog" aria-hidden="true">
|
||||||
|
<!-- Background of PhotoSwipe.
|
||||||
|
It's a separate element, as animating opacity is faster than rgba(). -->
|
||||||
|
<div class="pswp__bg"></div>
|
||||||
|
<!-- Slides wrapper with overflow:hidden. -->
|
||||||
|
<div class="pswp__scroll-wrap">
|
||||||
|
<!-- Container that holds slides.
|
||||||
|
PhotoSwipe keeps only 3 of them in DOM to save memory.
|
||||||
|
Don't modify these 3 pswp__item elements, data is added later on. -->
|
||||||
|
<div class="pswp__container">
|
||||||
|
<div class="pswp__item"></div>
|
||||||
|
<div class="pswp__item"></div>
|
||||||
|
<div class="pswp__item"></div>
|
||||||
|
</div>
|
||||||
|
<!-- Default (PhotoSwipeUI_Default) interface on top of sliding area. Can be changed. -->
|
||||||
|
<div class="pswp__ui pswp__ui--hidden">
|
||||||
|
<div class="pswp__top-bar">
|
||||||
|
<!-- Controls are self-explanatory. Order can be changed. -->
|
||||||
|
<div class="pswp__counter"></div>
|
||||||
|
<button class="pswp__button pswp__button--close" title="Close (Esc)"></button>
|
||||||
|
<button class="pswp__button pswp__button--share" title="Share"></button>
|
||||||
|
<button class="pswp__button pswp__button--fs" title="Toggle fullscreen"></button>
|
||||||
|
<button class="pswp__button pswp__button--zoom" title="Zoom in/out"></button>
|
||||||
|
<!-- Preloader demo http://codepen.io/dimsemenov/pen/yyBWoR -->
|
||||||
|
<!-- element will get class pswp__preloader--active when preloader is running -->
|
||||||
|
<div class="pswp__preloader">
|
||||||
|
<div class="pswp__preloader__icn">
|
||||||
|
<div class="pswp__preloader__cut">
|
||||||
|
<div class="pswp__preloader__donut"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="pswp__share-modal pswp__share-modal--hidden pswp__single-tap">
|
||||||
|
<div class="pswp__share-tooltip"></div>
|
||||||
|
</div>
|
||||||
|
<button class="pswp__button pswp__button--arrow--left" title="Previous (arrow left)">
|
||||||
|
</button>
|
||||||
|
<button class="pswp__button pswp__button--arrow--right" title="Next (arrow right)">
|
||||||
|
</button>
|
||||||
|
<div class="pswp__caption">
|
||||||
|
<div class="pswp__caption__center"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{{ end }}
|
||||||
71
themes/beautifulhugo/layouts/shortcodes/load-photoswipe.html
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
<!--
|
||||||
|
Put this file in /layouts/shortcodes/load-photoswipe.html
|
||||||
|
Documentation and licence at https://github.com/liwenyip/hugo-easy-gallery/
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!-- prevent this shortcode from being loaded more than once per page -->
|
||||||
|
{{ if not ($.Page.Scratch.Get "photoswipeloaded") }}
|
||||||
|
{{ $.Page.Scratch.Set "photoswipeloaded" 1 }}
|
||||||
|
|
||||||
|
<!--
|
||||||
|
*** jQuery must be loaded before load-photoswipe.js ***
|
||||||
|
- If your template already loads jQuery in the header then you don't need to load it again here.
|
||||||
|
- If your template already loads jQuery in the footer, then you could load load-photoswipe.js from the footer instead
|
||||||
|
-->
|
||||||
|
<script src="https://code.jquery.com/jquery-1.12.4.min.js" integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ=" crossorigin="anonymous"></script>
|
||||||
|
<script src="/js/load-photoswipe.js"></script>
|
||||||
|
|
||||||
|
<!-- Photoswipe css/js libraries -->
|
||||||
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/photoswipe/4.1.1/photoswipe.min.css" integrity="sha256-sCl5PUOGMLfFYctzDW3MtRib0ctyUvI9Qsmq2wXOeBY=" crossorigin="anonymous" />
|
||||||
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/photoswipe/4.1.1/default-skin/default-skin.min.css" integrity="sha256-BFeI1V+Vh1Rk37wswuOYn5lsTcaU96hGaI7OUVCLjPc=" crossorigin="anonymous" />
|
||||||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/photoswipe/4.1.1/photoswipe.min.js" integrity="sha256-UplRCs9v4KXVJvVY+p+RSo5Q4ilAUXh7kpjyIP5odyc=" crossorigin="anonymous"></script>
|
||||||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/photoswipe/4.1.1/photoswipe-ui-default.min.js" integrity="sha256-PWHOlUzc96pMc8ThwRIXPn8yH4NOLu42RQ0b9SpnpFk=" crossorigin="anonymous"></script>
|
||||||
|
|
||||||
|
<!-- Root element of PhotoSwipe. Must have class pswp. -->
|
||||||
|
<div class="pswp" tabindex="-1" role="dialog" aria-hidden="true">
|
||||||
|
<!-- Background of PhotoSwipe.
|
||||||
|
It's a separate element, as animating opacity is faster than rgba(). -->
|
||||||
|
<div class="pswp__bg"></div>
|
||||||
|
<!-- Slides wrapper with overflow:hidden. -->
|
||||||
|
<div class="pswp__scroll-wrap">
|
||||||
|
<!-- Container that holds slides.
|
||||||
|
PhotoSwipe keeps only 3 of them in DOM to save memory.
|
||||||
|
Don't modify these 3 pswp__item elements, data is added later on. -->
|
||||||
|
<div class="pswp__container">
|
||||||
|
<div class="pswp__item"></div>
|
||||||
|
<div class="pswp__item"></div>
|
||||||
|
<div class="pswp__item"></div>
|
||||||
|
</div>
|
||||||
|
<!-- Default (PhotoSwipeUI_Default) interface on top of sliding area. Can be changed. -->
|
||||||
|
<div class="pswp__ui pswp__ui--hidden">
|
||||||
|
<div class="pswp__top-bar">
|
||||||
|
<!-- Controls are self-explanatory. Order can be changed. -->
|
||||||
|
<div class="pswp__counter"></div>
|
||||||
|
<button class="pswp__button pswp__button--close" title="Close (Esc)"></button>
|
||||||
|
<button class="pswp__button pswp__button--share" title="Share"></button>
|
||||||
|
<button class="pswp__button pswp__button--fs" title="Toggle fullscreen"></button>
|
||||||
|
<button class="pswp__button pswp__button--zoom" title="Zoom in/out"></button>
|
||||||
|
<!-- Preloader demo http://codepen.io/dimsemenov/pen/yyBWoR -->
|
||||||
|
<!-- element will get class pswp__preloader--active when preloader is running -->
|
||||||
|
<div class="pswp__preloader">
|
||||||
|
<div class="pswp__preloader__icn">
|
||||||
|
<div class="pswp__preloader__cut">
|
||||||
|
<div class="pswp__preloader__donut"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="pswp__share-modal pswp__share-modal--hidden pswp__single-tap">
|
||||||
|
<div class="pswp__share-tooltip"></div>
|
||||||
|
</div>
|
||||||
|
<button class="pswp__button pswp__button--arrow--left" title="Previous (arrow left)">
|
||||||
|
</button>
|
||||||
|
<button class="pswp__button pswp__button--arrow--right" title="Next (arrow right)">
|
||||||
|
</button>
|
||||||
|
<div class="pswp__caption">
|
||||||
|
<div class="pswp__caption__center"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{{ end }}
|
||||||
1
themes/beautifulhugo/static/css/highlight.min.css
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
.hljs{display:block;overflow-x:auto;padding:0.5em;background:#f9f9f9;-webkit-text-size-adjust:none}.hljs,.hljs-subst,.hljs-tag .hljs-title,.nginx .hljs-title{color:black}.hljs-string,.hljs-title,.hljs-constant,.hljs-parent,.hljs-tag .hljs-value,.hljs-rule .hljs-value,.hljs-preprocessor,.hljs-pragma,.hljs-name,.haml .hljs-symbol,.ruby .hljs-symbol,.ruby .hljs-symbol .hljs-string,.hljs-template_tag,.django .hljs-variable,.smalltalk .hljs-class,.hljs-addition,.hljs-flow,.hljs-stream,.bash .hljs-variable,.pf .hljs-variable,.apache .hljs-tag,.apache .hljs-cbracket,.tex .hljs-command,.tex .hljs-special,.erlang_repl .hljs-function_or_atom,.asciidoc .hljs-header,.markdown .hljs-header,.coffeescript .hljs-attribute{color:#800}.smartquote,.hljs-comment,.hljs-annotation,.diff .hljs-header,.hljs-chunk,.asciidoc .hljs-blockquote,.markdown .hljs-blockquote{color:#888}.hljs-number,.hljs-date,.hljs-regexp,.hljs-literal,.hljs-hexcolor,.smalltalk .hljs-symbol,.smalltalk .hljs-char,.go .hljs-constant,.hljs-change,.lasso .hljs-variable,.makefile .hljs-variable,.asciidoc .hljs-bullet,.markdown .hljs-bullet,.asciidoc .hljs-link_url,.markdown .hljs-link_url{color:#080}.hljs-label,.hljs-javadoc,.ruby .hljs-string,.hljs-decorator,.hljs-filter .hljs-argument,.hljs-localvars,.hljs-array,.hljs-attr_selector,.hljs-important,.hljs-pseudo,.hljs-pi,.haml .hljs-bullet,.hljs-doctype,.hljs-deletion,.hljs-envvar,.hljs-shebang,.apache .hljs-sqbracket,.nginx .hljs-built_in,.tex .hljs-formula,.erlang_repl .hljs-reserved,.hljs-prompt,.asciidoc .hljs-link_label,.markdown .hljs-link_label,.vhdl .hljs-attribute,.clojure .hljs-attribute,.asciidoc .hljs-attribute,.lasso .hljs-attribute,.coffeescript .hljs-property,.hljs-phony{color:#88f}.hljs-keyword,.hljs-id,.hljs-title,.hljs-built_in,.css .hljs-tag,.hljs-javadoctag,.hljs-phpdoc,.hljs-dartdoc,.hljs-yardoctag,.smalltalk .hljs-class,.hljs-winutils,.bash .hljs-variable,.pf .hljs-variable,.apache .hljs-tag,.hljs-type,.hljs-typename,.tex .hljs-command,.asciidoc .hljs-strong,.markdown .hljs-strong,.hljs-request,.hljs-status{font-weight:bold}.asciidoc .hljs-emphasis,.markdown .hljs-emphasis{font-style:italic}.nginx .hljs-built_in{font-weight:normal}.coffeescript .javascript,.javascript .xml,.lasso .markup,.tex .hljs-formula,.xml .javascript,.xml .vbscript,.xml .css,.xml .hljs-cdata{opacity:0.5}
|
||||||
157
themes/beautifulhugo/static/css/hugo-easy-gallery.css
Normal file
@ -0,0 +1,157 @@
|
|||||||
|
/*
|
||||||
|
Put this file in /static/css/hugo-easy-gallery.css
|
||||||
|
Documentation and licence at https://github.com/liwenyip/hugo-easy-gallery/
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
Grid Layout Styles
|
||||||
|
*/
|
||||||
|
.gallery {
|
||||||
|
overflow: hidden;
|
||||||
|
margin: 10px;
|
||||||
|
max-width: 768px;
|
||||||
|
}
|
||||||
|
.gallery .box {
|
||||||
|
float: left;
|
||||||
|
position: relative;
|
||||||
|
/* Default: 1 tile wide */
|
||||||
|
width: 100%;
|
||||||
|
padding-bottom: 100%;
|
||||||
|
}
|
||||||
|
@media only screen and (min-width : 365px) {
|
||||||
|
/* Tablet view: 2 tiles */
|
||||||
|
.gallery .box {
|
||||||
|
width: 50%;
|
||||||
|
padding-bottom: 50%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@media only screen and (min-width : 480px) {
|
||||||
|
/* Small desktop / ipad view: 3 tiles */
|
||||||
|
.gallery .box {
|
||||||
|
width: 33.3%;
|
||||||
|
padding-bottom: 33.3%; /* */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@media only screen and (min-width : 9999px) {
|
||||||
|
/* Medium desktop: 4 tiles */
|
||||||
|
.box {
|
||||||
|
width: 25%;
|
||||||
|
padding-bottom: 25%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Transition styles
|
||||||
|
*/
|
||||||
|
.gallery.hover-transition figure,
|
||||||
|
.gallery.hover-effect-zoom .img,
|
||||||
|
.gallery:not(.caption-effect-appear) figcaption,
|
||||||
|
.fancy-figure:not(.caption-effect-appear) figcaption {
|
||||||
|
-webkit-transition: all 0.3s ease-in-out;
|
||||||
|
-moz-transition: all 0.3s ease-in-out;
|
||||||
|
-o-transition: all 0.3s ease-in-out;
|
||||||
|
transition: all 0.3s ease-in-out;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
figure styles
|
||||||
|
*/
|
||||||
|
figure {
|
||||||
|
position:relative; /* purely to allow absolution positioning of figcaption */
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
.gallery figure {
|
||||||
|
position: absolute;
|
||||||
|
left: 5px;
|
||||||
|
right: 5px;
|
||||||
|
top: 5px;
|
||||||
|
bottom: 5px;
|
||||||
|
}
|
||||||
|
.gallery.hover-effect-grow figure:hover {
|
||||||
|
transform: scale(1.05);
|
||||||
|
}
|
||||||
|
.gallery.hover-effect-shrink figure:hover {
|
||||||
|
transform: scale(0.95);
|
||||||
|
}
|
||||||
|
.gallery.hover-effect-slidedown figure:hover {
|
||||||
|
transform: translateY(5px);
|
||||||
|
}
|
||||||
|
.gallery.hover-effect-slideup figure:hover {
|
||||||
|
transform: translateY(-5px);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
img / a styles
|
||||||
|
*/
|
||||||
|
|
||||||
|
.gallery .img {
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
top: 0;
|
||||||
|
bottom: 0;
|
||||||
|
background-size: cover;
|
||||||
|
background-position: 50% 50%;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
}
|
||||||
|
.gallery.hover-effect-zoom figure:hover .img {
|
||||||
|
transform: scale(1.05);
|
||||||
|
}
|
||||||
|
.gallery img {
|
||||||
|
display: none; /* only show the img if not inside a gallery */
|
||||||
|
}
|
||||||
|
figure a {
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
top: 0;
|
||||||
|
bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
figcaption styles
|
||||||
|
*/
|
||||||
|
.gallery figcaption,
|
||||||
|
.fancy-figure figcaption {
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
background: #000;
|
||||||
|
color: #FFF;
|
||||||
|
text-align: center;
|
||||||
|
font-size: 75%; /* change this if you want bigger text */
|
||||||
|
background: rgba(0, 0, 0, 0.5);
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
.gallery.caption-position-none figcaption,
|
||||||
|
.fancy-figure.caption-position-none figcaption {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.gallery.caption-position-center figcaption,
|
||||||
|
.fancy-figure.caption-position-center figcaption {
|
||||||
|
top: 0;
|
||||||
|
padding: 40% 5px;
|
||||||
|
}
|
||||||
|
.gallery.caption-position-bottom figcaption,
|
||||||
|
.fancy-figure.caption-position-bottom figcaption {
|
||||||
|
padding: 5px;
|
||||||
|
}
|
||||||
|
.gallery.caption-effect-fade figure:not(:hover) figcaption,
|
||||||
|
.gallery.caption-effect-appear figure:not(:hover) figcaption,
|
||||||
|
.fancy-figure.caption-effect-fade figure:not(:hover) figcaption,
|
||||||
|
.fancy-figure.caption-effect-appear figure:not(:hover) figcaption {
|
||||||
|
background: rgba(0, 0, 0, 0);
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
.gallery.caption-effect-slide.caption-position-bottom figure:not(:hover) figcaption,
|
||||||
|
.fancy-figure.caption-effect-slide.caption-position-bottom figure:not(:hover) figcaption {
|
||||||
|
margin-bottom: -100%;
|
||||||
|
}
|
||||||
|
.gallery.caption-effect-slide.caption-position-center figure:not(:hover) figcaption,
|
||||||
|
.fancy-figure.caption-effect-slide.caption-position-center figure:not(:hover) figcaption {
|
||||||
|
top: 100%;
|
||||||
|
}
|
||||||
|
figcaption p {
|
||||||
|
margin: auto; /* override style in theme */
|
||||||
|
}
|
||||||
13
themes/beautifulhugo/static/css/main-minimal.css
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
.main-content {
|
||||||
|
padding-bottom: 50px;
|
||||||
|
}
|
||||||
|
|
||||||
|
footer.footer-min {
|
||||||
|
position: fixed;
|
||||||
|
bottom: 0;
|
||||||
|
width: 100%;
|
||||||
|
padding: 3px;
|
||||||
|
background-color: #f5f5f5;
|
||||||
|
border-top: 1px solid #eeeeee;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
704
themes/beautifulhugo/static/css/main.css
Normal file
@ -0,0 +1,704 @@
|
|||||||
|
@import url("pygment_highlights.css");
|
||||||
|
|
||||||
|
/* --- General --- */
|
||||||
|
|
||||||
|
body {
|
||||||
|
font-family: 'Lora', 'Times New Roman', serif;
|
||||||
|
font-size: 18px;
|
||||||
|
color: #404040;
|
||||||
|
position: relative;
|
||||||
|
background: #FFF;
|
||||||
|
}
|
||||||
|
p {
|
||||||
|
line-height: 1.5;
|
||||||
|
margin: 30px 0;
|
||||||
|
}
|
||||||
|
p a {
|
||||||
|
/* text-decoration: underline */
|
||||||
|
color: #008AFF;
|
||||||
|
}
|
||||||
|
h1,h2,h3,h4,h5,h6 {
|
||||||
|
font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;
|
||||||
|
font-weight: 800;
|
||||||
|
}
|
||||||
|
a {
|
||||||
|
color: #008AFF;
|
||||||
|
}
|
||||||
|
a:hover,
|
||||||
|
a:focus {
|
||||||
|
color: #0085a1;
|
||||||
|
}
|
||||||
|
blockquote {
|
||||||
|
color: #808080;
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
blockquote p:first-child {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
hr.small {
|
||||||
|
max-width: 100px;
|
||||||
|
margin: 15px auto;
|
||||||
|
border-width: 4px;
|
||||||
|
border-color: inherit;
|
||||||
|
border-radius: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.main-content {
|
||||||
|
padding-top: 80px;
|
||||||
|
}
|
||||||
|
@media only screen and (min-width: 768px) {
|
||||||
|
.main-content {
|
||||||
|
padding-top: 130px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.main-explain-area {
|
||||||
|
font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;
|
||||||
|
padding: 15px inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hideme {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
::-moz-selection {
|
||||||
|
color: white;
|
||||||
|
text-shadow: none;
|
||||||
|
background: #0085a1;
|
||||||
|
}
|
||||||
|
::selection {
|
||||||
|
color: white;
|
||||||
|
text-shadow: none;
|
||||||
|
background: #0085a1;
|
||||||
|
}
|
||||||
|
img::selection {
|
||||||
|
color: white;
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
img::-moz-selection {
|
||||||
|
color: white;
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
img {
|
||||||
|
display: block;
|
||||||
|
margin: auto;
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.disqus-comments {
|
||||||
|
margin-top: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media only screen and (min-width: 768px) {
|
||||||
|
.disqus-comments {
|
||||||
|
margin-top: 40px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --- Navbar --- */
|
||||||
|
|
||||||
|
.navbar-custom {
|
||||||
|
background: #F5F5F5;
|
||||||
|
border-bottom: 1px solid #EAEAEA;
|
||||||
|
font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-custom .nav li a {
|
||||||
|
text-transform: uppercase;
|
||||||
|
font-size: 12px;
|
||||||
|
letter-spacing: 1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-custom .navbar-brand,
|
||||||
|
.navbar-custom .nav li a {
|
||||||
|
font-weight: 800;
|
||||||
|
color: #404040;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-custom .navbar-brand:hover,
|
||||||
|
.navbar-custom .navbar-brand:focus ,
|
||||||
|
.navbar-custom .nav li a:hover,
|
||||||
|
.navbar-custom .nav li a:focus {
|
||||||
|
color: #0085a1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-custom .navbar-brand-logo {
|
||||||
|
padding-top: 0;
|
||||||
|
-webkit-transition: padding .5s ease-in-out;
|
||||||
|
-moz-transition: padding .5s ease-in-out;
|
||||||
|
transition: padding .5s ease-in-out;
|
||||||
|
}
|
||||||
|
.navbar-custom .navbar-brand-logo img {
|
||||||
|
height: 50px;
|
||||||
|
-webkit-transition: height .5s ease-in-out;
|
||||||
|
-moz-transition: height .5s ease-in-out;
|
||||||
|
transition: height .5s ease-in-out;
|
||||||
|
}
|
||||||
|
.navbar-custom.top-nav-short .navbar-brand-logo {
|
||||||
|
padding-top: 5px;
|
||||||
|
}
|
||||||
|
.navbar-custom.top-nav-short .navbar-brand-logo img {
|
||||||
|
height: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media only screen and (min-width: 768px) {
|
||||||
|
.navbar-custom {
|
||||||
|
padding: 20px 0;
|
||||||
|
-webkit-transition: background .5s ease-in-out,padding .5s ease-in-out;
|
||||||
|
-moz-transition: background .5s ease-in-out,padding .5s ease-in-out;
|
||||||
|
transition: background .5s ease-in-out,padding .5s ease-in-out;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-custom.top-nav-short {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-custom .avatar-container {
|
||||||
|
opacity: 1;
|
||||||
|
position: absolute;
|
||||||
|
-webkit-transition: opacity 0.5s ease-in-out;
|
||||||
|
-moz-transition: opacity 0.5s ease-in-out;
|
||||||
|
transition: opacity 0.5s ease-in-out;
|
||||||
|
left: 50%;
|
||||||
|
width: 50px;
|
||||||
|
margin-top: -25px;
|
||||||
|
}
|
||||||
|
.navbar-custom .avatar-container .avatar-img-border {
|
||||||
|
width: 100%;
|
||||||
|
border-radius: 50%;
|
||||||
|
margin-left: -50%;
|
||||||
|
display: inline-block;
|
||||||
|
box-shadow: 0 0 8px rgba(0, 0, 0, .8);
|
||||||
|
-webkit-box-shadow: 0 0 5px rgba(0, 0, 0, .8);
|
||||||
|
-moz-box-shadow: 0 0 8px rgba(0, 0, 0, .8);
|
||||||
|
}
|
||||||
|
.navbar-custom .avatar-container .avatar-img {
|
||||||
|
width: 100%;
|
||||||
|
border-radius: 50%;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-custom.top-nav-short .avatar-container{
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-custom.top-nav-expanded .avatar-container {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media only screen and (min-width: 768px) {
|
||||||
|
.navbar-custom .avatar-container {
|
||||||
|
width: 100px;
|
||||||
|
margin-top: -50px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-custom .avatar-container .avatar-img-border {
|
||||||
|
width: 100%;
|
||||||
|
box-shadow: 1px 1px 2px rgba(0, 0, 0, .8);
|
||||||
|
-webkit-box-shadow: 1px 1px 2px rgba(0, 0, 0, .8);
|
||||||
|
-moz-box-shadow: 1px 1px 2px rgba(0, 0, 0, .8);
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-custom .avatar-container .avatar-img {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Multi-level navigation links */
|
||||||
|
.navbar-custom .nav .navlinks-container {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
.navbar-custom .nav .navlinks-parent:after {
|
||||||
|
content: " \25BC";
|
||||||
|
}
|
||||||
|
.navbar-custom .nav .navlinks-children {
|
||||||
|
width: 100%;
|
||||||
|
display: none;
|
||||||
|
word-break: break-word;
|
||||||
|
}
|
||||||
|
.navbar-custom .nav .navlinks-container .navlinks-children a {
|
||||||
|
display: block;
|
||||||
|
padding: 10px;
|
||||||
|
padding-left: 30px;
|
||||||
|
background: #f5f5f5;
|
||||||
|
text-decoration: none !important;
|
||||||
|
border-width: 0 1px 1px 1px;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
@media only screen and (max-width: 767px) {
|
||||||
|
.navbar-custom .nav .navlinks-container.show-children {
|
||||||
|
background: #eee;
|
||||||
|
}
|
||||||
|
.navbar-custom .nav .navlinks-container.show-children .navlinks-children {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@media only screen and (min-width: 768px) {
|
||||||
|
.navbar-custom .nav .navlinks-container {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.navbar-custom .nav .navlinks-container:hover {
|
||||||
|
background: #eee;
|
||||||
|
}
|
||||||
|
.navbar-custom .nav .navlinks-container:hover .navlinks-children {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
.navbar-custom .nav .navlinks-children {
|
||||||
|
position: absolute;
|
||||||
|
}
|
||||||
|
.navbar-custom .nav .navlinks-container .navlinks-children a {
|
||||||
|
padding-left: 10px;
|
||||||
|
border: 1px solid #eaeaea;
|
||||||
|
border-width: 0 1px 1px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --- Footer --- */
|
||||||
|
|
||||||
|
footer {
|
||||||
|
padding: 30px 0;
|
||||||
|
background: #F5F5F5;
|
||||||
|
border-top: 1px #EAEAEA solid;
|
||||||
|
margin-top: 50px;
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
footer a {
|
||||||
|
color: #404040;
|
||||||
|
}
|
||||||
|
|
||||||
|
footer .list-inline {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
footer .copyright {
|
||||||
|
font-family: Open Sans;
|
||||||
|
text-align: center;
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
footer .theme-by {
|
||||||
|
text-align: center;
|
||||||
|
margin: 10px 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media only screen and (min-width: 768px) {
|
||||||
|
footer {
|
||||||
|
padding: 50px 0;
|
||||||
|
}
|
||||||
|
footer .footer-links {
|
||||||
|
font-size: 18px;
|
||||||
|
}
|
||||||
|
footer .copyright {
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --- Post preview --- */
|
||||||
|
|
||||||
|
.post-preview {
|
||||||
|
padding: 20px 0;
|
||||||
|
border-bottom: 1px solid #eee;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media only screen and (min-width: 768px) {
|
||||||
|
.post-preview {
|
||||||
|
padding: 35px 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-preview:last-child {
|
||||||
|
border-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-preview a {
|
||||||
|
text-decoration: none;
|
||||||
|
color: #404040;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-preview a:focus,
|
||||||
|
.post-preview a:hover {
|
||||||
|
text-decoration: none;
|
||||||
|
color: #0085a1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-preview .post-title {
|
||||||
|
font-size: 30px;
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
.post-preview .post-subtitle {
|
||||||
|
margin: 0;
|
||||||
|
font-weight: 300;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
.post-preview .post-meta,
|
||||||
|
.post-heading .post-meta {
|
||||||
|
color: #808080;
|
||||||
|
font-size: 18px;
|
||||||
|
font-style: italic;
|
||||||
|
margin: 0 0 10px;
|
||||||
|
}
|
||||||
|
.post-preview .post-meta a,
|
||||||
|
.post-heading .post-meta a {
|
||||||
|
color: #404040;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
.post-preview .post-entry {
|
||||||
|
font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;
|
||||||
|
}
|
||||||
|
.post-entry-container {
|
||||||
|
display: inline-block;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
.post-entry {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
.post-image {
|
||||||
|
float: right;
|
||||||
|
height: 192px;
|
||||||
|
width: 192px;
|
||||||
|
margin-top: -35px;
|
||||||
|
filter: grayscale(90%);
|
||||||
|
}
|
||||||
|
.post-image:hover {
|
||||||
|
filter: grayscale(0%);
|
||||||
|
}
|
||||||
|
.post-image img {
|
||||||
|
border-radius: 100px;
|
||||||
|
height: 192px;
|
||||||
|
width: 192px;
|
||||||
|
}
|
||||||
|
.post-preview .post-read-more {
|
||||||
|
font-weight: 800;
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media only screen and (min-width: 768px) {
|
||||||
|
.post-preview .post-title {
|
||||||
|
font-size: 36px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --- Tags --- */
|
||||||
|
|
||||||
|
.blog-tags {
|
||||||
|
font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;
|
||||||
|
color: #999;
|
||||||
|
font-size: 15px;
|
||||||
|
margin-bottom: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.blog-tags a {
|
||||||
|
color: #008AFF;
|
||||||
|
text-decoration: none;
|
||||||
|
padding: 0px 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.blog-tags a:hover {
|
||||||
|
border-radius: 2px;
|
||||||
|
color: #008AFF;
|
||||||
|
background-color: #CCC;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-preview .blog-tags {
|
||||||
|
margin-top: 5px;
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media only screen and (min-width: 768px) {
|
||||||
|
.post-preview .blog-tags {
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media only screen and (max-width: 500px) {
|
||||||
|
.post-image, .post-image img {
|
||||||
|
height: 100px;
|
||||||
|
width: 100px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-image {
|
||||||
|
width: 100%;
|
||||||
|
text-align: center;
|
||||||
|
margin-top: 0;
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* --- Post and page headers --- */
|
||||||
|
|
||||||
|
.intro-header {
|
||||||
|
margin: 80px 0 20px;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
.intro-header.big-img {
|
||||||
|
background: no-repeat center center;
|
||||||
|
-webkit-background-size: cover;
|
||||||
|
-moz-background-size: cover;
|
||||||
|
background-size: cover;
|
||||||
|
-o-background-size: cover;
|
||||||
|
margin-top: 51px; /* The small navbar is 50px tall + 1px border */
|
||||||
|
margin-bottom: 35px;
|
||||||
|
}
|
||||||
|
.intro-header.big-img .big-img-transition {
|
||||||
|
position: absolute;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
opacity: 0;
|
||||||
|
background: no-repeat center center;
|
||||||
|
-webkit-background-size: cover;
|
||||||
|
-moz-background-size: cover;
|
||||||
|
background-size: cover;
|
||||||
|
-o-background-size: cover;
|
||||||
|
-webkit-transition: opacity 1s linear;
|
||||||
|
-moz-transition: opacity 1s linear;
|
||||||
|
transition: opacity 1s linear;
|
||||||
|
}
|
||||||
|
.intro-header .page-heading {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.intro-header.big-img .page-heading,
|
||||||
|
.intro-header.big-img .post-heading {
|
||||||
|
padding: 100px 0;
|
||||||
|
color: #FFF;
|
||||||
|
text-shadow: 1px 1px 3px #000;
|
||||||
|
}
|
||||||
|
.intro-header .page-heading h1 {
|
||||||
|
margin-top: 0;
|
||||||
|
font-size: 50px;
|
||||||
|
}
|
||||||
|
.intro-header .post-heading h1 {
|
||||||
|
margin-top: 0;
|
||||||
|
font-size: 35px;
|
||||||
|
}
|
||||||
|
.intro-header .page-heading .page-subheading,
|
||||||
|
.intro-header .post-heading .post-subheading {
|
||||||
|
font-size: 27px;
|
||||||
|
line-height: 1.1;
|
||||||
|
display: block;
|
||||||
|
font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;
|
||||||
|
font-weight: 300;
|
||||||
|
margin: 10px 0 0;
|
||||||
|
}
|
||||||
|
.intro-header .post-heading .post-subheading {
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
.intro-header.big-img .page-heading .page-subheading,
|
||||||
|
.intro-header.big-img .post-heading .post-subheading {
|
||||||
|
font-weight: 400;
|
||||||
|
}
|
||||||
|
.intro-header.big-img .page-heading hr {
|
||||||
|
box-shadow: 1px 1px 3px #000;
|
||||||
|
-webkit-box-shadow: 1px 1px 3px #000;
|
||||||
|
-moz-box-shadow: 1px 1px 3px #000;
|
||||||
|
}
|
||||||
|
.intro-header.big-img .post-heading .post-meta {
|
||||||
|
color: #EEE;
|
||||||
|
}
|
||||||
|
.intro-header.big-img .img-desc {
|
||||||
|
background: rgba(30, 30, 30, 0.6);
|
||||||
|
position: absolute;
|
||||||
|
padding: 5px 10px;
|
||||||
|
font-size: 11px;
|
||||||
|
color: #EEE;
|
||||||
|
font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;
|
||||||
|
right: 0;
|
||||||
|
bottom: 0;
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
@media only screen and (min-width: 768px) {
|
||||||
|
.intro-header {
|
||||||
|
margin-top: 130px;
|
||||||
|
}
|
||||||
|
.intro-header.big-img {
|
||||||
|
margin-top: 91px; /* Full navbar is small navbar + 20px padding on each side when expanded */
|
||||||
|
}
|
||||||
|
.intro-header.big-img .page-heading,
|
||||||
|
.intro-header.big-img .post-heading {
|
||||||
|
padding: 150px 0;
|
||||||
|
}
|
||||||
|
.intro-header .page-heading h1 {
|
||||||
|
font-size: 80px;
|
||||||
|
}
|
||||||
|
.intro-header .post-heading h1 {
|
||||||
|
font-size: 50px;
|
||||||
|
}
|
||||||
|
.intro-header.big-img .img-desc {
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.header-section.has-img .no-img {
|
||||||
|
margin-top: 0;
|
||||||
|
background: #FCFCFC;
|
||||||
|
margin: 0 0 40px;
|
||||||
|
padding: 20px 0;
|
||||||
|
box-shadow: 0 0 5px #AAA;
|
||||||
|
}
|
||||||
|
/* Many phones are 320 or 360px, so make sure images are a proper aspect ratio in those cases */
|
||||||
|
.header-section.has-img .intro-header.no-img {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
@media only screen and (max-width: 365px) {
|
||||||
|
.header-section.has-img .intro-header.no-img {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
.intro-header.big-img {
|
||||||
|
width: 100%;
|
||||||
|
height: 220px;
|
||||||
|
}
|
||||||
|
.intro-header.big-img .page-heading,
|
||||||
|
.intro-header.big-img .post-heading {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.header-section.has-img .big-img {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@media only screen and (max-width: 325px) {
|
||||||
|
.intro-header.big-img {
|
||||||
|
height: 200px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.caption {
|
||||||
|
text-align: center;
|
||||||
|
font-size: 14px;
|
||||||
|
padding: 10px;
|
||||||
|
font-style: italic;
|
||||||
|
margin: 0;
|
||||||
|
display: block;
|
||||||
|
border-bottom-right-radius: 5px;
|
||||||
|
border-bottom-left-radius: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --- Pager --- */
|
||||||
|
|
||||||
|
.pager li a {
|
||||||
|
font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;
|
||||||
|
text-transform: uppercase;
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 800;
|
||||||
|
letter-spacing: 1px;
|
||||||
|
padding: 10px 5px;
|
||||||
|
background: #FFF;
|
||||||
|
border-radius: 0;
|
||||||
|
color: #404040;
|
||||||
|
}
|
||||||
|
@media only screen and (min-width: 768px) {
|
||||||
|
.pager li a {
|
||||||
|
padding: 15px 25px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.pager li a:hover,
|
||||||
|
.pager li a:focus {
|
||||||
|
color: #FFF;
|
||||||
|
background: #0085a1;
|
||||||
|
border: 1px solid #0085a1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pager {
|
||||||
|
margin: 10px 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pager.blog-pager {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media only screen and (min-width: 768px) {
|
||||||
|
.pager.blog-pager {
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --- Tables --- */
|
||||||
|
|
||||||
|
table {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
table tr {
|
||||||
|
border-top: 1px solid #cccccc;
|
||||||
|
background-color: #ffffff;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
table tr:nth-child(2n) {
|
||||||
|
background-color: #f8f8f8;
|
||||||
|
}
|
||||||
|
table tr th {
|
||||||
|
font-weight: bold;
|
||||||
|
border: 1px solid #cccccc;
|
||||||
|
text-align: left;
|
||||||
|
margin: 0;
|
||||||
|
padding: 6px 13px;
|
||||||
|
}
|
||||||
|
table tr td {
|
||||||
|
border: 1px solid #cccccc;
|
||||||
|
text-align: left;
|
||||||
|
margin: 0;
|
||||||
|
padding: 6px 13px;
|
||||||
|
}
|
||||||
|
table tr th :first-child,
|
||||||
|
table tr td :first-child {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
table tr th :last-child,
|
||||||
|
table tr td :last-child {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --- Code blocks --- */
|
||||||
|
|
||||||
|
pre {
|
||||||
|
font-size: 16px;
|
||||||
|
line-height: 1.5em;
|
||||||
|
}
|
||||||
|
pre code {
|
||||||
|
white-space: pre;
|
||||||
|
}
|
||||||
|
pre.highlight, .highlight > pre, td.code pre {
|
||||||
|
background: #FAFAFA;
|
||||||
|
background-image: linear-gradient(#F9F9F9 50%, #FDFDFD 50%);
|
||||||
|
background-repeat: repeat;
|
||||||
|
background-size: 3em 3em;
|
||||||
|
background-position: 0px 10px;
|
||||||
|
border-left: 7px solid #444;
|
||||||
|
}
|
||||||
|
code table, code table td, code table th, code table tbody, code table tr,
|
||||||
|
td.gutter pre {
|
||||||
|
padding: 0;
|
||||||
|
border: none;
|
||||||
|
background-color: #fff;
|
||||||
|
}
|
||||||
|
.highlight > pre {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
td.code pre {
|
||||||
|
border-width: 0 0 0 2px;
|
||||||
|
border-style: solid;
|
||||||
|
border-color: #444;
|
||||||
|
border-radius: 0;
|
||||||
|
}
|
||||||
|
td.gutter {
|
||||||
|
padding-top: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --- Social media sharing section --- */
|
||||||
|
|
||||||
|
#social-share-section {
|
||||||
|
margin-bottom: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --- Google Custom Search Engine Popup --- */
|
||||||
|
#modalSearch table tr, #modalSearch table tr td, #modalSearch table tr th {
|
||||||
|
border:none;
|
||||||
|
}
|
||||||
|
.reset-box-sizing, .reset-box-sizing *, .reset-box-sizing *:before, .reset-box-sizing *:after, .gsc-inline-block {
|
||||||
|
-webkit-box-sizing: content-box;
|
||||||
|
-moz-box-sizing: content-box;
|
||||||
|
box-sizing: content-box;
|
||||||
|
}
|
||||||
|
input.gsc-input, .gsc-input-box, .gsc-input-box-hover, .gsc-input-box-focus, .gsc-search-button {
|
||||||
|
box-sizing: content-box;
|
||||||
|
line-height: normal;
|
||||||
|
}
|
||||||
66
themes/beautifulhugo/static/css/pygment_highlights.css
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
/* .highlight { background: #ffffff; } */
|
||||||
|
/* .highlight pre { background-color: #fff; font-size: 16px } */
|
||||||
|
.highlight .c { color: #999988; font-style: italic } /* Comment */
|
||||||
|
.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
|
||||||
|
.highlight .k { font-weight: bold } /* Keyword */
|
||||||
|
.highlight .o { font-weight: bold } /* Operator */
|
||||||
|
.highlight .cm { color: #999988; font-style: italic } /* Comment.Multiline */
|
||||||
|
.highlight .cp { color: #999999; font-weight: bold } /* Comment.Preproc */
|
||||||
|
.highlight .c1 { color: #999988; font-style: italic } /* Comment.Single */
|
||||||
|
.highlight .cs { color: #999999; font-weight: bold; font-style: italic } /* Comment.Special */
|
||||||
|
.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */
|
||||||
|
.highlight .gd .x { color: #000000; background-color: #ffaaaa } /* Generic.Deleted.Specific */
|
||||||
|
.highlight .ge { font-style: italic } /* Generic.Emph */
|
||||||
|
.highlight .gr { color: #aa0000 } /* Generic.Error */
|
||||||
|
.highlight .gh { color: #999999 } /* Generic.Heading */
|
||||||
|
.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */
|
||||||
|
.highlight .gi .x { color: #000000; background-color: #aaffaa } /* Generic.Inserted.Specific */
|
||||||
|
.highlight .go { color: #888888 } /* Generic.Output */
|
||||||
|
.highlight .gp { color: #555555 } /* Generic.Prompt */
|
||||||
|
.highlight .gs { font-weight: bold } /* Generic.Strong */
|
||||||
|
.highlight .gu { color: #aaaaaa } /* Generic.Subheading */
|
||||||
|
.highlight .gt { color: #aa0000 } /* Generic.Traceback */
|
||||||
|
.highlight .kc { font-weight: bold } /* Keyword.Constant */
|
||||||
|
.highlight .kd { font-weight: bold } /* Keyword.Declaration */
|
||||||
|
.highlight .kp { font-weight: bold } /* Keyword.Pseudo */
|
||||||
|
.highlight .kr { font-weight: bold } /* Keyword.Reserved */
|
||||||
|
.highlight .kt { color: #445588; font-weight: bold } /* Keyword.Type */
|
||||||
|
.highlight .m { color: #009999 } /* Literal.Number */
|
||||||
|
.highlight .s { color: #d14 } /* Literal.String */
|
||||||
|
.highlight .na { color: #008080 } /* Name.Attribute */
|
||||||
|
.highlight .nb { color: #0086B3 } /* Name.Builtin */
|
||||||
|
.highlight .nc { color: #445588; font-weight: bold } /* Name.Class */
|
||||||
|
.highlight .no { color: #008080 } /* Name.Constant */
|
||||||
|
.highlight .ni { color: #800080 } /* Name.Entity */
|
||||||
|
.highlight .ne { color: #990000; font-weight: bold } /* Name.Exception */
|
||||||
|
.highlight .nf { color: #990000; font-weight: bold } /* Name.Function */
|
||||||
|
.highlight .nn { color: #555555 } /* Name.Namespace */
|
||||||
|
.highlight .nt { color: #000080 } /* Name.Tag */
|
||||||
|
.highlight .nv { color: #008080 } /* Name.Variable */
|
||||||
|
.highlight .ow { font-weight: bold } /* Operator.Word */
|
||||||
|
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
|
||||||
|
.highlight .mf { color: #009999 } /* Literal.Number.Float */
|
||||||
|
.highlight .mh { color: #009999 } /* Literal.Number.Hex */
|
||||||
|
.highlight .mi { color: #009999 } /* Literal.Number.Integer */
|
||||||
|
.highlight .mo { color: #009999 } /* Literal.Number.Oct */
|
||||||
|
.highlight .sb { color: #d14 } /* Literal.String.Backtick */
|
||||||
|
.highlight .sc { color: #d14 } /* Literal.String.Char */
|
||||||
|
.highlight .sd { color: #d14 } /* Literal.String.Doc */
|
||||||
|
.highlight .s2 { color: #d14 } /* Literal.String.Double */
|
||||||
|
.highlight .se { color: #d14 } /* Literal.String.Escape */
|
||||||
|
.highlight .sh { color: #d14 } /* Literal.String.Heredoc */
|
||||||
|
.highlight .si { color: #d14 } /* Literal.String.Interpol */
|
||||||
|
.highlight .sx { color: #d14 } /* Literal.String.Other */
|
||||||
|
.highlight .sr { color: #009926 } /* Literal.String.Regex */
|
||||||
|
.highlight .s1 { color: #d14 } /* Literal.String.Single */
|
||||||
|
.highlight .ss { color: #990073 } /* Literal.String.Symbol */
|
||||||
|
.highlight .bp { color: #999999 } /* Name.Builtin.Pseudo */
|
||||||
|
.highlight .vc { color: #008080 } /* Name.Variable.Class */
|
||||||
|
.highlight .vg { color: #008080 } /* Name.Variable.Global */
|
||||||
|
.highlight .vi { color: #008080 } /* Name.Variable.Instance */
|
||||||
|
.highlight .il { color: #009999 } /* Literal.Number.Integer.Long */
|
||||||
|
|
||||||
|
/* Make line numbers unselectable: excludes line numbers from copy-paste user ops */
|
||||||
|
.highlight .lineno {color:rgba(0,0,0,0.3);padding: 0 10px;-webkit-user-select: none;-moz-user-select: none; -o-user-select: none;}
|
||||||
|
.lineno::-moz-selection {background-color: transparent;} /* Mozilla specific */
|
||||||
|
.lineno::selection {background-color: transparent;} /* Other major browsers */
|
||||||
BIN
themes/beautifulhugo/static/img/404-southpark.jpg
Normal file
|
After Width: | Height: | Size: 59 KiB |
BIN
themes/beautifulhugo/static/img/LOGOweb.png
Normal file
|
After Width: | Height: | Size: 79 KiB |
BIN
themes/beautifulhugo/static/img/SIGNALweb.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
themes/beautifulhugo/static/img/avatar-favicon.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
themes/beautifulhugo/static/img/avatar-icon.png
Normal file
|
After Width: | Height: | Size: 32 KiB |
BIN
themes/beautifulhugo/static/img/favicon.ico
Normal file
|
After Width: | Height: | Size: 5.3 KiB |
BIN
themes/beautifulhugo/static/img/hexagon-thumb.jpg
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
themes/beautifulhugo/static/img/hexagon.jpg
Normal file
|
After Width: | Height: | Size: 170 KiB |
BIN
themes/beautifulhugo/static/img/path.jpg
Normal file
|
After Width: | Height: | Size: 262 KiB |
BIN
themes/beautifulhugo/static/img/sphere-thumb.jpg
Normal file
|
After Width: | Height: | Size: 7.0 KiB |
BIN
themes/beautifulhugo/static/img/sphere.jpg
Normal file
|
After Width: | Height: | Size: 48 KiB |
BIN
themes/beautifulhugo/static/img/triangle-thumb.jpg
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
themes/beautifulhugo/static/img/triangle.jpg
Normal file
|
After Width: | Height: | Size: 133 KiB |
2306
themes/beautifulhugo/static/js/bootstrap.js
vendored
Normal file
7
themes/beautifulhugo/static/js/bootstrap.min.js
vendored
Normal file
2
themes/beautifulhugo/static/js/highlight.min.js
vendored
Normal file
4
themes/beautifulhugo/static/js/jquery-1.11.2.min.js
vendored
Normal file
74
themes/beautifulhugo/static/js/load-photoswipe.js
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
/*
|
||||||
|
Put this file in /static/js/load-photoswipe.js
|
||||||
|
Documentation and licence at https://github.com/liwenyip/hugo-easy-gallery/
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* TODO: Make the share function work */
|
||||||
|
$( document ).ready(function() {
|
||||||
|
/*
|
||||||
|
Initialise Photoswipe
|
||||||
|
*/
|
||||||
|
var items = []; // array of slide objects that will be passed to PhotoSwipe()
|
||||||
|
// for every figure element on the page:
|
||||||
|
$('figure').each( function() {
|
||||||
|
if ($(this).attr('class') == 'no-photoswipe') return true; // ignore any figures where class="no-photoswipe"
|
||||||
|
// get properties from child a/img/figcaption elements,
|
||||||
|
var $figure = $(this),
|
||||||
|
$a = $figure.find('a'),
|
||||||
|
$img = $figure.find('img'),
|
||||||
|
$src = $a.attr('href'),
|
||||||
|
$title = $img.attr('alt'),
|
||||||
|
$msrc = $img.attr('src');
|
||||||
|
// if data-size on <a> tag is set, read it and create an item
|
||||||
|
if ($a.data('size')) {
|
||||||
|
var $size = $a.data('size').split('x');
|
||||||
|
var item = {
|
||||||
|
src : $src,
|
||||||
|
w : $size[0],
|
||||||
|
h : $size[1],
|
||||||
|
title : $title,
|
||||||
|
msrc : $msrc
|
||||||
|
};
|
||||||
|
console.log("Using pre-defined dimensions for " + $src);
|
||||||
|
// if not, set temp default size then load the image to check actual size
|
||||||
|
} else {
|
||||||
|
var item = {
|
||||||
|
src : $src,
|
||||||
|
w : 800, // temp default size
|
||||||
|
h : 600, // temp default size
|
||||||
|
title : $title,
|
||||||
|
msrc : $msrc
|
||||||
|
};
|
||||||
|
console.log("Using default dimensions for " + $src);
|
||||||
|
// load the image to check its dimensions
|
||||||
|
// update the item as soon as w and h are known (check every 30ms)
|
||||||
|
var img = new Image();
|
||||||
|
img.src = $src;
|
||||||
|
var wait = setInterval(function() {
|
||||||
|
var w = img.naturalWidth,
|
||||||
|
h = img.naturalHeight;
|
||||||
|
if (w && h) {
|
||||||
|
clearInterval(wait);
|
||||||
|
item.w = w;
|
||||||
|
item.h = h;
|
||||||
|
console.log("Got actual dimensions for " + img.src);
|
||||||
|
}
|
||||||
|
}, 30);
|
||||||
|
}
|
||||||
|
// Save the index of this image then add it to the array
|
||||||
|
var index = items.length;
|
||||||
|
items.push(item);
|
||||||
|
// Event handler for click on a figure
|
||||||
|
$figure.on('click', function(event) {
|
||||||
|
event.preventDefault(); // prevent the normal behaviour i.e. load the <a> hyperlink
|
||||||
|
// Get the PSWP element and initialise it with the desired options
|
||||||
|
var $pswp = $('.pswp')[0];
|
||||||
|
var options = {
|
||||||
|
index: index,
|
||||||
|
bgOpacity: 0.8,
|
||||||
|
showHideOpacity: true
|
||||||
|
}
|
||||||
|
new PhotoSwipe($pswp, PhotoSwipeUI_Default, items, options).init();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
138
themes/beautifulhugo/static/js/main.js
Normal file
@ -0,0 +1,138 @@
|
|||||||
|
// Dean Attali / Beautiful Jekyll 2016
|
||||||
|
|
||||||
|
var main = {
|
||||||
|
|
||||||
|
bigImgEl : null,
|
||||||
|
numImgs : null,
|
||||||
|
|
||||||
|
init : function() {
|
||||||
|
// Shorten the navbar after scrolling a little bit down
|
||||||
|
$(window).scroll(function() {
|
||||||
|
if ($(".navbar").offset().top > 50) {
|
||||||
|
$(".navbar").addClass("top-nav-short");
|
||||||
|
} else {
|
||||||
|
$(".navbar").removeClass("top-nav-short");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// On mobile, hide the avatar when expanding the navbar menu
|
||||||
|
$('#main-navbar').on('show.bs.collapse', function () {
|
||||||
|
$(".navbar").addClass("top-nav-expanded");
|
||||||
|
});
|
||||||
|
$('#main-navbar').on('hidden.bs.collapse', function () {
|
||||||
|
$(".navbar").removeClass("top-nav-expanded");
|
||||||
|
});
|
||||||
|
|
||||||
|
// On mobile, when clicking on a multi-level navbar menu, show the child links
|
||||||
|
$('#main-navbar').on("click", ".navlinks-parent", function(e) {
|
||||||
|
var target = e.target;
|
||||||
|
$.each($(".navlinks-parent"), function(key, value) {
|
||||||
|
if (value == target) {
|
||||||
|
$(value).parent().toggleClass("show-children");
|
||||||
|
} else {
|
||||||
|
$(value).parent().removeClass("show-children");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// Ensure nested navbar menus are not longer than the menu header
|
||||||
|
var menus = $(".navlinks-container");
|
||||||
|
if (menus.length > 0) {
|
||||||
|
var navbar = $("#main-navbar ul");
|
||||||
|
var fakeMenuHtml = "<li class='fake-menu' style='display:none;'><a></a></li>";
|
||||||
|
navbar.append(fakeMenuHtml);
|
||||||
|
var fakeMenu = $(".fake-menu");
|
||||||
|
|
||||||
|
$.each(menus, function(i) {
|
||||||
|
var parent = $(menus[i]).find(".navlinks-parent");
|
||||||
|
var children = $(menus[i]).find(".navlinks-children a");
|
||||||
|
var words = [];
|
||||||
|
$.each(children, function(idx, el) { words = words.concat($(el).text().trim().split(/\s+/)); });
|
||||||
|
var maxwidth = 0;
|
||||||
|
$.each(words, function(id, word) {
|
||||||
|
fakeMenu.html("<a>" + word + "</a>");
|
||||||
|
var width = fakeMenu.width();
|
||||||
|
if (width > maxwidth) {
|
||||||
|
maxwidth = width;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
$(menus[i]).css('min-width', maxwidth + 'px')
|
||||||
|
});
|
||||||
|
|
||||||
|
fakeMenu.remove();
|
||||||
|
}
|
||||||
|
|
||||||
|
// show the big header image
|
||||||
|
main.initImgs();
|
||||||
|
},
|
||||||
|
|
||||||
|
initImgs : function() {
|
||||||
|
// If the page was large images to randomly select from, choose an image
|
||||||
|
if ($("#header-big-imgs").length > 0) {
|
||||||
|
main.bigImgEl = $("#header-big-imgs");
|
||||||
|
main.numImgs = main.bigImgEl.attr("data-num-img");
|
||||||
|
|
||||||
|
// 2fc73a3a967e97599c9763d05e564189
|
||||||
|
// set an initial image
|
||||||
|
var imgInfo = main.getImgInfo();
|
||||||
|
var src = imgInfo.src;
|
||||||
|
var desc = imgInfo.desc;
|
||||||
|
main.setImg(src, desc);
|
||||||
|
|
||||||
|
// For better UX, prefetch the next image so that it will already be loaded when we want to show it
|
||||||
|
var getNextImg = function() {
|
||||||
|
var imgInfo = main.getImgInfo();
|
||||||
|
var src = imgInfo.src;
|
||||||
|
var desc = imgInfo.desc;
|
||||||
|
|
||||||
|
var prefetchImg = new Image();
|
||||||
|
prefetchImg.src = src;
|
||||||
|
// if I want to do something once the image is ready: `prefetchImg.onload = function(){}`
|
||||||
|
|
||||||
|
setTimeout(function(){
|
||||||
|
var img = $("<div></div>").addClass("big-img-transition").css("background-image", 'url(' + src + ')');
|
||||||
|
$(".intro-header.big-img").prepend(img);
|
||||||
|
setTimeout(function(){ img.css("opacity", "1"); }, 50);
|
||||||
|
|
||||||
|
// after the animation of fading in the new image is done, prefetch the next one
|
||||||
|
//img.one("transitioned webkitTransitionEnd oTransitionEnd MSTransitionEnd", function(){
|
||||||
|
setTimeout(function() {
|
||||||
|
main.setImg(src, desc);
|
||||||
|
img.remove();
|
||||||
|
getNextImg();
|
||||||
|
}, 1000);
|
||||||
|
//});
|
||||||
|
}, 6000);
|
||||||
|
};
|
||||||
|
|
||||||
|
// If there are multiple images, cycle through them
|
||||||
|
if (main.numImgs > 1) {
|
||||||
|
getNextImg();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
getImgInfo : function() {
|
||||||
|
var randNum = Math.floor((Math.random() * main.numImgs) + 1);
|
||||||
|
var src = main.bigImgEl.attr("data-img-src-" + randNum);
|
||||||
|
var desc = main.bigImgEl.attr("data-img-desc-" + randNum);
|
||||||
|
|
||||||
|
return {
|
||||||
|
src : src,
|
||||||
|
desc : desc
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
setImg : function(src, desc) {
|
||||||
|
$(".intro-header.big-img").css("background-image", 'url(' + src + ')');
|
||||||
|
if (typeof desc !== typeof undefined && desc !== false) {
|
||||||
|
$(".img-desc").text(desc).show();
|
||||||
|
} else {
|
||||||
|
$(".img-desc").hide();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// 2fc73a3a967e97599c9763d05e564189
|
||||||
|
|
||||||
|
document.addEventListener('DOMContentLoaded', main.init);
|
||||||
18
themes/beautifulhugo/theme.toml
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
name = "Beautiful Hugo"
|
||||||
|
license = "MIT"
|
||||||
|
licenselink = "https://github.com/halogenica/Hugo-BeautifulHugo/blob/master/LICENSE"
|
||||||
|
description = "A port of Beautiful Jekyll theme"
|
||||||
|
tags = ["blog", "company", "portfolio", "projects", "minimal", "responsive"]
|
||||||
|
features = ["blog", "themes", "disqus", "minimal", "responsive"]
|
||||||
|
min_version = 0.17
|
||||||
|
|
||||||
|
[author]
|
||||||
|
name = "halogenica"
|
||||||
|
homepage = "http://halogenica.net"
|
||||||
|
|
||||||
|
# If Porting existing theme
|
||||||
|
[original]
|
||||||
|
author = "dattali"
|
||||||
|
homepage = "http://deanattali.com/beautiful-jekyll/"
|
||||||
|
repo = "https://github.com/daattali/beautiful-jekyll"
|
||||||
|
|
||||||