Compare commits

...

260 Commits
1.0.1 ... 2.3.1

Author SHA1 Message Date
fd56128f9b Upgrading Casper to 2.3.1 2018-05-29 15:40:50 +01:00
cd3b470c18 Fix for missing default avatar and firefox footer misalignment (#458) 2018-05-29 10:38:27 +02:00
f3b44a7411 Upgrading Casper to 2.3.0 2018-05-22 20:17:56 +01:00
b83917060f Applying styles for Koenig content (#455)
refs https://github.com/TryGhost/Ghost/issues/9311
- move `.kg-card-markdown` styles and add deprecation notice
- add support for new `.kg-post` wrapper
- add support for `.kg-image` and `.kg-image-wide/full` image variants
- add support for image captions
2018-05-22 19:09:58 +01:00
4aaedf69d2 Running CSSComb 2018-05-21 17:36:08 +02:00
03ac0d91b8 Upgrading Casper to 2.2.1 2018-04-24 10:53:15 +08:00
b55d5e2b32 Remove unnecessary role attributes from main element
Source: https://validator.w3.org/nu/#textarea
2018-04-17 22:19:05 +02:00
4fe2eac739 Additional comments 2018-04-12 10:05:53 +02:00
6e3399366d Small refactor of multi-authors 2018-04-12 10:05:40 +02:00
98e9c12018 Split out different byline templates into separate files 2018-04-11 11:05:25 +02:00
986a954f33 Upgrading Casper to 2.2.0
no issue
2018-04-10 23:27:53 +02:00
636882bce4 Fix mobile display bug on smaller screens 2018-04-10 20:34:35 +02:00
79e113226c Multiple authors in Casper (#448) 2018-04-10 20:19:29 +02:00
8e865b797b Maybe fix it properly this time instead of completely failing 2018-04-10 15:29:09 +02:00
a655b59e69 Fix link target size 2018-04-10 15:27:01 +02:00
b078dcb86e Updated hover animations 2018-04-10 15:21:25 +02:00
d5002f2c51 🐛 Fixed infinitescroll when a paged url is loaded directly (#447)
closes #445
- added an fn to sanitize the pathname, that might include a pagination url
- fixed an issue, where the request would still be made if the current page is bigger than max pages
- added comments
2018-04-10 10:04:43 +01:00
41bcbb7157 💨 Infinite scroll perf improvements
no issue
- swap jQuery HTML parsing and insertion for pure DOM
- remove fade animation
- increase buffer by 100px so next page request happens sooner
2018-04-09 11:03:48 +01:00
452776939c Added yarn.lock and updated README for new yarn scripts
no issue
2018-04-09 16:19:05 +08:00
57c31ddacb Add HTML lang head tag (#429)
Refs #286
2018-04-06 20:49:42 +02:00
21088b1d38 Slack -> Forum
- replacing references to slack with forum
2018-04-02 16:35:21 +01:00
16f283e675 Upgrading Casper to 2.1.10 2018-03-16 15:53:45 +07:00
942054ba0d Revert "Upgrading Casper to 2.2.0"
This reverts commit 782aba3991.
2018-03-16 15:52:56 +07:00
782aba3991 Upgrading Casper to 2.2.0 2018-03-16 09:50:09 +07:00
9df85fbbe5 CSS built and comb
no issue
2018-02-27 11:48:17 +07:00
1e10549ee2 🐛Fixed render issue with code blocks in lists (#436)
Closes #415

* Add max-width to ul & ol tags
2018-02-27 11:43:39 +07:00
a6eb6848de Removed obsolete gulp-nodemon (#435)
Closes #420

* Remove gulp-nodemon from dev dependencies
* Remove required dependency from gulpfile
2018-02-27 11:18:32 +07:00
6788302f62 🐛Removed unnecessary slash from Feedly URL (#437)
closes #434.
2018-02-27 11:11:29 +07:00
67e55abfed Upgrading Casper to 2.1.9 2018-01-23 16:19:58 +00:00
bfaae0f7ba 🐛 Fixed Feedly URL and protocol (#418)
no issue

* Changed Feedly URL to HTTPS protocol
* Updated Feedly URL pattern
2018-01-23 10:30:03 +07:00
edfafffd32 Upgrading Casper to 2.1.8 2018-01-03 13:47:12 +00:00
7798bf115f 2018 2018-01-02 21:48:53 +00:00
9395846fdf Upgrading Casper to 2.1.7 2017-11-21 21:26:49 +08:00
99fad4cbc4 Fix colors in code blocks
Closes #407
The font color should be inherited to avoid "invisible" text.

* fix conflicts with upstream branch
2017-11-21 17:50:54 +08:00
990f712209 💅 CSS comb and built
no issue
2017-11-20 13:42:32 +08:00
4ff4b4c7f8 Removed double semicolons (#400)
no issue
2017-11-20 13:38:20 +08:00
de05d90fe9 Upgrading Casper to 2.1.6 2017-10-26 19:03:21 +07:00
978e54403c 🐛 Do not exclude assets/css from built zips
no issue

https://github.com/TryGhost/Casper/pull/403 added optimisations for reducing size of zip files but unfortunately it also stripped out `assets/css` which means that it's no longer possible to download the theme from the admin panel and use it for development.

- remove `assets/css` from the ignored files in the `zip` task
2017-10-24 12:08:26 +01:00
73bd9c630e Upgrading Casper to 2.1.5 2017-10-24 16:10:48 +07:00
9597a28320 🎨 Optimized gulp zip file generation (#403)
no issue

- Optimised the `gulp zip` task, so the zip file doesn't include the `assets/css` (`built` folder is used for CSS) and the `dist` folder (is used to output the zip file)
2017-10-23 16:52:52 +07:00
461639886e Upgrading Casper to 2.1.4 2017-10-03 18:20:14 +07:00
7592ad182b 🔒 Added rel="noopener" to all target="_blank" links (#398)
closes #394
- closes potential phishing avenues by preventing external sites from changing the blogs url in the background after opening
- see https://mathiasbynens.github.io/rel-noopener/ for more info
2017-10-03 16:42:08 +07:00
97a522a037 Fix permissions on certain files 2017-10-02 13:29:23 +01:00
25f12d760b Fix typo in default.hbs (#393) 2017-09-29 08:23:39 -04:00
4f78d99112 Upgrading Casper to 2.1.3 2017-09-26 14:38:05 +01:00
f5b7b45f2e Remove /dist/casper.zip
no issue

With https://github.com/TryGhost/Casper/pull/384 the directory `/dist` was created and includes a `casper.zip` file. The PR, that got merged after that (https://github.com/TryGhost/Casper/pull/374) actually implemented the creation of this, but also added the directory to `.gitignore` so it wouldn't be pushed to the repo.
2017-09-19 12:01:17 +07:00
d34ff1d32b Add a Gulp task to create the zip (#374) 2017-09-18 09:37:00 -07:00
73a1ab52da Add the same .editorconfig as from the Ghost repository (#384) 2017-09-18 09:35:53 -07:00
5ec77dfb31 Upgrading Casper to 2.1.2 2017-09-12 18:34:23 +07:00
269d2b5787 Fix border radius bug on featured posts 2017-09-07 09:34:44 -07:00
d1d0bca2d8 Upgrading Casper to 2.1.1 2017-09-07 14:33:38 +02:00
d92dda3523 Wrapped primary-tag get helper with if (#383)
closes #382

- If there is no primary tag, the filter will be invalid syntax
- This wraps the if helper and gets rid of errors in the logs
2017-09-07 14:31:42 +02:00
ca325285bf Upgrading Casper to 2.1.0 2017-08-29 13:35:37 +01:00
aee9f69bb0 Refactor headings, quotes and margins, mobile improvements
A few people commented how pull-quote styling is odd for blockquotes. I agree. This reverts casper to use more traditional blockquote styling, but maintains the special pullquote styling now over on the H5 element. So if you want nice/wide/centered blue text, use an H5.

- Closes https://github.com/TryGhost/Casper/issues/364
- Closes https://github.com/TryGhost/Casper/issues/368
2017-08-25 16:31:10 -04:00
a7d5c885bd Upgrading Casper to 2.0.6 2017-08-22 12:38:02 +01:00
9bc5c92628 Fix z-index bug with header author profile image
no issue
- add z-index to `.site-header-content .author-profile-image` so it isn't covered by the header overlay
2017-08-22 12:05:09 +01:00
0f3651c23f 🎨 Do not stretch author profile image (#365)
- add `object-fit: cover` to `.author-profile-image` to prevent non-square images being stretched/squashed
2017-08-22 11:56:38 +01:00
d739bb52a4 Fixed z-index bug with header social links on author page (#370)
no issue
- add z-index to `.author-bio` and `.author-meta` so they aren't covered by the header image overlay
2017-08-22 11:49:49 +01:00
8d17e9a452 Upgrading Casper to 2.0.5 2017-08-17 17:47:36 +01:00
e4e6bb9c5a Fixed z-index bug with header title/description
closes #363
- add z-index to `.site-title` and `.site-description` so they aren't covered by the header overlay
2017-08-17 12:35:37 +01:00
d2375a3917 Sticky footer
Closes https://github.com/TryGhost/Casper/issues/354, Closes https://github.com/TryGhost/Casper/issues/362
2017-08-16 11:57:39 +01:00
577b92811c Add progress bar styling for Firefox (#360)
I alter this color to reddish for my own site, so it stood out much more easily than the Casper blue not matching the Firefox default. Autoprefixer isn't handling this one. Also, I tried adding this rule, comma separated, to the immediately above webkit rule... but it doesn't actually work when I do that, for some reason. Sorry for the redundancy!

https://developer.mozilla.org/en-US/docs/Web/CSS/::-moz-progress-bar
2017-08-16 11:43:58 +01:00
2f385ba5f1 Upgrading Casper to 2.0.4 2017-08-15 18:01:02 +01:00
b024b544e4 Fixed janky webkit border-radius bug
Closes https://github.com/TryGhost/Casper/issues/352
2017-08-14 11:22:27 +01:00
9caeb2a2e7 Fixed wide blockquote bug when used first in post
Closes https://github.com/TryGhost/Casper/issues/355
2017-08-14 11:11:12 +01:00
12d139aa7d Fixed z-index bug on index post-feed
Closes https://github.com/TryGhost/Casper/issues/349, closes https://github.com/TryGhost/Casper/pull/350
2017-08-14 11:03:28 +01:00
690e1bad1f Added issue template 2017-08-12 13:17:42 -04:00
c63804006d Upgrading Casper to 2.0.3 2017-08-10 16:13:08 +02:00
65d0104224 ⬆️ Bump Ghost engine
no issue

- The minimum Ghost version is now 1.2.0
- In 1.2.0 we introduced the primary tag feature
- See https://dev.ghost.org/primary-tags
2017-08-10 16:10:55 +02:00
ba10cb1516 🎨 Update to use Primary Tag syntax (#337)
refs TryGhost/Ghost#8668

- In Ghost 1.2.0 we introduce primary_tag as a calculated property
- Casper can be updated to use this for clarity
2017-08-10 16:10:17 +02:00
d7ca6fd2f6 🎨 Added specific 404 template & simplified fallback (#348)
no issue

- The 404 Error template can have a little more fancy logic than other templates
- Therefore, we make the 404 template have the get helper
- The fallback general error template has no use of the get helper
- This helps ensure that errors can be rendered
2017-08-10 14:34:23 +01:00
10f11bb14f Update image caption margins 2017-08-09 14:10:28 +01:00
7d4f93bf23 Added support for basic image captions
See https://github.com/TryGhost/Ghost/issues/8859
2017-08-09 13:26:08 +01:00
11f61782ad Keep logo vertically centred when there's no navigation
Closes https://github.com/TryGhost/Casper/issues/338
2017-08-08 16:23:18 +01:00
fd108b1b40 Corrected navigation z-index bug
Closes https://github.com/TryGhost/Casper/issues/345
2017-08-08 16:14:06 +01:00
33005666ca Set overflow auto on tables
Closes https://github.com/TryGhost/Casper/issues/328

This applies mobile styles everywhere, which is not really ideal tbh - but covers all cases.
2017-08-08 15:58:54 +01:00
1767ca59b8 Added CSScomb and combed 💇🏻 2017-08-02 12:41:14 +04:00
5cafa756ef Upgrading Casper to 2.0.2 2017-08-01 10:32:11 +04:00
08e5cbe021 Prevent floating navigation from blocking the text header in fragmented urls (#334)
Prevent floating header from covering the header when a fragment identifier enabled URL is opened.
2017-08-01 09:50:32 +04:00
615d8a9001 Fixed broken author links due to z-index issue
Closes https://github.com/TryGhost/Casper/issues/333
2017-07-31 19:44:07 +04:00
f08f07fd7e Fixed Firefox responsive video bug
Closes https://github.com/TryGhost/Casper/issues/330

As usual Firefox is the bane of fucking everything and despite IE7 calling multiple times wanting its rendering back, here we are. Responsive video embeds insider a flexbox element do not work in Firefox and require an additional (very specific) wrapping div. I've adjusted the Fitvids.js script here to include that div in its injection along with the requisite styles. It's a horrible hack. Spent 2 hours trying to find another way but I cant.
2017-07-31 19:38:16 +04:00
2565c16916 Fix minor visual bug with clipped descenders in floating header 2017-07-31 17:14:00 +04:00
4b66223bb3 🐛 Only show related posts widget if there are posts available (#332)
no issue

- use a block param and if combo to add a guard to the get helper
- this ensures that the widget is only displayed if there is content available to display
2017-07-28 19:10:54 +04:00
35e91ecee9 Better support for iframes 2017-07-27 13:12:04 +04:00
2b2d6e6d14 Upgrading Casper to 2.0.1 2017-07-27 11:48:43 +04:00
cd4e0e03f5 Better support for the video element 2017-07-27 11:15:19 +04:00
3993cbdcfa Update disqus embed to use {{comment_id}}
refs TryGhost/Ghost#8760

- disqus code must use `{{comment_id}}` instead of `{{id}}` from 1.0.0 onwards.
2017-07-26 23:01:14 +04:00
6c5d6af6d0 Fix post images overflowing viewport on mobile
See #322
2017-07-20 17:27:02 +04:00
9aa6ff1716 Merge pull request #327 from AileenCGN/1.0.0/infinite-scroll-fix
🎣  Infinite scroll: no API request on last page
2017-07-11 09:26:21 +01:00
551aeb3ca5 Merge pull request #326 from AileenCGN/1.0.0-dev/delete-unused-share-partial
🔥  Delete unused partial `share.hbs`
2017-07-11 09:01:16 +01:00
8690450eae 🎣 Infinite scroll: no API request on last page
no issue

Brings back a little safety guard: when the current page is also the last page, don't make an API request to the server.
2017-07-11 12:32:58 +07:00
2fdfc5285d 🔥 Delete unused partial share.hbs
no issue

Partial is not used in Casper!
2017-07-11 09:49:53 +07:00
0f9410fb3d 💄 refactor infinite scroll (#325)
closes #321, closes #323
- use `requestAnimationFrame` and related techniques to minimise scroll processing
- add an `isLoading` guard to ensure we don't try to process anything until the next page has been loaded+inserted
- check for a 404 as an indication we've loaded as many pages as possible at which point the scroll behaviour is removed
- sanitize `window.location.pathname` to remove hash params and any double-slashes that may result
- add a 100px buffer from the bottom of the screen so that it's not necessary to exactly hit the bottom before infinite loading is triggered
2017-07-10 19:53:42 +07:00
d3a9af0666 Remove infinitescroll in single page (#319)
* Remove infinitescroll in single page

* Update infinitescroll.js
2017-06-27 18:03:51 +07:00
96ffcdceed 😒😒😒😒😒😒😒😒 2017-06-27 11:30:11 +02:00
aa80667232 Fix small images in content + minor typography improvements
Closes #320
2017-06-27 11:28:36 +02:00
0914d43a86 💄 Infinite scroll (#316)
* 💄  Infinite scroll

closes #314

Adds infinite scroll logic to Casper 2.0

* use jquery min and not slim
2017-06-21 13:10:09 +01:00
d6d9711b9d ⛓ Fix broken tag link on post.hbs (#315)
no issue

Top link for tag was missing a `/`.
2017-06-20 08:55:16 +01:00
2ca409032a Full responsive table styles
- This took 5 hours
- FUUUUUU
2017-06-19 23:03:56 +01:00
902b6dcdbc Clean up trailing slashes
See https://github.com/TryGhost/Ghost/issues/8569
2017-06-19 14:54:03 +01:00
6f441794e4 Fix readme typo 2017-06-19 14:38:07 +01:00
c97defd40a Refactor post.hbs JS 2017-06-19 00:11:32 +01:00
397a096949 Rejig asset compilation destination
Avoid using "public" because it's a reserved word by the asset helper
2017-06-16 13:23:03 +01:00
4b6905f175 Mobile support 📱 2017-06-16 13:16:22 +01:00
535ead65e7 DOCS 2017-06-16 10:44:06 +01:00
b7a788f973 Clean up build tasks 2017-06-16 10:13:38 +01:00
1214676bd5 CSS Comb 💇🏻 2017-06-16 09:44:12 +01:00
0791b0fdb7 Organise CSS 2017-06-16 09:17:11 +01:00
67f27e2add New subscribe overlay 2017-06-15 15:03:19 +01:00
9f7c0e30e2 Scroll progress bar 2017-06-14 12:16:16 +01:00
eb84edae6d Fix all the fucking bugs that I created yesterday 2017-06-14 10:41:30 +01:00
834d14b204 Allow linebreaks in bio 2017-06-14 10:29:17 +01:00
19a8b85aac Minor cleanup 2017-06-13 19:07:26 +01:00
eeb8b248ca Refactor site navigation 2017-06-13 19:02:22 +01:00
7f4d581caf Restyle read-next card 2017-06-13 18:51:08 +01:00
655c35b53c New error template and author template 2017-06-13 13:48:06 +01:00
55f35da8e9 Whatever pass I lost count 2017-06-12 10:01:00 +01:00
d55446f2ca Next pass 2.0 2017-06-08 09:19:22 +02:00
938eaaf7a6 Third pass 2.0 2017-06-05 12:19:29 +01:00
bc9e5a0b2e Second pass 2.0 2017-05-31 19:09:50 +01:00
ad9cb81a06 Many tweaks 2017-05-16 10:26:08 +01:00
eda0ec4db2 First pass 2.0 design 2017-05-15 21:03:47 +01:00
26a25208e1 Upgrading Casper to 1.3.6 2017-03-01 13:47:57 +01:00
805925528c move font above css include (#279) 2017-02-24 12:23:02 +07:00
68e48cfb04 Remove role attributes intended for tabbed navigation
Closes #285
2017-02-23 13:25:47 +07:00
c578765491 Upgrading Casper to 1.3.5 2017-01-12 12:41:55 +01:00
ba5d559d8c 2017 2017-01-04 10:53:34 +00:00
b06c57f1e1 Upgrading Casper to 1.3.4 2016-10-24 16:51:12 +01:00
99ff118174 Merge pull request #274 from eibt/patch-1
Use protocol-relative URL for jQuery script
2016-10-24 14:35:22 +01:00
054cd87653 No margin-bottom for last p inside li tags (#262)
Fixes #241.
2016-10-24 20:17:30 +07:00
5060c945e6 Fixed page title and description being visible before fading in (#268) 2016-10-24 20:15:01 +07:00
d07d6dee09 🐛 Fix .post-title (#273)
no issue

fixes the post-title font-size again, as it didn't work with two body:notstatements.
2016-10-24 20:11:49 +07:00
0d8228ff05 Use protocol-relative URL for jQuery script
Use protocol-relative URL in the script element that includes jQuery to improve availability and consistency as it's being used for Google Fonts too.
2016-10-13 17:03:11 -06:00
27270d3de3 Upgrading Casper to 1.3.3 2016-10-07 16:08:38 +01:00
09476487f0 🐛 Fixing package.json engines & repo URL
no issue

- semver caret ranges don't apply pre-1.0.0, therefore we need to use a more explicit range
- repo URL should be a valid url
2016-10-07 16:05:10 +01:00
d2d796241b 🎨 Removing homepage from package.json
no issue

- this is not going to be a required field, and for Casper is the same as the repo
2016-10-07 15:56:54 +01:00
c1b77b74cb Remove old body classes (#272)
refs TryGhost/Ghost#2597

Make Casper work without old body classes `.archive-template`, `.page` and use `.page-template` *only* for pages, as `.post-template` will not be available for pages anymore.
2016-10-07 14:02:00 +02:00
95cec988f5 Upgrading Casper to 1.3.2 2016-09-27 16:48:51 +01:00
12e897d374 📚 Expand package.json ready for gpm
no issue

- Our new marketplace (gpm) will make heavy use of package.json files
- Full details, spec, and validator are coming soon. In the meantime here's the basics:
   - `name` must be lowercase and hypenated
   - `version` must be semver compliant
   - `homepage` should be a valid URL (GitHub URL is ok)
   - `demo` should be a working Ghost install that uses your theme
   - `engines` should contain a Ghost key indicating which version of Ghost the theme is compatible with
   - `license` is required, we recommend `MIT`
   - `screenshots` should provide a relative path or absolute URL to both `desktop` & `mobile` screenshots
   - `author` should be an object. It must contain an email, and can also include a name and url.
   - the `gpm` object should:
	- indicate the package type (`theme` for now, later `app` or `adapter` etc)
   	- list out at most 2 marketplace categories for inclusion. Categories can be found in https://gist.github.com/ErisDS/d0674f57eaa087c9f92cbfc8e984d2d6 but are subject to change.
   - other fields can be included as per a normal npm package, we recommend including the repostory & keywords with `ghost` & `theme` listed.
2016-09-27 16:43:44 +01:00
d6998b3ba5 Add screenshot assets 2016-09-27 14:27:58 +02:00
5c51195ca6 Upgrading Casper to 1.3.1 2016-07-26 13:01:26 +01:00
234be3c976 Merge pull request #254 from sergioaugrod/fix-invalid-css-property
Fix invalid css property declaration
2016-06-26 12:26:43 -06:00
146f2ecaab Fix invalid css property declaration 2016-06-26 15:21:32 -03:00
5e679999e7 Merge pull request #251 from max-nova/css-ToC-fixes
Fixing Table of Contents in CSS
2016-05-22 10:34:35 -06:00
4614c6a162 Fixing Table of Contents in CSS 2016-05-22 12:31:02 -04:00
531eacc180 Merge pull request #248 from ErisDS/hannahs-fixes
Minor consistency fixups
2016-05-08 17:21:17 +02:00
8778126d8f Minor consistency fixups
- use a `{{#tag}}{{/tag}}` block for tag in tag.hbs
- use two braces consistently for `{{title}}`
- use double quotes consistently for attributes (quote switching is unnecessary)
2016-05-08 17:09:29 +02:00
09b4830398 Add new subscribers form + visual fixes
- New opt-in form for subscribers features
- Bumped version to 1.3.0
- Resolved author image alignment, closes #238
2016-05-08 10:50:20 +02:00
c1a3840cbe Upgrading Casper to 1.2.8 2016-02-03 09:33:34 +00:00
7f400e46a0 Merge pull request #232 from FongWan/screen.css-normalize-v3.0.3-patch
Update normalize.css to v3.0.3 on 'screen.css'
2016-01-23 11:06:37 +02:00
84148db8eb Merge pull request #233 from FongWan/default.hbs-jquery-v1.12.0-patch
Update JQuery to v1.12.0 on 'default.hbs'
2016-01-23 11:05:45 +02:00
fd7967cb2f Update JQuery to v1.12.0 on 'default.hbs'
Changelog: https://blog.jquery.com/2016/01/08/jquery-2-2-and-1-12-released/
2016-01-22 12:44:49 -04:00
591d1fb782 Update normalize.css to v3.0.3 on 'screen.css' 2016-01-22 12:42:31 -04:00
a5591f03ce Merge pull request #228 from jegtnes/patch-1
Disable ligatures in code blocks
2016-01-21 08:31:53 +02:00
f0ce0d8718 Disable ligatures in code blocks
I recently created a new Ghost blog and a colleague pointed out that ligatures for code blocks looked a bit off. They weren't enabled in Firefox by default, but in Chrome (possibly different browser defaults?). This PR standardises it and removes any ligatures from `<code>` and `<tt>` blocks.
2016-01-20 22:31:24 +00:00
de91a4006b Upgrading Casper to 1.2.7 2016-01-12 09:58:58 +00:00
1c3803352f Update LICENSE 2016-01-05 11:09:15 +02:00
7d9c5ea1fc Update README.md 2016-01-05 11:09:02 +02:00
1196a13aef Merge pull request #208 from emersonkeenan/master
Fix embedded gist indentation
2016-01-05 10:56:05 +02:00
1c092c7be0 Upgrading Casper to 1.2.6 2015-11-26 09:31:48 +08:00
834f0bc4ff Merge pull request #222 from ErisDS/jquery-move
Move jQuery before `{{ghost_foot}}`
2015-11-25 22:17:17 +08:00
6f46594d36 Move jQuery before {{ghost_foot}}
- Including jQuery before `{{ghost_foot}}` means jQuery can be used inside ghost_foot code injection
- It should also improve backwards compat, as without this jQuery code included via ghost_foot may break
2015-10-19 09:28:22 +01:00
ede6b03afa Upgrading Casper to 1.2.5 2015-09-02 18:11:54 +01:00
31025f2f15 Merge pull request #218 from ErisDS/jquery-support
Add jQuery, as this is being removed from Ghost
2015-09-02 17:54:19 +01:00
dfd94ece96 Add jQuery, as this is being removed from Ghost
refs TryGhost/Ghost#5298
2015-08-24 19:58:03 +01:00
8f6f4a962b Merge pull request #213 from lukaszklis/border-fix
Fixed horizontal scroll on the post page
2015-06-30 14:50:30 +03:00
c4f631b28d Added missing vendor prefixes 2015-06-30 13:41:17 +02:00
dd9d027709 Added box-sizing for a read next story link 2015-06-22 14:08:03 +02:00
1a3dd91f81 Merge pull request #210 from najela/patch-1
Updated the twitter web share API
2015-05-28 22:12:32 +01:00
01c46dd225 Updated the twitter web share API
New API can be found here https://dev.twitter.com/web/tweet-button/web-intent
2015-05-26 10:21:36 +01:00
8fda6ac74f Fix embedded gist indentation
closes #204
- set text-rendering to auto inside embedded gist
2015-05-24 00:32:37 +10:00
c1443a6e04 Upgrading Casper to 1.2.4 2015-05-21 16:59:21 +01:00
cd4563935a Merge pull request #207 from marksuth/master
Improve alt tag accessibility
2015-05-17 11:40:43 +01:00
53c6d32849 typo 2015-05-15 22:13:14 +01:00
2f45eda1ca Improve alt tag accessibility
Replaces all instances of alt="Blog Image" with alt="{{@blog.title}}"
and alt="Author Image" with alt="{{@author}}"
2015-05-15 22:01:01 +01:00
cfbb7842a9 Upgrading Casper to 1.2.3 2015-05-14 15:48:09 +01:00
6f5138dcd2 Merge pull request #203 from PaulAdamDavis/menu-button-border
Remove border from menu button on small screens
2015-05-14 15:29:50 +01:00
6c04f651aa Remove border from menu button on small screens
No issue

In #189 I reworked much of the CSS for the menu button. The border on the menu button is supposed to be removed on small screens, but I missed that. This removes it.
2015-04-23 12:39:19 +01:00
f81730e108 Upgrading Casper to 1.2.2 2015-04-22 22:11:36 +01:00
c06a731384 No. 2015-04-22 20:34:39 +02:00
2773ac926a Fix footnotes line-height and return-link styling 2015-04-22 19:23:42 +02:00
cc59624ba4 Upgrading Casper to 1.2.1 2015-04-22 14:08:38 +01:00
6b42e9535c Merge pull request #200 from HLFH/master
Social media icons with brand colors on hover
2015-04-19 22:52:24 +03:00
bc38e7df61 Social media icons with brand colors on hover 2015-04-19 20:35:28 +02:00
ab2a8261d7 Merge pull request #197 from PaulAdamDavis/copyright-footer
Fix copyright footer bug
2015-04-16 14:20:14 +03:00
ffea9590ea Fix copyright footer bug
Closes #196

- Absolutely positions the `.site-footer` when it's adjacent to the `.read-next` container

I've opted to use absolute positioning here because we can't be 10% sure what the height of the footer will be at smaller viewport widths as the `@blog.title` length can vary, so adding loads of breakpoints with negative margins isn't really viable.
2015-04-16 10:43:35 +01:00
d32e9db4cb Merge pull request #195 from PaulAdamDavis/icon-caching
Add version number to icon font src urls
2015-04-15 13:01:02 +03:00
88666559f6 Add version number to icon font src urls
No issue

To prevent browsers using an older version of the icon font when a newer version is available, we must add a version number to that src url.

This number must be incremented when the file files change, so this also adds a note explaining that.
2015-04-15 10:44:01 +01:00
c94651d8fb Set min width on next-posts
Closes #194
2015-04-14 11:09:00 +02:00
5d01cb7a7c Merge pull request #189 from PaulAdamDavis/menu-icon
Remove some !important declarations
2015-04-11 11:11:59 +03:00
4f1c76f2e7 Remove some !important declarations
Relates to b071548

- Fixes an issue where the menu button would be the wrong colour

The navigation was using `!important` in a few places. I've changed the CSS a bit to no longer need these, but that means I've made some selectors slightly more specific.

The use of `!important` was to get around the hover state being persisted when the menu was opened but the mouse hadn't moved, which meant the menu button kept its white background when it should be black.
iMaking the hover state only apply when the nav is closed, gets around that.
2015-03-31 10:29:03 +01:00
dd02a12258 no message 2015-03-27 19:10:31 +02:00
e587980ccd Merge pull request #188 from PaulAdamDavis/menu-icon
Add menu icon to icon font
2015-03-23 10:57:24 -06:00
b071548965 Add menu icon to icon font
Closes #186

- Adds the menu icon from Ghost's icon set
- Alters CSS to use that new icon
2015-03-23 16:21:53 +00:00
acc6896393 Style footnotes
Fixes #187
2015-03-23 12:21:28 +02:00
025fa6ea80 Change the horrendous mark colour 2015-03-16 12:31:15 +02:00
1b86190c4d Upgrading Casper to 1.1.7 2015-03-09 17:52:52 +00:00
37d7d0b4f0 Sexier animation timing on menu 2015-03-09 16:05:25 +02:00
329dfef410 Merge pull request #185 from novaugust/master
Fix transition property
2015-03-05 23:10:35 +02:00
baea6bb2fd Fix transition property 2015-03-05 14:08:04 -07:00
dffc9f3cb3 Merge pull request #183 from tomkwok/patch-1
Add -ms- prefix for IE9
2015-03-04 11:37:44 +02:00
7f42eaabfe Add -ms- prefix for IE9 2015-03-04 17:33:35 +08:00
dcfddacfa1 Merge pull request #182 from mankittens/master
Prefixed second instance of tt with pre
2015-03-04 11:13:00 +02:00
031ac1fb40 Prefixed second instance of tt with pre 2015-03-04 03:50:52 -05:00
9339635abd Merge pull request #181 from PaulAdamDavis/fix-nav-overflow
Fix menu button overflow
2015-03-02 18:04:15 +02:00
0d3bafde1e Fix menu button overflow
References #180

- Adds `overflow-x: hidden` to `.site-wrapper` when navigation is open to prevent the menu button flowing into the navigation & covering the 'Menu' title text in Firefox.
2015-03-02 14:00:20 +00:00
7af816a48e Merge pull request #172 from mankittens/master
Improvement to .post-content .full-img
2015-03-02 09:32:12 +02:00
a5dcaf6cd5 Removed references to .full-img, debounce, and smartresize, and replaced with pure CSS
issue #172
New code will center all post images and allow them to extend beyond the main text column. No JavaScript or special classes required.
2015-03-02 02:21:19 -05:00
e59dcaa256 Fix vertical height bug
Introduced in @46dc55769e5f11bddde77ae131f0cb24f82fd9ea - vh is incompatible with % - all references to height needed to be updated in order for this to work correctly
2015-03-01 08:51:38 +02:00
8b35959ff6 Update Nav position
Fixes #178
2015-03-01 08:25:35 +02:00
94422fffe2 Upgrading Casper to 1.1.6 2015-02-28 16:15:47 +00:00
47e0b19562 Merge pull request #177 from ErisDS/global-nav
Switch navigation to be global
2015-02-28 15:54:15 +00:00
8ec65a45e4 Switch navigation to be global 2015-02-28 14:08:27 +00:00
8e220b089b Fix Safari mobile bug
Opacity: 0 on nav sidebar when closed
2015-02-28 16:07:43 +02:00
e4861a0d78 Fix for long nav items 2015-02-28 14:38:01 +02:00
243192f0d9 Updating nav styles 2015-02-28 14:34:58 +02:00
c516c10383 Merge pull request #175 from PaulAdamDavis/navigation
Navigation
2015-02-28 11:41:15 +02:00
46dc55769e Navigation 2015-02-27 19:33:27 +00:00
191f5f74f1 Merge pull request #174 from nicdutil/master
fixed ie9 rotate issue with scroll-down arrow
2015-02-24 09:44:03 +02:00
e559857b12 fixed ie9 rotate issue with scroll-down arrow 2015-02-24 00:45:08 -05:00
8f9a185a80 Merge pull request #171 from AlexanderGalen/master
Add geometricPrecision text-rendering on text elements to support ligatures
2015-02-23 11:31:08 +02:00
bcb586b862 add 'text-rendering:geometricPrecision;' anywhere that seemed appropriate to support ligatures. closes #167 2015-02-18 17:25:18 -08:00
70ad5bde8b Merge pull request #170 from mankittens/master
Fixed transition definitions
2015-02-18 10:36:53 +02:00
b064e9fc87 Fixed transition definitions
Made sure durations come before timing functions.

https://github.com/TryGhost/Casper/issues/168#issuecomment-74828463
2015-02-18 03:31:26 -05:00
1e6e807f94 Merge pull request #163 from janoskk/gist_fix
Fix gist line numbering issue #162
2015-01-22 11:17:34 -08:00
9cf7aea47c Merge pull request #141 from rglyall/master
Add conditional around 'bio' in author.hbs
2015-01-22 08:51:14 -08:00
6db90c9fec Fix gist line numbering issue #162 2015-01-22 11:49:02 +01:00
bc7b44f01b Merge pull request #159 from crepererum/css_warnings
Fix multiple CSS problems, mostly reported by Firefox
2015-01-15 07:33:45 -08:00
db4979d32d Fix multiple CSS problems, mostly reported by Firefox
- typo: `*zoom: ...;` should be `zoom: ...;`
 - outdated prefix: `white-space: -moz-pre-wrap;` is [not required as of Firefox 3.0](https://developer.mozilla.org/en-US/docs/Web/CSS/white-space)
 - outdated prefix: `-moz-border-radius: ...;` is [not required as of Firefox 4.0](https://developer.mozilla.org/en-US/docs/Web/CSS/border-radius)
 - outdated prefix: `-webkit-border-radius: ...;` is [not required as of Chrome 4.0 and Safari 5.0](https://developer.mozilla.org/en-US/docs/Web/CSS/border-radius)
 - outdated prefix: for `background` `-moz-radial-gradient`, `-webkit-radial-gradient` and `-webkit-gradient` is [not required as of Firefox 16, Chrome 26 and Safari 6.1](http://www.w3schools.com/Css/css3_gradients.asp)
 - wrong attribute: `word-break: break-word;` should be `word-wrap: break-word;` (this makes sense because `hyphens: auto;` is set)
 - missing prefix: add `-moz-hyphens: auto;`, `-ms-hyphens: auto;` and `-webkit-hyphens: auto;` to `hyphens: auto;` (other browser [do not support `auto` mode](http://caniuse.com/#feat=css-hyphens))
2015-01-15 14:38:24 +01:00
dd4ca42280 Version bump to 1.1.5 2015-01-12 17:20:31 +00:00
3bdd10a37a Merge pull request #155 from razzius/master
Fix indentation in footer
2015-01-05 07:34:08 +02:00
56c766303f Fix indentation 2015-01-04 19:57:11 -06:00
bf37631aa2 Update copyright 2015-01-02 16:12:55 +02:00
82253b06f2 Derp 2014-12-23 14:21:53 +02:00
969a20ef6d Add tag mgmt support to Casper 2014-12-23 13:50:59 +02:00
dbaaf955af Version bump to 1.1.3 2014-12-04 15:32:09 +00:00
de94edc8a8 Merge pull request #149 from conradkleinespel/master
Support for Pastebin embeds
2014-11-29 11:12:20 +01:00
1292f2e22b support for pastebin 2014-11-29 00:09:46 +01:00
933ebb86ca Version bump to 1.1.2 2014-11-17 17:24:50 +00:00
cb1196630b Merge pull request #147 from novaugust/page-fix
Move page #post helper to encapsulate image references
2014-11-11 07:34:45 +01:00
bcdbdab861 Move page #post helper to encapsulate image references
Ref #143
- Fixes header images for static pages
2014-11-10 22:02:52 -07:00
9a1988aa6d Merge pull request #143 from cubb/master
Fixes to visual bugs on static pages
2014-10-29 18:31:04 +01:00
e2911f2d46 Changed button background fix to match post.hbs
As per JohnONolan’s suggestion, I have edited the nav to match the code
in post.hbs: https://github.com/TryGhost/Casper/blob/master/post.hbs#L9
2014-10-29 10:14:00 -07:00
df09b7c375 Fixed bottom margin on static page post-title h1
Static pages were previously missing a margin on the bottom of the
post-title h1. By adding <header> with a post-header class around the
h1, we gain the exact same bottom margin as seen on post (non-static)
pages.
2014-10-29 09:24:31 -07:00
09d827249f Removed button backgrounds on static pages
The home and subscribe buttons had backgrounds on static pages, but not
post pages. The backgrounds are now removed from these buttons on
static pages.
2014-10-29 09:17:57 -07:00
ff591092e2 Add conditional around 'bio' in author.hbs 2014-10-21 16:10:20 +01:00
e264f609de Version bump to 1.1.1 2014-10-18 21:43:45 +02:00
12ad5f5404 Merge pull request #136 from novaugust/master
Remove old reference to medium desktop media queries from ToC
2014-09-29 09:09:01 +02:00
ba798581ec Remove old reference to medium desktop media queries from ToC 2014-09-28 14:19:58 -06:00
8bf2b72e69 Remove MS specific font feature styling 2014-09-25 19:28:43 +03:00
5968231807 Fix IE font feature rendering
See #124 (again)
2014-09-25 19:23:25 +03:00
e07d0d8775 Post image support 2014-09-25 17:35:06 +03:00
63535cf5ce 1.1.0 2014-09-25 16:42:27 +03:00
75c81be9c3 Typography overhaul 2014-09-25 16:41:04 +03:00
144be310a0 Merge pull request #132 from jeremija/image-width-fix
Fixed bug where image width changes on refresh
2014-09-15 20:57:47 +01:00
a149b03a2f Fixes variable image width bug
closes #95
 - added onload event listeners to images
2014-09-15 21:51:59 +02:00
72ba094f2f Merge pull request #130 from jillesme/master
Optimize index.js and add style consistency
2014-09-15 18:46:46 +01:00
2cf5c0cb87 Optimize index.js and add style consistency
Declared all jQuery objects once where needed instead of diving into the DOM multiple times for the same object.

Added style consistency between variable declarations, if/else statements and functions.
2014-09-07 23:34:40 +02:00
e669b29895 Merge pull request #129 from Douten/patch-1
Fix bouncing scroll-down arrow bug in webkit
2014-09-03 13:13:01 +01:00
bcce1e9a08 Fix bouncing scroll-down arrow bug in webkit
Webkit transform currently requires a vendor prefix. Without it, the arrow bounces and rotate to the original un-rotated state. See https://www.dropbox.com/s/46sjiihtjya42s8/wk-rotate.mov
2014-09-03 01:16:53 -04:00
48 changed files with 8288 additions and 1976 deletions

17
.editorconfig Normal file
View File

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

19
.github/ISSUE_TEMPLATE.md vendored Normal file
View File

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

5
.gitignore vendored
View File

@ -13,9 +13,12 @@ results
npm-debug.log
node_modules
package-lock.json
.idea/*
*.iml
projectFilesBackup
.DS_Store
.DS_Store
dist/

View File

@ -1,4 +1,4 @@
Copyright (c) 2013-2014 Ghost Foundation - Released under The MIT License.
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

View File

@ -1,16 +1,66 @@
# Casper
The default theme for [Ghost](http://github.com/tryghost/ghost/).
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.
To download, visit the [releases](https://github.com/TryGhost/Casper/releases) page.
&nbsp;
## Copyright & License
![screenshot-desktop](https://user-images.githubusercontent.com/120485/27221326-1e31d326-5280-11e7-866d-82d550a7683b.jpg)
Copyright (c) 2013-2014 Ghost Foundation - Released under the MIT License.
&nbsp;
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:
# First time using a Ghost theme?
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
Ghost uses a simple templating language called [Handlebars](http://handlebarsjs.com/) for its themes.
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.
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).

2
assets/built/global.css Normal file
View File

@ -0,0 +1,2 @@
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 */

File diff suppressed because one or more lines are too long

2
assets/built/screen.css Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

237
assets/css/.csscomb.json Normal file
View File

@ -0,0 +1,237 @@
{
"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"
] ]
}

240
assets/css/csscomb.json Normal file
View File

@ -0,0 +1,240 @@
{
"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"
] ]
}

486
assets/css/global.css Normal file
View File

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

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@ -1,19 +0,0 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg xmlns="http://www.w3.org/2000/svg">
<metadata>Generated by IcoMoon</metadata>
<defs>
<font id="icomoon" horiz-adv-x="512">
<font-face units-per-em="512" ascent="480" descent="-32" />
<missing-glyph horiz-adv-x="512" />
<glyph unicode="&#x20;" d="" horiz-adv-x="256" />
<glyph unicode="&#xf600;" d="M0 480v-102.4h307.2v102.4h-307.2zM0 275.2v-102.4h512v102.4h-512zM0 70.4v-102.4h204.8v102.4h-204.8zM307.2 70.4v-102.4h204.8v102.4h-204.8zM409.6 480v-102.4h102.4v102.4h-102.4z" />
<glyph unicode="&#xf601;" d="M421.344-32c-0.4 229.616-200.752 417.264-421.344 417.696v94.304c270.656 0 512-230.304 512-512h-90.656zM343.6-31.968h-90.608c0.304 56.384-28.336 119.488-73.664 166.736-45.072 47.632-124.96 77.648-179.104 77.36v94.272c169.040-3.648 339.936-163.312 343.376-338.368zM64.256 96.048c35.312 0 63.936-28.656 63.936-64 0-35.328-28.624-63.984-63.936-63.984s-63.936 28.656-63.936 63.984c0 35.344 28.624 64 63.936 64z" />
<glyph unicode="&#xf602;" d="M512 382.791c-18.838-8.354-39.082-14.001-60.33-16.54 21.686 13 38.343 33.585 46.186 58.115-20.298-12.039-42.778-20.78-66.705-25.49-19.16 20.415-46.461 33.17-76.673 33.17-58.011 0-105.044-47.029-105.044-105.039 0-8.233 0.929-16.25 2.72-23.939-87.3 4.382-164.701 46.2-216.509 109.753-9.042-15.514-14.223-33.558-14.223-52.809 0-36.444 18.544-68.596 46.73-87.433-17.219 0.546-33.416 5.271-47.577 13.139-0.010-0.438-0.010-0.878-0.010-1.321 0-50.894 36.209-93.348 84.261-103-8.813-2.4-18.094-3.686-27.674-3.686-6.769 0-13.349 0.66-19.764 1.886 13.368-41.73 52.16-72.103 98.126-72.948-35.95-28.175-81.243-44.967-130.458-44.967-8.479 0-16.84 0.497-25.058 1.47 46.486-29.805 101.701-47.197 161.021-47.197 193.211 0 298.868 160.062 298.868 298.872 0 4.554-0.103 9.084-0.305 13.59 20.528 14.81 38.336 33.31 52.418 54.374z" />
<glyph unicode="&#xf603;" d="M0.403 45.168c-0.122 1.266-0.226 2.535-0.292 3.815 0.065-1.28 0.17-2.549 0.292-3.815zM117.954 197.426c46.005-1.369 76.867 46.349 68.931 106.599-7.947 60.24-51.698 108.584-97.704 109.961-46.013 1.365-76.87-44.741-68.926-105 7.941-60.234 51.676-110.187 97.699-111.56zM512 352v42.655c0 46.94-38.391 85.345-85.329 85.345h-341.328c-46.138 0-84.006-37.116-85.282-82.963 29.181 25.693 69.662 47.158 111.437 47.158 44.652 0 178.622 0 178.622 0l-39.974-33.809h-56.634c37.565-14.402 57.578-58.062 57.578-102.861 0-37.624-20.905-69.977-50.444-92.984-28.822-22.451-34.286-31.854-34.286-50.939 0-16.289 30.873-44 47.016-55.394 47.191-33.269 62.458-64.156 62.458-115.728 0-8.214-1.021-16.415-3.033-24.48h153.871c46.937 0 85.328 38.375 85.328 85.345v266.654h-96v-95.999h-32v96h-95.999v32h95.999v96h32v-96h96zM92.943 97.032c10.807 0 20.711 0.295 30.968 0.295-13.573 13.167-24.313 29.3-24.313 49.19 0 11.804 3.782 23.168 9.067 33.26-5.391-0.385-10.895-0.497-16.563-0.497-37.178 0-68.753 12.038-92.102 31.927v-33.621l0.003-100.865c26.72 12.687 58.444 20.311 92.94 20.311zM1.71 36.371c-0.556 2.729-0.983 5.503-1.271 8.317 0.287-2.814 0.715-5.588 1.271-8.317zM227.725 3.577c-7.529 29.403-34.227 43.982-71.444 69.784-13.536 4.366-28.447 6.937-44.447 7.104-44.809 0.482-86.554-17.471-110.108-44.186 7.96-38.853 42.517-68.279 83.617-68.279h143.222c0.908 5.564 1.348 11.316 1.348 17.216 0 6.267-0.767 12.396-2.188 18.361z" />
<glyph unicode="&#xf604;" d="M426.672 480h-341.33c-46.936 0-85.342-38.407-85.342-85.344v-341.313c0-46.969 38.406-85.343 85.342-85.343l341.33 0.001c46.938 0 85.328 38.373 85.328 85.344v341.311c0 46.937-38.391 85.344-85.328 85.344zM435.296 224h-83.296v-224h-96v224h-46.263v73.282h46.263v47.593c0 64.671 27.896 103.125 103.935 103.125h87.622v-79.285h-71.565c-21.241 0.035-23.876-11.076-23.876-31.756l-0.116-39.677h96l-12.704-73.282z" />
<glyph unicode="&#xf605;" d="M368.615 34.099c6.861-6.938 6.861-18.125 0-25.063s-17.945-6.938-24.807 0l-200.448 202.419c-6.861 6.938-6.861 18.15 0 25.063l200.448 202.445c6.861 6.938 17.945 6.938 24.807 0s6.861-18.125 0-25.063l-182.784-189.901 182.784-189.901z" />
<glyph unicode="&#xf606;" d="M435.2 454.4h-56.32c-14.131 0-20.48-11.469-20.48-25.6v-435.2h102.4v435.2c0 14.131-11.443 25.6-25.6 25.6zM281.6 300.8h-56.32c-14.131 0-20.48-11.469-20.48-25.6v-281.6h102.4v281.6c0 14.131-11.443 25.6-25.6 25.6zM128 147.2h-56.32c-14.131 0-20.48-11.443-20.48-25.6v-128h102.4v128c0 14.157-11.469 25.6-25.6 25.6z" />
<glyph unicode="&#xf607;" d="M256 428.8c-70.707 0-128-57.319-128-128 0-122.214 128-281.6 128-281.6s128 159.386 128 281.6c0 70.681-57.293 128-128 128zM256 230.144c-38.169 0-69.12 30.951-69.12 69.12s30.951 69.12 69.12 69.12 69.12-30.951 69.12-69.12-30.95-69.12-69.12-69.12z" />
<glyph unicode="&#xf608;" d="M201.19 103.834l-20.736-20.582c-17.971-17.792-47.181-17.817-65.126 0-8.627 8.576-13.363 19.917-13.363 32.026s4.761 23.475 13.363 32.051l76.288 75.699c15.795 15.693 45.542 38.759 67.226 17.255 9.959-9.881 26.035-9.805 35.891 0.128 9.882 9.933 9.83 26.010-0.128 35.891-36.839 36.557-91.315 29.798-138.752-17.255l-76.288-75.699c-18.279-18.176-28.365-42.343-28.365-68.070 0-25.702 10.087-49.869 28.391-68.045 18.841-18.714 43.571-28.032 68.301-28.032s49.511 9.318 68.352 28.032l20.736 20.608c9.958 9.882 10.010 25.959 0.128 35.865-9.881 9.933-25.958 9.984-35.917 0.128zM432.409 397.85c-39.577 39.27-94.899 41.395-131.558 5.043l-25.831-25.626c-9.959-9.882-10.035-25.933-0.154-35.891 9.907-9.958 25.959-10.010 35.891-0.128l25.83 25.625c18.969 18.841 43.827 11.034 60.058-5.043 8.627-8.55 13.363-19.942 13.363-32.026 0-12.109-4.762-23.475-13.363-32.026l-81.408-80.742c-37.197-36.915-54.682-19.61-62.131-12.211-9.958 9.882-26.010 9.805-35.865-0.128-9.881-9.959-9.831-26.035 0.128-35.891 17.075-16.947 36.608-25.344 57.037-25.344 25.037 0 51.481 12.595 76.621 37.555l81.382 80.743c18.304 18.151 28.39 42.317 28.39 68.019s-10.087 49.894-28.39 68.070z" />
</font></defs></svg>

Before

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Binary file not shown.

View File

@ -1,90 +0,0 @@
/**
* Main JS file for Casper behaviours
*/
/*globals jQuery, document */
(function ($) {
"use strict";
$(document).ready(function(){
$(".post-content").fitVids();
function casperFullImg() {
$("img").each( function() {
var contentWidth = $(".post-content").outerWidth(); // Width of the content
var imageWidth = $(this)[0].naturalWidth; // Original image resolution
if (imageWidth >= contentWidth) {
$(this).addClass('full-img');
} else {
$(this).removeClass('full-img');
}
});
};
casperFullImg();
$(window).smartresize(casperFullImg);
$(".scroll-down").arctic_scroll();
});
}(jQuery));
(function($,sr){
// debouncing function from John Hann
// http://unscriptable.com/index.php/2009/03/20/debouncing-javascript-methods/
var debounce = function (func, threshold, execAsap) {
var timeout;
return function debounced () {
var obj = this, args = arguments;
function delayed () {
if (!execAsap)
func.apply(obj, args);
timeout = null;
};
if (timeout)
clearTimeout(timeout);
else if (execAsap)
func.apply(obj, args);
timeout = setTimeout(delayed, threshold || 100);
};
}
// smartresize
jQuery.fn[sr] = function(fn){ return fn ? this.bind('resize', debounce(fn)) : this.trigger(sr); };
})(jQuery,'smartresize');
// Arctic Scroll by Paul Adam Davis
// https://github.com/PaulAdamDavis/Arctic-Scroll
(function ($) {
$.fn.arctic_scroll = function (options) {
var defaults = {
elem: $(this),
speed: 500
};
var options = $.extend(defaults, options);
options.elem.click(function(event){
event.preventDefault();
var offset = ($(this).attr('data-offset')) ? $(this).attr('data-offset') : false,
position = ($(this).attr('data-position')) ? $(this).attr('data-position') : false;
if (offset) {
var toMove = parseInt(offset);
$('html,body').stop(true, false).animate({scrollTop: ($(this.hash).offset().top + toMove) }, options.speed);
} else if (position) {
var toMove = parseInt(position);
$('html,body').stop(true, false).animate({scrollTop: toMove }, options.speed);
} else {
$('html,body').stop(true, false).animate({scrollTop: ($(this.hash).offset().top) }, options.speed);
}
});
};
})(jQuery);

115
assets/js/infinitescroll.js Normal file
View File

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

View File

@ -1,28 +1,30 @@
/*global jQuery */
/*jshint browser:true */
/*!
* FitVids 1.1
* FitVids 1.3
*
* Copyright 2013, Chris Coyier - http://css-tricks.com + Dave Rupert - http://daverupert.com
*
* 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 WTFPL license - http://sam.zoy.org/wtfpl/
* Released under the MIT license
*
*/
(function( $ ){
;(function( $ ){
"use strict";
'use strict';
$.fn.fitVids = function( options ) {
var settings = {
customSelector: null
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-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');
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]);
}
@ -33,35 +35,55 @@
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"
'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('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('id')){
var videoID = 'fitvid' + Math.floor(Math.random()*999999);
$this.attr('id', videoID);
if(!$this.attr('name')){
var videoName = 'fitvid' + $.fn.fitVids._count;
$this.attr('name', videoName);
$.fn.fitVids._count++;
}
$this.wrap('<div class="fluid-width-video-wrapper"></div>').parent('.fluid-width-video-wrapper').css('padding-top', (aspectRatio * 100)+"%");
$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 );

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

View File

@ -1,37 +1,54 @@
{{!< default}}
{{! The tag above means - insert everything in this file into the {body} of the default.hbs template }}
{{!-- The tag above means - insert everything in this file into the {body} of the default.hbs template --}}
{{! The big featured header }}
{{! Everything inside the #author tags pulls data from the author }}
{{#author}}
<header class="main-header author-head {{#if cover}}" style="background-image: url({{cover}}){{else}}no-cover{{/if}}">
<nav class="main-nav overlay clearfix">
<a class="back-button icon-arrow-left" href="{{@blog.url}}">Home</a>
<a class="subscribe-button icon-feed" href="{{url}}rss/">{{name}}</a>
</nav>
</header>
<section class="author-profile inner">
{{#if image}}
<figure class="author-image">
<div class="img" style="background-image: url({{image}})"><span class="hidden">{{name}}'s Picture</span></div>
</figure>
{{/if}}
<h1 class="author-title">{{name}}</h1>
<h2 class="author-bio">{{bio}}</h2>
<div class="author-meta">
{{#if location}}<span class="author-location icon-location">{{location}}</span>{{/if}}
{{#if website}}<span class="author-link icon-link"><a href="{{website}}">{{website}}</a></span>{{/if}}
<span class="author-stats"><i class="icon-stats"></i> {{plural ../pagination.total empty='No posts' singular='% post' plural='% posts'}}</span>
{{!-- 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">&bull;</span></div>
{{/if}}
<div class="author-stats">
{{plural ../pagination.total empty='No posts' singular='% post' plural='% posts'}} <span class="bull">&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>
</section>
</div>
</header>
{{/author}}
{{! The main content area on the homepage }}
<main class="content" role="main">
{{!-- The main content area --}}
<main id="site-main" class="site-main outer">
<div class="inner">
{{! The tag below includes the post loop - partials/loop.hbs }}
{{> "loop"}}
<div class="post-feed">
{{#foreach posts}}
</main>
{{!-- The tag below includes the markup for each post - partials/post-card.hbs --}}
{{> "post-card"}}
{{/foreach}}
</div>
</div>
</main>

View File

@ -1,42 +1,83 @@
<!DOCTYPE html>
<html>
<html lang="{{lang}}">
<head>
{{! Document Settings }}
{{!-- Document Settings --}}
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
{{! Page Meta }}
{{!-- Base Meta --}}
<title>{{meta_title}}</title>
<meta name="description" content="{{meta_description}}" />
<meta name="HandheldFriendly" content="True" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="shortcut icon" href="{{asset "favicon.ico"}}">
{{!-- Styles'n'Scripts --}}
<link rel="stylesheet" type="text/css" href="{{asset "built/screen.css"}}" />
{{! Styles'n'Scripts }}
<link rel="stylesheet" type="text/css" href="{{asset "css/screen.css"}}" />
<link rel="stylesheet" type="text/css" href="//fonts.googleapis.com/css?family=PT+Serif:400,700,400italic|Open+Sans:700,400" />
{{! Ghost outputs important style and meta data with this tag }}
{{!-- This tag outputs SEO meta+structured data and other important settings --}}
{{ghost_head}}
</head>
<body class="{{body_class}}">
{{! Everything else gets inserted here }}
{{{body}}}
<div class="site-wrapper">
<footer class="site-footer clearfix">
<section class="copyright"><a href="{{@blog.url}}">{{@blog.title}}</a> &copy; {{date format="YYYY"}}</section>
<section class="poweredby">Proudly published with <a href="https://ghost.org">Ghost</a></section>
</footer>
{{!-- All the main content gets inserted here, index.hbs, post.hbs, etc --}}
{{{body}}}
{{! Ghost outputs important scripts and data with this tag }}
{{ghost_foot}}
{{!-- 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> &copy; {{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>
{{! The main JavaScript file for Casper }}
</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 &amp; 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>
<script type="text/javascript" src="{{asset "js/index.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>

56
error-404.hbs Normal file
View File

@ -0,0 +1,56 @@
{{!--
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>

63
error.hbs Normal file
View File

@ -0,0 +1,63 @@
{{!--
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>

69
gulpfile.js Normal file
View File

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

View File

@ -1,25 +1,36 @@
{{!< default}}
{{! The tag above means - insert everything in this file into the {body} of the default.hbs template }}
{{!-- The tag above means: insert everything in this file
into the {body} of the default.hbs template --}}
{{! The big featured header }}
<header class="main-header {{#if @blog.cover}}" style="background-image: url({{@blog.cover}}){{else}}no-cover{{/if}}">
<nav class="main-nav overlay clearfix">
{{#if @blog.logo}}<a class="blog-logo" href="{{@blog.url}}"><img src="{{@blog.logo}}" alt="Blog Logo" /></a>{{/if}}
<a class="subscribe-button icon-feed" href="{{@blog.url}}/rss/">Subscribe</a>
</nav>
<div class="vertical">
<div class="main-header-content inner">
<h1 class="page-title">{{@blog.title}}</h1>
<h2 class="page-description">{{@blog.description}}</h2>
{{!-- 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>
<a class="scroll-down icon-arrow-left" href="#content" data-offset="-45"><span class="hidden">Scroll Down</span></a>
</header>
{{! The main content area on the homepage }}
<main id="content" class="content" role="main">
{{!-- The main content area --}}
<main id="site-main" class="site-main outer">
<div class="inner">
{{! The tag below includes the post loop - partials/loop.hbs }}
{{> "loop"}}
<div class="post-feed">
{{#foreach posts}}
</main>
{{!-- The tag below includes the markup for each post - partials/post-card.hbs --}}
{{> "post-card"}}
{{/foreach}}
</div>
</div>
</main>

View File

@ -1,5 +1,57 @@
{
"name": "Casper",
"version": "1.0.1"
"name": "casper",
"description": "The default personal blogging theme for Ghost. Beautiful, minimal and responsive.",
"demo": "https://demo.ghost.io",
"version": "2.3.1",
"engines": {
"ghost": ">=1.2.0"
},
"license": "MIT",
"screenshots": {
"desktop": "assets/screenshot-desktop.jpg",
"mobile": "assets/screenshot-mobile.jpg"
},
"scripts": {
"dev": "gulp",
"zip": "gulp zip"
},
"author": {
"name": "Ghost Foundation",
"email": "hello@ghost.org",
"url": "https://ghost.org"
},
"gpm": {
"type": "theme",
"categories": [
"Minimal",
"Magazine"
]
},
"keywords": [
"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",
"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
}
}

View File

@ -1,26 +1,48 @@
{{!< default}}
{{!-- The tag above means: insert everything in this file
into the {body} of the default.hbs template --}}
{{! This is a page template. A page outputs content just like any other post, and has all the same
attributes by default, but you can also customise it to behave differently if you prefer. }}
{{!-- 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>
<nav class="main-nav clearfix">
<a class="back-button icon-arrow-left" href="{{@blog.url}}">Home</a>
<a class="subscribe-button icon-feed" href="{{@blog.url}}/rss/">Subscribe</a>
</nav>
{{!-- Everything inside the #post tags pulls data from the post --}}
{{#post}}
<main class="content" role="main">
<main id="site-main" class="site-main outer">
<div class="inner">
<article class="{{post_class}}">
{{! Everything inside the #post tags pulls data from the post }}
{{#post}}
<article class="post-full {{post_class}} {{#unless feature_image}}no-image{{/unless}}">
<h1 class="post-title">{{title}}</h1>
<header class="post-full-header">
<h1 class="post-full-title">{{title}}</h1>
</header>
<section class="post-content">
{{content}}
</section>
{{#if feature_image}}
<figure class="post-full-image" style="background-image: url({{feature_image}})">
</figure>
{{/if}}
{{/post}}
</article>
<section class="post-full-content">
{{content}}
</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}}

View File

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

View File

@ -0,0 +1,23 @@
{{!-- Everything inside the #author tags pulls data from the author --}}
{{#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>
{{/author}}

View File

@ -0,0 +1,28 @@
<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">&mdash;</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}}&amp;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 class="progress" value="0">
<div class="progress-container">
<span class="progress-bar"></span>
</div>
</progress>
</div>

View File

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

After

Width:  |  Height:  |  Size: 308 B

View File

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

After

Width:  |  Height:  |  Size: 155 B

View File

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

After

Width:  |  Height:  |  Size: 3.3 KiB

View File

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

After

Width:  |  Height:  |  Size: 196 B

View File

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

After

Width:  |  Height:  |  Size: 329 B

3
partials/icons/point.hbs Normal file
View File

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

After

Width:  |  Height:  |  Size: 311 B

1
partials/icons/rss.hbs Normal file
View File

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

After

Width:  |  Height:  |  Size: 263 B

View File

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

After

Width:  |  Height:  |  Size: 888 B

View File

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

After

Width:  |  Height:  |  Size: 413 B

View File

@ -1,25 +0,0 @@
{{! Previous/next page links - only displayed on page 2+ }}
<div class="extra-pagination inner">
{{pagination}}
</div>
{{! This is the post loop - each post will be output using this markup }}
{{#foreach posts}}
<article class="{{post_class}}">
<header class="post-header">
<h2 class="post-title"><a href="{{url}}">{{{title}}}</a></h2>
</header>
<section class="post-excerpt">
<p>{{excerpt words="30"}} <a class="read-more" href="{{url}}">&raquo;</a></p>
</section>
<footer class="post-meta">
{{#if author.image}}<img class="author-thumb" src="{{author.image}}" alt="Author image" nopin="nopin" />{{/if}}
{{author}}
{{tags prefix=" on "}}
<time class="post-date" datetime="{{date format='YYYY-MM-DD'}}">{{date format="DD MMMM YYYY"}}</time>
</footer>
</article>
{{/foreach}}
{{! Previous/next page links - displayed on every page }}
{{pagination}}

42
partials/post-card.hbs Normal file
View File

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

29
partials/site-nav.hbs Normal file
View File

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

238
post.hbs
View File

@ -1,76 +1,196 @@
{{!< default}}
{{! The comment above "< default" means - insert everything in this file into
the {body} of the default.hbs template, which contains our header/footer. }}
{{!-- The tag above means: insert everything in this file
into the {body} of the default.hbs template --}}
<nav class="main-nav clearfix">
<a class="back-button icon-arrow-left" href="{{@blog.url}}">Home</a>
<a class="subscribe-button icon-feed" href="{{@blog.url}}/rss/">Subscribe</a>
</nav>
<header class="site-header outer">
<div class="inner">
{{> "site-nav"}}
</div>
</header>
<main class="content" role="main">
{{!-- Everything inside the #post tags pulls data from the post --}}
{{#post}}
<article class="{{post_class}}">
{{! Everything inside the #post tags pulls data from the post }}
{{#post}}
<main id="site-main" class="site-main outer">
<div class="inner">
<header class="post-header">
<h1 class="post-title">{{title}}</h1>
<section class="post-meta">
<time class="post-date" datetime="{{date format='YYYY-MM-DD'}}">{{date format="DD MMMM YYYY"}}</time> {{tags prefix=" on "}}
</section>
</header>
<article class="post-full {{post_class}} {{#unless feature_image}}no-image{{/unless}}">
<section class="post-content">
{{content}}
</section>
<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>
<footer class="post-footer">
{{! Everything inside the #author tags pulls data from the author }}
{{#author}}
{{#if image}}
<figure class="author-image">
<a class="img" href="{{url}}" style="background-image: url({{image}})"><span class="hidden">{{name}}'s Picture</span></a>
{{#if feature_image}}
<figure class="post-full-image" style="background-image: url({{feature_image}})">
</figure>
{{/if}}
<section class="author">
<h4><a href="{{url}}">{{name}}</a></h4>
<section class="post-full-content">
{{content}}
</section>
{{#if bio}}
<p>{{bio}}</p>
{{!-- 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}}
<p>Read <a href="{{url}}">more posts</a> by this author.</p>
{{/if}}
<div class="author-meta">
{{#if location}}<span class="author-location icon-location">{{location}}</span>{{/if}}
{{#if website}}<span class="author-link icon-link"><a href="{{website}}">{{website}}</a></span>{{/if}}
</div>
{{> "byline-single"}}
{{/has}}
</footer>
{{!--
<section class="post-full-comments">
If you want to embed comments, this is a good place to do it!
</section>
--}}
{{/author}}
<section class="share">
<h4>Share this post</h4>
<a class="icon-twitter" href="https://twitter.com/share?text={{encode title}}&amp;url={{url absolute="true"}}"
onclick="window.open(this.href, 'twitter-share', 'width=550,height=235');return false;">
<span class="hidden">Twitter</span>
</a>
<a class="icon-facebook" href="https://www.facebook.com/sharer/sharer.php?u={{url absolute="true"}}"
onclick="window.open(this.href, 'facebook-share','width=580,height=296');return false;">
<span class="hidden">Facebook</span>
</a>
<a class="icon-google-plus" href="https://plus.google.com/share?url={{url absolute="true"}}"
onclick="window.open(this.href, 'google-plus-share', 'width=490,height=530');return false;">
<span class="hidden">Google+</span>
</a>
</section>
</footer>
{{/post}}
</article>
</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">&mdash; {{@blog.title}} &mdash;</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('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}}

45
tag.hbs
View File

@ -1,24 +1,33 @@
{{!< default}}
{{! The tag above means - insert everything in this file into the {body} of the default.hbs template }}
{{!-- The tag above means - insert everything in this file into the {body} of the default.hbs template --}}
{{! The big featured header }}
<header class="main-header tag-head {{#if @blog.cover}}" style="background-image: url({{@blog.cover}}){{else}}no-cover{{/if}}">
<nav class="main-nav overlay clearfix">
<a class="back-button icon-arrow-left" href="{{@blog.url}}">Home</a>
<a class="subscribe-button icon-feed" href="{{@blog.url}}/tag/{{tag.slug}}/rss/">{{tag.name}}</a>
</nav>
<div class="vertical">
<div class="main-header-content inner">
<h1 class="page-title">{{tag.name}}</h1>
<h2 class="page-description">A {{pagination.total}}-post collection</h2>
{{!-- 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 on the homepage }}
<main class="content" role="main">
{{! The tag below includes the post loop - partials/loop.hbs }}
{{> "loop"}}
</main>
{{!-- 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>

4157
yarn.lock Normal file

File diff suppressed because it is too large Load Diff