2
.gitignore
vendored
@@ -37,3 +37,5 @@ etc/ghost/logs/*.log.*
|
|||||||
!etc/ghost/content/data/
|
!etc/ghost/content/data/
|
||||||
!etc/ghost/content/logs
|
!etc/ghost/content/logs
|
||||||
etc/ghost/content/data/\.DS_Store
|
etc/ghost/content/data/\.DS_Store
|
||||||
|
|
||||||
|
etc/ghost/content/themes/
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ NC=`tput sgr0` # No Color
|
|||||||
# Install Choice ===================================================>
|
# Install Choice ===================================================>
|
||||||
clear
|
clear
|
||||||
echo "${RED}Open RSC Installer:${NC}
|
echo "${RED}Open RSC Installer:${NC}
|
||||||
An easy to run RSC private server environment using Docker magic.
|
An easy to use RSC private server environment using Docker magic.
|
||||||
|
|
||||||
Do you wish to have all the pre-requiste software installed by this script?
|
Do you wish to have all the pre-requiste software installed by this script?
|
||||||
|
|
||||||
@@ -49,36 +49,38 @@ if [ "$install" == "1" ]; then
|
|||||||
|
|
||||||
clear
|
clear
|
||||||
echo "Installing required software. Please wait, this will take a while."
|
echo "Installing required software. Please wait, this will take a while."
|
||||||
|
echo "Installing certbot, screen, zip, fail2ban, unzip, git, build-essential, "
|
||||||
|
echo "software-properties-common, apt-transport-https, ca-certificates, and curl."
|
||||||
echo ""
|
echo ""
|
||||||
echo "Debug information is being sent to installer.log"
|
echo "Installation logs are being sent to installer.log"
|
||||||
sudo apt-get update | tee -a installer.log &>/dev/null
|
sudo apt-get update | tee -a installer.log &>/dev/null
|
||||||
sudo apt-get install software-properties-common -y | tee -a installer.log &>/dev/null
|
sudo apt-get install software-properties-common -y | tee -a installer.log &>/dev/null
|
||||||
sudo add-apt-repository ppa:certbot/certbot -y | tee -a installer.log &>/dev/null
|
sudo add-apt-repository ppa:certbot/certbot -y | tee -a installer.log &>/dev/null
|
||||||
sudo apt-get update | tee -a installer.log &>/dev/null
|
sudo apt-get update | tee -a installer.log &>/dev/null
|
||||||
sudo apt-get install certbot screen zip fail2ban unzip git build-essential apt-transport-https ca-certificates curl software-properties-common -y | tee -a installer.log &>/dev/null
|
sudo apt-get install certbot screen zip fail2ban unzip git build-essential apt-transport-https ca-certificates curl -y | tee -a installer.log &>/dev/null
|
||||||
|
|
||||||
clear
|
clear
|
||||||
echo "Attempting to install Docker now."
|
echo "Attempting to install Docker CE and Docker Compose. Please wait."
|
||||||
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - | tee -a installer.log &>/dev/null
|
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - | tee -a installer.log &>/dev/null
|
||||||
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable" | tee -a installer.log &>/dev/null
|
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable" | tee -a installer.log &>/dev/null
|
||||||
sudo apt-get update | tee -a installer.log &>/dev/null && sudo apt-get install docker-ce docker-compose -y | tee -a installer.log &>/dev/null
|
sudo apt-get update | tee -a installer.log &>/dev/null && sudo apt-get install docker-ce docker-compose -y | tee -a installer.log &>/dev/null
|
||||||
sudo setfacl -m user:$USER:rw /var/run/docker.sock | tee -a ../installer.log &>/dev/null
|
sudo setfacl -m user:$USER:rw /var/run/docker.sock | tee -a ../installer.log &>/dev/null
|
||||||
|
|
||||||
clear
|
clear
|
||||||
echo "Setting Docker to have the correct storage driver and reloading service."
|
echo "Setting Docker to have the correct storage driver and restarting the service."
|
||||||
echo '{
|
echo '{
|
||||||
"storage-driver": "devicemapper"
|
"storage-driver": "devicemapper"
|
||||||
}' | sudo tee /etc/docker/daemon.json && sudo service docker restart | tee -a installer.log &>/dev/null
|
}' | sudo tee /etc/docker/daemon.json && sudo service docker restart | tee -a installer.log &>/dev/null
|
||||||
|
|
||||||
clear
|
clear
|
||||||
echo "Configuring UFW."
|
echo "Setting Ubuntu Firewall permissions."
|
||||||
sudo ufw allow 22/tcp | tee -a installer.log &>/dev/null && sudo ufw allow 80/tcp | tee -a installer.log &>/dev/null && sudo ufw allow 8080/tcp | tee -a installer.log &>/dev/null && sudo ufw allow 443/tcp | tee -a installer.log &>/dev/null && sudo ufw allow 9000/tcp | tee -a installer.log &>/dev/null && sudo ufw allow 53595/tcp | tee -a installer.log &>/dev/null && sudo ufw deny 3306/tcp | tee -a installer.log &>/dev/null
|
sudo ufw allow 22/tcp | tee -a installer.log &>/dev/null && sudo ufw allow 80/tcp | tee -a installer.log &>/dev/null && sudo ufw allow 8080/tcp | tee -a installer.log &>/dev/null && sudo ufw allow 443/tcp | tee -a installer.log &>/dev/null && sudo ufw allow 9000/tcp | tee -a installer.log &>/dev/null && sudo ufw allow 53595/tcp | tee -a installer.log &>/dev/null && sudo ufw deny 3306/tcp | tee -a installer.log &>/dev/null
|
||||||
sudo sed -i 's/DEFAULT_FORWARD_POLICY="DENY"/DEFAULT_FORWARD_POLICY="ACCEPT"/g' /etc/default/ufw | tee -a installer.log &>/dev/null
|
sudo sed -i 's/DEFAULT_FORWARD_POLICY="DENY"/DEFAULT_FORWARD_POLICY="ACCEPT"/g' /etc/default/ufw | tee -a installer.log &>/dev/null
|
||||||
sudo ufw reload | tee -a installer.log &>/dev/null
|
sudo ufw reload | tee -a installer.log &>/dev/null
|
||||||
sudo ufw --force enable | tee -a installer.log &>/dev/null
|
sudo ufw --force enable | tee -a installer.log &>/dev/null
|
||||||
|
|
||||||
clear
|
clear
|
||||||
echo "Installing Oracle Java JDK 8 and other related packages."
|
echo "Installing Oracle Java JDK 8, openjfx, and Apache ant. Please wait."
|
||||||
sudo apt-get remove -y openjdk-6-jre default-jre default-jre-headless | tee -a installer.log &>/dev/null
|
sudo apt-get remove -y openjdk-6-jre default-jre default-jre-headless | tee -a installer.log &>/dev/null
|
||||||
sudo add-apt-repository -y ppa:webupd8team/java | tee -a installer.log &>/dev/null
|
sudo add-apt-repository -y ppa:webupd8team/java | tee -a installer.log &>/dev/null
|
||||||
sudo apt update | tee -a installer.log &>/dev/null
|
sudo apt update | tee -a installer.log &>/dev/null
|
||||||
@@ -92,7 +94,7 @@ if [ "$install" == "1" ]; then
|
|||||||
# Mac OS ===================================================>
|
# Mac OS ===================================================>
|
||||||
elif [ "$os" == "2" ]; then
|
elif [ "$os" == "2" ]; then
|
||||||
clear
|
clear
|
||||||
echo "Do you have brew installed? It is required for this."
|
echo "Do you have Brew installed? It is required for this."
|
||||||
echo ""
|
echo ""
|
||||||
echo "${RED}1${NC} - No, install it for me!"
|
echo "${RED}1${NC} - No, install it for me!"
|
||||||
echo "${RED}2${NC} - Yes"
|
echo "${RED}2${NC} - Yes"
|
||||||
@@ -108,7 +110,7 @@ if [ "$install" == "1" ]; then
|
|||||||
# Mac Brew <===================================================
|
# Mac Brew <===================================================
|
||||||
|
|
||||||
clear
|
clear
|
||||||
echo "Verifying the basics are installed."
|
echo "Verifying the basics are installed via Brew."
|
||||||
brew install unzip wget git curl zip screen | tee -a installer.log &>/dev/null
|
brew install unzip wget git curl zip screen | tee -a installer.log &>/dev/null
|
||||||
brew tap AdoptOpenJDK/openjdk | tee -a installer.log &>/dev/null
|
brew tap AdoptOpenJDK/openjdk | tee -a installer.log &>/dev/null
|
||||||
brew install adoptopenjdk-openjdk8 ant openjfx | tee -a installer.log &>/dev/null
|
brew install adoptopenjdk-openjdk8 ant openjfx | tee -a installer.log &>/dev/null
|
||||||
@@ -136,17 +138,17 @@ if [ "$install" == "1" ]; then
|
|||||||
# Install Choice <===================================================
|
# Install Choice <===================================================
|
||||||
|
|
||||||
clear
|
clear
|
||||||
echo "Checking for updates to the Docker-Home repository."
|
echo "Fetching updates from the Docker-Home GitHub repository."
|
||||||
sudo git pull | tee -a installer.log &>/dev/null
|
sudo git pull | tee -a installer.log &>/dev/null
|
||||||
|
|
||||||
clear
|
clear
|
||||||
echo "${RED}Open RSC Installer:${NC}
|
echo "${RED}Open RSC Installer:${NC}
|
||||||
An easy to run RSC private server using Docker magic.
|
An easy to use RSC private server using Docker magic.
|
||||||
|
|
||||||
Choices:
|
Choices:
|
||||||
${RED}1${NC} - Set up for single player
|
${RED}1${NC} - Set up for single player
|
||||||
${RED}2${NC} - Deployment for a publicly hosted server
|
${RED}2${NC} - Deploy to a VPS
|
||||||
${RED}3${NC} - Backup all SQL databases
|
${RED}3${NC} - Backup all databases
|
||||||
"
|
"
|
||||||
echo ""
|
echo ""
|
||||||
echo "Which of the above do you wish to do? Type the choice number and press enter."
|
echo "Which of the above do you wish to do? Type the choice number and press enter."
|
||||||
@@ -161,7 +163,7 @@ if [ "$choice" == "1" ]; then
|
|||||||
echo ""
|
echo ""
|
||||||
echo "Starting up the Docker containers. Please wait, this will take a while."
|
echo "Starting up the Docker containers. Please wait, this will take a while."
|
||||||
echo ""
|
echo ""
|
||||||
echo "Debug information is being sent to installer.log"
|
echo "Installation logs are being sent to installer.log"
|
||||||
sudo make start-single-player | tee -a installer.log &>/dev/null
|
sudo make start-single-player | tee -a installer.log &>/dev/null
|
||||||
|
|
||||||
clear
|
clear
|
||||||
@@ -185,7 +187,7 @@ if [ "$choice" == "1" ]; then
|
|||||||
# 2. Deployment for a publicly hosted server ===================================================>
|
# 2. Deployment for a publicly hosted server ===================================================>
|
||||||
elif [ "$choice" == "2" ]; then
|
elif [ "$choice" == "2" ]; then
|
||||||
clear
|
clear
|
||||||
echo "You have picked ${GREEN}deployment for a publicly hosted server!${NC}"
|
echo "You have picked ${GREEN}deploy to a VPS!${NC}"
|
||||||
echo ""
|
echo ""
|
||||||
echo ""
|
echo ""
|
||||||
echo "Starting up the Docker containers."
|
echo "Starting up the Docker containers."
|
||||||
@@ -237,7 +239,7 @@ elif [ "$choice" == "2" ]; then
|
|||||||
# 3. Backup ===================================================>
|
# 3. Backup ===================================================>
|
||||||
elif [ "$choice" == "3" ]; then
|
elif [ "$choice" == "3" ]; then
|
||||||
|
|
||||||
echo "You have picked ${GREEN}backup all SQL databases!${NC}"
|
echo "You have picked ${GREEN}backup all databases!${NC}"
|
||||||
sudo make backup | tee -a installer.log &>/dev/null
|
sudo make backup | tee -a installer.log &>/dev/null
|
||||||
clear
|
clear
|
||||||
echo "Done! - Press enter to return back to the menu."
|
echo "Done! - Press enter to return back to the menu."
|
||||||
|
|||||||
@@ -31,35 +31,24 @@ services:
|
|||||||
depends_on:
|
depends_on:
|
||||||
- mysqldb
|
- mysqldb
|
||||||
|
|
||||||
fix-mariadb-permissions:
|
|
||||||
image: 'bitnami/mariadb:latest'
|
|
||||||
container_name: mariadb-fix-permissions
|
|
||||||
user: root
|
|
||||||
command: chown -R 1001:1001 /bitnami
|
|
||||||
volumes:
|
|
||||||
- "./data/db/mysq:/bitnami/mariadb"
|
|
||||||
|
|
||||||
mysqldb:
|
mysqldb:
|
||||||
image: bitnami/mariadb:latest
|
image: mariadb:latest
|
||||||
container_name: mysql
|
container_name: mysql
|
||||||
restart: always
|
restart: always
|
||||||
env_file:
|
env_file:
|
||||||
- ".env"
|
- ".env"
|
||||||
environment:
|
environment:
|
||||||
- MARIADB_DATABASE=${MARIADB_DATABASE}
|
- MYSQL_DATABASE=mysql
|
||||||
- MARIADB_ROOT_USER=${MARIADB_ROOT_USER}
|
- MYSQL_ROOT_USER=${MARIADB_ROOT_USER}
|
||||||
- MARIADB_ROOT_PASSWORD=${MARIADB_ROOT_PASSWORD}
|
- MYSQL_ROOT_PASSWORD=${MARIADB_ROOT_PASSWORD}
|
||||||
- ALLOW_EMPTY_PASSWORD=no
|
- MYSQL_ALLOW_EMPTY_PASSWORD=no
|
||||||
- MARIADB_USER=${MARIADB_USER}
|
- MYSQL_USER=${MARIADB_USER}
|
||||||
- MARIADB_PASSWORD=${MARIADB_PASS}
|
- MYSQL_PASSWORD=${MARIADB_PASS}
|
||||||
- MARIADB_DATABASE=${GHOST_DATABASE_NAME}
|
|
||||||
ports:
|
ports:
|
||||||
- "127.0.0.1:3306:3306"
|
- "127.0.0.1:3306:3306"
|
||||||
volumes:
|
volumes:
|
||||||
- "./data/db/mysq:/bitnami/mariadb"
|
- "./data/db/mysq:/etc/mysql"
|
||||||
- "./etc/mariadb/innodb.cnf:/bitnami/mariadb/conf/innodb.cnf:ro"
|
- "./etc/mariadb/innodb.cnf:/etc/mysql/conf/innodb.cnf:ro"
|
||||||
depends_on:
|
|
||||||
- fix-mariadb-permissions
|
|
||||||
|
|
||||||
tomcat:
|
tomcat:
|
||||||
image: tomcat:latest
|
image: tomcat:latest
|
||||||
|
|||||||
@@ -1,17 +0,0 @@
|
|||||||
# http://editorconfig.org
|
|
||||||
|
|
||||||
root = true
|
|
||||||
|
|
||||||
[*]
|
|
||||||
charset = utf-8
|
|
||||||
indent_style = space
|
|
||||||
indent_size = 4
|
|
||||||
end_of_line = lf
|
|
||||||
insert_final_newline = true
|
|
||||||
trim_trailing_whitespace = true
|
|
||||||
|
|
||||||
[*.hbs]
|
|
||||||
insert_final_newline = false
|
|
||||||
|
|
||||||
[*.md]
|
|
||||||
trim_trailing_whitespace = false
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
Do you need help or have a question? Please come chat in our forum: https://forum.ghost.org 👫.
|
|
||||||
|
|
||||||
If you're filing a bug 🐛, please include the following information:
|
|
||||||
|
|
||||||
### Screenshot
|
|
||||||
|
|
||||||
![]()
|
|
||||||
|
|
||||||
### Steps to Reproduce
|
|
||||||
|
|
||||||
1. This is the first step
|
|
||||||
2. This may be the post content used to cause an issue...
|
|
||||||
|
|
||||||
### Technical details
|
|
||||||
|
|
||||||
* Casper Version:
|
|
||||||
* Ghost Version:
|
|
||||||
* Browser Version:
|
|
||||||
* OS Version:
|
|
||||||
24
etc/ghost/content/themes/Casper/.gitignore
vendored
@@ -1,24 +0,0 @@
|
|||||||
b-cov
|
|
||||||
*.seed
|
|
||||||
*.log
|
|
||||||
*.csv
|
|
||||||
*.dat
|
|
||||||
*.out
|
|
||||||
*.pid
|
|
||||||
*.gz
|
|
||||||
|
|
||||||
pids
|
|
||||||
logs
|
|
||||||
results
|
|
||||||
|
|
||||||
npm-debug.log
|
|
||||||
node_modules
|
|
||||||
package-lock.json
|
|
||||||
|
|
||||||
.idea/*
|
|
||||||
*.iml
|
|
||||||
projectFilesBackup
|
|
||||||
|
|
||||||
.DS_Store
|
|
||||||
|
|
||||||
dist/
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
language: node_js
|
|
||||||
sudo: false
|
|
||||||
node_js:
|
|
||||||
- "8"
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
Copyright (c) 2013-2018 Ghost Foundation
|
|
||||||
|
|
||||||
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.
|
|
||||||
@@ -1,66 +0,0 @@
|
|||||||
# Casper
|
|
||||||
|
|
||||||
The default theme for [Ghost](http://github.com/tryghost/ghost/). This is the latest development version of Casper. If you're just looking to download the latest release, head over to the [releases](https://github.com/TryGhost/Casper/releases) page.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# First time using a Ghost theme?
|
|
||||||
|
|
||||||
Ghost uses a simple templating language called [Handlebars](http://handlebarsjs.com/) for its themes.
|
|
||||||
|
|
||||||
We've documented our default theme pretty heavily so that it should be fairly easy to work out what's going on just by reading the code and the comments. Once you feel comfortable with how everything works, we also have full [theme API documentation](https://themes.ghost.org) which explains every possible Handlebars helper and template.
|
|
||||||
|
|
||||||
**The main files are:**
|
|
||||||
|
|
||||||
- `default.hbs` - The main template file
|
|
||||||
- `index.hbs` - Used for the home page
|
|
||||||
- `post.hbs` - Used for individual posts
|
|
||||||
- `page.hbs` - Used for individual pages
|
|
||||||
- `tag.hbs` - Used for tag archives
|
|
||||||
- `author.hbs` - Used for author archives
|
|
||||||
|
|
||||||
One really neat trick is that you can also create custom one-off templates just by adding the slug of a page to a template file. For example:
|
|
||||||
|
|
||||||
- `page-about.hbs` - Custom template for the `/about/` page
|
|
||||||
- `tag-news.hbs` - Custom template for `/tag/news/` archive
|
|
||||||
- `author-ali.hbs` - Custom template for `/author/ali/` archive
|
|
||||||
|
|
||||||
|
|
||||||
# Development
|
|
||||||
|
|
||||||
Casper styles are compiled using Gulp/PostCSS to polyfill future CSS spec. You'll need Node and Gulp installed globally. After that, from the theme's root directory:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
$ yarn install
|
|
||||||
$ yarn dev
|
|
||||||
```
|
|
||||||
|
|
||||||
Now you can edit `/assets/css/` files, which will be compiled to `/assets/built/` automatically.
|
|
||||||
|
|
||||||
The `zip` Gulp task packages the theme files into `dist/<theme-name>.zip`, which you can then upload to your site.
|
|
||||||
|
|
||||||
```bash
|
|
||||||
$ yarn zip
|
|
||||||
```
|
|
||||||
|
|
||||||
# PostCSS Features Used
|
|
||||||
|
|
||||||
- Autoprefixer - Don't worry about writing browser prefixes of any kind, it's all done automatically with support for the latest 2 major versions of every browser.
|
|
||||||
- Variables - Simple pure CSS variables
|
|
||||||
- [Color Function](https://github.com/postcss/postcss-color-function)
|
|
||||||
|
|
||||||
|
|
||||||
# SVG Icons
|
|
||||||
|
|
||||||
Casper uses inline SVG icons, included via Handlebars partials. You can find all icons inside `/partials/icons`. To use an icon just include the name of the relevant file, eg. To include the SVG icon in `/partials/icons/rss.hbs` - use `{{> "icons/rss"}}`.
|
|
||||||
|
|
||||||
You can add your own SVG icons in the same manner.
|
|
||||||
|
|
||||||
|
|
||||||
# Copyright & License
|
|
||||||
|
|
||||||
Copyright (c) 2013-2018 Ghost Foundation - Released under the [MIT license](LICENSE).
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
a,abbr,acronym,address,applet,article,aside,audio,big,blockquote,body,canvas,caption,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,ul,var,video{margin:0;padding:0;border:0;font:inherit;font-size:100%;vertical-align:baseline}body{line-height:1}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:after,blockquote:before,q:after,q:before{content:"";content:none}img{max-width:100%}html{box-sizing:border-box;font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}*,:after,:before{box-sizing:inherit}a{background-color:transparent}a:active,a:hover{outline:0}b,strong{font-weight:700}dfn,em,i{font-style:italic}h1{margin:.67em 0;font-size:2em}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}mark{background-color:#fdffb6}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;color:inherit;font:inherit}button{overflow:visible;border:none}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input:focus{outline:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}legend{padding:0;border:0}textarea{overflow:auto}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}html{overflow-y:scroll;font-size:62.5%;-webkit-tap-highlight-color:rgba(0,0,0,0)}body,html{overflow-x:hidden}body{color:#3c484e;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif;font-size:1.5rem;line-height:1.6em;font-weight:400;font-style:normal;letter-spacing:0;text-rendering:optimizeLegibility;background:#fff;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-moz-font-feature-settings:"liga" on}::-moz-selection{text-shadow:none;background:#cbeafb}::selection{text-shadow:none;background:#cbeafb}hr{position:relative;display:block;width:100%;margin:2.5em 0 3.5em;padding:0;height:1px;border:0;border-top:1px solid #e3e9ed}audio,canvas,iframe,img,svg,video{vertical-align:middle}fieldset{margin:0;padding:0;border:0}textarea{resize:vertical}blockquote,dl,ol,p,ul{margin:0 0 1.5em}ol,ul{padding-left:1.3em;padding-right:1.5em}ol ol,ol ul,ul ol,ul ul{margin:.5em 0 1em}ul{list-style:disc}ol{list-style:decimal}ol,ul{max-width:100%}li{margin:.5em 0;padding-left:.3em;line-height:1.6em}dt{float:left;margin:0 20px 0 0;width:120px;color:#15171a;font-weight:500;text-align:right}dd{margin:0 0 5px;text-align:left}blockquote{margin:1.5em 0;padding:0 1.6em;border-left:.5em solid #e5eff5}blockquote p{margin:.8em 0;font-size:1.2em;font-weight:300}blockquote small{display:inline-block;margin:.8em 0 .8em 1.5em;font-size:.9em;opacity:.8}blockquote small:before{content:"\2014 \00A0"}blockquote cite{font-weight:700}blockquote cite a{font-weight:400}a{color:#26a8ed;text-decoration:none}a:hover{text-decoration:underline}h1,h2,h3,h4,h5,h6{margin-top:0;line-height:1.15;font-weight:700;text-rendering:optimizeLegibility}h1{margin:0 0 .5em;font-size:5rem;font-weight:700}@media (max-width:500px){h1{font-size:2.2rem}}h2{margin:1.5em 0 .5em;font-size:2rem}@media (max-width:500px){h2{font-size:1.8rem}}h3{margin:1.5em 0 .5em;font-size:1.8rem;font-weight:500}@media (max-width:500px){h3{font-size:1.7rem}}h4{margin:1.5em 0 .5em;font-size:1.6rem;font-weight:500}h5,h6{margin:1.5em 0 .5em;font-size:1.4rem;font-weight:500}
|
|
||||||
/*# sourceMappingURL=global.css.map */
|
|
||||||
@@ -1,237 +0,0 @@
|
|||||||
{
|
|
||||||
"remove-empty-rulesets": true,
|
|
||||||
"always-semicolon": true,
|
|
||||||
"color-case": "lower",
|
|
||||||
"block-indent": " ",
|
|
||||||
"color-shorthand": true,
|
|
||||||
"element-case": "lower",
|
|
||||||
"eof-newline": true,
|
|
||||||
"leading-zero": true,
|
|
||||||
"quotes": "double",
|
|
||||||
"space-before-colon": "",
|
|
||||||
"space-after-colon": " ",
|
|
||||||
"space-before-combinator": " ",
|
|
||||||
"space-after-combinator": " ",
|
|
||||||
"space-between-declarations": "\n",
|
|
||||||
"space-before-opening-brace": " ",
|
|
||||||
"space-after-opening-brace": "\n",
|
|
||||||
"space-after-selector-delimiter": "\n",
|
|
||||||
"space-before-selector-delimiter": "",
|
|
||||||
"space-before-closing-brace": "\n",
|
|
||||||
"strip-spaces": true,
|
|
||||||
"tab-size": 4,
|
|
||||||
"unitless-zero": true,
|
|
||||||
"sort-order": [ [
|
|
||||||
"content",
|
|
||||||
"visibility",
|
|
||||||
"position",
|
|
||||||
"top",
|
|
||||||
"right",
|
|
||||||
"bottom",
|
|
||||||
"left",
|
|
||||||
"z-index",
|
|
||||||
"order",
|
|
||||||
"flex",
|
|
||||||
"flex-grow",
|
|
||||||
"flex-shrink",
|
|
||||||
"flex-basis",
|
|
||||||
"align-self",
|
|
||||||
"display",
|
|
||||||
"flex-flow",
|
|
||||||
"flex-direction",
|
|
||||||
"flex-wrap",
|
|
||||||
"justify-content",
|
|
||||||
"align-items",
|
|
||||||
"align-content",
|
|
||||||
"flex-order",
|
|
||||||
"flex-pack",
|
|
||||||
"flex-align",
|
|
||||||
"float",
|
|
||||||
"clear",
|
|
||||||
"overflow",
|
|
||||||
"overflow-x",
|
|
||||||
"overflow-y",
|
|
||||||
"-webkit-overflow-scrolling",
|
|
||||||
"clip",
|
|
||||||
"box-sizing",
|
|
||||||
"margin",
|
|
||||||
"margin-top",
|
|
||||||
"margin-right",
|
|
||||||
"margin-bottom",
|
|
||||||
"margin-left",
|
|
||||||
"padding",
|
|
||||||
"padding-top",
|
|
||||||
"padding-right",
|
|
||||||
"padding-bottom",
|
|
||||||
"padding-left",
|
|
||||||
"min-width",
|
|
||||||
"min-height",
|
|
||||||
"max-width",
|
|
||||||
"max-height",
|
|
||||||
"width",
|
|
||||||
"height",
|
|
||||||
"outline",
|
|
||||||
"outline-width",
|
|
||||||
"outline-style",
|
|
||||||
"outline-color",
|
|
||||||
"outline-offset",
|
|
||||||
"border",
|
|
||||||
"border-spacing",
|
|
||||||
"border-collapse",
|
|
||||||
"border-width",
|
|
||||||
"border-style",
|
|
||||||
"border-color",
|
|
||||||
"border-top",
|
|
||||||
"border-top-width",
|
|
||||||
"border-top-style",
|
|
||||||
"border-top-color",
|
|
||||||
"border-right",
|
|
||||||
"border-right-width",
|
|
||||||
"border-right-style",
|
|
||||||
"border-right-color",
|
|
||||||
"border-bottom",
|
|
||||||
"border-bottom-width",
|
|
||||||
"border-bottom-style",
|
|
||||||
"border-bottom-color",
|
|
||||||
"border-left",
|
|
||||||
"border-left-width",
|
|
||||||
"border-left-style",
|
|
||||||
"border-left-color",
|
|
||||||
"border-image",
|
|
||||||
"border-image-source",
|
|
||||||
"border-image-slice",
|
|
||||||
"border-image-width",
|
|
||||||
"border-image-outset",
|
|
||||||
"border-image-repeat",
|
|
||||||
"border-top-image",
|
|
||||||
"border-right-image",
|
|
||||||
"border-bottom-image",
|
|
||||||
"border-left-image",
|
|
||||||
"border-corner-image",
|
|
||||||
"border-top-left-image",
|
|
||||||
"border-top-right-image",
|
|
||||||
"border-bottom-right-image",
|
|
||||||
"border-bottom-left-image",
|
|
||||||
"color",
|
|
||||||
"font",
|
|
||||||
"font-family",
|
|
||||||
"font-size",
|
|
||||||
"line-height",
|
|
||||||
"font-weight",
|
|
||||||
"font-style",
|
|
||||||
"font-variant",
|
|
||||||
"font-size-adjust",
|
|
||||||
"font-stretch",
|
|
||||||
"font-feature-settings",
|
|
||||||
"letter-spacing",
|
|
||||||
"text-rendering",
|
|
||||||
"text-align",
|
|
||||||
"text-align-last",
|
|
||||||
"text-decoration",
|
|
||||||
"text-emphasis",
|
|
||||||
"text-emphasis-position",
|
|
||||||
"text-emphasis-style",
|
|
||||||
"text-emphasis-color",
|
|
||||||
"text-indent",
|
|
||||||
"text-justify",
|
|
||||||
"text-outline",
|
|
||||||
"text-transform",
|
|
||||||
"text-wrap",
|
|
||||||
"text-overflow",
|
|
||||||
"text-overflow-ellipsis",
|
|
||||||
"text-overflow-mode",
|
|
||||||
"text-shadow",
|
|
||||||
"white-space",
|
|
||||||
"word-spacing",
|
|
||||||
"word-wrap",
|
|
||||||
"word-break",
|
|
||||||
"tab-size",
|
|
||||||
"hyphens",
|
|
||||||
"user-select",
|
|
||||||
"fill",
|
|
||||||
"stroke",
|
|
||||||
"background",
|
|
||||||
"filter:progid:DXImageTransform.Microsoft.AlphaImageLoader",
|
|
||||||
"background-color",
|
|
||||||
"background-image",
|
|
||||||
"background-attachment",
|
|
||||||
"background-position",
|
|
||||||
"background-position-x",
|
|
||||||
"background-position-y",
|
|
||||||
"background-clip",
|
|
||||||
"background-origin",
|
|
||||||
"background-size",
|
|
||||||
"background-repeat",
|
|
||||||
"border-radius",
|
|
||||||
"border-top-left-radius",
|
|
||||||
"border-top-right-radius",
|
|
||||||
"border-bottom-right-radius",
|
|
||||||
"border-bottom-left-radius",
|
|
||||||
"box-decoration-break",
|
|
||||||
"box-shadow",
|
|
||||||
"table-layout",
|
|
||||||
"caption-side",
|
|
||||||
"empty-cells",
|
|
||||||
"list-style",
|
|
||||||
"list-style-position",
|
|
||||||
"list-style-type",
|
|
||||||
"list-style-image",
|
|
||||||
"quotes",
|
|
||||||
"counter-increment",
|
|
||||||
"counter-reset",
|
|
||||||
"vertical-align",
|
|
||||||
"src",
|
|
||||||
"opacity",
|
|
||||||
"filter:progid:DXImageTransform.Microsoft.Alpha(Opacity",
|
|
||||||
"filter",
|
|
||||||
"resize",
|
|
||||||
"cursor",
|
|
||||||
"nav-index",
|
|
||||||
"nav-up",
|
|
||||||
"nav-right",
|
|
||||||
"nav-down",
|
|
||||||
"nav-left",
|
|
||||||
"transition",
|
|
||||||
"transition-delay",
|
|
||||||
"transition-timing-function",
|
|
||||||
"transition-duration",
|
|
||||||
"transition-property",
|
|
||||||
"transform",
|
|
||||||
"transform-origin",
|
|
||||||
"animation",
|
|
||||||
"animation-name",
|
|
||||||
"animation-duration",
|
|
||||||
"animation-play-state",
|
|
||||||
"animation-timing-function",
|
|
||||||
"animation-delay",
|
|
||||||
"animation-iteration-count",
|
|
||||||
"animation-direction",
|
|
||||||
"animation-fill-mode",
|
|
||||||
"pointer-events",
|
|
||||||
"unicode-bidi",
|
|
||||||
"direction",
|
|
||||||
"columns",
|
|
||||||
"column-span",
|
|
||||||
"column-width",
|
|
||||||
"column-count",
|
|
||||||
"column-fill",
|
|
||||||
"column-gap",
|
|
||||||
"column-rule",
|
|
||||||
"column-rule-width",
|
|
||||||
"column-rule-style",
|
|
||||||
"column-rule-color",
|
|
||||||
"break-before",
|
|
||||||
"break-inside",
|
|
||||||
"break-after",
|
|
||||||
"page-break-before",
|
|
||||||
"page-break-inside",
|
|
||||||
"page-break-after",
|
|
||||||
"orphans",
|
|
||||||
"widows",
|
|
||||||
"zoom",
|
|
||||||
"max-zoom",
|
|
||||||
"min-zoom",
|
|
||||||
"user-zoom",
|
|
||||||
"orientation"
|
|
||||||
] ]
|
|
||||||
}
|
|
||||||
@@ -1,240 +0,0 @@
|
|||||||
{
|
|
||||||
"remove-empty-rulesets": true,
|
|
||||||
"always-semicolon": true,
|
|
||||||
"color-case": "lower",
|
|
||||||
"block-indent": " ",
|
|
||||||
"color-shorthand": true,
|
|
||||||
"element-case": "lower",
|
|
||||||
"eof-newline": true,
|
|
||||||
"leading-zero": true,
|
|
||||||
"quotes": "double",
|
|
||||||
"space-before-colon": "",
|
|
||||||
"space-after-colon": " ",
|
|
||||||
"space-before-combinator": " ",
|
|
||||||
"space-after-combinator": " ",
|
|
||||||
"space-between-declarations": "\n",
|
|
||||||
"space-before-opening-brace": " ",
|
|
||||||
"space-after-opening-brace": "\n",
|
|
||||||
"space-after-selector-delimiter": "\n",
|
|
||||||
"space-before-selector-delimiter": "",
|
|
||||||
"space-before-closing-brace": "\n",
|
|
||||||
"strip-spaces": true,
|
|
||||||
"tab-size": 4,
|
|
||||||
"unitless-zero": true,
|
|
||||||
"sort-order": [ [
|
|
||||||
"content",
|
|
||||||
"visibility",
|
|
||||||
"position",
|
|
||||||
"top",
|
|
||||||
"right",
|
|
||||||
"bottom",
|
|
||||||
"left",
|
|
||||||
"z-index",
|
|
||||||
"order",
|
|
||||||
"flex",
|
|
||||||
"flex-grow",
|
|
||||||
"flex-shrink",
|
|
||||||
"flex-basis",
|
|
||||||
"align-self",
|
|
||||||
"display",
|
|
||||||
"flex-flow",
|
|
||||||
"flex-direction",
|
|
||||||
"justify-content",
|
|
||||||
"align-items",
|
|
||||||
"align-content",
|
|
||||||
"flex-wrap",
|
|
||||||
"flex-order",
|
|
||||||
"flex-pack",
|
|
||||||
"flex-align",
|
|
||||||
"float",
|
|
||||||
"clear",
|
|
||||||
"box-sizing",
|
|
||||||
"width",
|
|
||||||
"height",
|
|
||||||
"min-width",
|
|
||||||
"min-height",
|
|
||||||
"max-width",
|
|
||||||
"max-height",
|
|
||||||
"overflow",
|
|
||||||
"overflow-x",
|
|
||||||
"overflow-y",
|
|
||||||
"clip",
|
|
||||||
"margin",
|
|
||||||
"margin-top",
|
|
||||||
"margin-right",
|
|
||||||
"margin-bottom",
|
|
||||||
"margin-left",
|
|
||||||
"padding",
|
|
||||||
"padding-top",
|
|
||||||
"padding-right",
|
|
||||||
"padding-bottom",
|
|
||||||
"padding-left",
|
|
||||||
"outline",
|
|
||||||
"outline-width",
|
|
||||||
"outline-style",
|
|
||||||
"outline-color",
|
|
||||||
"outline-offset",
|
|
||||||
"border",
|
|
||||||
"border-spacing",
|
|
||||||
"border-collapse",
|
|
||||||
"border-width",
|
|
||||||
"border-style",
|
|
||||||
"border-color",
|
|
||||||
"border-top",
|
|
||||||
"border-top-width",
|
|
||||||
"border-top-style",
|
|
||||||
"border-top-color",
|
|
||||||
"border-right",
|
|
||||||
"border-right-width",
|
|
||||||
"border-right-style",
|
|
||||||
"border-right-color",
|
|
||||||
"border-bottom",
|
|
||||||
"border-bottom-width",
|
|
||||||
"border-bottom-style",
|
|
||||||
"border-bottom-color",
|
|
||||||
"border-left",
|
|
||||||
"border-left-width",
|
|
||||||
"border-left-style",
|
|
||||||
"border-left-color",
|
|
||||||
"border-image",
|
|
||||||
"border-image-source",
|
|
||||||
"border-image-slice",
|
|
||||||
"border-image-width",
|
|
||||||
"border-image-outset",
|
|
||||||
"border-image-repeat",
|
|
||||||
"border-top-image",
|
|
||||||
"border-right-image",
|
|
||||||
"border-bottom-image",
|
|
||||||
"border-left-image",
|
|
||||||
"border-corner-image",
|
|
||||||
"border-top-left-image",
|
|
||||||
"border-top-right-image",
|
|
||||||
"border-bottom-right-image",
|
|
||||||
"border-bottom-left-image",
|
|
||||||
"table-layout",
|
|
||||||
"caption-side",
|
|
||||||
"empty-cells",
|
|
||||||
"list-style",
|
|
||||||
"list-style-position",
|
|
||||||
"list-style-type",
|
|
||||||
"list-style-image",
|
|
||||||
"quotes",
|
|
||||||
"counter-increment",
|
|
||||||
"counter-reset",
|
|
||||||
"vertical-align",
|
|
||||||
"stroke",
|
|
||||||
"fill",
|
|
||||||
"stroke-width",
|
|
||||||
"stroke-opacity",
|
|
||||||
"color",
|
|
||||||
"font",
|
|
||||||
"font-family",
|
|
||||||
"font-size",
|
|
||||||
"line-height",
|
|
||||||
"font-weight",
|
|
||||||
"font-style",
|
|
||||||
"font-variant",
|
|
||||||
"font-size-adjust",
|
|
||||||
"font-stretch",
|
|
||||||
"text-rendering",
|
|
||||||
"font-feature-settings",
|
|
||||||
"letter-spacing",
|
|
||||||
"hyphens",
|
|
||||||
"text-align",
|
|
||||||
"text-align-last",
|
|
||||||
"text-decoration",
|
|
||||||
"text-emphasis",
|
|
||||||
"text-emphasis-position",
|
|
||||||
"text-emphasis-style",
|
|
||||||
"text-emphasis-color",
|
|
||||||
"text-indent",
|
|
||||||
"text-justify",
|
|
||||||
"text-outline",
|
|
||||||
"text-transform",
|
|
||||||
"text-wrap",
|
|
||||||
"text-overflow",
|
|
||||||
"text-overflow-ellipsis",
|
|
||||||
"text-overflow-mode",
|
|
||||||
"text-shadow",
|
|
||||||
"white-space",
|
|
||||||
"word-spacing",
|
|
||||||
"word-wrap",
|
|
||||||
"word-break",
|
|
||||||
"tab-size",
|
|
||||||
"user-select",
|
|
||||||
"src",
|
|
||||||
"resize",
|
|
||||||
"cursor",
|
|
||||||
"nav-index",
|
|
||||||
"nav-up",
|
|
||||||
"nav-right",
|
|
||||||
"nav-down",
|
|
||||||
"nav-left",
|
|
||||||
"background",
|
|
||||||
"filter:progid:DXImageTransform.Microsoft.AlphaImageLoader",
|
|
||||||
"background-color",
|
|
||||||
"background-image",
|
|
||||||
"background-size",
|
|
||||||
"background-attachment",
|
|
||||||
"background-position",
|
|
||||||
"background-position-x",
|
|
||||||
"background-position-y",
|
|
||||||
"background-clip",
|
|
||||||
"background-origin",
|
|
||||||
"background-repeat",
|
|
||||||
"border-radius",
|
|
||||||
"border-top-left-radius",
|
|
||||||
"border-top-right-radius",
|
|
||||||
"border-bottom-right-radius",
|
|
||||||
"border-bottom-left-radius",
|
|
||||||
"box-decoration-break",
|
|
||||||
"box-shadow",
|
|
||||||
"opacity",
|
|
||||||
"filter:progid:DXImageTransform.Microsoft.Alpha(Opacity",
|
|
||||||
"filter",
|
|
||||||
"transition",
|
|
||||||
"transition-delay",
|
|
||||||
"transition-timing-function",
|
|
||||||
"transition-duration",
|
|
||||||
"transition-property",
|
|
||||||
"transform",
|
|
||||||
"transform-origin",
|
|
||||||
"animation",
|
|
||||||
"animation-name",
|
|
||||||
"animation-duration",
|
|
||||||
"animation-play-state",
|
|
||||||
"animation-timing-function",
|
|
||||||
"animation-delay",
|
|
||||||
"animation-iteration-count",
|
|
||||||
"animation-direction",
|
|
||||||
"animation-fill-mode",
|
|
||||||
"pointer-events",
|
|
||||||
"unicode-bidi",
|
|
||||||
"direction",
|
|
||||||
"columns",
|
|
||||||
"column-span",
|
|
||||||
"column-width",
|
|
||||||
"column-count",
|
|
||||||
"column-fill",
|
|
||||||
"column-gap",
|
|
||||||
"column-rule",
|
|
||||||
"column-rule-width",
|
|
||||||
"column-rule-style",
|
|
||||||
"column-rule-color",
|
|
||||||
"break-before",
|
|
||||||
"break-inside",
|
|
||||||
"break-after",
|
|
||||||
"page-break-before",
|
|
||||||
"page-break-inside",
|
|
||||||
"page-break-after",
|
|
||||||
"orphans",
|
|
||||||
"widows",
|
|
||||||
"zoom",
|
|
||||||
"max-zoom",
|
|
||||||
"min-zoom",
|
|
||||||
"user-zoom",
|
|
||||||
"orientation",
|
|
||||||
"-webkit-overflow-scrolling",
|
|
||||||
"-ms-overflow-scrolling"
|
|
||||||
] ]
|
|
||||||
}
|
|
||||||
@@ -1,486 +0,0 @@
|
|||||||
/* Variables
|
|
||||||
/* ---------------------------------------------------------- */
|
|
||||||
|
|
||||||
:root {
|
|
||||||
/* Colours */
|
|
||||||
--blue: #3eb0ef;
|
|
||||||
--green: #a4d037;
|
|
||||||
--purple: #ad26b4;
|
|
||||||
--yellow: #fecd35;
|
|
||||||
--red: #f05230;
|
|
||||||
--darkgrey: #15171A;
|
|
||||||
--midgrey: #738a94;
|
|
||||||
--lightgrey: #c5d2d9;
|
|
||||||
--whitegrey: #e5eff5;
|
|
||||||
--pink: #fa3a57;
|
|
||||||
--brown: #a3821a;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Reset
|
|
||||||
/* ---------------------------------------------------------- */
|
|
||||||
|
|
||||||
html,
|
|
||||||
body,
|
|
||||||
div,
|
|
||||||
span,
|
|
||||||
applet,
|
|
||||||
object,
|
|
||||||
iframe,
|
|
||||||
h1,
|
|
||||||
h2,
|
|
||||||
h3,
|
|
||||||
h4,
|
|
||||||
h5,
|
|
||||||
h6,
|
|
||||||
p,
|
|
||||||
blockquote,
|
|
||||||
pre,
|
|
||||||
a,
|
|
||||||
abbr,
|
|
||||||
acronym,
|
|
||||||
address,
|
|
||||||
big,
|
|
||||||
cite,
|
|
||||||
code,
|
|
||||||
del,
|
|
||||||
dfn,
|
|
||||||
em,
|
|
||||||
img,
|
|
||||||
ins,
|
|
||||||
kbd,
|
|
||||||
q,
|
|
||||||
s,
|
|
||||||
samp,
|
|
||||||
small,
|
|
||||||
strike,
|
|
||||||
strong,
|
|
||||||
sub,
|
|
||||||
sup,
|
|
||||||
tt,
|
|
||||||
var,
|
|
||||||
dl,
|
|
||||||
dt,
|
|
||||||
dd,
|
|
||||||
ol,
|
|
||||||
ul,
|
|
||||||
li,
|
|
||||||
fieldset,
|
|
||||||
form,
|
|
||||||
label,
|
|
||||||
legend,
|
|
||||||
table,
|
|
||||||
caption,
|
|
||||||
tbody,
|
|
||||||
tfoot,
|
|
||||||
thead,
|
|
||||||
tr,
|
|
||||||
th,
|
|
||||||
td,
|
|
||||||
article,
|
|
||||||
aside,
|
|
||||||
canvas,
|
|
||||||
details,
|
|
||||||
embed,
|
|
||||||
figure,
|
|
||||||
figcaption,
|
|
||||||
footer,
|
|
||||||
header,
|
|
||||||
hgroup,
|
|
||||||
menu,
|
|
||||||
nav,
|
|
||||||
output,
|
|
||||||
ruby,
|
|
||||||
section,
|
|
||||||
summary,
|
|
||||||
time,
|
|
||||||
mark,
|
|
||||||
audio,
|
|
||||||
video {
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
border: 0;
|
|
||||||
font: inherit;
|
|
||||||
font-size: 100%;
|
|
||||||
vertical-align: baseline;
|
|
||||||
}
|
|
||||||
body {
|
|
||||||
line-height: 1;
|
|
||||||
}
|
|
||||||
ol,
|
|
||||||
ul {
|
|
||||||
list-style: none;
|
|
||||||
}
|
|
||||||
blockquote,
|
|
||||||
q {
|
|
||||||
quotes: none;
|
|
||||||
}
|
|
||||||
blockquote:before,
|
|
||||||
blockquote:after,
|
|
||||||
q:before,
|
|
||||||
q:after {
|
|
||||||
content: "";
|
|
||||||
content: none;
|
|
||||||
}
|
|
||||||
table {
|
|
||||||
border-spacing: 0;
|
|
||||||
border-collapse: collapse;
|
|
||||||
}
|
|
||||||
img {
|
|
||||||
max-width: 100%;
|
|
||||||
}
|
|
||||||
html {
|
|
||||||
box-sizing: border-box;
|
|
||||||
font-family: sans-serif;
|
|
||||||
|
|
||||||
-ms-text-size-adjust: 100%;
|
|
||||||
-webkit-text-size-adjust: 100%;
|
|
||||||
}
|
|
||||||
*,
|
|
||||||
*:before,
|
|
||||||
*:after {
|
|
||||||
box-sizing: inherit;
|
|
||||||
}
|
|
||||||
a {
|
|
||||||
background-color: transparent;
|
|
||||||
}
|
|
||||||
a:active,
|
|
||||||
a:hover {
|
|
||||||
outline: 0;
|
|
||||||
}
|
|
||||||
b,
|
|
||||||
strong {
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
i,
|
|
||||||
em,
|
|
||||||
dfn {
|
|
||||||
font-style: italic;
|
|
||||||
}
|
|
||||||
h1 {
|
|
||||||
margin: 0.67em 0;
|
|
||||||
font-size: 2em;
|
|
||||||
}
|
|
||||||
small {
|
|
||||||
font-size: 80%;
|
|
||||||
}
|
|
||||||
sub,
|
|
||||||
sup {
|
|
||||||
position: relative;
|
|
||||||
font-size: 75%;
|
|
||||||
line-height: 0;
|
|
||||||
vertical-align: baseline;
|
|
||||||
}
|
|
||||||
sup {
|
|
||||||
top: -0.5em;
|
|
||||||
}
|
|
||||||
sub {
|
|
||||||
bottom: -0.25em;
|
|
||||||
}
|
|
||||||
img {
|
|
||||||
border: 0;
|
|
||||||
}
|
|
||||||
svg:not(:root) {
|
|
||||||
overflow: hidden;
|
|
||||||
}
|
|
||||||
mark {
|
|
||||||
background-color: #fdffb6;
|
|
||||||
}
|
|
||||||
code,
|
|
||||||
kbd,
|
|
||||||
pre,
|
|
||||||
samp {
|
|
||||||
font-family: monospace, monospace;
|
|
||||||
font-size: 1em;
|
|
||||||
}
|
|
||||||
button,
|
|
||||||
input,
|
|
||||||
optgroup,
|
|
||||||
select,
|
|
||||||
textarea {
|
|
||||||
margin: 0; /* 3 */
|
|
||||||
color: inherit; /* 1 */
|
|
||||||
font: inherit; /* 2 */
|
|
||||||
}
|
|
||||||
button {
|
|
||||||
overflow: visible;
|
|
||||||
border: none;
|
|
||||||
}
|
|
||||||
button,
|
|
||||||
select {
|
|
||||||
text-transform: none;
|
|
||||||
}
|
|
||||||
button,
|
|
||||||
html input[type="button"],
|
|
||||||
/* 1 */
|
|
||||||
input[type="reset"],
|
|
||||||
input[type="submit"] {
|
|
||||||
cursor: pointer; /* 3 */
|
|
||||||
|
|
||||||
-webkit-appearance: button; /* 2 */
|
|
||||||
}
|
|
||||||
button[disabled],
|
|
||||||
html input[disabled] {
|
|
||||||
cursor: default;
|
|
||||||
}
|
|
||||||
button::-moz-focus-inner,
|
|
||||||
input::-moz-focus-inner {
|
|
||||||
padding: 0;
|
|
||||||
border: 0;
|
|
||||||
}
|
|
||||||
input {
|
|
||||||
line-height: normal;
|
|
||||||
}
|
|
||||||
input:focus {
|
|
||||||
outline: none;
|
|
||||||
}
|
|
||||||
input[type="checkbox"],
|
|
||||||
input[type="radio"] {
|
|
||||||
box-sizing: border-box; /* 1 */
|
|
||||||
padding: 0; /* 2 */
|
|
||||||
}
|
|
||||||
input[type="number"]::-webkit-inner-spin-button,
|
|
||||||
input[type="number"]::-webkit-outer-spin-button {
|
|
||||||
height: auto;
|
|
||||||
}
|
|
||||||
input[type="search"] {
|
|
||||||
box-sizing: content-box; /* 2 */
|
|
||||||
|
|
||||||
-webkit-appearance: textfield; /* 1 */
|
|
||||||
}
|
|
||||||
input[type="search"]::-webkit-search-cancel-button,
|
|
||||||
input[type="search"]::-webkit-search-decoration {
|
|
||||||
-webkit-appearance: none;
|
|
||||||
}
|
|
||||||
legend {
|
|
||||||
padding: 0; /* 2 */
|
|
||||||
border: 0; /* 1 */
|
|
||||||
}
|
|
||||||
textarea {
|
|
||||||
overflow: auto;
|
|
||||||
}
|
|
||||||
table {
|
|
||||||
border-spacing: 0;
|
|
||||||
border-collapse: collapse;
|
|
||||||
}
|
|
||||||
td,
|
|
||||||
th {
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ==========================================================================
|
|
||||||
Base styles: opinionated defaults
|
|
||||||
========================================================================== */
|
|
||||||
|
|
||||||
html {
|
|
||||||
overflow-x: hidden;
|
|
||||||
overflow-y: scroll;
|
|
||||||
font-size: 62.5%;
|
|
||||||
|
|
||||||
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
|
|
||||||
}
|
|
||||||
body {
|
|
||||||
overflow-x: hidden;
|
|
||||||
color: color(var(--midgrey) l(-25%));
|
|
||||||
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif;
|
|
||||||
font-size: 1.5rem;
|
|
||||||
line-height: 1.6em;
|
|
||||||
font-weight: 400;
|
|
||||||
font-style: normal;
|
|
||||||
letter-spacing: 0;
|
|
||||||
text-rendering: optimizeLegibility;
|
|
||||||
background: #fff;
|
|
||||||
|
|
||||||
-webkit-font-smoothing: antialiased;
|
|
||||||
-moz-osx-font-smoothing: grayscale;
|
|
||||||
-moz-font-feature-settings: "liga" on;
|
|
||||||
}
|
|
||||||
|
|
||||||
::selection {
|
|
||||||
text-shadow: none;
|
|
||||||
background: color(var(--blue) lightness(+30%));
|
|
||||||
}
|
|
||||||
|
|
||||||
hr {
|
|
||||||
position: relative;
|
|
||||||
display: block;
|
|
||||||
width: 100%;
|
|
||||||
margin: 2.5em 0 3.5em;
|
|
||||||
padding: 0;
|
|
||||||
height: 1px;
|
|
||||||
border: 0;
|
|
||||||
border-top: 1px solid color(var(--lightgrey) l(+10%));
|
|
||||||
}
|
|
||||||
|
|
||||||
audio,
|
|
||||||
canvas,
|
|
||||||
iframe,
|
|
||||||
img,
|
|
||||||
svg,
|
|
||||||
video {
|
|
||||||
vertical-align: middle;
|
|
||||||
}
|
|
||||||
|
|
||||||
fieldset {
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
border: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
textarea {
|
|
||||||
resize: vertical;
|
|
||||||
}
|
|
||||||
|
|
||||||
p,
|
|
||||||
ul,
|
|
||||||
ol,
|
|
||||||
dl,
|
|
||||||
blockquote {
|
|
||||||
margin: 0 0 1.5em 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
ol,
|
|
||||||
ul {
|
|
||||||
padding-left: 1.3em;
|
|
||||||
padding-right: 1.5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
ol ol,
|
|
||||||
ul ul,
|
|
||||||
ul ol,
|
|
||||||
ol ul {
|
|
||||||
margin: 0.5em 0 1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
ul {
|
|
||||||
list-style: disc;
|
|
||||||
}
|
|
||||||
|
|
||||||
ol {
|
|
||||||
list-style: decimal;
|
|
||||||
}
|
|
||||||
|
|
||||||
ul,
|
|
||||||
ol {
|
|
||||||
max-width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
li {
|
|
||||||
margin: 0.5em 0;
|
|
||||||
padding-left: 0.3em;
|
|
||||||
line-height: 1.6em;
|
|
||||||
}
|
|
||||||
|
|
||||||
dt {
|
|
||||||
float: left;
|
|
||||||
margin: 0 20px 0 0;
|
|
||||||
width: 120px;
|
|
||||||
color: var(--darkgrey);
|
|
||||||
font-weight: 500;
|
|
||||||
text-align: right;
|
|
||||||
}
|
|
||||||
|
|
||||||
dd {
|
|
||||||
margin: 0 0 5px 0;
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
blockquote {
|
|
||||||
margin: 1.5em 0;
|
|
||||||
padding: 0 1.6em 0 1.6em;
|
|
||||||
border-left: var(--whitegrey) 0.5em solid;
|
|
||||||
}
|
|
||||||
|
|
||||||
blockquote p {
|
|
||||||
margin: 0.8em 0;
|
|
||||||
font-size: 1.2em;
|
|
||||||
font-weight: 300;
|
|
||||||
}
|
|
||||||
|
|
||||||
blockquote small {
|
|
||||||
display: inline-block;
|
|
||||||
margin: 0.8em 0 0.8em 1.5em;
|
|
||||||
font-size: 0.9em;
|
|
||||||
opacity: 0.8;
|
|
||||||
}
|
|
||||||
/* Quotation marks */
|
|
||||||
blockquote small:before {
|
|
||||||
content: "\2014 \00A0";
|
|
||||||
}
|
|
||||||
|
|
||||||
blockquote cite {
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
blockquote cite a {
|
|
||||||
font-weight: normal;
|
|
||||||
}
|
|
||||||
|
|
||||||
a {
|
|
||||||
color: color(var(--blue) l(-5%));
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
a:hover {
|
|
||||||
text-decoration: underline;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1,
|
|
||||||
h2,
|
|
||||||
h3,
|
|
||||||
h4,
|
|
||||||
h5,
|
|
||||||
h6 {
|
|
||||||
margin-top: 0;
|
|
||||||
line-height: 1.15;
|
|
||||||
font-weight: 700;
|
|
||||||
text-rendering: optimizeLegibility;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1 {
|
|
||||||
margin: 0 0 0.5em 0;
|
|
||||||
font-size: 5rem;
|
|
||||||
font-weight: 700;
|
|
||||||
}
|
|
||||||
@media (max-width: 500px) {
|
|
||||||
h1 {
|
|
||||||
font-size: 2.2rem;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
h2 {
|
|
||||||
margin: 1.5em 0 0.5em 0;
|
|
||||||
font-size: 2rem;
|
|
||||||
}
|
|
||||||
@media (max-width: 500px) {
|
|
||||||
h2 {
|
|
||||||
font-size: 1.8rem;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
h3 {
|
|
||||||
margin: 1.5em 0 0.5em 0;
|
|
||||||
font-size: 1.8rem;
|
|
||||||
font-weight: 500;
|
|
||||||
}
|
|
||||||
@media (max-width: 500px) {
|
|
||||||
h3 {
|
|
||||||
font-size: 1.7rem;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
h4 {
|
|
||||||
margin: 1.5em 0 0.5em 0;
|
|
||||||
font-size: 1.6rem;
|
|
||||||
font-weight: 500;
|
|
||||||
}
|
|
||||||
|
|
||||||
h5 {
|
|
||||||
margin: 1.5em 0 0.5em 0;
|
|
||||||
font-size: 1.4rem;
|
|
||||||
font-weight: 500;
|
|
||||||
}
|
|
||||||
|
|
||||||
h6 {
|
|
||||||
margin: 1.5em 0 0.5em 0;
|
|
||||||
font-size: 1.4rem;
|
|
||||||
font-weight: 500;
|
|
||||||
}
|
|
||||||
@@ -1,115 +0,0 @@
|
|||||||
/* global maxPages */
|
|
||||||
|
|
||||||
// Code snippet inspired by https://github.com/douglasrodrigues5/ghost-blog-infinite-scroll
|
|
||||||
$(function ($) {
|
|
||||||
var currentPage = 1;
|
|
||||||
var pathname = window.location.pathname;
|
|
||||||
var $document = $(document);
|
|
||||||
var $result = $('.post-feed');
|
|
||||||
var buffer = 300;
|
|
||||||
|
|
||||||
var ticking = false;
|
|
||||||
var isLoading = false;
|
|
||||||
|
|
||||||
var lastScrollY = window.scrollY;
|
|
||||||
var lastWindowHeight = window.innerHeight;
|
|
||||||
var lastDocumentHeight = $document.height();
|
|
||||||
|
|
||||||
function onScroll() {
|
|
||||||
lastScrollY = window.scrollY;
|
|
||||||
requestTick();
|
|
||||||
}
|
|
||||||
|
|
||||||
function onResize() {
|
|
||||||
lastWindowHeight = window.innerHeight;
|
|
||||||
lastDocumentHeight = $document.height();
|
|
||||||
requestTick();
|
|
||||||
}
|
|
||||||
|
|
||||||
function requestTick() {
|
|
||||||
if (!ticking) {
|
|
||||||
requestAnimationFrame(infiniteScroll);
|
|
||||||
}
|
|
||||||
ticking = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
function sanitizePathname(path) {
|
|
||||||
var paginationRegex = /(?:page\/)(\d)(?:\/)$/i;
|
|
||||||
|
|
||||||
// remove hash params from path
|
|
||||||
path = path.replace(/#(.*)$/g, '').replace('////g', '/');
|
|
||||||
|
|
||||||
// remove pagination from the path and replace the current pages
|
|
||||||
// with the actual requested page. E. g. `/page/3/` indicates that
|
|
||||||
// the user actually requested page 3, so we should request page 4
|
|
||||||
// next, unless it's the last page already.
|
|
||||||
if (path.match(paginationRegex)) {
|
|
||||||
currentPage = parseInt(path.match(paginationRegex)[1]);
|
|
||||||
|
|
||||||
path = path.replace(paginationRegex, '');
|
|
||||||
}
|
|
||||||
|
|
||||||
return path;
|
|
||||||
}
|
|
||||||
|
|
||||||
function infiniteScroll() {
|
|
||||||
// sanitize the pathname from possible pagination or hash params
|
|
||||||
pathname = sanitizePathname(pathname);
|
|
||||||
|
|
||||||
// return if already loading
|
|
||||||
if (isLoading) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// return if not scroll to the bottom
|
|
||||||
if (lastScrollY + lastWindowHeight <= lastDocumentHeight - buffer) {
|
|
||||||
ticking = false;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* maxPages is defined in default.hbs and is the value
|
|
||||||
* of the amount of pagination pages.
|
|
||||||
* If we reached the last page or are past it,
|
|
||||||
* we return and disable the listeners.
|
|
||||||
*/
|
|
||||||
if (currentPage >= maxPages) {
|
|
||||||
window.removeEventListener('scroll', onScroll, {passive: true});
|
|
||||||
window.removeEventListener('resize', onResize);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
isLoading = true;
|
|
||||||
|
|
||||||
// next page
|
|
||||||
currentPage += 1;
|
|
||||||
|
|
||||||
// Load more
|
|
||||||
var nextPage = pathname + 'page/' + currentPage + '/';
|
|
||||||
|
|
||||||
$.get(nextPage, function (content) {
|
|
||||||
var parse = document.createRange().createContextualFragment(content);
|
|
||||||
var posts = parse.querySelectorAll('.post');
|
|
||||||
if (posts.length) {
|
|
||||||
[].forEach.call(posts, function (post) {
|
|
||||||
$result[0].appendChild(post);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}).fail(function (xhr) {
|
|
||||||
// 404 indicates we've run out of pages
|
|
||||||
if (xhr.status === 404) {
|
|
||||||
window.removeEventListener('scroll', onScroll, {passive: true});
|
|
||||||
window.removeEventListener('resize', onResize);
|
|
||||||
}
|
|
||||||
}).always(function () {
|
|
||||||
lastDocumentHeight = $document.height();
|
|
||||||
isLoading = false;
|
|
||||||
ticking = false;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
window.addEventListener('scroll', onScroll, {passive: true});
|
|
||||||
window.addEventListener('resize', onResize);
|
|
||||||
|
|
||||||
infiniteScroll();
|
|
||||||
});
|
|
||||||
@@ -1,89 +0,0 @@
|
|||||||
/*jshint browser:true */
|
|
||||||
/*!
|
|
||||||
* FitVids 1.3
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* Copyright 2017, Chris Coyier + Dave Rupert + Ghost Foundation
|
|
||||||
* This is an unofficial release, ported by John O'Nolan
|
|
||||||
* Credit to Thierry Koblentz - http://www.alistapart.com/articles/creating-intrinsic-ratios-for-video/
|
|
||||||
* Released under the MIT license
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
;(function( $ ){
|
|
||||||
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
$.fn.fitVids = function( options ) {
|
|
||||||
var settings = {
|
|
||||||
customSelector: null,
|
|
||||||
ignore: null
|
|
||||||
};
|
|
||||||
|
|
||||||
if(!document.getElementById('fit-vids-style')) {
|
|
||||||
// appendStyles: https://github.com/toddmotto/fluidvids/blob/master/dist/fluidvids.js
|
|
||||||
var head = document.head || document.getElementsByTagName('head')[0];
|
|
||||||
var css = '.fluid-width-video-container{flex-grow: 1;width:100%;}.fluid-width-video-wrapper{width:100%;position:relative;padding:0;}.fluid-width-video-wrapper iframe,.fluid-width-video-wrapper object,.fluid-width-video-wrapper embed {position:absolute;top:0;left:0;width:100%;height:100%;}';
|
|
||||||
var div = document.createElement("div");
|
|
||||||
div.innerHTML = '<p>x</p><style id="fit-vids-style">' + css + '</style>';
|
|
||||||
head.appendChild(div.childNodes[1]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( options ) {
|
|
||||||
$.extend( settings, options );
|
|
||||||
}
|
|
||||||
|
|
||||||
return this.each(function(){
|
|
||||||
var selectors = [
|
|
||||||
'iframe[src*="player.vimeo.com"]',
|
|
||||||
'iframe[src*="youtube.com"]',
|
|
||||||
'iframe[src*="youtube-nocookie.com"]',
|
|
||||||
'iframe[src*="kickstarter.com"][src*="video.html"]',
|
|
||||||
'object',
|
|
||||||
'embed'
|
|
||||||
];
|
|
||||||
|
|
||||||
if (settings.customSelector) {
|
|
||||||
selectors.push(settings.customSelector);
|
|
||||||
}
|
|
||||||
|
|
||||||
var ignoreList = '.fitvidsignore';
|
|
||||||
|
|
||||||
if(settings.ignore) {
|
|
||||||
ignoreList = ignoreList + ', ' + settings.ignore;
|
|
||||||
}
|
|
||||||
|
|
||||||
var $allVideos = $(this).find(selectors.join(','));
|
|
||||||
$allVideos = $allVideos.not('object object'); // SwfObj conflict patch
|
|
||||||
$allVideos = $allVideos.not(ignoreList); // Disable FitVids on this video.
|
|
||||||
|
|
||||||
$allVideos.each(function(){
|
|
||||||
var $this = $(this);
|
|
||||||
if($this.parents(ignoreList).length > 0) {
|
|
||||||
return; // Disable FitVids on this video.
|
|
||||||
}
|
|
||||||
if (this.tagName.toLowerCase() === 'embed' && $this.parent('object').length || $this.parent('.fluid-width-video-wrapper').length) { return; }
|
|
||||||
if ((!$this.css('height') && !$this.css('width')) && (isNaN($this.attr('height')) || isNaN($this.attr('width'))))
|
|
||||||
{
|
|
||||||
$this.attr('height', 9);
|
|
||||||
$this.attr('width', 16);
|
|
||||||
}
|
|
||||||
var height = ( this.tagName.toLowerCase() === 'object' || ($this.attr('height') && !isNaN(parseInt($this.attr('height'), 10))) ) ? parseInt($this.attr('height'), 10) : $this.height(),
|
|
||||||
width = !isNaN(parseInt($this.attr('width'), 10)) ? parseInt($this.attr('width'), 10) : $this.width(),
|
|
||||||
aspectRatio = height / width;
|
|
||||||
if(!$this.attr('name')){
|
|
||||||
var videoName = 'fitvid' + $.fn.fitVids._count;
|
|
||||||
$this.attr('name', videoName);
|
|
||||||
$.fn.fitVids._count++;
|
|
||||||
}
|
|
||||||
$this.wrap('<div class="fluid-width-video-container"><div class="fluid-width-video-wrapper"></div></div>').parent('.fluid-width-video-wrapper').css('padding-top', (aspectRatio * 100)+'%');
|
|
||||||
$this.removeAttr('height').removeAttr('width');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
// Internal counter for unique video names.
|
|
||||||
$.fn.fitVids._count = 0;
|
|
||||||
|
|
||||||
// Works with either jQuery or Zepto
|
|
||||||
})( window.jQuery || window.Zepto );
|
|
||||||
|
Before Width: | Height: | Size: 106 KiB |
|
Before Width: | Height: | Size: 102 KiB |
@@ -1,54 +0,0 @@
|
|||||||
{{!< default}}
|
|
||||||
{{!-- The tag above means - insert everything in this file into the {body} of the default.hbs template --}}
|
|
||||||
|
|
||||||
{{#author}}
|
|
||||||
{{!-- Everything inside the #author tags pulls data from the author --}}
|
|
||||||
<header class="site-header outer {{#if cover_image}}" style="background-image: url({{cover_image}}){{else}}no-cover{{/if}}">
|
|
||||||
<div class="inner">
|
|
||||||
{{> "site-nav"}}
|
|
||||||
<div class="site-header-content">
|
|
||||||
{{#if profile_image}}
|
|
||||||
<img class="author-profile-image" src="{{profile_image}}" alt="{{name}}" />
|
|
||||||
{{/if}}
|
|
||||||
<h1 class="site-title">{{name}}</h1>
|
|
||||||
{{#if bio}}
|
|
||||||
<h2 class="author-bio">{{bio}}</h2>
|
|
||||||
{{/if}}
|
|
||||||
<div class="author-meta">
|
|
||||||
{{#if location}}
|
|
||||||
<div class="author-location">{{location}} <span class="bull">•</span></div>
|
|
||||||
{{/if}}
|
|
||||||
<div class="author-stats">
|
|
||||||
{{plural ../pagination.total empty='No posts' singular='% post' plural='% posts'}} <span class="bull">•</span>
|
|
||||||
</div>
|
|
||||||
{{#if website}}
|
|
||||||
<a class="social-link social-link-wb" href="{{website}}" target="_blank" rel="noopener">{{> "icons/website"}}</a>
|
|
||||||
{{/if}}
|
|
||||||
{{#if twitter}}
|
|
||||||
<a class="social-link social-link-tw" href="{{twitter_url}}" target="_blank" rel="noopener">{{> "icons/twitter"}}</a>
|
|
||||||
{{/if}}
|
|
||||||
{{#if facebook}}
|
|
||||||
<a class="social-link social-link-fb" href="{{facebook_url}}" target="_blank" rel="noopener">{{> "icons/facebook"}}</a>
|
|
||||||
{{/if}}
|
|
||||||
<a class="social-link social-link-rss" href="https://feedly.com/i/subscription/feed/{{url absolute="true"}}rss/" target="_blank" rel="noopener">{{> "icons/rss"}}</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</header>
|
|
||||||
{{/author}}
|
|
||||||
|
|
||||||
{{!-- The main content area --}}
|
|
||||||
<main id="site-main" class="site-main outer">
|
|
||||||
<div class="inner">
|
|
||||||
|
|
||||||
<div class="post-feed">
|
|
||||||
{{#foreach posts}}
|
|
||||||
|
|
||||||
{{!-- The tag below includes the markup for each post - partials/post-card.hbs --}}
|
|
||||||
{{> "post-card"}}
|
|
||||||
|
|
||||||
{{/foreach}}
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</main>
|
|
||||||
@@ -1,83 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="{{lang}}">
|
|
||||||
<head>
|
|
||||||
|
|
||||||
{{!-- Document Settings --}}
|
|
||||||
<meta charset="utf-8" />
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
|
||||||
|
|
||||||
{{!-- Base Meta --}}
|
|
||||||
<title>{{meta_title}}</title>
|
|
||||||
<meta name="HandheldFriendly" content="True" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
||||||
|
|
||||||
{{!-- Styles'n'Scripts --}}
|
|
||||||
<link rel="stylesheet" type="text/css" href="{{asset "built/screen.css"}}" />
|
|
||||||
|
|
||||||
{{!-- This tag outputs SEO meta+structured data and other important settings --}}
|
|
||||||
{{ghost_head}}
|
|
||||||
|
|
||||||
</head>
|
|
||||||
<body class="{{body_class}}">
|
|
||||||
|
|
||||||
<div class="site-wrapper">
|
|
||||||
|
|
||||||
{{!-- All the main content gets inserted here, index.hbs, post.hbs, etc --}}
|
|
||||||
{{{body}}}
|
|
||||||
|
|
||||||
{{!-- The footer at the very bottom of the screen --}}
|
|
||||||
<footer class="site-footer outer">
|
|
||||||
<div class="site-footer-content inner">
|
|
||||||
<section class="copyright"><a href="{{@blog.url}}">{{@blog.title}}</a> © {{date format="YYYY"}}</section>
|
|
||||||
<nav class="site-footer-nav">
|
|
||||||
<a href="{{@blog.url}}">Latest Posts</a>
|
|
||||||
{{#if @blog.facebook}}<a href="{{facebook_url @blog.facebook}}" target="_blank" rel="noopener">Facebook</a>{{/if}}
|
|
||||||
{{#if @blog.twitter}}<a href="{{twitter_url @blog.twitter}}" target="_blank" rel="noopener">Twitter</a>{{/if}}
|
|
||||||
<a href="https://ghost.org" target="_blank" rel="noopener">Ghost</a>
|
|
||||||
</nav>
|
|
||||||
</div>
|
|
||||||
</footer>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{{!-- The big email subscribe modal content --}}
|
|
||||||
{{#if @labs.subscribers}}
|
|
||||||
<div id="subscribe" class="subscribe-overlay">
|
|
||||||
<a class="subscribe-overlay-close" href="#"></a>
|
|
||||||
<div class="subscribe-overlay-content">
|
|
||||||
{{#if @blog.logo}}
|
|
||||||
<img class="subscribe-overlay-logo" src="{{@blog.logo}}" alt="{{@blog.title}}" />
|
|
||||||
{{/if}}
|
|
||||||
<h1 class="subscribe-overlay-title">Subscribe to {{@blog.title}}</h1>
|
|
||||||
<p class="subscribe-overlay-description">Stay up to date! Get all the latest & greatest posts delivered straight to your inbox</p>
|
|
||||||
{{subscribe_form placeholder="youremail@example.com"}}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{{/if}}
|
|
||||||
|
|
||||||
{{!-- jQuery + Fitvids, which makes all video embeds responsive --}}
|
|
||||||
<script
|
|
||||||
src="https://code.jquery.com/jquery-3.2.1.min.js"
|
|
||||||
integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4="
|
|
||||||
crossorigin="anonymous">
|
|
||||||
</script>
|
|
||||||
<script type="text/javascript" src="{{asset "js/jquery.fitvids.js"}}"></script>
|
|
||||||
|
|
||||||
{{#if pagination.pages}}
|
|
||||||
<script>
|
|
||||||
// maxPages is a global variable that is needed to determine
|
|
||||||
// if we need to load more pages for the infinitescroll, or if
|
|
||||||
// we reached the last page already.
|
|
||||||
var maxPages = parseInt('{{pagination.pages}}');
|
|
||||||
</script>
|
|
||||||
<script src="{{asset "js/infinitescroll.js"}}"></script>
|
|
||||||
{{/if}}
|
|
||||||
|
|
||||||
{{!-- The #block helper will pull in data from the #contentFor other template files. In this case, there's some JavaScript which we only want to use in post.hbs, but it needs to be included down here, after jQuery has already loaded. --}}
|
|
||||||
{{{block "scripts"}}}
|
|
||||||
|
|
||||||
{{!-- Ghost outputs important scripts and data with this tag - it should always be the very last thing before the closing body tag --}}
|
|
||||||
{{ghost_foot}}
|
|
||||||
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,56 +0,0 @@
|
|||||||
{{!--
|
|
||||||
This error template is used for all 404 errors, which might occur on your site.
|
|
||||||
It's a good idea to keep this template as minimal as possible in terms of both file size and complexity.
|
|
||||||
--}}
|
|
||||||
|
|
||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8" />
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
|
||||||
<title>{{meta_title}}</title>
|
|
||||||
<meta name="HandheldFriendly" content="True" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
||||||
<link rel="stylesheet" type="text/css" href="{{asset "built/screen.css"}}" />
|
|
||||||
</head>
|
|
||||||
<body class="error-template">
|
|
||||||
<div class="site-wrapper">
|
|
||||||
|
|
||||||
<header class="site-header outer {{#if feature_image}}" style="background-image: url({{feature_image}}){{else}}no-cover{{/if}}">
|
|
||||||
<div class="inner">
|
|
||||||
<nav class="site-nav-center">
|
|
||||||
{{#if @blog.logo}}
|
|
||||||
<a class="site-nav-logo" href="{{@blog.url}}"><img src="{{@blog.logo}}" alt="{{@blog.title}}" /></a>
|
|
||||||
{{else}}
|
|
||||||
<a class="site-nav-logo" href="{{@blog.url}}">{{@blog.title}}</a>
|
|
||||||
{{/if}}
|
|
||||||
</nav>
|
|
||||||
</div>
|
|
||||||
</header>
|
|
||||||
|
|
||||||
<main id="site-main" class="site-main outer">
|
|
||||||
<div class="inner">
|
|
||||||
|
|
||||||
<section class="error-message">
|
|
||||||
<h1 class="error-code">{{code}}</h1>
|
|
||||||
<p class="error-description">{{message}}</p>
|
|
||||||
<a class="error-link" href="{{@blog.url}}">Go to the front page →</a>
|
|
||||||
</section>
|
|
||||||
</div>
|
|
||||||
</main>
|
|
||||||
|
|
||||||
{{#get "posts" limit="3"}}
|
|
||||||
<aside class="outer">
|
|
||||||
<div class="inner">
|
|
||||||
<div class="post-feed">
|
|
||||||
{{#foreach posts}}
|
|
||||||
{{> "post-card"}}
|
|
||||||
{{/foreach}}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</aside>
|
|
||||||
{{/get}}
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,63 +0,0 @@
|
|||||||
{{!--
|
|
||||||
This error template is used for all 400/500 errors, except 404, which might occur on your site.
|
|
||||||
It's a good idea to keep this template as minimal as possible in terms of both file size and complexity.
|
|
||||||
You'll notice that we *don't* use any JavsScript, or ghost_head / ghost_foot in this file.
|
|
||||||
--}}
|
|
||||||
|
|
||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8" />
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
|
||||||
<title>{{meta_title}}</title>
|
|
||||||
<meta name="HandheldFriendly" content="True" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
||||||
<link rel="stylesheet" type="text/css" href="{{asset "built/screen.css"}}" />
|
|
||||||
</head>
|
|
||||||
<body class="error-template">
|
|
||||||
<div class="site-wrapper">
|
|
||||||
|
|
||||||
<header class="site-header outer {{#if feature_image}}" style="background-image: url({{feature_image}}){{else}}no-cover{{/if}}">
|
|
||||||
<div class="inner">
|
|
||||||
<nav class="site-nav-center">
|
|
||||||
{{#if @blog.logo}}
|
|
||||||
<a class="site-nav-logo" href="{{@blog.url}}"><img src="{{@blog.logo}}" alt="{{@blog.title}}" /></a>
|
|
||||||
{{else}}
|
|
||||||
<a class="site-nav-logo" href="{{@blog.url}}">{{@blog.title}}</a>
|
|
||||||
{{/if}}
|
|
||||||
</nav>
|
|
||||||
</div>
|
|
||||||
</header>
|
|
||||||
|
|
||||||
<main id="site-main" class="site-main outer">
|
|
||||||
<div class="inner">
|
|
||||||
|
|
||||||
<section class="error-message">
|
|
||||||
<h1 class="error-code">{{code}}</h1>
|
|
||||||
<p class="error-description">{{message}}</p>
|
|
||||||
<a class="error-link" href="{{@blog.url}}">Go to the front page →</a>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
{{#if errorDetails}}
|
|
||||||
<section class="error-stack">
|
|
||||||
<h3>Theme errors</h3>
|
|
||||||
<ul class="error-stack-list">
|
|
||||||
{{#each errorDetails}}
|
|
||||||
<li>
|
|
||||||
<em class="error-stack-function">{{{rule}}}</em>
|
|
||||||
|
|
||||||
{{#each failures}}
|
|
||||||
<p><span class="error-stack-file">Ref: {{ref}}</span></p>
|
|
||||||
<p><span class="error-stack-file">Message: {{message}}</span></p>
|
|
||||||
{{/each}}
|
|
||||||
</li>
|
|
||||||
{{/each}}
|
|
||||||
</ul>
|
|
||||||
</section>
|
|
||||||
{{/if}}
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</main>
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,69 +0,0 @@
|
|||||||
var gulp = require('gulp');
|
|
||||||
|
|
||||||
// gulp plugins and utils
|
|
||||||
var gutil = require('gulp-util');
|
|
||||||
var livereload = require('gulp-livereload');
|
|
||||||
var postcss = require('gulp-postcss');
|
|
||||||
var sourcemaps = require('gulp-sourcemaps');
|
|
||||||
var zip = require('gulp-zip');
|
|
||||||
|
|
||||||
// postcss plugins
|
|
||||||
var autoprefixer = require('autoprefixer');
|
|
||||||
var colorFunction = require('postcss-color-function');
|
|
||||||
var cssnano = require('cssnano');
|
|
||||||
var customProperties = require('postcss-custom-properties');
|
|
||||||
var easyimport = require('postcss-easy-import');
|
|
||||||
|
|
||||||
var swallowError = function swallowError(error) {
|
|
||||||
gutil.log(error.toString());
|
|
||||||
gutil.beep();
|
|
||||||
this.emit('end');
|
|
||||||
};
|
|
||||||
|
|
||||||
var nodemonServerInit = function () {
|
|
||||||
livereload.listen(1234);
|
|
||||||
};
|
|
||||||
|
|
||||||
gulp.task('build', ['css'], function (/* cb */) {
|
|
||||||
return nodemonServerInit();
|
|
||||||
});
|
|
||||||
|
|
||||||
gulp.task('css', function () {
|
|
||||||
var processors = [
|
|
||||||
easyimport,
|
|
||||||
customProperties,
|
|
||||||
colorFunction(),
|
|
||||||
autoprefixer({browsers: ['last 2 versions']}),
|
|
||||||
cssnano()
|
|
||||||
];
|
|
||||||
|
|
||||||
return gulp.src('assets/css/*.css')
|
|
||||||
.on('error', swallowError)
|
|
||||||
.pipe(sourcemaps.init())
|
|
||||||
.pipe(postcss(processors))
|
|
||||||
.pipe(sourcemaps.write('.'))
|
|
||||||
.pipe(gulp.dest('assets/built/'))
|
|
||||||
.pipe(livereload());
|
|
||||||
});
|
|
||||||
|
|
||||||
gulp.task('watch', function () {
|
|
||||||
gulp.watch('assets/css/**', ['css']);
|
|
||||||
});
|
|
||||||
|
|
||||||
gulp.task('zip', ['css'], function () {
|
|
||||||
var targetDir = 'dist/';
|
|
||||||
var themeName = require('./package.json').name;
|
|
||||||
var filename = themeName + '.zip';
|
|
||||||
|
|
||||||
return gulp.src([
|
|
||||||
'**',
|
|
||||||
'!node_modules', '!node_modules/**',
|
|
||||||
'!dist', '!dist/**'
|
|
||||||
])
|
|
||||||
.pipe(zip(filename))
|
|
||||||
.pipe(gulp.dest(targetDir));
|
|
||||||
});
|
|
||||||
|
|
||||||
gulp.task('default', ['build'], function () {
|
|
||||||
gulp.start('watch');
|
|
||||||
});
|
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
{{!< default}}
|
|
||||||
{{!-- The tag above means: insert everything in this file
|
|
||||||
into the {body} of the default.hbs template --}}
|
|
||||||
|
|
||||||
{{!-- The big featured header, it uses blog cover image as a BG if available --}}
|
|
||||||
<header class="site-header outer {{#if @blog.cover_image}}" style="background-image: url({{@blog.cover_image}}){{else}}no-cover{{/if}}">
|
|
||||||
<div class="inner">
|
|
||||||
<div class="site-header-content">
|
|
||||||
<h1 class="site-title">
|
|
||||||
{{#if @blog.logo}}
|
|
||||||
<img class="site-logo" src="{{@blog.logo}}" alt="{{@blog.title}}" />
|
|
||||||
{{else}}
|
|
||||||
{{@blog.title}}
|
|
||||||
{{/if}}
|
|
||||||
</h1>
|
|
||||||
<h2 class="site-description">{{@blog.description}}</h2>
|
|
||||||
</div>
|
|
||||||
{{> "site-nav"}}
|
|
||||||
</div>
|
|
||||||
</header>
|
|
||||||
|
|
||||||
{{!-- The main content area --}}
|
|
||||||
<main id="site-main" class="site-main outer">
|
|
||||||
<div class="inner">
|
|
||||||
|
|
||||||
<div class="post-feed">
|
|
||||||
{{#foreach posts}}
|
|
||||||
|
|
||||||
{{!-- The tag below includes the markup for each post - partials/post-card.hbs --}}
|
|
||||||
{{> "post-card"}}
|
|
||||||
|
|
||||||
{{/foreach}}
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</main>
|
|
||||||
@@ -1,60 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "casper",
|
|
||||||
"description": "The default personal blogging theme for Ghost. Beautiful, minimal and responsive.",
|
|
||||||
"demo": "https://demo.ghost.io",
|
|
||||||
"version": "2.5.0",
|
|
||||||
"engines": {
|
|
||||||
"ghost": ">=2.0.0"
|
|
||||||
},
|
|
||||||
"license": "MIT",
|
|
||||||
"screenshots": {
|
|
||||||
"desktop": "assets/screenshot-desktop.jpg",
|
|
||||||
"mobile": "assets/screenshot-mobile.jpg"
|
|
||||||
},
|
|
||||||
"scripts": {
|
|
||||||
"dev": "gulp",
|
|
||||||
"zip": "gulp zip",
|
|
||||||
"test": "gscan ."
|
|
||||||
},
|
|
||||||
"author": {
|
|
||||||
"name": "Ghost Foundation",
|
|
||||||
"email": "hello@ghost.org",
|
|
||||||
"url": "https://ghost.org"
|
|
||||||
},
|
|
||||||
"gpm": {
|
|
||||||
"type": "theme",
|
|
||||||
"categories": [
|
|
||||||
"Minimal",
|
|
||||||
"Magazine"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"keywords": [
|
|
||||||
"ghost",
|
|
||||||
"theme",
|
|
||||||
"ghost-theme"
|
|
||||||
],
|
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/TryGhost/Casper.git"
|
|
||||||
},
|
|
||||||
"bugs": "https://github.com/TryGhost/Casper/issues",
|
|
||||||
"contributors": "https://github.com/TryGhost/Casper/graphs/contributors",
|
|
||||||
"devDependencies": {
|
|
||||||
"autoprefixer": "6.3.6",
|
|
||||||
"cssnano": "3.7.1",
|
|
||||||
"gscan": "^2.0.0",
|
|
||||||
"gulp": "3.9.1",
|
|
||||||
"gulp-livereload": "3.8.1",
|
|
||||||
"gulp-postcss": "6.1.1",
|
|
||||||
"gulp-sourcemaps": "1.6.0",
|
|
||||||
"gulp-util": "3.0.7",
|
|
||||||
"gulp-watch": "4.3.8",
|
|
||||||
"gulp-zip": "4.0.0",
|
|
||||||
"postcss-color-function": "2.0.1",
|
|
||||||
"postcss-custom-properties": "5.0.1",
|
|
||||||
"postcss-easy-import": "1.0.1"
|
|
||||||
},
|
|
||||||
"config": {
|
|
||||||
"posts_per_page": 25
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,50 +0,0 @@
|
|||||||
{{!< default}}
|
|
||||||
{{!-- The tag above means: insert everything in this file
|
|
||||||
into the {body} of the default.hbs template --}}
|
|
||||||
|
|
||||||
{{!-- The big featured header, it uses blog cover image as a BG if available --}}
|
|
||||||
<header class="site-header outer">
|
|
||||||
<div class="inner">
|
|
||||||
{{> "site-nav"}}
|
|
||||||
</div>
|
|
||||||
</header>
|
|
||||||
|
|
||||||
{{!-- Everything inside the #post tags pulls data from the post --}}
|
|
||||||
{{#post}}
|
|
||||||
|
|
||||||
<main id="site-main" class="site-main outer">
|
|
||||||
<div class="inner">
|
|
||||||
|
|
||||||
<article class="post-full {{post_class}} {{#unless feature_image}}no-image{{/unless}}">
|
|
||||||
|
|
||||||
<header class="post-full-header">
|
|
||||||
<h1 class="post-full-title">{{title}}</h1>
|
|
||||||
</header>
|
|
||||||
|
|
||||||
{{#if feature_image}}
|
|
||||||
<figure class="post-full-image" style="background-image: url({{feature_image}})">
|
|
||||||
</figure>
|
|
||||||
{{/if}}
|
|
||||||
|
|
||||||
<section class="post-full-content">
|
|
||||||
<div class="post-content">
|
|
||||||
{{content}}
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
</article>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</main>
|
|
||||||
|
|
||||||
{{/post}}
|
|
||||||
|
|
||||||
{{!-- The #contentFor helper here will send everything inside it up to the matching #block helper found in default.hbs --}}
|
|
||||||
{{#contentFor "scripts"}}
|
|
||||||
<script>
|
|
||||||
$(function() {
|
|
||||||
var $postContent = $(".post-full-content");
|
|
||||||
$postContent.fitVids();
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
{{/contentFor}}
|
|
||||||
@@ -1,72 +0,0 @@
|
|||||||
<section class="post-full-authors">
|
|
||||||
|
|
||||||
<div class="post-full-authors-content">
|
|
||||||
<p>This post was a collaboration between</p>
|
|
||||||
<p>{{authors}}</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<ul class="author-list">
|
|
||||||
{{#foreach authors}}
|
|
||||||
<li class="author-list-item">
|
|
||||||
|
|
||||||
<div class="author-card">
|
|
||||||
<div class="basic-info">
|
|
||||||
{{#if profile_image}}
|
|
||||||
<img class="author-profile-image" src="{{profile_image}}" alt="{{name}}" />
|
|
||||||
{{else}}
|
|
||||||
<div class="author-profile-image">{{> "icons/avatar"}}</div>
|
|
||||||
{{/if}}
|
|
||||||
<h2>{{name}}</h2>
|
|
||||||
</div>
|
|
||||||
<div class="bio">
|
|
||||||
{{#if bio}}
|
|
||||||
<p>{{bio}}</p>
|
|
||||||
<p><a href="{{url}}">More posts</a> by {{name}}.</p>
|
|
||||||
{{else}}
|
|
||||||
<p>Read <a href="{{url}}">more posts</a> by this author.</p>
|
|
||||||
{{/if}}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{{#if profile_image}}
|
|
||||||
<a href="{{url}}" class="moving-avatar"><img class="author-profile-image" src="{{profile_image}}" alt="{{name}}" /></a>
|
|
||||||
{{else}}
|
|
||||||
<a href="{{url}}" class="moving-avatar author-profile-image">{{> "icons/avatar"}}</a>
|
|
||||||
{{/if}}
|
|
||||||
|
|
||||||
</li>
|
|
||||||
{{/foreach}}
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
</section>
|
|
||||||
|
|
||||||
{{#contentFor "scripts"}}
|
|
||||||
<script>
|
|
||||||
// Adds delay to author card dropups to disappear. This gives enough
|
|
||||||
// time for the user to interact with the author card while they move
|
|
||||||
// the mouse from the avatar to the card. Also makes space for the
|
|
||||||
// interacted avatar.
|
|
||||||
$(document).ready(function () {
|
|
||||||
|
|
||||||
var hoverTimeout;
|
|
||||||
|
|
||||||
$('.author-list-item').hover(function(){
|
|
||||||
var $this = $(this);
|
|
||||||
|
|
||||||
clearTimeout(hoverTimeout);
|
|
||||||
|
|
||||||
$('.author-card').removeClass('hovered');
|
|
||||||
$(this).children('.author-card').addClass('hovered');
|
|
||||||
|
|
||||||
}, function() {
|
|
||||||
var $this = $(this);
|
|
||||||
|
|
||||||
hoverTimeout = setTimeout(function() {
|
|
||||||
$this.children('.author-card').removeClass('hovered');
|
|
||||||
}, 800);
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
{{/contentFor}}
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
{{!-- Everything inside the #author tags pulls data from the author --}}
|
|
||||||
{{#primary_author}}
|
|
||||||
|
|
||||||
<section class="author-card">
|
|
||||||
{{#if profile_image}}
|
|
||||||
<img class="author-profile-image" src="{{profile_image}}" alt="{{name}}" />
|
|
||||||
{{else}}
|
|
||||||
<span class="avatar-wrapper">{{> "icons/avatar"}}</span>
|
|
||||||
{{/if}}
|
|
||||||
<section class="author-card-content">
|
|
||||||
<h4 class="author-card-name"><a href="{{url}}">{{name}}</a></h4>
|
|
||||||
{{#if bio}}
|
|
||||||
<p>{{bio}}</p>
|
|
||||||
{{else}}
|
|
||||||
<p>Read <a href="{{url}}">more posts</a> by this author.</p>
|
|
||||||
{{/if}}
|
|
||||||
</section>
|
|
||||||
</section>
|
|
||||||
<div class="post-full-footer-right">
|
|
||||||
<a class="author-card-button" href="{{url}}">Read More</a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{{/primary_author}}
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
<div class="floating-header">
|
|
||||||
<div class="floating-header-logo">
|
|
||||||
<a href="{{@blog.url}}">
|
|
||||||
{{#if @blog.icon}}
|
|
||||||
<img src="{{@blog.icon}}" alt="{{@blog.title}} icon" />
|
|
||||||
{{/if}}
|
|
||||||
<span>{{@blog.title}}</span>
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
<span class="floating-header-divider">—</span>
|
|
||||||
<div class="floating-header-title">{{title}}</div>
|
|
||||||
<div class="floating-header-share">
|
|
||||||
<div class="floating-header-share-label">Share this {{> "icons/point"}}</div>
|
|
||||||
<a class="floating-header-share-tw" href="https://twitter.com/share?text={{encode title}}&url={{url absolute="true"}}"
|
|
||||||
onclick="window.open(this.href, 'share-twitter', 'width=550,height=235');return false;">
|
|
||||||
{{> "icons/twitter"}}
|
|
||||||
</a>
|
|
||||||
<a class="floating-header-share-fb" href="https://www.facebook.com/sharer/sharer.php?u={{url absolute="true"}}"
|
|
||||||
onclick="window.open(this.href, 'share-facebook','width=580,height=296');return false;">
|
|
||||||
{{> "icons/facebook"}}
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
<progress id="reading-progress" class="progress" value="0">
|
|
||||||
<div class="progress-container">
|
|
||||||
<span class="progress-bar"></span>
|
|
||||||
</div>
|
|
||||||
</progress>
|
|
||||||
</div>
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd"><path d="M3.513 18.998C4.749 15.504 8.082 13 12 13s7.251 2.504 8.487 5.998C18.47 21.442 15.417 23 12 23s-6.47-1.558-8.487-4.002zM12 12c2.21 0 4-2.79 4-5s-1.79-4-4-4-4 1.79-4 4 1.79 5 4 5z" fill="#FFF"/></g></svg>
|
|
||||||
|
Before Width: | Height: | Size: 308 B |
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><path d="M19 6h5V0h-5c-3.86 0-7 3.14-7 7v3H8v6h4v16h6V16h5l1-6h-6V7c0-.542.458-1 1-1z"/></svg>
|
|
||||||
|
Before Width: | Height: | Size: 155 B |
@@ -1 +0,0 @@
|
|||||||
<svg class="ghost-svg" viewBox="0 0 493 161" xmlns="http://www.w3.org/2000/svg"><title>Ghost Logo</title><g fill="none" fill-rule="evenodd"><path d="M328.52 37.36c-27.017 0-40.97 19.323-40.97 43.16 0 23.837 13.61 43.162 40.97 43.162s40.968-19.325 40.968-43.163c0-23.84-13.954-43.16-40.97-43.16zm20.438 43.237c-.02 15.328-5.126 27.743-20.44 27.743-15.312 0-20.42-12.414-20.435-27.743v-.078c.016-15.33 5.124-27.74 20.437-27.74 15.312 0 20.42 12.41 20.438 27.74v.07zM207.553 5.19c0-1.103.885-2.124 1.984-2.282 0 0 13.577-1.95 14.784-2.115 1.37-.187 3.19.798 3.19 2.744v44.236c3.23-3.105 6.79-5.608 10.66-7.515 3.88-1.906 8.43-2.86 13.66-2.86 4.53 0 8.53.776 12.03 2.33 3.5 1.55 6.43 3.73 8.77 6.533 2.34 2.81 4.12 6.16 5.33 10.05 1.21 3.9 1.82 8.19 1.82 12.87v51.35c0 1.1-.89 2-2 2h-15.95c-1.1 0-2-.9-2-1.99V69.18c0-5.118-1.17-9.08-3.51-11.888-2.35-2.804-5.86-4.207-10.544-4.207-3.45 0-6.677.79-9.69 2.37-3.02 1.58-5.87 3.73-8.564 6.46v58.617c0 1.102-.894 2-2.002 2h-15.94c-1.11 0-2.005-.895-2.005-2V5.188zm244.007 95.327v-43.68h-13.482c-1.1 0-1.742-.87-1.443-1.916l3-10.49c.262-.9.942-1.87 2.308-2.07l9.597-1.35 3.508-23.49c.163-1.09 1.18-2.1 2.274-2.26 0 0 9.192-1.31 10.963-1.58 1.673-.25 3.19.97 3.19 2.81v24.52h17.565c1.106 0 2.002.9 2.002 2.01v11.82c0 1.11-.89 2.01-2.002 2.01h-17.566v43.08c0 6.02 3.623 8.32 7.095 8.32 2.12 0 5.02-1.14 7.19-2.16 1.34-.62 3.41-.16 3.95 1.73l2.45 8.65c.3 1.07-.25 2.37-1.23 2.86 0 0-7.29 4.37-17.06 4.37-13.73 0-22.33-8.08-22.33-23.16zm-44.584-47.74c-7.084 0-12.657 2.476-12.657 8.433 0 7.44 12.01 9.606 20.23 12.64 5.49 2.027 20.24 5.98 20.24 22.016 0 19.48-16 27.807-33.06 27.807-17.06 0-25.4-5.465-25.4-5.465-.96-.527-1.5-1.822-1.2-2.89 0 0 2.1-7.52 2.64-9.386.48-1.68 2.41-2.27 3.64-1.792 4.39 1.712 12.32 4.092 21.28 4.092 9.07 0 13.46-2.803 13.46-8.777 0-7.95-12.26-10.38-20.36-12.967-5.59-1.78-20.36-5.93-20.36-23.566 0-17.373 15.08-25.524 31.2-25.524 13.64 0 23.5 4.69 23.5 4.69 1.01.427 1.58 1.635 1.28 2.698l-2.658 9.357c-.488 1.74-1.898 2.537-3.666 1.957-3.89-1.277-11.2-3.322-18.15-3.322zm-210.313-15.28c-6.695.775-11.472 3.962-14.562 6.93-6.06-4.81-14.49-7.106-23.94-7.106-18.95 0-33.76 9.26-33.76 29.43 0 11.58 4.88 19.56 12.62 24.26-5.75 2.75-9.57 8.59-9.57 14.34 0 9.61 7.5 12.61 7.5 12.61s-13.11 6.44-13.11 19.32c0 16.49 15.01 23.16 33.34 23.16 26.43 0 44.61-11.04 44.61-31.31 0-12.47-9.44-19.36-30.01-20.18-12.2-.48-20.11-.93-22.07-1.58-2.59-.87-3.86-2.96-3.86-5.28 0-2.55 2.08-4.98 5.35-6.65 2.86.516 5.87.768 8.99.768 18.97 0 33.76-9.223 33.76-29.425 0-4.897-.87-9.15-2.46-12.78 2.79-1.506 8.34-2.25 8.34-2.25 1.09-.17 1.975-1.21 1.974-2.31V40.3c0-1.88-1.59-2.955-3.1-2.78zm-49.13 85.132s9.954.38 19.9.84c11.172.52 14.654 2.96 14.654 8.81 0 7.15-9.71 14.1-23.28 14.1-12.88 0-19.314-4.54-19.314-12.08 0-4.33 2.26-9.18 8.04-11.69zm10.66-40.54c-8.978 0-15.983-4.83-15.983-15.35 0-10.53 7.01-15.35 15.983-15.35 8.974 0 15.984 4.81 15.984 15.34 0 10.53-7.002 15.34-15.984 15.34z" fill="#2D3134"/><g opacity=".6" transform="translate(0 36)" fill="#2E3134"><rect x=".209" y="69.017" width="33.643" height="17.014" rx="4"/><rect x="50.672" y="69.017" width="33.622" height="17.014" rx="4"/><rect x=".184" y="34.99" width="84.121" height="17.014" rx="4"/><rect x=".209" y=".964" width="50.469" height="17.013" rx="4"/><rect x="67.494" y=".964" width="16.821" height="17.013" rx="4"/></g></g></svg>
|
|
||||||
|
Before Width: | Height: | Size: 3.3 KiB |
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 14.5s2 3 5 3 5.5-2.463 5.5-5.5S21 6.5 18 6.5c-5 0-7 11-12 11C2.962 17.5.5 15.037.5 12S3 6.5 6 6.5s4.5 3.5 4.5 3.5"/></svg>
|
|
||||||
|
Before Width: | Height: | Size: 196 B |
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" fill="none"><path d="M19.5 8c0 4.144-7.5 15.5-7.5 15.5S4.5 12.144 4.5 8C4.5 3.858 7.857.5 12 .5c4.142 0 7.5 3.358 7.5 7.5z"/><circle cx="12" cy="8" r="3"/></svg>
|
|
||||||
|
Before Width: | Height: | Size: 329 B |
@@ -1,3 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
|
||||||
<path d="M7.5 15.5V4a1.5 1.5 0 1 1 3 0v4.5h2a1 1 0 0 1 1 1h2a1 1 0 0 1 1 1H18a1.5 1.5 0 0 1 1.5 1.5v3.099c0 .929-.13 1.854-.385 2.748L17.5 23.5h-9c-1.5-2-5.417-8.673-5.417-8.673a1.2 1.2 0 0 1 1.76-1.605L7.5 15.5zm6-6v2m-3-3.5v3.5m6-1v2"/>
|
|
||||||
</svg>
|
|
||||||
|
Before Width: | Height: | Size: 311 B |
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><circle cx="6.18" cy="17.82" r="2.18"/><path d="M4 4.44v2.83c7.03 0 12.73 5.7 12.73 12.73h2.83c0-8.59-6.97-15.56-15.56-15.56zm0 5.66v2.83c3.9 0 7.07 3.17 7.07 7.07h2.83c0-5.47-4.43-9.9-9.9-9.9z"/></svg>
|
|
||||||
|
Before Width: | Height: | Size: 263 B |
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><path d="M30.063 7.313c-.813 1.125-1.75 2.125-2.875 2.938v.75c0 1.563-.188 3.125-.688 4.625a15.088 15.088 0 0 1-2.063 4.438c-.875 1.438-2 2.688-3.25 3.813a15.015 15.015 0 0 1-4.625 2.563c-1.813.688-3.75 1-5.75 1-3.25 0-6.188-.875-8.875-2.625.438.063.875.125 1.375.125 2.688 0 5.063-.875 7.188-2.5-1.25 0-2.375-.375-3.375-1.125s-1.688-1.688-2.063-2.875c.438.063.813.125 1.125.125.5 0 1-.063 1.5-.25-1.313-.25-2.438-.938-3.313-1.938a5.673 5.673 0 0 1-1.313-3.688v-.063c.813.438 1.688.688 2.625.688a5.228 5.228 0 0 1-1.875-2c-.5-.875-.688-1.813-.688-2.75 0-1.063.25-2.063.75-2.938 1.438 1.75 3.188 3.188 5.25 4.25s4.313 1.688 6.688 1.813a5.579 5.579 0 0 1 1.5-5.438c1.125-1.125 2.5-1.688 4.125-1.688s3.063.625 4.188 1.813a11.48 11.48 0 0 0 3.688-1.375c-.438 1.375-1.313 2.438-2.563 3.188 1.125-.125 2.188-.438 3.313-.875z"/></svg>
|
|
||||||
|
Before Width: | Height: | Size: 888 B |
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M23.5 11.957c0 6.375-5.163 11.544-11.532 11.544C5.599 23.5.5 18.125.5 11.75.5 5.542 5.37.758 11.505.511l.5-.011C18.374.5 23.5 5.582 23.5 11.957zM11.505.511c-6 6.5-6 14.98 0 22.98m1-22.98c6 6.5 6 14.977 0 22.977M2 17.479h20.063m-19.657-12h19.062m-20.968 6h22.938" stroke="#000" stroke-linejoin="round" stroke-miterlimit="10" fill="none"/></svg>
|
|
||||||
|
Before Width: | Height: | Size: 413 B |
@@ -1,42 +0,0 @@
|
|||||||
<article class="post-card {{post_class}}{{#unless feature_image}} no-image{{/unless}}">
|
|
||||||
{{#if feature_image}}
|
|
||||||
<a class="post-card-image-link" href="{{url}}">
|
|
||||||
<div class="post-card-image" style="background-image: url({{feature_image}})"></div>
|
|
||||||
</a>
|
|
||||||
{{/if}}
|
|
||||||
<div class="post-card-content">
|
|
||||||
<a class="post-card-content-link" href="{{url}}">
|
|
||||||
<header class="post-card-header">
|
|
||||||
{{#if primary_tag}}
|
|
||||||
<span class="post-card-tags">{{primary_tag.name}}</span>
|
|
||||||
{{/if}}
|
|
||||||
<h2 class="post-card-title">{{title}}</h2>
|
|
||||||
</header>
|
|
||||||
<section class="post-card-excerpt">
|
|
||||||
<p>{{excerpt words="33"}}</p>
|
|
||||||
</section>
|
|
||||||
</a>
|
|
||||||
<footer class="post-card-meta">
|
|
||||||
|
|
||||||
<ul class="author-list">
|
|
||||||
{{#foreach authors}}
|
|
||||||
<li class="author-list-item">
|
|
||||||
|
|
||||||
<div class="author-name-tooltip">
|
|
||||||
{{name}}
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{{#if profile_image}}
|
|
||||||
<a href="{{url}}" class="static-avatar"><img class="author-profile-image" src="{{profile_image}}" alt="{{name}}" /></a>
|
|
||||||
{{else}}
|
|
||||||
<a href="{{url}}" class="static-avatar author-profile-image">{{> "icons/avatar"}}</a>
|
|
||||||
{{/if}}
|
|
||||||
</li>
|
|
||||||
{{/foreach}}
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<span class="reading-time">{{reading_time}}</span>
|
|
||||||
|
|
||||||
</footer>
|
|
||||||
</div>
|
|
||||||
</article>
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
<nav class="site-nav">
|
|
||||||
<div class="site-nav-left">
|
|
||||||
{{^is "home"}}
|
|
||||||
{{#if @blog.logo}}
|
|
||||||
<a class="site-nav-logo" href="{{@blog.url}}"><img src="{{@blog.logo}}" alt="{{@blog.title}}" /></a>
|
|
||||||
{{else}}
|
|
||||||
<a class="site-nav-logo" href="{{@blog.url}}">{{@blog.title}}</a>
|
|
||||||
{{/if}}
|
|
||||||
{{/is}}
|
|
||||||
{{#if @blog.navigation}}
|
|
||||||
{{navigation}}
|
|
||||||
{{/if}}
|
|
||||||
</div>
|
|
||||||
<div class="site-nav-right">
|
|
||||||
<div class="social-links">
|
|
||||||
{{#if @blog.facebook}}
|
|
||||||
<a class="social-link social-link-fb" href="{{facebook_url @blog.facebook}}" target="_blank" rel="noopener">{{> "icons/facebook"}}</a>
|
|
||||||
{{/if}}
|
|
||||||
{{#if @blog.twitter}}
|
|
||||||
<a class="social-link social-link-tw" href="{{twitter_url @blog.twitter}}" target="_blank" rel="noopener">{{> "icons/twitter"}}</a>
|
|
||||||
{{/if}}
|
|
||||||
</div>
|
|
||||||
{{#if @labs.subscribers}}
|
|
||||||
<a class="subscribe-button" href="#subscribe">Subscribe</a>
|
|
||||||
{{else}}
|
|
||||||
<a class="rss-button" href="https://feedly.com/i/subscription/feed/{{@blog.url}}/rss/" target="_blank" rel="noopener">{{> "icons/rss"}}</a>
|
|
||||||
{{/if}}
|
|
||||||
</div>
|
|
||||||
</nav>
|
|
||||||
@@ -1,198 +0,0 @@
|
|||||||
{{!< default}}
|
|
||||||
|
|
||||||
{{!-- The tag above means: insert everything in this file
|
|
||||||
into the {body} of the default.hbs template --}}
|
|
||||||
|
|
||||||
<header class="site-header outer">
|
|
||||||
<div class="inner">
|
|
||||||
{{> "site-nav"}}
|
|
||||||
</div>
|
|
||||||
</header>
|
|
||||||
|
|
||||||
{{!-- Everything inside the #post tags pulls data from the post --}}
|
|
||||||
{{#post}}
|
|
||||||
|
|
||||||
<main id="site-main" class="site-main outer">
|
|
||||||
<div class="inner">
|
|
||||||
|
|
||||||
<article class="post-full {{post_class}} {{#unless feature_image}}no-image{{/unless}}">
|
|
||||||
|
|
||||||
<header class="post-full-header">
|
|
||||||
<section class="post-full-meta">
|
|
||||||
<time class="post-full-meta-date" datetime="{{date format="YYYY-MM-DD"}}">{{date format="D MMMM YYYY"}}</time>
|
|
||||||
{{#primary_tag}}
|
|
||||||
<span class="date-divider">/</span> <a href="{{url}}">{{name}}</a>
|
|
||||||
{{/primary_tag}}
|
|
||||||
</section>
|
|
||||||
<h1 class="post-full-title">{{title}}</h1>
|
|
||||||
</header>
|
|
||||||
|
|
||||||
{{#if feature_image}}
|
|
||||||
<figure class="post-full-image" style="background-image: url({{feature_image}})">
|
|
||||||
</figure>
|
|
||||||
{{/if}}
|
|
||||||
|
|
||||||
<section class="post-full-content">
|
|
||||||
<div class="post-content">
|
|
||||||
{{content}}
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
{{!-- Email subscribe form at the bottom of the page --}}
|
|
||||||
{{#if @labs.subscribers}}
|
|
||||||
<section class="subscribe-form">
|
|
||||||
<h3 class="subscribe-form-title">Subscribe to {{@blog.title}}</h3>
|
|
||||||
<p>Get the latest posts delivered right to your inbox</p>
|
|
||||||
{{subscribe_form placeholder="youremail@example.com"}}
|
|
||||||
</section>
|
|
||||||
{{/if}}
|
|
||||||
|
|
||||||
<footer class="post-full-footer">
|
|
||||||
|
|
||||||
{{!-- There are two options for how we display the byline/author-info.
|
|
||||||
If the post has more than one author, we load a specific template
|
|
||||||
from includes/byline-multiple.hbs, otherwise, we just use the
|
|
||||||
default byline. --}}
|
|
||||||
|
|
||||||
{{#has author="count:>1"}}
|
|
||||||
{{> "byline-multiple"}}
|
|
||||||
{{else}}
|
|
||||||
{{> "byline-single"}}
|
|
||||||
{{/has}}
|
|
||||||
|
|
||||||
</footer>
|
|
||||||
|
|
||||||
{{!--
|
|
||||||
<section class="post-full-comments">
|
|
||||||
If you want to embed comments, this is a good place to do it!
|
|
||||||
</section>
|
|
||||||
--}}
|
|
||||||
|
|
||||||
</article>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</main>
|
|
||||||
|
|
||||||
{{!-- Links to Previous/Next posts --}}
|
|
||||||
<aside class="read-next outer">
|
|
||||||
<div class="inner">
|
|
||||||
<div class="read-next-feed">
|
|
||||||
{{#if primary_tag}}
|
|
||||||
{{#get "posts" filter="tags:{{primary_tag.slug}}+id:-{{id}}" limit="3" as |related_posts|}}
|
|
||||||
{{#if related_posts}}
|
|
||||||
<article class="read-next-card"
|
|
||||||
{{#if ../primary_tag.feature_image}}
|
|
||||||
style="background-image: url({{../primary_tag.feature_image}})"
|
|
||||||
{{else}}
|
|
||||||
{{#if @blog.cover_image}}
|
|
||||||
style="background-image: url({{@blog.cover_image}})"{{/if}}
|
|
||||||
{{/if}}
|
|
||||||
>
|
|
||||||
<header class="read-next-card-header">
|
|
||||||
<small class="read-next-card-header-sitetitle">— {{@blog.title}} —</small>
|
|
||||||
{{#../primary_tag}}
|
|
||||||
<h3 class="read-next-card-header-title"><a href="{{url}}">{{name}}</a></h3>
|
|
||||||
{{/../primary_tag}}
|
|
||||||
</header>
|
|
||||||
<div class="read-next-divider">{{> "icons/infinity"}}</div>
|
|
||||||
<div class="read-next-card-content">
|
|
||||||
<ul>
|
|
||||||
{{#foreach related_posts}}
|
|
||||||
<li><a href="{{url}}">{{title}}</a></li>
|
|
||||||
{{/foreach}}
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<footer class="read-next-card-footer">
|
|
||||||
<a href="{{#../primary_tag}}{{url}}{{/../primary_tag}}">{{plural meta.pagination.total empty='No posts' singular='% post' plural='See all % posts'}} →</a>
|
|
||||||
</footer>
|
|
||||||
</article>
|
|
||||||
{{/if}}
|
|
||||||
{{/get}}
|
|
||||||
{{/if}}
|
|
||||||
|
|
||||||
{{!-- If there's a next post, display it using the same markup included from - partials/post-card.hbs --}}
|
|
||||||
{{#next_post}}
|
|
||||||
{{> "post-card"}}
|
|
||||||
{{/next_post}}
|
|
||||||
|
|
||||||
{{!-- If there's a previous post, display it using the same markup included from - partials/post-card.hbs --}}
|
|
||||||
{{#prev_post}}
|
|
||||||
{{> "post-card"}}
|
|
||||||
{{/prev_post}}
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</aside>
|
|
||||||
|
|
||||||
{{!-- Floating header which appears on-scroll, included from includes/floating-header.hbs --}}
|
|
||||||
{{> floating-header}}
|
|
||||||
|
|
||||||
{{/post}}
|
|
||||||
|
|
||||||
{{!-- The #contentFor helper here will send everything inside it up to the matching #block helper found in default.hbs --}}
|
|
||||||
{{#contentFor "scripts"}}
|
|
||||||
<script>
|
|
||||||
|
|
||||||
// NOTE: Scroll performance is poor in Safari
|
|
||||||
// - this appears to be due to the events firing much more slowly in Safari.
|
|
||||||
// Dropping the scroll event and using only a raf loop results in smoother
|
|
||||||
// scrolling but continuous processing even when not scrolling
|
|
||||||
$(document).ready(function () {
|
|
||||||
// Start fitVids
|
|
||||||
var $postContent = $(".post-full-content");
|
|
||||||
$postContent.fitVids();
|
|
||||||
// End fitVids
|
|
||||||
|
|
||||||
var progressBar = document.querySelector('#reading-progress');
|
|
||||||
var header = document.querySelector('.floating-header');
|
|
||||||
var title = document.querySelector('.post-full-title');
|
|
||||||
|
|
||||||
var lastScrollY = window.scrollY;
|
|
||||||
var lastWindowHeight = window.innerHeight;
|
|
||||||
var lastDocumentHeight = $(document).height();
|
|
||||||
var ticking = false;
|
|
||||||
|
|
||||||
function onScroll() {
|
|
||||||
lastScrollY = window.scrollY;
|
|
||||||
requestTick();
|
|
||||||
}
|
|
||||||
|
|
||||||
function onResize() {
|
|
||||||
lastWindowHeight = window.innerHeight;
|
|
||||||
lastDocumentHeight = $(document).height();
|
|
||||||
requestTick();
|
|
||||||
}
|
|
||||||
|
|
||||||
function requestTick() {
|
|
||||||
if (!ticking) {
|
|
||||||
requestAnimationFrame(update);
|
|
||||||
}
|
|
||||||
ticking = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
function update() {
|
|
||||||
var trigger = title.getBoundingClientRect().top + window.scrollY;
|
|
||||||
var triggerOffset = title.offsetHeight + 35;
|
|
||||||
var progressMax = lastDocumentHeight - lastWindowHeight;
|
|
||||||
|
|
||||||
// show/hide floating header
|
|
||||||
if (lastScrollY >= trigger + triggerOffset) {
|
|
||||||
header.classList.add('floating-active');
|
|
||||||
} else {
|
|
||||||
header.classList.remove('floating-active');
|
|
||||||
}
|
|
||||||
|
|
||||||
progressBar.setAttribute('max', progressMax);
|
|
||||||
progressBar.setAttribute('value', lastScrollY);
|
|
||||||
|
|
||||||
ticking = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
window.addEventListener('scroll', onScroll, {passive: true});
|
|
||||||
window.addEventListener('resize', onResize, false);
|
|
||||||
|
|
||||||
update();
|
|
||||||
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
{{/contentFor}}
|
|
||||||
@@ -1,33 +0,0 @@
|
|||||||
{{!< default}}
|
|
||||||
{{!-- The tag above means - insert everything in this file into the {body} of the default.hbs template --}}
|
|
||||||
|
|
||||||
{{!-- The big featured header, it uses blog cover image as a BG if available --}}
|
|
||||||
{{#tag}}
|
|
||||||
<header class="site-header outer {{#if feature_image}}" style="background-image: url({{feature_image}}){{else}}no-cover{{/if}}">
|
|
||||||
<div class="inner">
|
|
||||||
{{> "site-nav"}}
|
|
||||||
<div class="site-header-content">
|
|
||||||
<h1 class="site-title">{{name}}</h1>
|
|
||||||
<h2 class="site-description">
|
|
||||||
{{#if description}}
|
|
||||||
{{description}}
|
|
||||||
{{else}}
|
|
||||||
A collection of {{plural ../pagination.total empty='posts' singular='% post' plural='% posts'}}
|
|
||||||
{{/if}}
|
|
||||||
</h2>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</header>
|
|
||||||
{{/tag}}
|
|
||||||
|
|
||||||
{{!-- The main content area --}}
|
|
||||||
<main id="site-main" class="site-main outer">
|
|
||||||
<div class="inner">
|
|
||||||
<div class="post-feed">
|
|
||||||
{{#foreach posts}}
|
|
||||||
{{!-- The tag below includes the markup for each post - partials/post-card.hbs --}}
|
|
||||||
{{> "post-card"}}
|
|
||||||
{{/foreach}}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</main>
|
|
||||||
@@ -21,6 +21,7 @@ SET time_zone = "+00:00";
|
|||||||
--
|
--
|
||||||
-- Database: `ghost`
|
-- Database: `ghost`
|
||||||
--
|
--
|
||||||
|
DROP DATABASE `ghost`;
|
||||||
CREATE DATABASE IF NOT EXISTS `ghost` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
|
CREATE DATABASE IF NOT EXISTS `ghost` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
|
||||||
USE `ghost`;
|
USE `ghost`;
|
||||||
|
|
||||||
|
|||||||