Compare commits

...

585 Commits

Author SHA1 Message Date
0721600075 v5.5.0 2023-06-22 17:17:43 +08:00
a18367200f Updated post content grid for additional widths 2023-06-22 16:37:59 +08:00
294b1e30e5 v5.4.12 2023-06-20 12:09:25 +08:00
aa8ca0794b Fixed main nav background color in dark mode
closes https://github.com/TryGhost/Casper/issues/942
2023-06-20 12:09:08 +08:00
ba0b3d08cc v5.4.11 2023-05-09 13:30:12 +08:00
50d5727f77 Fixed mobile menu background in dark mode
no issues

- when there's no publication cover and the color scheme is in dark mode, the mobile menu had white background
- this fixes the issue by adding explicit dark mode rules to the styles
2023-05-09 13:27:37 +08:00
23f7c30365 v5.4.10 2023-04-21 09:49:57 +01:00
8ff3c6fcf1 Fixed main nav to make it work with the announcement bar 2023-04-21 09:49:37 +01:00
5c7fb39df9 v5.4.9 2023-04-10 13:42:17 +08:00
4851606d9d Rebuilt assets 2023-04-10 13:41:59 +08:00
afca9cb27e Fix problem showing dropdown after window resize
When the browser window is resized, a new click event listener is added
to the window but the old one is not removed. The old one ends up
preventing the newly-made dropdown from opening.

Fix this by remembering the click event listener function added to the
window, and remove it before making the new dropdown after a window
resize.
2023-04-10 13:40:33 +08:00
b56bec2cb8 Fixed header action background color for smaller screens
closes #934

- the accent color is used for the header background, so we don't need to add explicit dark mode color to the action on mobile screens
2023-04-10 13:24:11 +08:00
0c4164c5bd v5.4.8 2023-03-28 16:01:50 +08:00
e6326eadf9 Added a class name to the powered by text
no issues

- our other themes have this class, and this makes it consistent across over all offcial themes
2023-03-28 16:01:24 +08:00
3ed94d68fa Update dependency gscan to v4.36.1 2023-03-07 09:25:32 +01:00
505503a63b v5.4.7 2023-03-01 13:54:29 +08:00
bd3fc7c2af Fixed textarea color in dark mode 2023-03-01 13:53:58 +08:00
5e0f765852 v5.4.6 2023-02-28 13:57:36 +08:00
4293dab0a7 Fixed burger menu icon visibility on dark mode
refs #925
2023-02-28 13:57:05 +08:00
f00918589f Update comment grammar 2023-02-27 17:13:31 +08:00
0200889148 Fix Table of Contents Numbering in screen.css 2023-02-27 15:39:25 +08:00
248c122f86 re-add aria-label to search button for screen readers
This was added by https://github.com/TryGhost/Casper/pull/896 

but then appears to have been accidentally reverted in the merge of https://github.com/TryGhost/Casper/pull/906
2023-02-27 15:10:09 +08:00
a007415d89 v5.4.5 2023-01-20 09:50:01 +01:00
31188ce3c0 Fixed author's cover image not showing up
no refs.

The author's cover image didn't show up on the theme because the author template used `feature_image` instead of `cover_image`.
2023-01-19 09:51:08 +01:00
e1967f8546 v5.4.4 2022-12-16 12:35:19 +08:00
5259d551f5 Fixed mobile navbar height 2022-12-16 12:33:11 +08:00
115d1d820c Fixed sign in link placement on mobile screen
fixes #913
2022-12-16 12:12:22 +08:00
81e4dfd52d Minor spacing adjustment 2022-12-16 12:02:08 +08:00
cc4d828575 Fixed logo visibility when the header is hidden 2022-12-16 11:57:59 +08:00
ebb2538215 v5.4.3 2022-12-15 10:12:38 +08:00
3767e3d994 Adjusted the pagination to dark mode 2022-12-15 10:00:58 +08:00
6d290485dc Fixed account button background 2022-12-15 09:55:41 +08:00
7da41d344f Added sign in link to the navbar 2022-12-14 16:42:46 +08:00
55a90a9252 v5.4.2 2022-12-12 14:55:31 +08:00
b20dceae22 Rebuilt assets 2022-12-12 14:55:02 +08:00
88ca182a58 Added regular pagination option
Casper comes with infinite scrolling by default. This update makes it possible to go with the default pagination style when the <html> element has a class no-infinite-scroll.
2022-12-08 12:50:24 +08:00
140632b885 fixes #910
When the publication cover is turned off and the header style is set to hidden, the header section shouldn't be taking much space like it does regularly.
2022-12-07 15:29:23 +08:00
8f2b806673 v5.4.1 2022-11-14 11:05:28 +08:00
4af198a19f Fixed dropdown menu width 2022-11-14 10:42:10 +08:00
f846ceb7ed Fixed minor spacing issues on the header 2022-11-14 10:37:50 +08:00
7390c17a26 Fix for intended location of search icon 2022-11-14 10:31:51 +08:00
55d5345800 v5.4.0 2022-11-11 11:31:39 +08:00
cf30adacce Added navbar options (#906) 2022-11-11 11:30:32 +08:00
38426cd9e6 Added aria-label to search button (#896) 2022-10-31 16:01:42 +08:00
c7713df88f v5.3.2 2022-10-04 14:43:34 +08:00
e6fdb4bfa3 Excluded GitHub Gist table from being styled
fixes #895
2022-10-04 14:31:38 +08:00
657bb8f986 Add me relation to social links 2022-09-12 12:57:24 +08:00
005211ff8f Remove ununsed file 2022-09-01 11:36:01 +08:00
e2096ee731 v5.3.1 2022-08-16 10:54:22 +08:00
20ced95885 Fix search icon placement
fixes #894
2022-08-16 10:54:04 +08:00
2aaf7441af v5.3.0 2022-08-12 21:32:28 +08:00
d687d0f099 Add comments support (#893)
* Added comments to theme

* Cleanup

* Updated spacing and typography

* Removed bottom border

* Added comment counter

* Updated theme name and post template

* Added search support

* Compiled css for search

* Removed the border and brackets for comment count

* Moved the comments helper into the content block so it gets the same paddings at narrow viewports

* Package version bump

* Updated comments helper in post template

* Final tweaks for the comments support

* Revert the package info

* Update {{comment_count}} helper usage

The helper now outputs a span wrapper by default, so we won't have to add a wrapper in the theme

Co-authored-by: Peter Zimon <peter.zimon@gmail.com>
Co-authored-by: Sanne de Vries <sannedv@protonmail.com>
Co-authored-by: James Morris <moreofmorris@users.noreply.github.com>
2022-08-12 21:30:06 +08:00
96f69f8c07 Update dependency gscan to v4.34.0 (#884)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-08-08 16:31:53 +08:00
4808700c0f Update dependency @tryghost/release-utils to v0.8.1 (#886)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-08-08 16:30:45 +08:00
6459992d9a Update screenshot 2022-08-08 10:57:04 +08:00
b28258d0c8 v5.2.3 2022-08-02 14:23:57 +08:00
f3c0526ea5 Increase the width of header on author and tag page
The width used to be equal to one post card width and it wasn't enough for longer author name and description.
2022-07-28 12:37:32 +08:00
129a578751 Fix author profile social link hover color on dark mode 2022-07-28 12:35:23 +08:00
1b3541ef2a v5.2.2 2022-07-26 10:23:06 +08:00
664afdb158 Rebuild assets 2022-07-26 10:22:49 +08:00
d386ab090f Update Ghost version compatibility default value 2022-07-20 12:18:01 +08:00
c6411dbf41 Update dependency gscan to v4.31.2 (#851)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-07-19 16:14:22 +08:00
7eb472ab81 Update dependency gulp-postcss to v9.0.1 (#815)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-07-19 16:13:15 +08:00
ae7b6e1022 Update dependency inquirer to v8.2.4 (#806)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-07-19 16:12:28 +08:00
b74032835f Update dependency postcss to v8.2.13 [SECURITY] (#805)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-07-19 16:10:33 +08:00
eab9e1ae0f Update dependency autoprefixer to v10.4.7 (#796)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-07-19 16:09:58 +08:00
873566a24c Update dependency @tryghost/release-utils to v0.8.0 (#793)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-07-19 16:02:59 +08:00
1ade4c8816 Update CSS preprocessors (#797)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-07-19 16:01:28 +08:00
245969800d Rebuild assets 2022-07-19 15:54:01 +08:00
db37f3caa8 Fix author profile location is dark color in dark mode (#874) 2022-07-19 15:52:59 +08:00
a15e9bda40 v5.2.1 2022-07-14 15:17:44 +08:00
ffcbc42d13 Fix search icon spacing 2022-07-14 15:16:32 +08:00
d373d926fa v5.2.0 2022-07-12 19:15:38 +08:00
8699a22019 Add search attribute 2022-07-12 19:14:29 +08:00
eff8d360ba Add search support 2022-07-12 19:14:29 +08:00
3e7ca9cb36 v5.1.5 2022-07-04 19:02:25 +08:00
b5297f16d7 Rebuild assets 2022-07-04 19:02:07 +08:00
ccf82ec6c1 Let social links inherit their color 2022-07-04 15:12:36 +08:00
d9d70e7010 v5.1.4 2022-06-03 17:07:58 +08:00
52663e9be7 Fix unexpected cropping in grid layout 2022-06-03 17:07:38 +08:00
d1b1d383f5 v5.1.3 2022-06-01 19:43:57 +08:00
cf50364c6d Fix members only post indicator visibility when logged in 2022-06-01 19:43:34 +08:00
22e3f69aed v5.1.2 2022-05-31 16:18:53 +08:00
d1ac1b8c2c Distinguish members and paid-members only post indicators 2022-05-31 13:50:54 +08:00
45bc14f08d v5.1.1 2022-05-27 18:19:39 +08:00
e27ea96779 Fix blurry tag image 2022-05-27 18:19:14 +08:00
e51c1aff42 v5.1.0 2022-05-27 15:13:32 +08:00
d00647009c Fix post access indicator background 2022-05-27 15:10:47 +08:00
c75b67cf5d Fix author avatar in dark mode 2022-05-27 15:01:51 +08:00
9ebb26559a Auto dark mode 2022-05-27 14:46:30 +08:00
0e78d9ed40 Fix recent posts alignment 2022-05-26 17:41:59 +08:00
08b3054ada Hover effect 2022-05-26 16:25:05 +08:00
f5cb9a73d0 Fix featured post indicator layout shifting 2022-05-26 16:19:59 +08:00
e27f2190d6 Add conditions to check if members feature is enabled 2022-05-26 16:08:10 +08:00
c205947374 Fix table element selector 2022-05-26 15:55:16 +08:00
628a32ba96 Rename has-cover-image body class 2022-05-26 14:33:06 +08:00
0bf84b2b80 Post access indicator 2022-05-26 14:31:14 +08:00
7a86c6fd92 Show the reading time separate only if it exists 2022-05-26 13:56:10 +08:00
cfd767be88 Social links 2022-05-26 13:44:38 +08:00
4461d5e2f8 Featured post indicator 2022-05-26 13:31:16 +08:00
9efff7d6fa v5.0.0 2022-05-20 21:51:00 +08:00
358f3d6d35 Archive template spacing 2022-05-20 21:49:12 +08:00
4e30aff168 Minor dark mode fix 2022-05-20 21:49:12 +08:00
362a4995a2 Page template specific fixes 2022-05-20 21:49:12 +08:00
b0dfa11ff0 Polishing 2022-05-20 21:49:12 +08:00
508bbf1fb0 Spacing, spacing and spacing 2022-05-20 21:49:12 +08:00
a0cedfe23e Rename @custom.site_logo_in_main_navigation 2022-05-20 21:49:12 +08:00
1076078f8b Update ghost version 2022-05-20 21:49:12 +08:00
fe257987ce More spacing issue fixes 2022-05-20 21:49:12 +08:00
83669da41c Minor thing 2022-05-20 21:49:12 +08:00
be6943780d Remove auto dark mode 2022-05-20 21:49:12 +08:00
1f7cd51245 Minor detail adjustments 2022-05-20 21:49:12 +08:00
082cadf640 Rename recent posts setting 2022-05-20 21:49:12 +08:00
c74be0e346 Post image style setting 2022-05-20 21:49:12 +08:00
5fc101fb2c Layout settings cleanup 2022-05-20 21:49:12 +08:00
6439992db2 Fix wrong conditions for @custom.site_logo_in_main_navigation 2022-05-20 21:49:12 +08:00
21c6f59a61 Header settings cleanup 2022-05-20 21:49:12 +08:00
5424c465fb Settings cleanup 2022-05-20 21:49:12 +08:00
994a2287a2 List layout 2022-05-20 21:49:12 +08:00
6236067373 Minor adjustments 2022-05-20 21:49:12 +08:00
68c6224a92 Mobile screen refinement 2022-05-20 21:49:12 +08:00
838120323a More theme settings cleanup 2022-05-20 21:49:12 +08:00
98f7f53119 Post template 2022-05-20 21:49:12 +08:00
d9f92dfe89 Author and tag templates 2022-05-20 21:49:12 +08:00
b811b72333 Post layouts 2022-05-20 21:49:12 +08:00
6c922fca35 Cleanup header style 2022-05-20 21:49:12 +08:00
4c8ccde081 Header option 2022-05-20 21:49:12 +08:00
5672c0b6c8 Post card 2022-05-20 21:49:12 +08:00
f74e9241bb Header 2022-05-20 21:49:12 +08:00
ff4e4226c0 v4.7.5 2022-05-02 17:44:06 +08:00
9a09ff41c3 Add a class name to site description 2022-05-02 17:43:02 +08:00
f41761e0ad v4.7.4 2022-04-08 18:05:35 +08:00
11b52ed0cf Fix paginated posts of the list layout 2022-04-08 18:04:54 +08:00
c3fa4f6b24 Remove deprecated ghost-api property 2022-03-28 15:48:20 +08:00
19d5b6c297 Remove unused csscomb files 2022-03-23 11:15:07 +08:00
76f0037467 v4.7.3 2022-03-01 11:44:07 +08:00
37a09189c3 Make editor and markdown blockquote styles consistent 2022-03-01 11:43:00 +08:00
13458e0d2d Add a class to card meta author 2022-01-26 13:10:55 +08:00
eb007cb1c1 Show read more wrapper when only there are other recent posts 2022-01-25 14:28:22 +08:00
55f5ba65c6 Update dependency gscan to v4.22.0 (#827)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2022-01-14 10:39:46 +00:00
5cdcda15ee 2022 2022-01-05 12:43:26 +00:00
18f6d85da5 Updating spelling fixes #834 2022-01-04 11:57:24 +08:00
1f3418708c Add <kbd> style
fixes #822
2022-01-03 12:08:16 +08:00
05d0b0c7db v4.7.2 2021-12-17 18:16:43 +08:00
08f480ff78 Update dark style header card background color 2021-12-17 18:16:21 +08:00
56ec2e9a90 v4.7.1 2021-12-17 16:30:15 +08:00
c4f2d74d80 Apply custom heading color only to light header style 2021-12-17 16:24:24 +08:00
c378e9a9c9 v4.7.0 2021-12-17 15:58:13 +08:00
db98015d41 Header card tweaks 2021-12-17 15:06:34 +08:00
7e9cf5c478 v4.6.1 2021-12-16 09:46:13 +01:00
0f9a3c79c1 Fix list layout style on medium screen size 2021-12-16 12:53:45 +08:00
8ff91f709e Updated callout emoji line-height 2021-12-15 15:00:52 +01:00
feb2de765c v4.6.0 2021-12-15 13:02:03 +00:00
9b45ff3418 Card css specificity update (#832)
The default CSS styles of new Koenig cards that have been released in the past couple of weeks was updated for better usability in themes in general (read commit message for reasons and more reference).

This commit contains CSS cleanup and updates in theme styles that aligns Casper to this change.
2021-12-15 13:06:42 +01:00
827f37255c Updated styles for file upload card 2021-12-14 14:38:49 +01:00
ffdf853323 v4.5.0 2021-12-13 17:47:11 +01:00
e4543555fa Fixed a rule so that it doesn't overrides the product card css
refs https://github.com/TryGhost/Team/issues/1245

- Followed the same pattern as the callout, ntf and bookmark cards.
2021-12-13 17:23:49 +01:00
67e7291c2b Footer > Adding Lazy loading in the profile image 2021-12-13 16:09:13 +08:00
c880856a32 Revert dark mode style of product card rating 2021-12-10 09:55:52 +08:00
b06bcd6534 v4.4.0 2021-12-08 15:00:14 +00:00
49f99d956f Add dark mode support to product card star rating 2021-12-08 17:17:47 +08:00
cdb03b65fb Add alternate blockquote styles 2021-12-07 19:05:00 +08:00
e80f22c2a5 v4.3.1 2021-12-06 18:52:26 +08:00
b6474446f8 Updated toggle styles 2021-12-04 08:14:00 -04:00
462770968a Updated callout styles 2021-12-04 08:06:09 -04:00
017a2829b6 v4.3.0 2021-12-01 12:56:41 +00:00
198f12b725 Updated yarn.lock
no issue

- this needed updating after we bumped gscan
2021-12-01 12:55:55 +00:00
48260130fe Update toggle card heading selector 2021-11-29 13:33:59 +08:00
8b392ec6dd Add typography option to toggle card heading 2021-11-25 18:42:19 +08:00
4ea98431b3 Card responsive style refinements 2021-11-25 10:44:09 +08:00
6bc9b021b5 Add toggle content flow spacing 2021-11-25 10:31:36 +08:00
c1006ec649 Use data attribute for Portal links 2021-11-24 10:50:46 +08:00
cad48b230c Add missing styles for toggle card content 2021-11-23 11:32:24 +08:00
b3f6b8a82c Include lists inside toggle card to content styling 2021-11-23 11:28:35 +08:00
2d940d8f59 Exclude default CTA links from link styling 2021-11-23 11:22:56 +08:00
b7ea0cbff7 Upgrade gscan 2021-11-22 21:37:28 +08:00
a8150f7c30 Include toggle text in content styling 2021-11-22 21:35:48 +08:00
b5b1ea001e Updated NFT card styles 2021-11-19 12:02:09 +01:00
370b9ec74e Include .kg-callout-text to content styling 2021-11-19 16:07:09 +08:00
3cbe9b2c97 Remove bookmark card related CSS 2021-11-17 18:22:47 +08:00
d652252699 Remove gallery card related CSS and JS 2021-11-17 17:02:16 +08:00
6107a411a1 Exclude cards from default link styling
refs https://github.com/TryGhost/Team/issues/1227
2021-11-17 15:40:32 +08:00
8feb988375 Update heading selector on dark mode 2021-11-15 13:22:03 +08:00
e898d56f0b v4.2.0 2021-11-05 20:58:43 +08:00
b8319c5bb9 Update gscan 2021-11-05 20:17:41 +08:00
ceaa887371 Add custom settings 2021-11-05 20:14:53 +08:00
c63a07e8df v4.1.1 2021-09-22 15:28:46 +08:00
0e0898d7e9 Fix W3C warning about section lacks heading 2021-09-22 15:26:39 +08:00
2234b14bbd Fix nested main element issue 2021-09-22 15:24:17 +08:00
046d53e885 v4.1.0 2021-07-07 12:16:03 +08:00
e49664eca4 Add alt and caption support to feature images (#812)
* Add alt and caption support to feature images

* Add feature image alt support to post card

* Remove three-curlies
2021-07-05 10:59:21 +08:00
21bdffbd8a Fix header element inside header 2021-06-10 13:32:41 +08:00
ea33b00c0a Author page: remove span stray end tag (#808) 2021-06-03 10:15:25 +08:00
17c9fe6c55 v4.0.5 2021-05-10 14:21:53 +08:00
5adeaa458b Make the footer stick to bottom
Currently, the footer doesn't stick to the bottom of the viewport when the page content is small. This fixes the issue by making the <main> element fill the remaining space
2021-05-10 14:20:40 +08:00
5013c91f1a Revert "Pin beeper to v2"
This reverts commit f43f6c567f.
2021-05-06 15:48:36 +08:00
f43f6c567f Pin beeper to v2
Beeper started requiring ESM syntax from v3, and it caused an error when running development workflow
Error [ERR_REQUIRE_ESM]: Must use import to load ES Module
2021-05-06 12:28:54 +08:00
69feef6c46 Exclude development files from zipped theme 2021-05-05 07:53:10 +08:00
4708987c39 Update signup button Portal link
fixes #791
2021-04-02 14:45:33 +08:00
a4eb58f8e7 v4.0.4 2021-04-01 16:18:12 +08:00
5ad96f7c12 Fix post featured image width 2021-04-01 13:20:50 +08:00
6ac55407b3 Break long words
Fixes #788
2021-04-01 13:01:09 +08:00
b0e21fe0f7 Improve code block styling 2021-04-01 12:58:41 +08:00
85cd131cf1 v4.0.3 2021-03-29 11:57:50 +08:00
53ff37cf10 Add background color to default profile image
Fixes #785
2021-03-29 11:43:45 +08:00
816e1f608e Make image block element by default
By doing that, any possible future image alignment issues in post content can be prevented
refs #786
2021-03-29 11:34:53 +08:00
0d49da97a2 Fix list item spacing issue
List items had both top and bottom margin, and it caused some inconsistent spacing for lists inside post content. This updates fixes the issue by only assigning top margin on list items except the first one.
refs: #787
2021-03-29 10:52:15 +08:00
e34e2e3e0a Fix mobile menu overlapping Portal popup
fixes #784
2021-03-22 11:38:03 +08:00
18ceb822dd Update screen.css (#778) 2021-03-19 07:19:03 -04:00
08c1e38ae1 v4.0.2 2021-03-19 16:47:30 +08:00
d9e9e097cd Fix headings and card caption color on dark mode
refs #780
2021-03-19 14:15:52 +08:00
96aac80081 v4.0.1 2021-03-18 17:35:03 +00:00
3fa7f25147 Add Facebook link to the header
Fixes #776
2021-03-18 14:31:56 +08:00
b16671d8a7 v4.0.0 2021-03-15 23:33:48 +00:00
3d6a3dc68f v4.0.0-rc.2 2021-03-12 20:27:07 +00:00
48d06196c2 Fix horizontal scrolling caused by scaling on the subscribe CTA h2 (#765) 2021-03-12 09:53:43 -05:00
573e384381 Add space between gallery/image cards with caption (#766)
Co-authored-by: John O'Nolan <john@ghost.org>
2021-03-12 08:29:53 -05:00
5f127c395b Fix traditional Instagram embeds (#767)
Highly specific styles for traditional Instagram embeds

Co-authored-by: John O'Nolan <john@ghost.org>
2021-03-12 08:27:58 -05:00
3cc9cb0988 Fix headings typography scale (#771) 2021-03-12 08:25:37 -05:00
ca36c4fe91 Only use post-card-large variation if feature_image exists (#764) 2021-03-11 13:44:10 -05:00
260d5ec4e6 Fix horizontal alignment of smaller post images (#759)
Co-authored-by: John O'Nolan <john@ghost.org>
2021-03-11 13:37:58 -05:00
410ec1a9d5 Fix logo size in header on small screens (#760)
Co-authored-by: John O'Nolan <john@ghost.org>
2021-03-11 13:37:00 -05:00
e72f4236be Fix long links causing horizontal scrolling on small screens (#761)
Co-authored-by: John O'Nolan <john@ghost.org>
2021-03-11 13:36:13 -05:00
c0d5a3d999 Fix broken card layout caused by long strings (#762) 2021-03-11 13:33:25 -05:00
b927cf62ed Adjust infinite scroll selector to target article.post-card (#763)
The tag archive header shares the same classes as post cards, but have different elements.

This changes the selector to target article.post-card, which ignores header.post-card
2021-03-11 13:32:57 -05:00
91ced578c5 Updated tagName in release script
no issue

- as of 4.0, we're shipping tags with the preceding `v`, but this script
  ignored that and so the release was incorrect
- this commit updates the tagName to have the preceding `v`
2021-03-10 21:11:23 +00:00
87772282c8 v4.0.0-rc.1 2021-03-10 21:08:10 +00:00
bcfeb9be74 Update dependency gscan to v4 2021-03-10 21:04:49 +00:00
5b310a00f4 Merged 4.0 into main
no issue

- Casper is now ready for 4.0 so this commit merges the branch in to try
  and keep the Git history as clean as possible
2021-03-10 21:03:13 +00:00
a6a5d1eba1 3.1.3 2021-03-10 21:00:57 +00:00
fa8cc4cf2e Update dependency gulp-zip to v5.1.0 2021-03-10 09:48:00 +00:00
3a5fda7009 Spacing fix on author profile 2021-03-09 22:23:47 -05:00
4f2fe7eb43 Update page template style 2021-03-09 22:02:35 -05:00
be0600a603 Update end of post CTA bg color 2021-03-09 21:33:13 -05:00
e4faa3141a Update dependency postcss to v8.2.8 2021-03-09 22:41:13 +00:00
a78784decf Fix codeblock specificity, props @pauladamdavis 2021-03-09 09:27:47 -05:00
a516282b73 Correct logo height in navbar 2021-03-09 09:04:50 -05:00
ea6942a7fe Fix bug with :not unfixing previous fix of ::not which it turns out is not a thing 2021-03-09 09:03:54 -05:00
b5c2869ff6 Fix bug where incorrect styles were applied if codeblocks have captions 2021-03-08 16:08:47 -05:00
b7faac9eda Dark codeblocks by default 2021-03-08 15:59:11 -05:00
372dca859b Reinstate a class which as it turns out was not unused after all 2021-03-08 11:46:41 -05:00
30cd8d97e0 Remove unused old script from homepage 2021-03-08 11:30:16 -05:00
0584a58c6c Remove overlays from cover image, these only worked when CSS bg image, not img tag 2021-03-08 11:28:11 -05:00
2231274b07 Remove unused old class 2021-03-08 11:25:46 -05:00
715f95d209 Typography fixes 2021-03-06 21:54:43 -05:00
1e0e813931 Update dependency autoprefixer to v10.2.5 2021-03-05 15:52:56 +00:00
2c356f1cc4 Update dates to be locale-friendly, props @levee223 2021-03-05 10:13:14 -05:00
140666ee44 v4.0.0-rc.0 2021-03-05 14:07:06 +00:00
70f71e9839 Updated built JS assets
no issue

- these weren't rebuilt when changing the code
2021-03-05 14:05:57 +00:00
bd1dbd51c7 Updated default Ghost compatibility in release script
no issue

- not important, but it saves manually entering it during the release
  process
- Casper is only compatible with Ghost 4.0 moving forwards
2021-03-05 13:28:15 +00:00
f590fb029a Tag archive 2021-03-04 18:31:29 -05:00
7617c7baf2 Author profile 2021-03-04 17:22:45 -05:00
b5d0589222 And so the lord said unto Moses, let us obliterate this CSS 2021-03-04 08:05:28 -05:00
Naz
e95293cc22 Updated deprecated @site.lang to @site.locale
refs https://github.com/TryGhost/Team/issues/509
refs b0f80be408

- @site.lang property is being deprecated with Ghsot 4.0 and @site.locale is advised to be used instead
2021-03-04 19:48:58 +13:00
2d27e13f14 Remove visibility parameter 2021-03-04 12:20:10 +08:00
0d1cf89cc0 Update dependency postcss to v8.2.7 2021-03-04 00:43:23 +00:00
a43c6b3cbc Fixed logic for checking GitHub token
no issue 

- the check needs to be inverted to ensure we're being passed a token
2021-03-04 00:29:56 +00:00
1365eab4ae Cleanup 2021-03-03 15:44:30 -05:00
cf24eccdf2 Added Renovate to package.json
no issue

- the renovate.json file was removed to clean up the repository files,
  but we still want Renovate to update dependencies
- Renovate allows us to configure the config in the package.json, so
  this commit moves the previous contents there
2021-03-03 13:24:16 +00:00
f12ce05454 Removed the need for config.json when releasing
no issue

- we previously needed a config.json to provide the GitHub token for
  publishing new Casper releases
- this commit removes the need for this file by pulling the token from
  the environment variable, which everyone in the Core team has set up
2021-03-03 13:20:58 +00:00
44e33120cb Cleanup 2021-03-03 08:11:16 -05:00
6c7cf02111 Style refresh 2021-03-02 21:48:32 -05:00
609507d22d Keep bookmark author and publisher classes for GScan 2021-03-02 16:53:53 +08:00
fd89c6575c Remove specific selectors from bookmark metadata 2021-03-02 13:59:05 +08:00
c680f4efcd Style refresh 2021-03-01 20:34:12 -05:00
Naz
b59893091c Removed conditions which used @labs.members helper
refs https://github.com/TryGhost/Team/issues/332
refs 870a09b109

- The {{@labs.members}} always evaluates to "true" starting with Ghost 4.0 and will be "null" coercing to "false" starting Ghost 5.0
- Enabled all conditionals be default to pass the build in main Ghost repository. These changes should be reviewed - special attentio to the left out RSS feed which was surrounded with {{unless @labs.members}} condition
2021-03-01 19:44:07 +13:00
5fd447b815 Style refresh 2021-02-28 20:10:09 -05:00
9ac38156da Update dependency inquirer to v8 2021-02-26 00:59:59 +00:00
f9d9b1fab5 Disable dark mode by default
Dark mode is disabled by default, but can be enabled by adding a class dark-mode to html element.
2021-02-25 21:58:09 +08:00
Naz
1ea3ad649b Updated ghost-engine to v4
refs https://github.com/TryGhost/Team/issues/221
26e20d223d

- The default engine for Casper shipping with Ghost v4 has to match up.
This way it uses all the correct APIs
2021-02-25 03:17:07 +13:00
fc8cf0b2f4 Update dependency @tryghost/release-utils to v0.6.12 2021-02-22 08:14:53 +00:00
676b73172f Increase contrast of excerpts 2021-02-18 15:16:42 +08:00
2505089a41 Use old font size for primary tags 2021-02-18 15:09:33 +08:00
957d3049aa Fix link hover effect 2021-02-18 14:50:59 +08:00
8f81522907 Remove focus state from buttons 2021-02-18 14:48:24 +08:00
28d63e1cd2 Accent color for subscribe overlay button 2021-02-18 14:36:49 +08:00
b374b88126 Dark grey as subscribe form border 2021-02-18 12:17:40 +08:00
0449bf5537 Use grey for blockquotes 2021-02-18 12:16:27 +08:00
e985805958 Try a new default accent color 2021-02-18 12:05:56 +08:00
c1fcece376 Use accent color as header background when there is no cover image 2021-02-18 11:40:20 +08:00
306f7b2d9b Accent color usage and subscribe form design update 2021-02-18 11:32:40 +08:00
7e3e891338 Update dependency postcss to v8.2.6 2021-02-10 19:29:09 +00:00
69f5108a39 Update dependency @tryghost/release-utils to v0.6.11 2021-02-09 12:07:09 +00:00
44fa55be19 Update dependency postcss to v8.2.5 2021-02-08 01:10:50 +00:00
df4bfbffb2 Disable dark mode with code injection
It's now possible to disable the dark mode with code injection instead of removing the CSS and rebuilding it, by simply adding a class no-dark to html element.
2021-02-01 12:06:56 +08:00
bcfbc21b8e Lock file maintenance 2021-02-01 00:51:05 +00:00
41330614cd Update dependency autoprefixer to v10.2.4 2021-01-29 18:49:55 +00:00
069280eea2 Apply scroll-margin-top to all elements with id attribute instead of only headings 2021-01-27 17:06:11 +08:00
52f763859a Replace subscribe link with account link for logged in users
refs: #751
2021-01-27 16:44:24 +08:00
e3fd4d707e 2021 2021-01-25 15:58:47 +00:00
854880747d Fix text fragment scrolling which behind the floating top bar
refs: #749
2021-01-22 10:02:51 +08:00
6b9df8bb51 Rebuild assets 2021-01-22 09:52:32 +08:00
1360ed83bd Update dependency autoprefixer to v10.2.3 2021-01-19 19:59:47 +00:00
adfb47009e Updated links to ghost.org sites
no issue

Follow-up task of the updated Ghost Docs structure. Updated links reflecting the new structure to prevent unnecessary 404s and redirects
2021-01-19 13:30:21 +13:00
4752bf03c9 Update dependency @tryghost/release-utils to v0.6.10 2021-01-12 17:05:11 +00:00
a17155a3b6 Update dependency postcss to v8.2.4 2021-01-11 00:05:06 +00:00
a1bf3f3823 Update dependency autoprefixer to v10.2.1 2021-01-08 02:05:45 +00:00
d063fb2806 Update dependency postcss to v8.2.3 2021-01-07 14:05:36 +00:00
4a6dfa8e04 Added main as a deploy branch for theme uploading
no issue

- we will be switching to main soon, and want to update this workflow to show how it should be used
2021-01-07 13:50:49 +00:00
e4a5e96d06 Update dependency autoprefixer to v10.2.0 2021-01-06 03:05:42 +00:00
35e68f6d3f Show members-only posts in the post loop by default 2021-01-05 15:47:56 +08:00
f631f874f7 Update dependency beeper to v2.1.0 2021-01-04 00:07:18 +00:00
74d787831e Lock file maintenance 2021-01-01 00:04:53 +00:00
739deb3e4d Update dependency postcss to v8.2.2 2020-12-29 22:05:17 +00:00
bc3e072d31 Update dependency @tryghost/release-utils to v0.6.9 2020-12-14 04:56:45 +00:00
838c4ecca2 Update dependency gscan to v3.6.1 2020-12-11 10:41:29 +00:00
7a61bf55ed Update dependency postcss to v8.2.1 2020-12-09 13:06:09 +00:00
9baffdd03f Update CSS preprocessors 2020-12-08 07:49:27 +00:00
30ccbca28a Update dependency postcss to v8.1.14 2020-12-04 00:26:02 +00:00
def78b102b Update dependency postcss to v8.1.13 2020-12-03 03:20:22 +00:00
dfb6444b25 Update dependency postcss to v8.1.11 2020-12-03 01:49:56 +00:00
4c298b97cf Lock file maintenance 2020-12-01 00:05:39 +00:00
6c8a048bad Update dependency autoprefixer to v10.0.4 2020-11-27 21:39:19 +00:00
fd02a6c722 Update dependency autoprefixer to v10.0.3 2020-11-26 22:06:52 +00:00
493da38cff Update jQuery version to 3.5.1 2020-11-24 12:01:31 +08:00
19cf4adb74 Update dependency postcss to v8.1.10 2020-11-23 22:25:18 +00:00
daa69cbd31 Update dependency postcss to v8.1.9 2020-11-23 00:05:38 +00:00
267fd00802 Update dependency postcss to v8.1.8 2020-11-19 16:00:59 +00:00
8fefeca41b 3.1.2 2020-11-17 12:32:25 +00:00
45f5c83118 Update dependency postcss to v8.1.7 2020-11-10 18:06:13 +00:00
c3cb51711a Changed bookmark card metadata styling to be consistent with the editor
Classes for author and publisher are temporarily swapped to make sure the changes are backwards compatible until Ghost 4.0
2020-11-10 18:17:11 +01:00
3d189760a8 Update dependency autoprefixer to v10.0.2 2020-11-10 15:05:07 +00:00
8087366537 Update dependency postcss to v8.1.6 2020-11-05 17:05:11 +00:00
7748f8c781 Update dependency postcss to v8.1.5 2020-11-05 15:54:45 +00:00
8783bd4ee8 Update dependency @tryghost/release-utils to v0.6.8 2020-11-05 04:41:15 +00:00
006b056adc Lock file maintenance 2020-11-01 00:04:25 +00:00
fe690d4048 Update dependency postcss to v8.1.4 2020-10-26 00:06:23 +00:00
c3c0374ca6 Update dependency postcss to v8.1.3 2020-10-23 02:25:21 +00:00
0429f85774 Update dependency gscan to v3.6.0 2020-10-21 10:22:37 +00:00
1f8df12a7c Update actions/checkout action to v2 2020-10-20 16:04:56 +00:00
75e68ce5b7 Update TryGhost/action-deploy-theme action to v1.4.1 2020-10-20 14:07:13 +00:00
fa15a48192 Update dependency postcss to v8.1.2 2020-10-19 01:06:17 +00:00
0c36dc5235 3.1.1 2020-10-16 09:19:06 +01:00
aa3c83ec35 Updated built assets 2020-10-16 09:18:36 +01:00
38481aac9a Fixed post content input color issue on dark mode
Fixes #718
2020-10-08 11:36:41 +08:00
0052c2ddc3 Added subscribe failure notification
Fixes #738
2020-10-08 10:22:49 +08:00
9d12bc32f0 Update screen.css (#735)
Fix instance of color() to color-mod()
2020-10-03 11:17:29 +07:00
cb674ab56c Lock file maintenance 2020-10-01 00:16:07 +00:00
c86ee63b86 Pin dependency postcss to 8.1.1 2020-09-30 12:49:12 +00:00
b92f18e55a Added postcss as a dev dependency (required by gulp-postcss) 2020-09-30 13:48:11 +01:00
827940c836 Update dependency autoprefixer to v10.0.1 2020-09-28 00:05:40 +00:00
db0af7f759 Update dependency gulp-postcss to v9 2020-09-23 19:04:44 +00:00
af87b9b3b0 Update dependency @tryghost/release-utils to v0.6.7 2020-09-22 03:39:15 +00:00
ec03acff02 Update dependency autoprefixer to v10 2020-09-15 19:04:52 +00:00
fa48995326 Updated action-deploy-theme to v1.3.1
- hopefully fixes a bug with `theme-name` not being passed through
2020-09-10 13:15:53 +01:00
6350790798 Fix close button in the subscribe success message 2020-09-10 12:28:44 +08:00
ab521da23a Update dependency gscan to v3.5.7 2020-09-07 16:28:49 +00:00
91185016eb Lock file maintenance 2020-09-01 00:05:19 +00:00
0af8d2d8bc Update dependency @tryghost/release-utils to v0.6.6 2020-08-11 17:42:19 +00:00
f50f663ef7 Update dependency @tryghost/release-utils to v0.6.5 2020-08-11 11:52:54 +00:00
a467e31457 Update dependency gscan to v3.5.6 2020-08-10 15:09:56 +00:00
807018ca97 Fix background color of slash of darkmode <hr> (#733) 2020-08-09 00:34:53 +07:00
ce9918de2f Update dependency @tryghost/release-utils to v0.6.4 2020-08-07 15:08:43 +00:00
df2d20caab 3.1.0 2020-08-04 10:59:14 +01:00
c6cb667fea Lock file maintenance 2020-08-01 00:29:35 +00:00
a1d9eae840 Update dependency autoprefixer to v9.8.6 2020-07-30 20:40:44 +00:00
59eefa3659 Updated call to actions/checkout to use v2
refs https://github.com/TryGhost/action-deploy-theme/issues/30

- actions/checkout has changed their default branch name from master to main, which shows warnings.
2020-07-28 12:53:07 +01:00
78bde5f3dc Fix broken link 2020-07-28 00:59:13 +07:00
e637d809f6 Upgraded to color-mod, native CSS vars
Dropping final support for IE11 and moving to newer color-mod package to replace the old deprecated one
2020-07-28 00:52:31 +07:00
e4793cc743 Update dependency gscan to v3.5.5 2020-07-24 10:15:20 +00:00
cd7016493e Update dependency inquirer to v7.3.3 2020-07-23 02:35:30 +00:00
7421cff4fe 3.0.13 2020-07-21 13:41:23 +01:00
c465d95e14 Added new build assets
no issue
2020-07-21 13:40:03 +01:00
c1c6fed941 Update dependency inquirer to v7.3.2 2020-07-13 17:15:27 +00:00
5664f81564 Update dependency autoprefixer to v9.8.5 2020-07-13 00:04:56 +00:00
8838afe43f Lock file maintenance 2020-07-10 19:01:32 +01:00
f53b6b3435 Update dependency inquirer to v7.3.1 2020-07-10 15:46:29 +00:00
be77dad00e Update dependency inquirer to v7.3.0 2020-07-02 05:04:53 +00:00
408cf0cc1e Update dependency gulp-zip to v5.0.2 2020-06-29 00:27:17 +00:00
cfdc8a3b85 Update dependency autoprefixer to v9.8.4 2020-06-24 03:40:53 +00:00
e6a24de5c4 Update dependency autoprefixer to v9.8.3 2020-06-23 14:43:53 +00:00
6d0a3a8899 Update dependency autoprefixer to v9.8.2 2020-06-22 00:21:02 +00:00
b54c3debd4 Update dependency autoprefixer to v9.8.1 2020-06-19 21:33:26 +00:00
0e0589cb04 Disabled yarn-error.log file export to zip (#725) 2020-06-17 19:07:34 +01:00
5bfc82bf0c Update dependency inquirer to v7.2.0 2020-06-15 02:35:55 +00:00
d3ffc71b34 Update dependency @tryghost/release-utils to v0.6.3 2020-05-26 16:22:16 +00:00
871fc4075f Update dependency autoprefixer to v9.8.0 2020-05-18 01:14:52 +00:00
6f37e5a148 Update dependency @tryghost/release-utils to v0.6.2 2020-05-08 16:13:01 +00:00
adc055495c Update dependency gscan to v3.5.4 2020-05-01 09:41:56 +00:00
2ed7ea8f13 Lock file maintenance (#709)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2020-05-01 15:16:09 +07:00
4ddbaae803 Update dependency gscan to v3.5.3 2020-04-22 17:12:58 +00:00
7e0e45c643 Change border-left on blockquote to use color variables (#705) 2020-04-22 18:44:54 +07:00
e0771bfc7e Update dependency gscan to v3.5.2 2020-04-20 19:15:57 +00:00
8f1a15296a Update dependency @tryghost/release-utils to v0.6.1 2020-04-16 13:44:16 +00:00
2bd82a30e8 Update dependency @tryghost/release-utils to v0.6.0 2020-04-07 12:16:10 +00:00
feb7f3aac6 3.0.12 2020-04-07 09:15:05 +01:00
eed15fd9a5 Update dependency autoprefixer to v9.7.6 2020-04-06 21:22:19 +00:00
201b1924cf Update dependency gscan to v3.4.1 2020-04-06 17:10:14 +00:00
387a2aa3f0 Switch testing to built-in Nodejs
no issue
2020-04-06 13:49:51 +01:00
690ca22fb7 Removed test addition 2020-04-03 16:17:14 +01:00
31d43860ac Updated release script
no issue
2020-04-03 16:16:26 +01:00
14f7cc4e31 Updated built files
no issue
2020-04-03 16:04:41 +01:00
7646f90556 Updated theme name in deploy GitHub Actions
no issue

- the theme name cannot be the same as the default
2020-04-03 09:53:48 +01:00
8e17cdc1fb update sdeploy theme (#692) 2020-04-03 14:39:02 +07:00
2da322d93b Lock file maintenance (#699)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2020-04-03 14:36:14 +07:00
709c7196b9 Post cards > Lazyload (#701)
Co-authored-by: Rafael Gomes <rgomes@lesite.ca>
2020-04-03 14:35:58 +07:00
c97b847002 Update dependency @tryghost/release-utils to v0.5.0 2020-04-01 12:17:28 +00:00
7d37adb3cd Update dependency autoprefixer to v9.7.5 2020-03-31 17:33:06 +00:00
4fe7010f4e Update dependency @tryghost/release-utils to v0.4.2 2020-03-31 15:11:06 +00:00
6bf34a5a70 Moved Casper release code into gulpfile
no issue
2020-03-31 16:10:30 +01:00
c9a54e25ab Enabled CI for Renovate branches
no issue
2020-03-31 15:54:56 +01:00
3281f75945 Update dependency gscan to v3.4.0 2020-03-31 15:53:14 +01:00
c8abe3a7c4 3.0.11 2020-03-26 14:29:11 +00:00
150b698b1c Updated Renovate config with new structure
no issue
2020-03-26 10:56:13 +00:00
9ff3aa7858 3.0.10 2020-03-23 12:23:44 +00:00
8886056719 Fixed navigation scrollbar bug
no refs.
- fixed issue that made top navigation scrollbar appear for sites with secondary navigation and members turned off
2020-03-11 13:46:20 +01:00
93628dc7f0 3.0.9 2020-03-09 10:49:09 +00:00
702b2cbf1f Refined width of image captions
no refs.
- updated max width of image caption text
2020-03-04 15:34:15 +01:00
e5969f93da Improved author and tag header styles
no refs.

- added default avatar for authors template
- fixed typography inconsistencies, alignment and spacing issues for author and tags headers
- applied CSSComb
2020-03-04 14:34:03 +01:00
9e29e145fc 🐛 Subscribe overlay fixes
refs. https://github.com/TryGhost/Casper/issues/630

- added a dedicated close button element for the subscribe overlay which sits on top of all elements to ensure the modal is always closable
- fixed alignment and spacing of "Subscribe" button for mobile sizes
2020-03-04 11:26:27 +01:00
74ae3d5140 🐛 Fixed image alignment for small images
refs. https://github.com/TryGhost/Casper/issues/517

- updated styles to center align small images with long caption text
2020-03-03 17:29:34 +01:00
1ec7a12d43 Bumped dependency versions
no issue
2020-03-02 18:36:18 +00:00
9ec0f08a48 3.0.8 2020-03-02 12:02:24 +00:00
b09e846fd2 Update dependency postcss-custom-properties to v9.1.1 2020-03-01 02:18:49 +00:00
92d9174b24 Update dependency @tryghost/release-utils to v0.4.1 2020-03-01 01:18:39 +00:00
c27fc17844 3.0.7 2020-02-05 11:42:31 +00:00
d9cf22a0f7 Update dependency gscan to v3.3.0 2020-02-01 01:18:20 +00:00
7c87383bc6 3.0.6 2020-01-13 14:08:24 +02:00
09d701c4bc 🐛 Removed non-existent variable
Refs. https://github.com/TryGhost/Casper/issues/676

- removed corresponding CSS declaration as the variable `--white` doesn't exist
2020-01-10 15:29:50 +01:00
aec67d8b5f 2020 2020-01-07 18:35:56 +00:00
f55e2b0266 Update dependency gscan to v3.2.1 2020-01-01 01:16:54 +00:00
fee94ba192 3.0.5 2019-12-04 20:39:08 +07:00
bf4b8d7f15 Added secondary navigation (#664)
refs https://github.com/TryGhost/Ghost/pull/11409

- Adds secondary navigation to the main menu
- Updated secondary nav mobile styles
- Updated cover for the scrollable main navigation
2019-12-04 17:41:50 +07:00
98543dd068 3.0.4 2019-11-27 14:11:18 +00:00
5063d40a32 Remove backdrop filter from subscribe overlay 2019-11-23 19:06:13 -08:00
7c8cba7fab Pin dependency gulp-concat to 2.6.1 (#647) 2019-11-11 21:15:08 +07:00
e253954051 Lock file maintenance (#650) 2019-11-11 21:14:53 +07:00
4c7fced3aa 3.0.3 2019-11-11 18:55:36 +07:00
fb9f0e6804 Remove Travis from Renovate config 2019-11-08 16:35:58 +07:00
88e3db9d3b Switched to gscan testing via GitHub Actions
no issue
2019-11-08 16:35:06 +07:00
7733f0db63 Update dependency gscan to v3.1.1 2019-11-01 04:27:02 +00:00
1c5db5c027 Update dependency autoprefixer to v9.7.1 2019-11-01 03:25:25 +00:00
e4afcc233f Update dependency @tryghost/release-utils to v0.3.3 2019-11-01 00:26:39 +00:00
a66beb4e10 🐛 Fixed page style in dark mode
closes https://github.com/TryGhost/Casper/issues/643

- fixes background color for pages in dark mode
2019-10-30 13:43:47 +01:00
c82e1cb035 3.0.2 2019-10-30 11:07:59 +00:00
065849105b Author meta and bookmark style refinements
refs. https://github.com/TryGhost/Casper/pull/631
- refined colors of links and separator dots for various cases (light/dark mode/with and without header background image)
- fixed bookmark card hover style
- ran CSSComb
2019-10-30 11:35:29 +01:00
a1fc6090d2 Very small fix on author meta links color 2019-10-30 11:35:29 +01:00
68b0270ed5 Dark mode table style fix (#641)
refs. https://github.com/TryGhost/Casper/issues/637

- fixed styles for tables in dark mode
2019-10-29 16:27:40 +01:00
6d56e5866e 3.0.1 2019-10-29 14:20:08 +00:00
8993409296 Error page improvements (#639)
refs. https://github.com/TryGhost/Casper/issues/632

Error page fixes and improvements
- uses default template (i.e. standard header and footer) on 404 error page
- fixed not displaying authors and primary tags on recommended posts on 404 error page
- fixed background for navigation bar on generic error page
- refined error code and message styles
2019-10-28 16:28:25 +01:00
307c334cd5 🐛 Fixed images on infinite scroll index pages being stretched in Safari (#636)
closes #634, closes #635

- use `document.importNode` to create a clone of post card elements when pulling them in from infinite scroll pages
- cloning the element means the element's owner document matches the viewed document and ensures images in the inserted post card elements are sized according to the viewed document
2019-10-24 17:15:34 +01:00
17ba4add5c 3.0.0 2019-10-21 22:41:48 +07:00
e37e444e9a Update deploy-theme.yml
- bump action version
- add a custom theme name
2019-10-21 12:49:04 +01:00
57cee0c680 3.0.0-beta.8 2019-10-21 18:34:45 +07:00
ff51925567 Fixed sticky title and author hover JS (#629)
no issue

- replaces author hover JS that was lost during merge
- replaces `floating-header.js` with `sticky-nav-title.js` containing the relevant JS that was lost during merge with a cleanup for unused variables and unnecessary event listeners
- removes reference to non-existent `{{> floating-header}}` partial
2019-10-21 10:02:05 +01:00
3e910e954e Updated built CSS (#627)
no issue

- ran `gulp` to rebuild the CSS after the v3 merge
2019-10-21 09:53:28 +01:00
50437fd72e Fixed duplicate browserslist config (#628)
no issue

- removes duplicate `browserslist` key from `package.json`
2019-10-21 09:52:45 +01:00
1915a91c5b 3.0.0-beta.7 2019-10-21 13:05:33 +07:00
b51dd8ce22 V3 (#626)
* Changed {{code}} to {{statusCode}}

refs 2ebd9feeee

- {{code}} use has been deprecated in canary rule set of gscan

* V3 Update

* Update package and readme for 3.0

* Improve install instructions

* Update to support browserlist

* Upgrade dependencies

* Fix misnamed property

* V3 darkmode (#619)

Added dark mode styles

* Casper final  refinements batch 1

* Casper final  refinements batch 2

* Fixed bookmark card hover bug

* Fixed header social links

* Updated screenshots

* Updated readme

no issue

- refreshed screenshot

* Udpate screenshot in readme

no issue

* 3.0.0-beta.2

* Fixed cut header for post cards

no issue

* 3.0.0-beta.3

* 3.0.0-beta.4

* Updated current version and previous version logic (#554)

no issue

- Use current version from `package.json` instead of `npm_package_version` env variable
- Use `release.tag_name` instead of `release.name` for previous version

* Updated jQuery to 3.4.1 to avoid known vulnerabilities (#590)

no issue

https://snyk.io/vuln/npm:jquery?lh=3.2.1&utm_source=lighthouse&utm_medium=ref&utm_campaign=audit

* Fixed code cards with long lines from being too wide

no issue

Credits - https://github.com/TryGhost/Casper/pull/602

* Bumped gscan version to v3.0.0 (#621)

* Bumped gscan to v3.0.0

- This also fixes failing CI builds because the default rules that are being checked were for v2

* Added explicit version check for gscan command

* Added member subscription support (#623)

* Added member subscription support

no issue

* Added member subscription success message

no issue

* Added member subscription overlay

* Refined members subscription overlay

* Deleted unused website icon

* Ran CSSComb

* Updated built assets

* 3.0.0-beta.5

* Updated built assets for v3

no issue

* 3.0.0-beta.6

* Remove unused partial

* V3 cleanup (#625)

* Removed unused infinity icon

* Removed unused location icon

* Removed unused 'point' icon

* Removed unused Ghost logo icon

* Removed unused author partials

* Cleaned up index log

* Fixed responsive feature image sizes for page template
2019-10-21 12:43:34 +07:00
7ad20d1325 Fixed deprecated autoprefixer config warning when running build tasks
no issue

Passing browser options directly into `autoprefixer()` has been deprecated in favour of general browserslist configuration in `package.json` or a `.browserslistrc` config file

- moved autoprefixer browsers list into `browserslist` config in `package.json`
- updated `autoprefixer` version
2019-10-20 16:05:37 +02:00
978ffe0eb6 Concatenated all JS into a single file (#624)
no issue

- moved large inline JS from templates into separate JS files
  - floating header
  - gallery card support
- use `gulp-concat` to concatenate all JS files into a single `built/casper.js` file
- reduces external JS file requests from 3 (jquery, infinite-scroll.js, jquery.fitvids.js) down to 2 (jquery, casper.js) and reduces page size by removing repeated inline code
2019-10-20 15:55:06 +02:00
53ad2d8096 Updated Build Tools (#571) 2019-10-20 13:47:06 +05:30
f7e4cabc58 Update dependency postcss-custom-properties to v9 (#592) 2019-10-20 13:41:11 +05:30
392626f3b2 Bumped Gscan and made rule check explicit to v2 set (#622)
* Bumped gscan to v3.0.0

* Added explicit v2 version check for gscan command
2019-10-20 12:21:27 +05:30
8bb4508ff2 Fixed code cards with long lines from being too wide
no issue

Credit to https://github.com/mvasilkov for the fix -  https://github.com/TryGhost/Casper/pull/602
2019-10-20 12:14:21 +05:30
e5e62f1eed Updated jQuery to 3.4.1 to avoid known vulnerabilities (#590)
no issue

https://snyk.io/vuln/npm:jquery?lh=3.2.1&utm_source=lighthouse&utm_medium=ref&utm_campaign=audit
2019-10-20 12:09:36 +05:30
2eaeba8ba8 Updated current version and previous version logic (#554)
no issue

- Use current version from `package.json` instead of `npm_package_version` env variable
- Use `release.tag_name` instead of `release.name` for previous version
2019-10-20 12:05:13 +05:30
728392e51e Automatically deploy theme on master only
- switch from all branches to master only
2019-10-18 17:14:36 +01:00
7161dca4ca Added deploy ghost theme github action
- see https://github.com/marketplace/actions/deploy-ghost-theme
- use the new deploy theme github action to automatically deploy master to a test site
2019-10-18 14:20:28 +01:00
215d837848 2.11.2 2019-10-07 23:11:17 +01:00
d2ec8d1c31 Update dependency gulp-livereload to v4.0.2 2019-10-01 01:30:15 +00:00
4a4f66a710 Update dependency gscan to v2.9.0 2019-10-01 01:29:48 +00:00
8729af090f 2.11.1 2019-08-27 19:44:35 +01:00
c40627256a Added max length for bookmark card publisher field (#608)
no issue

- fixed style for bookmark cards with too long publisher field
2019-08-27 19:29:48 +01:00
32d3538f6b 2.11.0 2019-08-27 21:01:30 +05:30
f5b2a2f209 Added bookmark card CSS (#607)
refs 9bfd340885 and c2aa62083c

Adds css for styling new bookmark card which generates following html -
  ```html
  <figure class="kg-card kg-bookmark-card">
    <a href="[URL]" class="kg-bookmark-container">
      <div class="kg-bookmark-content">
        <div class="kg-bookmark-title">[TITLE]</div>
        <div class="kg-bookmark-description">[DESCRIPTION]</div>
        <div class="kg-bookmark-metadata">
          <img src="[ICON]" class="kg-bookmark-icon">
          <span class="kg-bookmark-author">[AUTHOR]</span>
          <span class="kg-bookmark-publisher">[PUBLISHER]</span>
        </div>
      </div>
      <div class="kg-bookmark-thumbnail">
        <img src="[THUMBNAIL]">
      </div>
    </a>
  </figure>
  ```
2019-08-27 20:56:42 +05:30
29426e1483 2.10.7 2019-08-22 07:31:34 +05:30
f5bba69235 Remove unused conditional
Closes #593
2019-08-21 13:53:47 +08:00
788ee59fd4 Improve gulp globbing (#598) 2019-08-21 13:51:43 +08:00
a6ce913546 2.10.6 2019-08-06 17:34:38 +08:00
8ad3b82f58 Update dependency gscan to v2.7.0 2019-08-01 03:27:54 +00:00
c66d64dd79 Update CSS preprocessors 2019-08-01 00:48:07 +00:00
095d7f85c6 2.10.5 2019-07-30 20:24:26 +05:30
812b9ba657 Merge pull request #599 from mvasilkov/pre-selection-color-patch
Better contrast for selected text inside `pre code` blocks
2019-07-30 12:26:16 +01:00
56d1ff2337 Better contrast for selected text inside pre code blocks 2019-07-30 14:08:45 +03:00
dc74e24d0c 🔗 Updated docs link to be version-less 2019-07-25 14:56:04 +08:00
e4e97aefa9 2.10.4 2019-07-23 12:01:47 +01:00
df7c2321c6 Updated links to docs site 2019-07-22 18:25:22 +08:00
6886798b60 2.10.3 2019-07-01 13:31:22 +07:00
42c26629bf Update dependency autoprefixer to v9.6.0 2019-07-01 03:31:32 +00:00
89a12765be Update dependency gscan to v2.6.2 2019-07-01 00:31:51 +00:00
fa54c4713f 2.10.2 2019-06-04 13:01:40 +02:00
0494b48ad0 Update dependency gulp to v4.0.2 2019-06-01 01:29:25 +00:00
e6cb772b2d Update dependency gscan to v2.6.0 2019-06-01 01:28:55 +00:00
2dad5af417 2.10.1 2019-05-14 11:16:04 +02:00
43b8f3d11a Substituted deprecated {{each}} helper with recommended {{foreach}}
refs https://github.com/TryGhost/gscan/issues/123

- As documentation says (https://docs.ghost.org/api/handlebars-themes/helpers/foreach/)  {{foreach}} should always be used instead of native {{each}} helper
- Deprecation warning was implemented in gscan and  will prompt when uploading the theme
2019-05-07 15:37:14 +02:00
21d097d530 2.10.0 2019-05-07 12:37:29 +02:00
ec296edfa0 Added support for code cards with captions (#575)
refs https://github.com/TryGhost/Ghost/pull/10719

- adds styling for `.kg-code-card` so that code blocks are styled the same no matter if they are top-level or inside of a `<figure>` element
2019-05-01 17:12:18 +02:00
ff43de1c63 Lock file maintenance (#572) 2019-05-01 10:38:23 +02:00
0b17a6ac06 Re-build CSS using latest dependencies (#573)
no issue

- CSS preprocessor dependencies have been updated, this re-builds the CSS to match the latest processed output
  - the primary change is the addition of the `::-moz-selection` vendor prefix
2019-05-01 10:28:34 +02:00
64fdc798d9 Update dependency gulp to v4.0.1 2019-05-01 01:26:49 +00:00
88552e5d18 Update dependency gscan to v2.5.1 2019-05-01 01:26:28 +00:00
93c4ea58ed 2.9.11 2019-04-23 11:34:46 +02:00
87abdc2c31 Updated travis.yml file 2019-04-18 14:10:35 +01:00
dc05ff2f49 Update Renovate Configuration
- Use the new shared configuration
- This is a special config for themes which is scheduled monthly, not weekly.
2019-04-17 21:38:32 +01:00
50c53f4263 Updated .travis.yml file
- most up-to-date version of our config
2019-04-17 21:26:56 +01:00
2a5aac2719 2.9.10 2019-04-16 16:42:31 +05:30
b4d0219d4e Added livereload for .hbs files 2019-04-15 12:55:37 +08:00
85fed4f083 Lock file maintenance 2019-04-15 02:34:36 +00:00
aac62daaca Update dependency gscan to v2.4.1 2019-04-15 01:28:38 +00:00
fef2307d6d 2.9.9 2019-04-09 19:30:37 +08:00
de8b83738e Lock file maintenance 2019-04-08 04:37:12 +00:00
4a2e9c9b20 Update dependency @tryghost/release-utils to v0.3.2 2019-04-08 03:26:03 +00:00
070bed3f40 Update dependency gscan to v2.4.0 2019-04-08 02:29:24 +00:00
7f8990c0d8 Update css processors 2019-04-08 01:29:23 +00:00
23bd9cc1d5 2.9.8 2019-04-04 14:58:47 +01:00
8e5c1b22dd Updated .travis.yml file
- ran slimer fix travis to get latest settings
2019-04-03 19:38:58 +01:00
c4fb156508 Added SECURITY.md file
- Consistent with other public repos
- Points at our docs on how to report security issues
2019-04-03 19:38:16 +01:00
91ffa335de Update Renovate Configuration
Updates the base configuration to include:
- node support policy
- lockfile maintenance
- optimistic automerging
2019-04-02 17:54:50 +01:00
0d8f4471d9 2.9.7 2019-04-02 10:02:13 +01:00
4464d5809b Fixed deprecated {{lang}} helper usage
no issue

- {{lang}} helper was deprecated in favor of {{@site.lang}} with 73e008270d
2019-04-02 12:39:00 +08:00
37c0f22b09 2.9.6 2019-03-19 16:41:50 +05:30
7706045616 Update dependency @tryghost/release-utils to v0.3.1 2019-03-19 14:38:30 +05:30
51b93e389c Update dependency autoprefixer to v9.5.0 (#553) 2019-03-18 14:29:41 +00:00
b1ce464ea3 Added .yarnrc
no issue

- Casper uses `%s` tag naming
- Let's keep this, otherwise release order is broken
- Ghost & Ghost-Admin use this notation too
- It will tell `yarn version` to use `%s` instead of `v%s`
2019-03-15 14:38:26 +01:00
8729dafcf5 Extended yarn ship: more automation
no issue

- added gulp task to extend casper release automation
- will draft the release for you
- will get the user facing commits from changelog
- runs after `yarn ship` (postship)
- full automation with env variables is possible
2019-03-15 14:38:26 +01:00
406ef78109 Gulpfile ES6
no issue

- ES6
2019-03-15 14:38:26 +01:00
2bf64cbffc v2.9.5 2019-03-12 18:38:14 +00:00
a212518827 🐛 Fixed incorrect/missing colours for various elements
closes https://github.com/TryGhost/Casper/issues/548
- the recent postcss upgrade resulted in real CSS variables being output with a fallback mechanism, unfortunately this broke a number of colors throughout the theme
- disabled the fallback mechanism to revert back to the previous behaviour
2019-03-12 18:14:48 +00:00
2da714ef2e Upgrading Casper to 2.9.4 2019-03-12 20:23:45 +08:00
66def0d7c0 Update Renovate Configuration
- schedule renovate for early monday mornings
2019-03-10 17:50:24 +00:00
6640701aeb Regenerate yarn.lock
- results in clean lodash versions
- needed due to lodash security vuln
2019-03-10 17:44:44 +00:00
7fec21f7d9 Update dependency gscan to v2.3.0 2019-03-10 17:39:42 +00:00
018423738e 🛠 Always build before test, test before ship
- Make sure we update our build files before running tests
- This also ensures they get updated before shipping
2019-03-10 17:30:20 +00:00
371ad586d3 Updated all built assets
- many dependencies have changed, need to rebuild
2019-03-10 17:30:20 +00:00
06c8020c16 Re-written gulpfile for gulp 4
- use the new, simpler format
- sourcemap and watch support is built in, so these plugins can be removed
- remove js filter - not sure what that did :/
- simplified task structure
2019-03-10 17:30:20 +00:00
3a40332515 Update gulp 2019-03-10 17:30:20 +00:00
56c9795306 Update css processors 2019-03-10 16:09:25 +00:00
dd19a0a65b Update css processors 2019-03-10 16:07:35 +00:00
3b3a091069 Update gulp 2019-03-10 15:27:03 +00:00
ff189b7c08 Update dependency gscan to v2.2.1 2019-03-10 15:21:18 +00:00
5bbaa68863 Update Renovate Configuration
- make PR names make more sense
2019-03-10 15:19:51 +00:00
10672c642e 🐛 Fixed author cover images not displaying
closes https://github.com/TryGhost/Casper/issues/542
- user model has `cover_image` property rather than `feature_image`
2019-03-08 08:47:58 +00:00
3e7a85a82e Update renovate.json
- group CSS dependencies together
2019-03-04 19:53:35 +00:00
8fa0aa1b64 Pin dependencies 2019-03-04 19:48:25 +00:00
18018d9edf Update renovate.json 2019-03-04 19:45:12 +00:00
e0faae69ed Add renovate.json 2019-03-04 19:45:12 +00:00
bf89e8e5ab v2.9.3 2019-02-21 11:56:29 +01:00
c8c63d170c Fix bug with embeds overflowing content width 2019-02-18 12:54:29 +07:00
40ae0e97f9 Upgrading Casper to 2.9.2 2019-02-12 16:17:57 +05:30
6541544026 Added "yarn ship" command
no issue

- @TODO: add the ability to draft a release when running `yarn ship`
2019-02-11 19:30:21 +01:00
d92b90db96 Updated .travis.yml to use Node v10
no issue

- see 99c3338ca9 (diff-354f30a63fb0907d4ad57269548329e3)
- see https://docs.ghost.org/faq/node-versions/
2019-02-11 16:42:11 +01:00
9ababa2886 Upgrading Casper to 2.9.1 2019-01-22 11:04:56 +00:00
047c7c0c9c Added missing closing brackets in partials/header.hbs styles (#521) 2019-01-22 11:04:03 +00:00
273e987240 Updated gulp to handle errors for every stream (#500)
no-issue

Previously we only added an error handler to the first stream in each
pipeline, this meant that if another stream errors you would get
unhelpful error handlers.
2019-01-22 11:00:10 +00:00
0171b3e05b Use a larger logo size (#520) 2019-01-15 22:51:08 +07:00
72a9416197 Upgrading Casper to 2.9.0 2019-01-15 14:01:40 +01:00
f57f9ebc99 Update no-image classes
Closes https://github.com/TryGhost/Casper/pull/513
2019-01-15 15:06:19 +07:00
b2322157d5 Migrated from @blog -> @site
no issue

- This rename is due to new {{@site}} alias introduced in Ghost (dd1cf5ffc7) as {{@blog}} variable is deprecated now, and will be removed in v3
2019-01-08 17:37:14 +00:00
3b8f3f1eac Bumped default Ghost API version to v2
no issue

- This change is due to Content API becoming stable https://github.com/TryGhost/Ghost/releases/tag/2.10.0
2019-01-08 14:30:22 +00:00
7d080d564f Upgrading Casper to 2.8.1 2019-01-08 11:48:06 +00:00
3388283f02 2019 2019-01-01 14:18:28 +00:00
475c015fa2 Upgrading Casper to 2.8.0 2018-12-17 14:13:04 +00:00
79ebbd50a3 Responsive images (#505) 2018-12-17 12:25:57 +00:00
a22dda9694 Upgrading Casper to 2.7.1
no issue
2018-12-11 12:03:03 +01:00
3c2347c7f9 🎨 Optimised infinite scroll (#503)
no issue
- removed jQuery usage
- use the `<link rel="next">` tag provided by Ghost to determine the next page to fetch
2018-12-05 12:38:11 +00:00
f695d69aeb Upgrading Casper to 2.7.0 2018-10-16 15:45:26 +01:00
d53b25bf5d Remove double slash in link
no issue
2018-10-12 12:56:54 +07:00
bef56a2294 Minified js (#485)
no issue

- Added a `js` task to run on the gulp build process and minifies our js files
- Changed the required scripts in `default.hbs` to use the minified js files in `/built/`
- Moved existing `js` tasks from `zip` task
2018-10-12 12:41:06 +07:00
5ad6e1ed1f Add titles to icon links 2018-10-12 12:01:05 +07:00
36971db512 Upgrading Casper to 2.6.4 2018-10-09 16:06:07 +02:00
bfcab7172f Minified javascript in zip(#476)
no issue

* Added js minification step to gulp zip script
2018-10-08 16:34:07 +05:30
fce92d6cf1 Link to required dependencies
Refs https://github.com/TryGhost/Casper/pull/468
2018-10-08 11:45:06 +07:00
d48178fde9 Remove css rule that stops syntax highlighting (#484)
* Remove suspect css rule

Removed the ".post-full-content pre code * { color: inherit }" rule which prevents highlight.js from working.

* Changed to just exclude span

Less disruptive to just remove span from color inheritance.

* Remove extra newline
2018-10-08 06:40:06 +02:00
6f4fe840b3 [Fix] Inline <code> tag word-break inside a <p> tag (#483) 2018-10-08 06:38:28 +02:00
8a9efb5ef1 Upgrading Casper to 2.6.3 2018-09-25 11:32:08 +07:00
04854967a8 Adjusting spaces for galleries and wide images in a sequence (#480) 2018-09-24 14:35:47 +02:00
fa18115aa6 Upgrading Casper to 2.6.2 2018-09-11 13:42:34 +02:00
ae192a9fff 🐛 Fixed word-wrap for extra long anchor links text (#478)
refs #466

Anchor links didn't break, when the text was too long. Using `word-break: break-all` specifically on a-tags in post-content fixes this without screwing up other tags and their breaks.
2018-09-07 14:45:18 +02:00
78993720fd Upgrading Casper to 2.6.1 2018-08-31 11:26:01 +01:00
676e17bd13 Restructure spacings for generic figure element 2018-08-31 11:24:50 +01:00
67e595741c Upgrading Casper to 2.6.0 2018-08-30 17:45:43 +01:00
7a88c88ea2 Added Koenig gallery card support (#475)
no issue

- Update CSS and JS for new gallery card
- Updates CSS to support new gallery card
- Adds JS to support grid layout for gallery view
- Fix gallery breakout size
- Refining styles for gallery card
2018-08-30 17:44:55 +01:00
a0e42e0599 Rebuild CSS 2018-08-30 14:56:38 +01:00
dc3bb316c7 Fixed incorrect image aspect ratio when images have width/height attrs
no issue
- when large images have width/height attributes but the image is constrained to it's container or `max-width` style the aspect ratio would be broken because browsers use the `height` attribute value even though the width is smaller
2018-08-30 14:49:40 +01:00
7380ed0291 Upgrading Casper to 2.5.1 2018-08-22 14:31:02 +02:00
ecaf3d921f 🐛 Fixed image positioning on pages
closes https://github.com/TryGhost/Casper/issues/473
- added missing `<div class="post-content">` wrapper around `{{content}}`
2018-08-21 17:47:42 +01:00
89ea6c5872 Upgrading Casper to 2.5.0 2018-08-16 13:59:03 +02:00
9d803067a4 🛠 Added .travis.yml and gscan tests (#470)
- Add gscan dependency & travis.yml file, so that we can run gscan as a test for this repo
- This check tells us whether or not the theme is valid & compatible with Ghost according to gscan
- We recommend that all themes do this!
2018-08-14 22:10:01 +01:00
0ea375643b Added required "ghost-theme" keyword
- We're going to start showing this as a warning in gscan
- The purpose is to give us a way to detect if a package is a valid Ghost theme
2018-08-13 14:29:56 +01:00
f31957bd0d Replaced {{author}} by {{primary_author}} in byline-single.hbs
refs https://github.com/TryGhost/gscan/issues/99

- single author usages will be deprecated in Ghost 2.0
- make Casper 100% compatible with Ghost 2.0
2018-08-12 15:02:03 +02:00
36841d4624 Set minimum Ghost version to 2.0 2018-08-11 20:22:43 +01:00
d41fcbbc8a Remove .kg-card-markdown styles
no issue
- `.kg-card-markdown` no longer exists in Ghost 2.x
2018-08-11 19:09:58 +01:00
5d318225f5 Upgrading Casper to 2.4.2 2018-08-08 17:08:21 +02:00
9b56779ca6 Use id attribute to query reading progress element (#467)
no issue
- using an `id` selector doesn't break if other `progress` elements are present on a page
2018-08-03 09:21:05 +01:00
49 changed files with 7115 additions and 5652 deletions

View File

@ -1,17 +0,0 @@
# http://editorconfig.org
root = true
[*]
charset = utf-8
indent_style = space
indent_size = 4
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
[*.hbs]
insert_final_newline = false
[*.md]
trim_trailing_whitespace = false

View File

@ -1,19 +0,0 @@
Do you need help or have a question? Please come chat in our forum: https://forum.ghost.org 👫.
If you're filing a bug 🐛, please include the following information:
### Screenshot
![]()
### Steps to Reproduce
1. This is the first step
2. This may be the post content used to cause an issue...
### Technical details
* Casper Version:
* Ghost Version:
* Browser Version:
* OS Version:

4
.gitignore vendored
View File

@ -22,3 +22,7 @@ projectFilesBackup
.DS_Store
dist/
config.json
changelog.md
changelog.md.bk

View File

@ -1,4 +1,4 @@
Copyright (c) 2013-2018 Ghost Foundation
Copyright (c) 2013-2022 Ghost Foundation
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation

View File

@ -1,10 +1,10 @@
# Casper
The default theme for [Ghost](http://github.com/tryghost/ghost/). This is the latest development version of Casper. If you're just looking to download the latest release, head over to the [releases](https://github.com/TryGhost/Casper/releases) page.
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.
&nbsp;
![screenshot-desktop](https://user-images.githubusercontent.com/120485/27221326-1e31d326-5280-11e7-866d-82d550a7683b.jpg)
![screenshot-desktop](https://user-images.githubusercontent.com/1418797/183329195-8e8f2ee5-a473-4694-a813-a2575491209e.png)
&nbsp;
@ -12,31 +12,34 @@ The default theme for [Ghost](http://github.com/tryghost/ghost/). This is the la
Ghost uses a simple templating language called [Handlebars](http://handlebarsjs.com/) for its themes.
We've documented our default theme pretty heavily so that it should be fairly easy to work out what's going on just by reading the code and the comments. Once you feel comfortable with how everything works, we also have full [theme API documentation](https://themes.ghost.org) which explains every possible Handlebars helper and template.
This theme has lots of code comments to help explain what's going on just by reading the code. Once you feel comfortable with how everything works, we also have full [theme API documentation](https://ghost.org/docs/themes/) 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
- `default.hbs` - The parent template file, which includes your global header/footer
- `index.hbs` - The main template to generate a list of posts, usually the home page
- `post.hbs` - The template used to render individual posts
- `page.hbs` - Used for individual pages
- `tag.hbs` - Used for tag archives
- `author.hbs` - Used for author archives
- `tag.hbs` - Used for tag archives, eg. "all posts tagged with `news`"
- `author.hbs` - Used for author archives, eg. "all posts written by Jamie"
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:
One neat trick is that you can also create custom one-off templates by adding the slug of a page to a template file. For example:
- `page-about.hbs` - Custom template for the `/about/` page
- `page-about.hbs` - Custom template for an `/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:
Casper styles are compiled using Gulp/PostCSS to polyfill future CSS spec. You'll need [Node](https://nodejs.org/), [Yarn](https://yarnpkg.com/) and [Gulp](https://gulpjs.com) installed globally. After that, from the theme's root directory:
```bash
$ yarn install
$ yarn dev
# install dependencies
yarn install
# run development server
yarn dev
```
Now you can edit `/assets/css/` files, which will be compiled to `/assets/built/` automatically.
@ -44,14 +47,14 @@ Now you can edit `/assets/css/` files, which will be compiled to `/assets/built/
The `zip` Gulp task packages the theme files into `dist/<theme-name>.zip`, which you can then upload to your site.
```bash
$ yarn zip
# create .zip file
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)
- [Color Mod](https://github.com/jonathantneal/postcss-color-mod-function)
# SVG Icons
@ -63,4 +66,4 @@ 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).
Copyright (c) 2013-2022 Ghost Foundation - Released under the [MIT license](LICENSE).

2
assets/built/casper.js Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,2 +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 */
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{border:0;font:inherit;font-size:100%;margin:0;padding:0;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{display:block;height:auto;max-width:100%}html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;box-sizing:border-box;font-family:sans-serif}*,: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{font-size:2em;margin:.67em 0}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;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}kbd{background:#f6f8fa;border:1px solid rgba(124,139,154,.25);border-radius:6px;box-shadow:inset 0 -1px 0 rgba(124,139,154,.25);font-family:var(--font-mono);font-size:1.5rem;padding:3px 5px}@media (max-width:600px){kbd{font-size:1.3rem}}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{border:none;overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding: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]{-webkit-appearance:textfield;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}legend{border:0;padding:0}textarea{overflow:auto}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}html{-webkit-tap-highlight-color:rgba(0,0,0,0);font-size:62.5%}body{text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-moz-font-feature-settings:"liga" on;background:#fff;color:var(--color-darkgrey);font-family:var(--font-sans);font-size:1.6rem;font-style:normal;font-weight:400;letter-spacing:0;line-height:1.6em}::-moz-selection{background:#daf2fd;text-shadow:none}::selection{background:#daf2fd;text-shadow:none}hr{border:0;border-top:1px solid #f0f0f0;display:block;height:1px;margin:2.5em 0 3.5em;padding:0;position:relative;width:100%}audio,canvas,iframe,img,svg,video{vertical-align:middle}fieldset{border:0;margin:0;padding:0}textarea{resize:vertical}::not(.gh-content) blockquote,::not(.gh-content) dl,::not(.gh-content) ol,::not(.gh-content) p,::not(.gh-content) 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{line-height:1.6em;padding-left:.3em}li+li{margin-top:.5em}dt{color:#daf2fd;float:left;font-weight:500;margin:0 20px 0 0;text-align:right;width:120px}dd{margin:0 0 5px;text-align:left}blockquote{border-left:#daf2fd;margin:1.5em 0;padding:0 1.6em}blockquote small{display:inline-block;font-size:.9em;margin:.8em 0 .8em 1.5em;opacity:.8}blockquote small:before{content:"\2014 \00A0"}blockquote cite{font-weight:700}blockquote cite a{font-weight:400}a{color:#15171a;text-decoration:none}h1,h2,h3,h4,h5,h6{text-rendering:optimizeLegibility;font-weight:600;letter-spacing:-.01em;line-height:1.15;margin-top:0}h1{font-size:4.8rem;font-weight:700;letter-spacing:-.015em;margin:0 0 .5em}@media (max-width:600px){h1{font-size:2.8rem}}h2{font-size:2.8rem;font-weight:700;margin:1.5em 0 .5em}@media (max-width:600px){h2{font-size:2.3rem}}h3{font-size:2.4rem;font-weight:600;margin:1.5em 0 .5em}@media (max-width:600px){h3{font-size:1.7rem}}h4{font-size:2rem;margin:1.5em 0 .5em}@media (max-width:600px){h4{font-size:1.7rem}}h5{font-size:2rem}h5,h6{margin:1.5em 0 .5em}h6{font-size:1.8rem}
/*# sourceMappingURL=global.css.map */

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,237 +0,0 @@
{
"remove-empty-rulesets": true,
"always-semicolon": true,
"color-case": "lower",
"block-indent": " ",
"color-shorthand": true,
"element-case": "lower",
"eof-newline": true,
"leading-zero": true,
"quotes": "double",
"space-before-colon": "",
"space-after-colon": " ",
"space-before-combinator": " ",
"space-after-combinator": " ",
"space-between-declarations": "\n",
"space-before-opening-brace": " ",
"space-after-opening-brace": "\n",
"space-after-selector-delimiter": "\n",
"space-before-selector-delimiter": "",
"space-before-closing-brace": "\n",
"strip-spaces": true,
"tab-size": 4,
"unitless-zero": true,
"sort-order": [ [
"content",
"visibility",
"position",
"top",
"right",
"bottom",
"left",
"z-index",
"order",
"flex",
"flex-grow",
"flex-shrink",
"flex-basis",
"align-self",
"display",
"flex-flow",
"flex-direction",
"flex-wrap",
"justify-content",
"align-items",
"align-content",
"flex-order",
"flex-pack",
"flex-align",
"float",
"clear",
"overflow",
"overflow-x",
"overflow-y",
"-webkit-overflow-scrolling",
"clip",
"box-sizing",
"margin",
"margin-top",
"margin-right",
"margin-bottom",
"margin-left",
"padding",
"padding-top",
"padding-right",
"padding-bottom",
"padding-left",
"min-width",
"min-height",
"max-width",
"max-height",
"width",
"height",
"outline",
"outline-width",
"outline-style",
"outline-color",
"outline-offset",
"border",
"border-spacing",
"border-collapse",
"border-width",
"border-style",
"border-color",
"border-top",
"border-top-width",
"border-top-style",
"border-top-color",
"border-right",
"border-right-width",
"border-right-style",
"border-right-color",
"border-bottom",
"border-bottom-width",
"border-bottom-style",
"border-bottom-color",
"border-left",
"border-left-width",
"border-left-style",
"border-left-color",
"border-image",
"border-image-source",
"border-image-slice",
"border-image-width",
"border-image-outset",
"border-image-repeat",
"border-top-image",
"border-right-image",
"border-bottom-image",
"border-left-image",
"border-corner-image",
"border-top-left-image",
"border-top-right-image",
"border-bottom-right-image",
"border-bottom-left-image",
"color",
"font",
"font-family",
"font-size",
"line-height",
"font-weight",
"font-style",
"font-variant",
"font-size-adjust",
"font-stretch",
"font-feature-settings",
"letter-spacing",
"text-rendering",
"text-align",
"text-align-last",
"text-decoration",
"text-emphasis",
"text-emphasis-position",
"text-emphasis-style",
"text-emphasis-color",
"text-indent",
"text-justify",
"text-outline",
"text-transform",
"text-wrap",
"text-overflow",
"text-overflow-ellipsis",
"text-overflow-mode",
"text-shadow",
"white-space",
"word-spacing",
"word-wrap",
"word-break",
"tab-size",
"hyphens",
"user-select",
"fill",
"stroke",
"background",
"filter:progid:DXImageTransform.Microsoft.AlphaImageLoader",
"background-color",
"background-image",
"background-attachment",
"background-position",
"background-position-x",
"background-position-y",
"background-clip",
"background-origin",
"background-size",
"background-repeat",
"border-radius",
"border-top-left-radius",
"border-top-right-radius",
"border-bottom-right-radius",
"border-bottom-left-radius",
"box-decoration-break",
"box-shadow",
"table-layout",
"caption-side",
"empty-cells",
"list-style",
"list-style-position",
"list-style-type",
"list-style-image",
"quotes",
"counter-increment",
"counter-reset",
"vertical-align",
"src",
"opacity",
"filter:progid:DXImageTransform.Microsoft.Alpha(Opacity",
"filter",
"resize",
"cursor",
"nav-index",
"nav-up",
"nav-right",
"nav-down",
"nav-left",
"transition",
"transition-delay",
"transition-timing-function",
"transition-duration",
"transition-property",
"transform",
"transform-origin",
"animation",
"animation-name",
"animation-duration",
"animation-play-state",
"animation-timing-function",
"animation-delay",
"animation-iteration-count",
"animation-direction",
"animation-fill-mode",
"pointer-events",
"unicode-bidi",
"direction",
"columns",
"column-span",
"column-width",
"column-count",
"column-fill",
"column-gap",
"column-rule",
"column-rule-width",
"column-rule-style",
"column-rule-color",
"break-before",
"break-inside",
"break-after",
"page-break-before",
"page-break-inside",
"page-break-after",
"orphans",
"widows",
"zoom",
"max-zoom",
"min-zoom",
"user-zoom",
"orientation"
] ]
}

View File

@ -1,240 +0,0 @@
{
"remove-empty-rulesets": true,
"always-semicolon": true,
"color-case": "lower",
"block-indent": " ",
"color-shorthand": true,
"element-case": "lower",
"eof-newline": true,
"leading-zero": true,
"quotes": "double",
"space-before-colon": "",
"space-after-colon": " ",
"space-before-combinator": " ",
"space-after-combinator": " ",
"space-between-declarations": "\n",
"space-before-opening-brace": " ",
"space-after-opening-brace": "\n",
"space-after-selector-delimiter": "\n",
"space-before-selector-delimiter": "",
"space-before-closing-brace": "\n",
"strip-spaces": true,
"tab-size": 4,
"unitless-zero": true,
"sort-order": [ [
"content",
"visibility",
"position",
"top",
"right",
"bottom",
"left",
"z-index",
"order",
"flex",
"flex-grow",
"flex-shrink",
"flex-basis",
"align-self",
"display",
"flex-flow",
"flex-direction",
"justify-content",
"align-items",
"align-content",
"flex-wrap",
"flex-order",
"flex-pack",
"flex-align",
"float",
"clear",
"box-sizing",
"width",
"height",
"min-width",
"min-height",
"max-width",
"max-height",
"overflow",
"overflow-x",
"overflow-y",
"clip",
"margin",
"margin-top",
"margin-right",
"margin-bottom",
"margin-left",
"padding",
"padding-top",
"padding-right",
"padding-bottom",
"padding-left",
"outline",
"outline-width",
"outline-style",
"outline-color",
"outline-offset",
"border",
"border-spacing",
"border-collapse",
"border-width",
"border-style",
"border-color",
"border-top",
"border-top-width",
"border-top-style",
"border-top-color",
"border-right",
"border-right-width",
"border-right-style",
"border-right-color",
"border-bottom",
"border-bottom-width",
"border-bottom-style",
"border-bottom-color",
"border-left",
"border-left-width",
"border-left-style",
"border-left-color",
"border-image",
"border-image-source",
"border-image-slice",
"border-image-width",
"border-image-outset",
"border-image-repeat",
"border-top-image",
"border-right-image",
"border-bottom-image",
"border-left-image",
"border-corner-image",
"border-top-left-image",
"border-top-right-image",
"border-bottom-right-image",
"border-bottom-left-image",
"table-layout",
"caption-side",
"empty-cells",
"list-style",
"list-style-position",
"list-style-type",
"list-style-image",
"quotes",
"counter-increment",
"counter-reset",
"vertical-align",
"stroke",
"fill",
"stroke-width",
"stroke-opacity",
"color",
"font",
"font-family",
"font-size",
"line-height",
"font-weight",
"font-style",
"font-variant",
"font-size-adjust",
"font-stretch",
"text-rendering",
"font-feature-settings",
"letter-spacing",
"hyphens",
"text-align",
"text-align-last",
"text-decoration",
"text-emphasis",
"text-emphasis-position",
"text-emphasis-style",
"text-emphasis-color",
"text-indent",
"text-justify",
"text-outline",
"text-transform",
"text-wrap",
"text-overflow",
"text-overflow-ellipsis",
"text-overflow-mode",
"text-shadow",
"white-space",
"word-spacing",
"word-wrap",
"word-break",
"tab-size",
"user-select",
"src",
"resize",
"cursor",
"nav-index",
"nav-up",
"nav-right",
"nav-down",
"nav-left",
"background",
"filter:progid:DXImageTransform.Microsoft.AlphaImageLoader",
"background-color",
"background-image",
"background-size",
"background-attachment",
"background-position",
"background-position-x",
"background-position-y",
"background-clip",
"background-origin",
"background-repeat",
"border-radius",
"border-top-left-radius",
"border-top-right-radius",
"border-bottom-right-radius",
"border-bottom-left-radius",
"box-decoration-break",
"box-shadow",
"opacity",
"filter:progid:DXImageTransform.Microsoft.Alpha(Opacity",
"filter",
"transition",
"transition-delay",
"transition-timing-function",
"transition-duration",
"transition-property",
"transform",
"transform-origin",
"animation",
"animation-name",
"animation-duration",
"animation-play-state",
"animation-timing-function",
"animation-delay",
"animation-iteration-count",
"animation-direction",
"animation-fill-mode",
"pointer-events",
"unicode-bidi",
"direction",
"columns",
"column-span",
"column-width",
"column-count",
"column-fill",
"column-gap",
"column-rule",
"column-rule-width",
"column-rule-style",
"column-rule-color",
"break-before",
"break-inside",
"break-after",
"page-break-before",
"page-break-inside",
"page-break-after",
"orphans",
"widows",
"zoom",
"max-zoom",
"min-zoom",
"user-zoom",
"orientation",
"-webkit-overflow-scrolling",
"-ms-overflow-scrolling"
] ]
}

View File

@ -1,21 +1,3 @@
/* 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
/* ---------------------------------------------------------- */
@ -126,7 +108,9 @@ table {
border-collapse: collapse;
}
img {
display: block;
max-width: 100%;
height: auto;
}
html {
box-sizing: border-box;
@ -192,6 +176,20 @@ samp {
font-family: monospace, monospace;
font-size: 1em;
}
kbd {
padding: 3px 5px;
font-family: var(--font-mono);
font-size: 1.5rem;
background: #f6f8fa;
border: 1px solid rgba(124, 139, 154, 0.25);
border-radius: 6px;
box-shadow: inset 0 -1px 0 rgba(124, 139, 154, 0.25);
}
@media (max-width: 600px) {
kbd {
font-size: 1.3rem;
}
}
button,
input,
optgroup,
@ -272,17 +270,14 @@ th {
========================================================================== */
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;
color: var(--color-darkgrey);
font-family: var(--font-sans);
font-size: 1.6rem;
line-height: 1.6em;
font-weight: 400;
font-style: normal;
@ -297,7 +292,7 @@ body {
::selection {
text-shadow: none;
background: color(var(--blue) lightness(+30%));
background: #daf2fd;
}
hr {
@ -308,7 +303,7 @@ hr {
padding: 0;
height: 1px;
border: 0;
border-top: 1px solid color(var(--lightgrey) l(+10%));
border-top: 1px solid #f0f0f0;
}
audio,
@ -330,11 +325,11 @@ textarea {
resize: vertical;
}
p,
ul,
ol,
dl,
blockquote {
::not(.gh-content) p,
::not(.gh-content) ul,
::not(.gh-content) ol,
::not(.gh-content) dl,
::not(.gh-content) blockquote {
margin: 0 0 1.5em 0;
}
@ -365,16 +360,19 @@ ol {
}
li {
margin: 0.5em 0;
padding-left: 0.3em;
line-height: 1.6em;
}
li + li {
margin-top: 0.5em;
}
dt {
float: left;
margin: 0 20px 0 0;
width: 120px;
color: var(--darkgrey);
color: #daf2fd;
font-weight: 500;
text-align: right;
}
@ -387,13 +385,7 @@ dd {
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;
border-left: #daf2fd;
}
blockquote small {
@ -415,14 +407,10 @@ blockquote cite a {
}
a {
color: color(var(--blue) l(-5%));
color: #15171A;
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
h1,
h2,
h3,
@ -431,37 +419,40 @@ h5,
h6 {
margin-top: 0;
line-height: 1.15;
font-weight: 700;
font-weight: 600;
text-rendering: optimizeLegibility;
letter-spacing: -0.01em;
}
h1 {
margin: 0 0 0.5em 0;
font-size: 5rem;
font-size: 4.8rem;
font-weight: 700;
letter-spacing: -0.015em;
}
@media (max-width: 500px) {
@media (max-width: 600px) {
h1 {
font-size: 2.2rem;
font-size: 2.8rem;
}
}
h2 {
margin: 1.5em 0 0.5em 0;
font-size: 2rem;
font-size: 2.8rem;
font-weight: 700;
}
@media (max-width: 500px) {
@media (max-width: 600px) {
h2 {
font-size: 1.8rem;
font-size: 2.3rem;
}
}
h3 {
margin: 1.5em 0 0.5em 0;
font-size: 1.8rem;
font-weight: 500;
font-size: 2.4rem;
font-weight: 600;
}
@media (max-width: 500px) {
@media (max-width: 600px) {
h3 {
font-size: 1.7rem;
}
@ -469,18 +460,20 @@ h3 {
h4 {
margin: 1.5em 0 0.5em 0;
font-size: 1.6rem;
font-weight: 500;
font-size: 2rem;
}
@media (max-width: 600px) {
h4 {
font-size: 1.7rem;
}
}
h5 {
margin: 1.5em 0 0.5em 0;
font-size: 1.4rem;
font-weight: 500;
font-size: 2rem;
}
h6 {
margin: 1.5em 0 0.5em 0;
font-size: 1.4rem;
font-weight: 500;
font-size: 1.8rem;
}

File diff suppressed because it is too large Load Diff

85
assets/js/dropdown.js Normal file
View File

@ -0,0 +1,85 @@
(function () {
const mediaQuery = window.matchMedia('(max-width: 767px)');
const head = document.querySelector('.gh-head');
const menu = head.querySelector('.gh-head-menu');
const nav = menu.querySelector('.nav');
if (!nav) return;
const logo = document.querySelector('.gh-head-logo');
const navHTML = nav.innerHTML;
if (mediaQuery.matches) {
const items = nav.querySelectorAll('li');
items.forEach(function (item, index) {
item.style.transitionDelay = 0.03 * (index + 1) + 's';
});
}
var windowClickListener;
const makeDropdown = function () {
if (mediaQuery.matches) return;
const submenuItems = [];
while ((nav.offsetWidth + 64) > menu.offsetWidth) {
if (nav.lastElementChild) {
submenuItems.unshift(nav.lastElementChild);
nav.lastElementChild.remove();
} else {
return;
}
}
if (!submenuItems.length) {
document.body.classList.add('is-dropdown-loaded');
return;
}
const toggle = document.createElement('button');
toggle.setAttribute('class', 'nav-more-toggle');
toggle.setAttribute('aria-label', 'More');
toggle.innerHTML = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" fill="currentColor"><path d="M21.333 16c0-1.473 1.194-2.667 2.667-2.667v0c1.473 0 2.667 1.194 2.667 2.667v0c0 1.473-1.194 2.667-2.667 2.667v0c-1.473 0-2.667-1.194-2.667-2.667v0zM13.333 16c0-1.473 1.194-2.667 2.667-2.667v0c1.473 0 2.667 1.194 2.667 2.667v0c0 1.473-1.194 2.667-2.667 2.667v0c-1.473 0-2.667-1.194-2.667-2.667v0zM5.333 16c0-1.473 1.194-2.667 2.667-2.667v0c1.473 0 2.667 1.194 2.667 2.667v0c0 1.473-1.194 2.667-2.667 2.667v0c-1.473 0-2.667-1.194-2.667-2.667v0z"></path></svg>';
const wrapper = document.createElement('div');
wrapper.setAttribute('class', 'gh-dropdown');
if (submenuItems.length >= 10) {
document.body.classList.add('is-dropdown-mega');
wrapper.style.gridTemplateRows = 'repeat(' + Math.ceil(submenuItems.length / 2) + ', 1fr)';
} else {
document.body.classList.remove('is-dropdown-mega');
}
submenuItems.forEach(function (child) {
wrapper.appendChild(child);
});
toggle.appendChild(wrapper);
nav.appendChild(toggle);
document.body.classList.add('is-dropdown-loaded');
toggle.addEventListener('click', function () {
document.body.classList.toggle('is-dropdown-open');
});
windowClickListener = function (e) {
if (!toggle.contains(e.target) && document.body.classList.contains('is-dropdown-open')) {
document.body.classList.remove('is-dropdown-open');
}
};
window.addEventListener('click', windowClickListener);
}
imagesLoaded(head, function () {
makeDropdown();
});
window.addEventListener('resize', function () {
setTimeout(function () {
window.removeEventListener('click', windowClickListener);
nav.innerHTML = navHTML;
makeDropdown();
}, 1);
});
})();

View File

@ -0,0 +1,114 @@
/* eslint-env browser */
/**
* Infinite Scroll
* Used on all pages where there is a list of posts (homepage, tag index, etc).
*
* When the page is scrolled to 300px from the bottom, the next page of posts
* is fetched by following the the <link rel="next" href="..."> that is output
* by {{ghost_head}}.
*
* The individual post items are extracted from the fetched pages by looking for
* a wrapper element with the class "post-card". Any found elements are appended
* to the element with the class "post-feed" in the currently viewed page.
*/
(function (window, document) {
if (document.documentElement.classList.contains('no-infinite-scroll')) return;
// next link element
var nextElement = document.querySelector('link[rel=next]');
if (!nextElement) {
return;
}
// post feed element
var feedElement = document.querySelector('.post-feed');
if (!feedElement) {
return;
}
var buffer = 300;
var ticking = false;
var loading = false;
var lastScrollY = window.scrollY;
var lastWindowHeight = window.innerHeight;
var lastDocumentHeight = document.documentElement.scrollHeight;
function onPageLoad() {
if (this.status === 404) {
window.removeEventListener('scroll', onScroll);
window.removeEventListener('resize', onResize);
return;
}
// append contents
var postElements = this.response.querySelectorAll('article.post-card');
postElements.forEach(function (item) {
// document.importNode is important, without it the item's owner
// document will be different which can break resizing of
// `object-fit: cover` images in Safari
feedElement.appendChild(document.importNode(item, true));
});
// set next link
var resNextElement = this.response.querySelector('link[rel=next]');
if (resNextElement) {
nextElement.href = resNextElement.href;
} else {
window.removeEventListener('scroll', onScroll);
window.removeEventListener('resize', onResize);
}
// sync status
lastDocumentHeight = document.documentElement.scrollHeight;
ticking = false;
loading = false;
}
function onUpdate() {
// return if already loading
if (loading) {
return;
}
// return if not scroll to the bottom
if (lastScrollY + lastWindowHeight <= lastDocumentHeight - buffer) {
ticking = false;
return;
}
loading = true;
var xhr = new window.XMLHttpRequest();
xhr.responseType = 'document';
xhr.addEventListener('load', onPageLoad);
xhr.open('GET', nextElement.href);
xhr.send(null);
}
function requestTick() {
ticking || window.requestAnimationFrame(onUpdate);
ticking = true;
}
function onScroll() {
lastScrollY = window.scrollY;
requestTick();
}
function onResize() {
lastWindowHeight = window.innerHeight;
lastDocumentHeight = document.documentElement.scrollHeight;
requestTick();
}
window.addEventListener('scroll', onScroll, {passive: true});
window.addEventListener('resize', onResize);
requestTick();
})(window, document);

View File

@ -1,115 +0,0 @@
/* global maxPages */
// Code snippet inspired by https://github.com/douglasrodrigues5/ghost-blog-infinite-scroll
$(function ($) {
var currentPage = 1;
var pathname = window.location.pathname;
var $document = $(document);
var $result = $('.post-feed');
var buffer = 300;
var ticking = false;
var isLoading = false;
var lastScrollY = window.scrollY;
var lastWindowHeight = window.innerHeight;
var lastDocumentHeight = $document.height();
function onScroll() {
lastScrollY = window.scrollY;
requestTick();
}
function onResize() {
lastWindowHeight = window.innerHeight;
lastDocumentHeight = $document.height();
requestTick();
}
function requestTick() {
if (!ticking) {
requestAnimationFrame(infiniteScroll);
}
ticking = true;
}
function sanitizePathname(path) {
var paginationRegex = /(?:page\/)(\d)(?:\/)$/i;
// remove hash params from path
path = path.replace(/#(.*)$/g, '').replace('////g', '/');
// remove pagination from the path and replace the current pages
// with the actual requested page. E. g. `/page/3/` indicates that
// the user actually requested page 3, so we should request page 4
// next, unless it's the last page already.
if (path.match(paginationRegex)) {
currentPage = parseInt(path.match(paginationRegex)[1]);
path = path.replace(paginationRegex, '');
}
return path;
}
function infiniteScroll() {
// sanitize the pathname from possible pagination or hash params
pathname = sanitizePathname(pathname);
// return if already loading
if (isLoading) {
return;
}
// return if not scroll to the bottom
if (lastScrollY + lastWindowHeight <= lastDocumentHeight - buffer) {
ticking = false;
return;
}
/**
* maxPages is defined in default.hbs and is the value
* of the amount of pagination pages.
* If we reached the last page or are past it,
* we return and disable the listeners.
*/
if (currentPage >= maxPages) {
window.removeEventListener('scroll', onScroll, {passive: true});
window.removeEventListener('resize', onResize);
return;
}
isLoading = true;
// next page
currentPage += 1;
// Load more
var nextPage = pathname + 'page/' + currentPage + '/';
$.get(nextPage, function (content) {
var parse = document.createRange().createContextualFragment(content);
var posts = parse.querySelectorAll('.post');
if (posts.length) {
[].forEach.call(posts, function (post) {
$result[0].appendChild(post);
});
}
}).fail(function (xhr) {
// 404 indicates we've run out of pages
if (xhr.status === 404) {
window.removeEventListener('scroll', onScroll, {passive: true});
window.removeEventListener('resize', onResize);
}
}).always(function () {
lastDocumentHeight = $document.height();
isLoading = false;
ticking = false;
});
}
window.addEventListener('scroll', onScroll, {passive: true});
window.addEventListener('resize', onResize);
infiniteScroll();
});

File diff suppressed because one or more lines are too long

BIN
assets/screenshot-desktop.jpg Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 106 KiB

After

Width:  |  Height:  |  Size: 132 KiB

BIN
assets/screenshot-mobile.jpg Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 102 KiB

After

Width:  |  Height:  |  Size: 60 KiB

View File

@ -1,54 +1,76 @@
{{!< default}}
{{!-- The tag above means - insert everything in this file into the {body} of the default.hbs template --}}
{{#author}}
{{!-- Everything inside the #author tags pulls data from the author --}}
<header class="site-header outer {{#if cover_image}}" style="background-image: url({{cover_image}}){{else}}no-cover{{/if}}">
<div class="inner">
{{> "site-nav"}}
<div class="site-header-content">
{{#if profile_image}}
<img class="author-profile-image" src="{{profile_image}}" alt="{{name}}" />
{{/if}}
<h1 class="site-title">{{name}}</h1>
{{#if bio}}
<h2 class="author-bio">{{bio}}</h2>
{{/if}}
<div class="author-meta">
{{#if location}}
<div class="author-location">{{location}} <span class="bull">&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>
</div>
</header>
{{/author}}
{{!-- The main content area --}}
<main id="site-main" class="site-main outer">
<div class="inner">
<div class="inner posts">
<div class="post-feed">
{{#foreach posts}}
<div class="post-feed">
{{!-- The tag below includes the markup for each post - partials/post-card.hbs --}}
{{> "post-card"}}
{{#author}}
<section class="post-card post-card-large">
{{/foreach}}
</div>
{{#if cover_image}}
<div class="post-card-image-link">
{{!-- This is a responsive image, it loads different sizes depending on device
https://medium.freecodecamp.org/a-guide-to-responsive-images-with-ready-to-use-templates-c400bd65c433 --}}
<img class="post-card-image"
srcset="{{img_url cover_image size="s"}} 300w,
{{img_url cover_image size="m"}} 600w,
{{img_url cover_image size="l"}} 1000w,
{{img_url cover_image size="xl"}} 2000w"
sizes="(max-width: 1000px) 400px, 800px"
src="{{img_url cover_image size="m"}}"
alt="{{title}}"
/>
</div>
{{/if}}
<div class="post-card-content">
<div class="post-card-content-link">
{{#if profile_image}}
<img class="author-profile-pic" src="{{profile_image}}" alt="{{name}}" />
{{/if}}
<header class="post-card-header">
<h2 class="post-card-title">{{name}}</h2>
</header>
{{#if bio}}
<div class="post-card-excerpt">{{bio}}</div>
{{/if}}
<footer class="author-profile-footer">
{{#if location}}
<div class="author-profile-location">{{location}}</div>
{{/if}}
<div class="author-profile-meta">
{{#if website}}
<a class="author-profile-social-link" href="{{website}}" target="_blank" rel="noopener">{{website}}</a>
{{/if}}
{{#if twitter}}
<a class="author-profile-social-link" href="{{twitter_url}}" target="_blank" rel="noopener">{{> "icons/twitter"}}</a>
{{/if}}
{{#if facebook}}
<a class="author-profile-social-link" href="{{facebook_url}}" target="_blank" rel="noopener">{{> "icons/facebook"}}</a>
{{/if}}
</div>
</footer>
</div>
</div>
</section>
{{/author}}
{{#foreach posts}}
{{!-- The tag below includes the markup for each post - partials/post-card.hbs --}}
{{> "post-card"}}
{{/foreach}}
</div>
{{pagination}}
</div>
</main>

View File

@ -1,83 +1,113 @@
<!DOCTYPE html>
<html lang="{{lang}}">
<html lang="{{@site.locale}}"{{#match @custom.color_scheme "Dark"}} class="dark-mode"{{else match @custom.color_scheme "Auto"}} class="auto-color"{{/match}}>
<head>
{{!-- Document Settings --}}
{{!-- Basic meta - advanced meta is output with {ghost_head} below --}}
<title>{{meta_title}}</title>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
{{!-- Base Meta --}}
<title>{{meta_title}}</title>
<meta name="HandheldFriendly" content="True" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
{{!-- Styles'n'Scripts --}}
{{!-- Theme assets - use the {asset} helper to reference styles & scripts,
this will take care of caching and cache-busting automatically --}}
<link rel="stylesheet" type="text/css" href="{{asset "built/screen.css"}}" />
{{!-- This tag outputs SEO meta+structured data and other important settings --}}
{{!-- This tag outputs all your advanced SEO meta, structured data, and other important settings,
it should always be the last tag before the closing head tag --}}
{{ghost_head}}
</head>
<body class="{{body_class}}">
<body class="{{body_class}} is-head-{{#match @custom.navigation_layout "Logo on cover"}}left-logo{{else match @custom.navigation_layout "Logo in the middle"}}middle-logo{{else}}stacked{{/match}}{{#match @custom.title_font "=" "Elegant serif"}} has-serif-title{{/match}}{{#match @custom.body_font "=" "Modern sans-serif"}} has-sans-body{{/match}}{{#if @custom.show_publication_cover}} has-cover{{/if}}">
<div class="viewport">
<div class="site-wrapper">
{{!-- All the main content gets inserted here, index.hbs, post.hbs, etc --}}
{{{body}}}
{{!-- The footer at the very bottom of the screen --}}
<footer class="site-footer outer">
<div class="site-footer-content inner">
<section class="copyright"><a href="{{@blog.url}}">{{@blog.title}}</a> &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>
<header id="gh-head" class="gh-head outer{{#match @custom.header_style "Hidden"}} is-header-hidden{{/match}}">
<div class="gh-head-inner inner">
<div class="gh-head-brand">
<a class="gh-head-logo{{#unless @site.logo}} no-image{{/unless}}" href="{{@site.url}}">
{{#if @site.logo}}
<img src="{{@site.logo}}" alt="{{@site.title}}">
{{else}}
{{@site.title}}
{{/if}}
</a>
<button class="gh-search gh-icon-btn" aria-label="Search this site" data-ghost-search>{{> "icons/search"}}</button>
<button class="gh-burger"></button>
</div>
</footer>
</div>
<nav class="gh-head-menu">
{{navigation}}
{{#unless @site.members_enabled}}
{{#match @custom.navigation_layout "Stacked"}}
<button class="gh-search gh-icon-btn" aria-label="Search this site" data-ghost-search>{{> "icons/search"}}</button>
{{/match}}
{{/unless}}
</nav>
{{!-- 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 class="gh-head-actions">
{{#unless @site.members_enabled}}
{{^match @custom.navigation_layout "Stacked"}}
<button class="gh-search gh-icon-btn" data-ghost-search>{{> "icons/search"}}</button>
{{/match}}
{{else}}
<button class="gh-search gh-icon-btn" data-ghost-search>{{> "icons/search"}}</button>
<div class="gh-head-members">
{{#unless @member}}
{{#unless @site.members_invite_only}}
<a class="gh-head-link" href="#/portal/signin" data-portal="signin">Sign in</a>
<a class="gh-head-button" href="#/portal/signup" data-portal="signup">Subscribe</a>
{{else}}
<a class="gh-head-button" href="#/portal/signin" data-portal="signin">Sign in</a>
{{/unless}}
{{else}}
<a class="gh-head-button" href="#/portal/account" data-portal="account">Account</a>
{{/unless}}
</div>
{{/unless}}
</div>
</div>
</header>
<div class="site-content">
{{!-- All other templates get inserted here, index.hbs, post.hbs, etc --}}
{{{body}}}
</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>
{{!-- The global footer at the very bottom of the screen --}}
<footer class="site-footer outer">
<div class="inner">
<section class="copyright"><a href="{{@site.url}}">{{@site.title}}</a> &copy; {{date format="YYYY"}}</section>
<nav class="site-footer-nav">
{{navigation type="secondary"}}
</nav>
<div class="gh-powered-by"><a href="https://ghost.org/" target="_blank" rel="noopener">Powered by Ghost</a></div>
</div>
</footer>
{{#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}}
</div>
{{!-- /.viewport --}}
{{!-- 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}}
{{!-- Scripts - handle member signups, responsive videos, infinite scroll, floating headers, and galleries --}}
<script
src="https://code.jquery.com/jquery-3.5.1.min.js"
integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0="
crossorigin="anonymous">
</script>
<script src="{{asset "built/casper.js"}}"></script>
<script>
$(document).ready(function () {
// Mobile Menu Trigger
$('.gh-burger').click(function () {
$('body').toggleClass('gh-head-open');
});
// FitVids - Makes video embeds responsive
$(".gh-content").fitVids();
});
</script>
{{!-- Ghost outputs required functional scripts with this tag - it should always be the last thing before the closing body tag --}}
{{ghost_foot}}
</body>
</html>

View File

@ -1,56 +1,37 @@
{{!< default}}
{{!--
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.
There are two error files in this theme, one for 404s and one for all other errors.
This file is the former, and handles all 404 Page Not Found errors.
The 404 error is the most common error that a visitor might see, for example when
following a broken link
Keep this template as lightweight as you can!
--}}
<!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}}
<section class="outer error-content">
<div class="inner">
<section class="error-message">
<h1 class="error-code">{{statusCode}}</h1>
<p class="error-description">{{message}}</p>
<a class="error-link" href="{{@site.url}}">Go to the front page →</a>
</section>
</div>
</body>
</html>
</section>
{{!-- Given that people landing on this page didn't find what they
were looking for, let's give them some alternative stuff to read. --}}
<aside class="read-more-wrap outer">
<div class="read-more inner">
{{#get "posts" include="authors" limit="3" as |more_posts|}}
{{#if more_posts}}
{{#foreach more_posts}}
{{> "post-card"}}
{{/foreach}}
{{/if}}
{{/get}}
</div>
</aside>

View File

@ -1,7 +1,15 @@
{{!--
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.
There are two error files in this theme, one for 404s and one for all other errors.
This file is the latter, and handles all 400/500 errors that might occur.
Because 500 errors in particular usually happen when a server is struggling, this
template is as simple as possible. No template dependencies, no JS, no API calls.
This is to prevent rendering the error-page itself compounding the issue causing
the error in the first place.
Keep this template as lightweight as you can!
--}}
<!DOCTYPE html>
@ -14,44 +22,47 @@ You'll notice that we *don't* use any JavsScript, or ghost_head / ghost_foot in
<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">
<body>
<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>
<header class="site-header no-image">
<div class="site-nav-main outer">
<div class="inner">
<nav class="site-nav-center">
{{#if @site.logo}}
<a class="site-nav-logo" href="{{@site.url}}"><img src="{{img_url @site.logo size="xs"}}"
alt="{{@site.title}}" /></a>
{{else}}
<a class="site-nav-logo" href="{{@site.url}}">{{@site.title}}</a>
{{/if}}
</nav>
</div>
</div>
</header>
<main id="site-main" class="site-main outer">
<main class="outer error-content">
<div class="inner">
<section class="error-message">
<h1 class="error-code">{{code}}</h1>
<h1 class="error-code">{{statusCode}}</h1>
<p class="error-description">{{message}}</p>
<a class="error-link" href="{{@blog.url}}">Go to the front page →</a>
<a class="error-link" href="{{@site.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}}
{{#foreach errorDetails}}
<li>
<em class="error-stack-function">{{{rule}}}</em>
{{#each failures}}
{{#foreach failures}}
<p><span class="error-stack-file">Ref: {{ref}}</span></p>
<p><span class="error-stack-file">Message: {{message}}</span></p>
{{/each}}
{{/foreach}}
</li>
{{/each}}
{{/foreach}}
</ul>
</section>
{{/if}}

View File

@ -1,69 +1,176 @@
var gulp = require('gulp');
const {series, watch, src, dest, parallel} = require('gulp');
const pump = require('pump');
const path = require('path');
const releaseUtils = require('@tryghost/release-utils');
const inquirer = require('inquirer');
// 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');
const livereload = require('gulp-livereload');
const postcss = require('gulp-postcss');
const zip = require('gulp-zip');
const concat = require('gulp-concat');
const uglify = require('gulp-uglify');
const beeper = require('beeper');
const fs = require('fs');
// 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');
const autoprefixer = require('autoprefixer');
const colorFunction = require('postcss-color-mod-function');
const cssnano = require('cssnano');
const easyimport = require('postcss-easy-import');
var swallowError = function swallowError(error) {
gutil.log(error.toString());
gutil.beep();
this.emit('end');
const REPO = 'TryGhost/Casper';
const REPO_READONLY = 'TryGhost/Casper';
const CHANGELOG_PATH = path.join(process.cwd(), '.', 'changelog.md');
function serve(done) {
livereload.listen();
done();
}
const handleError = (done) => {
return function (err) {
if (err) {
beeper();
}
return done(err);
};
};
var nodemonServerInit = function () {
livereload.listen(1234);
function hbs(done) {
pump([
src(['*.hbs', 'partials/**/*.hbs']),
livereload()
], handleError(done));
}
function css(done) {
pump([
src('assets/css/*.css', {sourcemaps: true}),
postcss([
easyimport,
colorFunction(),
autoprefixer(),
cssnano()
]),
dest('assets/built/', {sourcemaps: '.'}),
livereload()
], handleError(done));
}
function js(done) {
pump([
src([
// pull in lib files first so our own code can depend on it
'assets/js/lib/*.js',
'assets/js/*.js'
], {sourcemaps: true}),
concat('casper.js'),
uglify(),
dest('assets/built/', {sourcemaps: '.'}),
livereload()
], handleError(done));
}
function zipper(done) {
const filename = require('./package.json').name + '.zip';
pump([
src([
'**',
'!node_modules', '!node_modules/**',
'!dist', '!dist/**',
'!yarn-error.log',
'!yarn.lock',
'!gulpfile.js'
]),
zip(filename),
dest('dist/')
], handleError(done));
}
const cssWatcher = () => watch('assets/css/**', css);
const jsWatcher = () => watch('assets/js/**', js);
const hbsWatcher = () => watch(['*.hbs', 'partials/**/*.hbs'], hbs);
const watcher = parallel(cssWatcher, jsWatcher, hbsWatcher);
const build = series(css, js);
exports.build = build;
exports.zip = series(build, zipper);
exports.default = series(build, serve, watcher);
exports.release = async () => {
// @NOTE: https://yarnpkg.com/lang/en/docs/cli/version/
// require(./package.json) can run into caching issues, this re-reads from file everytime on release
let packageJSON = JSON.parse(fs.readFileSync('./package.json'));
const newVersion = packageJSON.version;
if (!newVersion || newVersion === '') {
console.log(`Invalid version: ${newVersion}`);
return;
}
console.log(`\nCreating release for ${newVersion}...`);
const githubToken = process.env.GST_TOKEN;
if (!githubToken) {
console.log('Please configure your environment with a GitHub token located in GST_TOKEN');
return;
}
try {
const result = await inquirer.prompt([{
type: 'input',
name: 'compatibleWithGhost',
message: 'Which version of Ghost is it compatible with?',
default: '5.0.0'
}]);
const compatibleWithGhost = result.compatibleWithGhost;
const releasesResponse = await releaseUtils.releases.get({
userAgent: 'Casper',
uri: `https://api.github.com/repos/${REPO_READONLY}/releases`
});
if (!releasesResponse || !releasesResponse) {
console.log('No releases found. Skipping...');
return;
}
let previousVersion = releasesResponse[0].tag_name || releasesResponse[0].name;
console.log(`Previous version: ${previousVersion}`);
const changelog = new releaseUtils.Changelog({
changelogPath: CHANGELOG_PATH,
folder: path.join(process.cwd(), '.')
});
changelog
.write({
githubRepoPath: `https://github.com/${REPO}`,
lastVersion: previousVersion
})
.sort()
.clean();
const newReleaseResponse = await releaseUtils.releases.create({
draft: true,
preRelease: false,
tagName: 'v' + newVersion,
releaseName: newVersion,
userAgent: 'Casper',
uri: `https://api.github.com/repos/${REPO}/releases`,
github: {
token: githubToken
},
content: [`**Compatible with Ghost ≥ ${compatibleWithGhost}**\n\n`],
changelogPath: CHANGELOG_PATH
});
console.log(`\nRelease draft generated: ${newReleaseResponse.releaseUrl}\n`);
} catch (err) {
console.error(err);
process.exit(1);
}
};
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

@ -2,35 +2,53 @@
{{!-- The tag above means: insert everything in this file
into the {body} of the default.hbs template --}}
{{!-- The big featured header, it uses blog cover image as a BG if available --}}
<header class="site-header outer {{#if @blog.cover_image}}" style="background-image: url({{@blog.cover_image}}){{else}}no-cover{{/if}}">
<div class="inner">
<div class="site-header-content">
<h1 class="site-title">
{{#if @blog.logo}}
<img class="site-logo" src="{{@blog.logo}}" alt="{{@blog.title}}" />
<div class="site-header-content outer{{#match @custom.header_style "Left aligned"}} left-aligned{{/match}}{{#unless @custom.show_publication_cover}}{{#match @custom.header_style "Hidden"}} no-content{{/match}}{{/unless}}">
{{#if @custom.show_publication_cover}}
{{#if @site.cover_image}}
{{!-- This is a responsive image, it loads different sizes depending on device
https://medium.freecodecamp.org/a-guide-to-responsive-images-with-ready-to-use-templates-c400bd65c433 --}}
<img class="site-header-cover"
srcset="{{img_url @site.cover_image size="s"}} 300w,
{{img_url @site.cover_image size="m"}} 600w,
{{img_url @site.cover_image size="l"}} 1000w,
{{img_url @site.cover_image size="xl"}} 2000w"
sizes="100vw"
src="{{img_url @site.cover_image size="xl"}}"
alt="{{@site.title}}"
/>
{{/if}}
{{/if}}
{{#match @custom.header_style "!=" "Hidden"}}
<div class="site-header-inner inner">
{{#match @custom.navigation_layout "Logo on cover"}}
{{#if @site.logo}}
<img class="site-logo" src="{{@site.logo}}" alt="{{@site.title}}">
{{else}}
{{@blog.title}}
<h1 class="site-title">{{@site.title}}</h1>
{{/if}}
</h1>
<h2 class="site-description">{{@blog.description}}</h2>
{{/match}}
{{#if @site.description}}
<p class="site-description">{{@site.description}}</p>
{{/if}}
</div>
{{> "site-nav"}}
</div>
</header>
{{/match}}
</div>
{{!-- 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 class="inner posts">
<div class="post-feed">
{{#foreach posts}}
{{!-- The tag below includes the markup for each post - partials/post-card.hbs --}}
{{> "post-card"}}
{{/foreach}}
</div>
{{pagination}}
</div>
</main>

View File

@ -1,10 +1,10 @@
{
"name": "casper",
"description": "The default personal blogging theme for Ghost. Beautiful, minimal and responsive.",
"description": "A clean, minimal default theme for the Ghost publishing platform",
"demo": "https://demo.ghost.io",
"version": "2.4.1",
"version": "5.5.0",
"engines": {
"ghost": ">=1.2.0"
"ghost": ">=5.0.0"
},
"license": "MIT",
"screenshots": {
@ -12,13 +12,19 @@
"mobile": "assets/screenshot-mobile.jpg"
},
"scripts": {
"dev": "gulp",
"zip": "gulp zip"
"dev": "gulp",
"zip": "gulp zip",
"test": "gscan .",
"test:ci": "gscan --fatal --verbose .",
"pretest": "gulp build",
"preship": "yarn test",
"ship": "STATUS=$(git status --porcelain); echo $STATUS; if [ -z \"$STATUS\" ]; then yarn version && git push --follow-tags; else echo \"Uncomitted changes found.\" && exit 1; fi",
"postship": "git fetch && gulp release"
},
"author": {
"name": "Ghost Foundation",
"email": "hello@ghost.org",
"url": "https://ghost.org"
"url": "https://ghost.org/"
},
"gpm": {
"type": "theme",
@ -29,7 +35,8 @@
},
"keywords": [
"ghost",
"theme"
"theme",
"ghost-theme"
],
"repository": {
"type": "git",
@ -38,20 +45,135 @@
"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"
"@tryghost/release-utils": "0.8.1",
"autoprefixer": "10.4.7",
"beeper": "2.1.0",
"cssnano": "5.1.12",
"gscan": "4.36.1",
"gulp": "4.0.2",
"gulp-concat": "2.6.1",
"gulp-livereload": "4.0.2",
"gulp-postcss": "9.0.1",
"gulp-uglify": "3.0.2",
"gulp-zip": "5.1.0",
"inquirer": "8.2.4",
"postcss": "8.2.13",
"postcss-color-mod-function": "3.0.3",
"postcss-easy-import": "4.0.0",
"pump": "3.0.0"
},
"browserslist": [
"defaults"
],
"config": {
"posts_per_page": 25
"posts_per_page": 25,
"image_sizes": {
"xxs": {
"width": 30
},
"xs": {
"width": 100
},
"s": {
"width": 300
},
"m": {
"width": 600
},
"l": {
"width": 1000
},
"xl": {
"width": 2000
}
},
"card_assets": true,
"custom": {
"navigation_layout": {
"type": "select",
"options": [
"Logo on cover",
"Logo in the middle",
"Stacked"
],
"default": "Logo on cover"
},
"title_font": {
"type": "select",
"options": [
"Modern sans-serif",
"Elegant serif"
],
"default": "Modern sans-serif"
},
"body_font": {
"type": "select",
"options": [
"Modern sans-serif",
"Elegant serif"
],
"default": "Elegant serif"
},
"show_publication_cover": {
"type": "boolean",
"default": true,
"group": "homepage"
},
"header_style": {
"type": "select",
"options": [
"Center aligned",
"Left aligned",
"Hidden"
],
"default": "Center aligned",
"group": "homepage"
},
"feed_layout": {
"type": "select",
"options": [
"Classic",
"Grid",
"List"
],
"default": "Classic",
"group": "homepage"
},
"color_scheme": {
"type": "select",
"options": [
"Light",
"Dark",
"Auto"
],
"default": "Light"
},
"post_image_style": {
"type": "select",
"options": [
"Wide",
"Full",
"Small",
"Hidden"
],
"default": "Wide",
"group": "post"
},
"email_signup_text": {
"type": "text",
"default": "Sign up for more like this.",
"group": "post"
},
"show_recent_posts_footer": {
"type": "boolean",
"default": true,
"group": "post"
}
}
},
"renovate": {
"extends": [
"@tryghost:theme"
]
}
}

View File

@ -1,48 +1,45 @@
{{!< default}}
{{!-- The tag above means: insert everything in this file
into the {body} of the default.hbs template --}}
into the {body} tag of the default.hbs template --}}
{{!-- The big featured header, it uses blog cover image as a BG if available --}}
<header class="site-header outer">
<div class="inner">
{{> "site-nav"}}
</div>
</header>
{{!-- Everything inside the #post tags pulls data from the post --}}
{{#post}}
{{!-- Everything inside the #post block pulls data from the page --}}
<main id="site-main" class="site-main outer">
<div class="inner">
<main id="site-main" class="site-main">
<article class="article {{post_class}}">
<article class="post-full {{post_class}} {{#unless feature_image}}no-image{{/unless}}">
<header class="article-header gh-canvas">
<header class="post-full-header">
<h1 class="post-full-title">{{title}}</h1>
</header>
<h1 class="article-title">{{title}}</h1>
{{#if feature_image}}
<figure class="post-full-image" style="background-image: url({{feature_image}})">
{{#if feature_image}}
<figure class="article-image">
{{!-- This is a responsive image, it loads different sizes depending on device
https://medium.freecodecamp.org/a-guide-to-responsive-images-with-ready-to-use-templates-c400bd65c433 --}}
<img
srcset="{{img_url feature_image size="s"}} 300w,
{{img_url feature_image size="m"}} 600w,
{{img_url feature_image size="l"}} 1000w,
{{img_url feature_image size="xl"}} 2000w"
sizes="(min-width: 1400px) 1400px, 92vw"
src="{{img_url feature_image size="xl"}}"
alt="{{#if feature_image_alt}}{{feature_image_alt}}{{else}}{{title}}{{/if}}"
/>
{{#if feature_image_caption}}
<figcaption>{{feature_image_caption}}</figcaption>
{{/if}}
</figure>
{{/if}}
{{/if}}
<section class="post-full-content">
{{content}}
</section>
</header>
</article>
<section class="gh-content gh-canvas">
{{content}}
</section>
</div>
</article>
</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}}
{{/post}}

View File

@ -1,72 +0,0 @@
<section class="post-full-authors">
<div class="post-full-authors-content">
<p>This post was a collaboration between</p>
<p>{{authors}}</p>
</div>
<ul class="author-list">
{{#foreach authors}}
<li class="author-list-item">
<div class="author-card">
<div class="basic-info">
{{#if profile_image}}
<img class="author-profile-image" src="{{profile_image}}" alt="{{name}}" />
{{else}}
<div class="author-profile-image">{{> "icons/avatar"}}</div>
{{/if}}
<h2>{{name}}</h2>
</div>
<div class="bio">
{{#if bio}}
<p>{{bio}}</p>
<p><a href="{{url}}">More posts</a> by {{name}}.</p>
{{else}}
<p>Read <a href="{{url}}">more posts</a> by this author.</p>
{{/if}}
</div>
</div>
{{#if profile_image}}
<a href="{{url}}" class="moving-avatar"><img class="author-profile-image" src="{{profile_image}}" alt="{{name}}" /></a>
{{else}}
<a href="{{url}}" class="moving-avatar author-profile-image">{{> "icons/avatar"}}</a>
{{/if}}
</li>
{{/foreach}}
</ul>
</section>
{{#contentFor "scripts"}}
<script>
// Adds delay to author card dropups to disappear. This gives enough
// time for the user to interact with the author card while they move
// the mouse from the avatar to the card. Also makes space for the
// interacted avatar.
$(document).ready(function () {
var hoverTimeout;
$('.author-list-item').hover(function(){
var $this = $(this);
clearTimeout(hoverTimeout);
$('.author-card').removeClass('hovered');
$(this).children('.author-card').addClass('hovered');
}, function() {
var $this = $(this);
hoverTimeout = setTimeout(function() {
$this.children('.author-card').removeClass('hovered');
}, 800);
});
});
</script>
{{/contentFor}}

View File

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

@ -1,28 +0,0 @@
<div class="floating-header">
<div class="floating-header-logo">
<a href="{{@blog.url}}">
{{#if @blog.icon}}
<img src="{{@blog.icon}}" alt="{{@blog.title}} icon" />
{{/if}}
<span>{{@blog.title}}</span>
</a>
</div>
<span class="floating-header-divider">&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

@ -1 +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>
<svg class="icon" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="currentColor"><path d="M23.9981 11.9991C23.9981 5.37216 18.626 0 11.9991 0C5.37216 0 0 5.37216 0 11.9991C0 17.9882 4.38789 22.9522 10.1242 23.8524V15.4676H7.07758V11.9991H10.1242V9.35553C10.1242 6.34826 11.9156 4.68714 14.6564 4.68714C15.9692 4.68714 17.3424 4.92149 17.3424 4.92149V7.87439H15.8294C14.3388 7.87439 13.8739 8.79933 13.8739 9.74824V11.9991H17.2018L16.6698 15.4676H13.8739V23.8524C19.6103 22.9522 23.9981 17.9882 23.9981 11.9991Z"/></svg>

Before

Width:  |  Height:  |  Size: 155 B

After

Width:  |  Height:  |  Size: 531 B

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

@ -0,0 +1,3 @@
<svg width="16" height="17" viewBox="0 0 16 17" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M4.49365 4.58752C3.53115 6.03752 2.74365 7.70002 2.74365 9.25002C2.74365 10.6424 3.29678 11.9778 4.28134 12.9623C5.26591 13.9469 6.60127 14.5 7.99365 14.5C9.38604 14.5 10.7214 13.9469 11.706 12.9623C12.6905 11.9778 13.2437 10.6424 13.2437 9.25002C13.2437 6.00002 10.9937 3.50002 9.16865 1.68127L6.99365 6.25002L4.49365 4.58752Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path>
</svg>

After

Width:  |  Height:  |  Size: 538 B

View File

@ -1 +0,0 @@
<svg class="ghost-svg" viewBox="0 0 493 161" xmlns="http://www.w3.org/2000/svg"><title>Ghost Logo</title><g fill="none" fill-rule="evenodd"><path d="M328.52 37.36c-27.017 0-40.97 19.323-40.97 43.16 0 23.837 13.61 43.162 40.97 43.162s40.968-19.325 40.968-43.163c0-23.84-13.954-43.16-40.97-43.16zm20.438 43.237c-.02 15.328-5.126 27.743-20.44 27.743-15.312 0-20.42-12.414-20.435-27.743v-.078c.016-15.33 5.124-27.74 20.437-27.74 15.312 0 20.42 12.41 20.438 27.74v.07zM207.553 5.19c0-1.103.885-2.124 1.984-2.282 0 0 13.577-1.95 14.784-2.115 1.37-.187 3.19.798 3.19 2.744v44.236c3.23-3.105 6.79-5.608 10.66-7.515 3.88-1.906 8.43-2.86 13.66-2.86 4.53 0 8.53.776 12.03 2.33 3.5 1.55 6.43 3.73 8.77 6.533 2.34 2.81 4.12 6.16 5.33 10.05 1.21 3.9 1.82 8.19 1.82 12.87v51.35c0 1.1-.89 2-2 2h-15.95c-1.1 0-2-.9-2-1.99V69.18c0-5.118-1.17-9.08-3.51-11.888-2.35-2.804-5.86-4.207-10.544-4.207-3.45 0-6.677.79-9.69 2.37-3.02 1.58-5.87 3.73-8.564 6.46v58.617c0 1.102-.894 2-2.002 2h-15.94c-1.11 0-2.005-.895-2.005-2V5.188zm244.007 95.327v-43.68h-13.482c-1.1 0-1.742-.87-1.443-1.916l3-10.49c.262-.9.942-1.87 2.308-2.07l9.597-1.35 3.508-23.49c.163-1.09 1.18-2.1 2.274-2.26 0 0 9.192-1.31 10.963-1.58 1.673-.25 3.19.97 3.19 2.81v24.52h17.565c1.106 0 2.002.9 2.002 2.01v11.82c0 1.11-.89 2.01-2.002 2.01h-17.566v43.08c0 6.02 3.623 8.32 7.095 8.32 2.12 0 5.02-1.14 7.19-2.16 1.34-.62 3.41-.16 3.95 1.73l2.45 8.65c.3 1.07-.25 2.37-1.23 2.86 0 0-7.29 4.37-17.06 4.37-13.73 0-22.33-8.08-22.33-23.16zm-44.584-47.74c-7.084 0-12.657 2.476-12.657 8.433 0 7.44 12.01 9.606 20.23 12.64 5.49 2.027 20.24 5.98 20.24 22.016 0 19.48-16 27.807-33.06 27.807-17.06 0-25.4-5.465-25.4-5.465-.96-.527-1.5-1.822-1.2-2.89 0 0 2.1-7.52 2.64-9.386.48-1.68 2.41-2.27 3.64-1.792 4.39 1.712 12.32 4.092 21.28 4.092 9.07 0 13.46-2.803 13.46-8.777 0-7.95-12.26-10.38-20.36-12.967-5.59-1.78-20.36-5.93-20.36-23.566 0-17.373 15.08-25.524 31.2-25.524 13.64 0 23.5 4.69 23.5 4.69 1.01.427 1.58 1.635 1.28 2.698l-2.658 9.357c-.488 1.74-1.898 2.537-3.666 1.957-3.89-1.277-11.2-3.322-18.15-3.322zm-210.313-15.28c-6.695.775-11.472 3.962-14.562 6.93-6.06-4.81-14.49-7.106-23.94-7.106-18.95 0-33.76 9.26-33.76 29.43 0 11.58 4.88 19.56 12.62 24.26-5.75 2.75-9.57 8.59-9.57 14.34 0 9.61 7.5 12.61 7.5 12.61s-13.11 6.44-13.11 19.32c0 16.49 15.01 23.16 33.34 23.16 26.43 0 44.61-11.04 44.61-31.31 0-12.47-9.44-19.36-30.01-20.18-12.2-.48-20.11-.93-22.07-1.58-2.59-.87-3.86-2.96-3.86-5.28 0-2.55 2.08-4.98 5.35-6.65 2.86.516 5.87.768 8.99.768 18.97 0 33.76-9.223 33.76-29.425 0-4.897-.87-9.15-2.46-12.78 2.79-1.506 8.34-2.25 8.34-2.25 1.09-.17 1.975-1.21 1.974-2.31V40.3c0-1.88-1.59-2.955-3.1-2.78zm-49.13 85.132s9.954.38 19.9.84c11.172.52 14.654 2.96 14.654 8.81 0 7.15-9.71 14.1-23.28 14.1-12.88 0-19.314-4.54-19.314-12.08 0-4.33 2.26-9.18 8.04-11.69zm10.66-40.54c-8.978 0-15.983-4.83-15.983-15.35 0-10.53 7.01-15.35 15.983-15.35 8.974 0 15.984 4.81 15.984 15.34 0 10.53-7.002 15.34-15.984 15.34z" fill="#2D3134"/><g opacity=".6" transform="translate(0 36)" fill="#2E3134"><rect x=".209" y="69.017" width="33.643" height="17.014" rx="4"/><rect x="50.672" y="69.017" width="33.622" height="17.014" rx="4"/><rect x=".184" y="34.99" width="84.121" height="17.014" rx="4"/><rect x=".209" y=".964" width="50.469" height="17.013" rx="4"/><rect x="67.494" y=".964" width="16.821" height="17.013" rx="4"/></g></g></svg>

Before

Width:  |  Height:  |  Size: 3.3 KiB

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 14.5s2 3 5 3 5.5-2.463 5.5-5.5S21 6.5 18 6.5c-5 0-7 11-12 11C2.962 17.5.5 15.037.5 12S3 6.5 6 6.5s4.5 3.5 4.5 3.5"/></svg>

Before

Width:  |  Height:  |  Size: 196 B

11
partials/icons/loader.hbs Normal file
View File

@ -0,0 +1,11 @@
<svg version="1.1" id="loader-1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
y="0px" width="40px" height="40px" viewBox="0 0 40 40" enable-background="new 0 0 40 40" xml:space="preserve">
<path opacity="0.2" fill="#000" d="M20.201,5.169c-8.254,0-14.946,6.692-14.946,14.946c0,8.255,6.692,14.946,14.946,14.946
s14.946-6.691,14.946-14.946C35.146,11.861,28.455,5.169,20.201,5.169z M20.201,31.749c-6.425,0-11.634-5.208-11.634-11.634
c0-6.425,5.209-11.634,11.634-11.634c6.425,0,11.633,5.209,11.633,11.634C31.834,26.541,26.626,31.749,20.201,31.749z" />
<path fill="#000" d="M26.013,10.047l1.654-2.866c-2.198-1.272-4.743-2.012-7.466-2.012h0v3.312h0
C22.32,8.481,24.301,9.057,26.013,10.047z">
<animateTransform attributeType="xml" attributeName="transform" type="rotate" from="0 20 20" to="360 20 20"
dur="0.5s" repeatCount="indefinite" />
</path>
</svg>

After

Width:  |  Height:  |  Size: 923 B

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" fill="none"><path d="M19.5 8c0 4.144-7.5 15.5-7.5 15.5S4.5 12.144 4.5 8C4.5 3.858 7.857.5 12 .5c4.142 0 7.5 3.358 7.5 7.5z"/><circle cx="12" cy="8" r="3"/></svg>

Before

Width:  |  Height:  |  Size: 329 B

5
partials/icons/lock.hbs Normal file
View File

@ -0,0 +1,5 @@
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M16.25 6.875H3.75C3.40482 6.875 3.125 7.15482 3.125 7.5V16.25C3.125 16.5952 3.40482 16.875 3.75 16.875H16.25C16.5952 16.875 16.875 16.5952 16.875 16.25V7.5C16.875 7.15482 16.5952 6.875 16.25 6.875Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path>
<path d="M7.1875 6.875V4.0625C7.1875 3.31658 7.48382 2.60121 8.01126 2.07376C8.53871 1.54632 9.25408 1.25 10 1.25C10.7459 1.25 11.4613 1.54632 11.9887 2.07376C12.5162 2.60121 12.8125 3.31658 12.8125 4.0625V6.875" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path>
<path d="M10 13.125C10.6904 13.125 11.25 12.5654 11.25 11.875C11.25 11.1846 10.6904 10.625 10 10.625C9.30964 10.625 8.75 11.1846 8.75 11.875C8.75 12.5654 9.30964 13.125 10 13.125Z" fill="currentColor"></path>
</svg>

After

Width:  |  Height:  |  Size: 932 B

View File

@ -1,3 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
<path d="M7.5 15.5V4a1.5 1.5 0 1 1 3 0v4.5h2a1 1 0 0 1 1 1h2a1 1 0 0 1 1 1H18a1.5 1.5 0 0 1 1.5 1.5v3.099c0 .929-.13 1.854-.385 2.748L17.5 23.5h-9c-1.5-2-5.417-8.673-5.417-8.673a1.2 1.2 0 0 1 1.76-1.605L7.5 15.5zm6-6v2m-3-3.5v3.5m6-1v2"/>
</svg>

Before

Width:  |  Height:  |  Size: 311 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" width="20" height="20"><path stroke-linecap="round" stroke-linejoin="round" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"></path></svg>

After

Width:  |  Height:  |  Size: 248 B

View File

@ -1 +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>
<svg class="icon" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="currentColor"><path d="M23.954 4.569c-.885.389-1.83.654-2.825.775 1.014-.611 1.794-1.574 2.163-2.723-.951.555-2.005.959-3.127 1.184-.896-.959-2.173-1.559-3.591-1.559-2.717 0-4.92 2.203-4.92 4.917 0 .39.045.765.127 1.124C7.691 8.094 4.066 6.13 1.64 3.161c-.427.722-.666 1.561-.666 2.475 0 1.71.87 3.213 2.188 4.096-.807-.026-1.566-.248-2.228-.616v.061c0 2.385 1.693 4.374 3.946 4.827-.413.111-.849.171-1.296.171-.314 0-.615-.03-.916-.086.631 1.953 2.445 3.377 4.604 3.417-1.68 1.319-3.809 2.105-6.102 2.105-.39 0-.779-.023-1.17-.067 2.189 1.394 4.768 2.209 7.557 2.209 9.054 0 13.999-7.496 13.999-13.986 0-.209 0-.42-.015-.63.961-.689 1.8-1.56 2.46-2.548l-.047-.02z"/></svg>

Before

Width:  |  Height:  |  Size: 888 B

After

Width:  |  Height:  |  Size: 752 B

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M23.5 11.957c0 6.375-5.163 11.544-11.532 11.544C5.599 23.5.5 18.125.5 11.75.5 5.542 5.37.758 11.505.511l.5-.011C18.374.5 23.5 5.582 23.5 11.957zM11.505.511c-6 6.5-6 14.98 0 22.98m1-22.98c6 6.5 6 14.977 0 22.977M2 17.479h20.063m-19.657-12h19.062m-20.968 6h22.938" stroke="#000" stroke-linejoin="round" stroke-miterlimit="10" fill="none"/></svg>

Before

Width:  |  Height:  |  Size: 413 B

View File

@ -1,42 +1,78 @@
<article class="post-card {{post_class}}{{#unless feature_image}} no-image{{/unless}}">
{{!-- This is a partial file used to generate a post "card"
which templates loop over to generate a list of posts. --}}
<article class="post-card {{post_class}}{{#match @custom.feed_layout "Classic"}}{{#is "home"}}{{#has index="0"}} post-card-large{{/has}}{{#has index="1,2"}} dynamic{{/has}}{{/is}}{{/match}}{{#match @custom.feed_layout "Grid"}} keep-ratio{{/match}}{{#match @custom.feed_layout "List"}}{{#is "home, paged"}} post-card-large{{/is}}{{/match}}{{#unless access}} post-access-{{visibility}}{{/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>
<a class="post-card-image-link" href="{{url}}">
{{!-- This is a responsive image, it loads different sizes depending on device
https://medium.freecodecamp.org/a-guide-to-responsive-images-with-ready-to-use-templates-c400bd65c433 --}}
<img class="post-card-image"
srcset="{{img_url feature_image size="s"}} 300w,
{{img_url feature_image size="m"}} 600w,
{{img_url feature_image size="l"}} 1000w,
{{img_url feature_image size="xl"}} 2000w"
sizes="(max-width: 1000px) 400px, 800px"
src="{{img_url feature_image size="m"}}"
alt="{{#if feature_image_alt}}{{feature_image_alt}}{{else}}{{title}}{{/if}}"
loading="lazy"
/>
{{#unless access}}
{{^has visibility="public"}}
<div class="post-card-access">
{{> "icons/lock"}}
{{#has visibility="members"}}
Members only
{{else}}
Paid-members only
{{/has}}
</div>
{{/has}}
{{/unless}}
</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>
<div class="post-card-tags">
{{#primary_tag}}
<span class="post-card-primary-tag">{{name}}</span>
{{/primary_tag}}
{{#if featured}}
<span class="post-card-featured">{{> "icons/fire"}} Featured</span>
{{/if}}
</li>
{{/foreach}}
</ul>
<span class="reading-time">{{reading_time}}</span>
</div>
<h2 class="post-card-title">
{{#unless access}}
{{^has visibility="public"}}
{{#unless feature_image}}
{{> "icons/lock"}}
{{/unless}}
{{/has}}
{{/unless}}
{{title}}
</h2>
</header>
{{#if excerpt}}
<div class="post-card-excerpt">{{excerpt}}</div>
{{/if}}
</a>
<footer class="post-card-meta">
<time class="post-card-meta-date" datetime="{{date format="YYYY-MM-DD"}}">{{date}}</time>
{{#if reading_time}}
<span class="post-card-meta-length">{{reading_time}}</span>
{{/if}}
{{#if @site.comments_enabled}}
{{comment_count}}
{{/if}}
</footer>
</div>
</article>

View File

@ -1,29 +0,0 @@
<nav class="site-nav">
<div class="site-nav-left">
{{^is "home"}}
{{#if @blog.logo}}
<a class="site-nav-logo" href="{{@blog.url}}"><img src="{{@blog.logo}}" alt="{{@blog.title}}" /></a>
{{else}}
<a class="site-nav-logo" href="{{@blog.url}}">{{@blog.title}}</a>
{{/if}}
{{/is}}
{{#if @blog.navigation}}
{{navigation}}
{{/if}}
</div>
<div class="site-nav-right">
<div class="social-links">
{{#if @blog.facebook}}
<a class="social-link social-link-fb" href="{{facebook_url @blog.facebook}}" target="_blank" rel="noopener">{{> "icons/facebook"}}</a>
{{/if}}
{{#if @blog.twitter}}
<a class="social-link social-link-tw" href="{{twitter_url @blog.twitter}}" target="_blank" rel="noopener">{{> "icons/twitter"}}</a>
{{/if}}
</div>
{{#if @labs.subscribers}}
<a class="subscribe-button" href="#subscribe">Subscribe</a>
{{else}}
<a class="rss-button" href="https://feedly.com/i/subscription/feed/{{@blog.url}}/rss/" target="_blank" rel="noopener">{{> "icons/rss"}}</a>
{{/if}}
</div>
</nav>

284
post.hbs
View File

@ -1,198 +1,140 @@
{{!< default}}
{{!-- The tag above means: insert everything in this file
into the {body} of the default.hbs template --}}
into the {body} tag of the default.hbs template --}}
<header class="site-header outer">
<div class="inner">
{{> "site-nav"}}
</div>
</header>
{{!-- Everything inside the #post tags pulls data from the post --}}
{{#post}}
{{!-- Everything inside the #post block pulls data from the post --}}
<main id="site-main" class="site-main outer">
<div class="inner">
<main id="site-main" class="site-main">
<article class="article {{post_class}} {{#match @custom.post_image_style "Full"}}image-full{{else match @custom.post_image_style "=" "Small"}}image-small{{/match}}">
<article class="post-full {{post_class}} {{#unless feature_image}}no-image{{/unless}}">
<header class="article-header gh-canvas">
<header class="post-full-header">
<section class="post-full-meta">
<time class="post-full-meta-date" datetime="{{date format="YYYY-MM-DD"}}">{{date format="D MMMM YYYY"}}</time>
{{#primary_tag}}
<span class="date-divider">/</span> <a href="{{url}}">{{name}}</a>
{{/primary_tag}}
</section>
<h1 class="post-full-title">{{title}}</h1>
</header>
{{#if feature_image}}
<figure class="post-full-image" style="background-image: url({{feature_image}})">
</figure>
<div class="article-tag post-card-tags">
{{#primary_tag}}
<span class="post-card-primary-tag">
<a href="{{url}}">{{name}}</a>
</span>
{{/primary_tag}}
{{#if featured}}
<span class="post-card-featured">{{> "icons/fire"}} Featured</span>
{{/if}}
</div>
<section class="post-full-content">
<div class="post-content">
{{content}}
<h1 class="article-title">{{title}}</h1>
{{#if custom_excerpt}}
<p class="article-excerpt">{{custom_excerpt}}</p>
{{/if}}
<div class="article-byline">
<section class="article-byline-content">
<ul class="author-list">
{{#foreach authors}}
<li class="author-list-item">
{{#if profile_image}}
<a href="{{url}}" class="author-avatar">
<img class="author-profile-image" src="{{img_url profile_image size="xs"}}" alt="{{name}}" />
</a>
{{else}}
<a href="{{url}}" class="author-avatar author-profile-image">{{> "icons/avatar"}}</a>
{{/if}}
</li>
{{/foreach}}
</ul>
<div class="article-byline-meta">
<h4 class="author-name">{{authors}}</h4>
<div class="byline-meta-content">
<time class="byline-meta-date" datetime="{{date format="YYYY-MM-DD"}}">{{date}}</time>
{{#if reading_time}}
<span class="byline-reading-time"><span class="bull">&bull;</span> {{reading_time}}</span>
{{/if}}
</div>
</section>
</div>
{{!-- 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}}
</section>
</div>
<footer class="post-full-footer">
{{#match @custom.post_image_style "!=" "Hidden"}}
{{#if feature_image}}
<figure class="article-image">
{{!-- This is a responsive image, it loads different sizes depending on device
https://medium.freecodecamp.org/a-guide-to-responsive-images-with-ready-to-use-templates-c400bd65c433 --}}
<img
srcset="{{img_url feature_image size="s"}} 300w,
{{img_url feature_image size="m"}} 600w,
{{img_url feature_image size="l"}} 1000w,
{{img_url feature_image size="xl"}} 2000w"
sizes="(min-width: 1400px) 1400px, 92vw"
src="{{img_url feature_image size="xl"}}"
alt="{{#if feature_image_alt}}{{feature_image_alt}}{{else}}{{title}}{{/if}}"
/>
{{#if feature_image_caption}}
<figcaption>{{feature_image_caption}}</figcaption>
{{/if}}
</figure>
{{/if}}
{{/match}}
{{!-- 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. --}}
</header>
{{#has author="count:>1"}}
{{> "byline-multiple"}}
{{else}}
{{> "byline-single"}}
{{/has}}
<section class="gh-content gh-canvas">
{{content}}
</section>
</footer>
{{#if comments}}
<section class="article-comments gh-canvas">
{{comments}}
</section>
{{/if}}
{{!--
<section class="post-full-comments">
If you want to embed comments, this is a good place to do it!
</section>
--}}
</article>
</div>
</article>
</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}}
{{!-- A signup call to action is displayed here, unless viewed as a logged-in member --}}
{{#if @site.members_enabled}}
{{#unless @member}}
{{#unless @site.comments_enabled}}
{{#if access}}
<section class="footer-cta outer">
<div class="inner">
{{#if @custom.email_signup_text}}<h2 class="footer-cta-title">{{@custom.email_signup_text}}</h2>{{/if}}
<a class="footer-cta-button" href="#/portal" data-portal>
<div class="footer-cta-input">Enter your email</div>
<span>Subscribe</span>
</a>
</div>
</div>
</aside>
</section>
{{/if}}
{{/unless}}
{{/unless}}
{{/if}}
{{!-- Floating header which appears on-scroll, included from includes/floating-header.hbs --}}
{{> floating-header}}
{{/post}}
{{!-- Read more links, just above the footer --}}
{{#if @custom.show_recent_posts_footer}}
{{!-- The {#get} helper below fetches some of the latest posts here
so that people have something else to read when they finish this one.
{{!-- The #contentFor helper here will send everything inside it up to the matching #block helper found in default.hbs --}}
{{#contentFor "scripts"}}
<script>
This query gets the latest 3 posts on the site, but adds a filter to
exclude the post we're currently on from being included. --}}
{{#get "posts" filter="id:-{{id}}" limit="3" as |more_posts|}}
// 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
{{#if more_posts}}
<aside class="read-more-wrap outer">
<div class="read-more inner">
{{#foreach more_posts}}
{{> "post-card"}}
{{/foreach}}
</div>
</aside>
{{/if}}
var progressBar = document.querySelector('progress');
var header = document.querySelector('.floating-header');
var title = document.querySelector('.post-full-title');
{{/get}}
{{/if}}
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}}
{{/post}}

76
tag.hbs
View File

@ -1,33 +1,55 @@
{{!< default}}
{{!-- The tag above means - insert everything in this file into the {body} of the default.hbs template --}}
{{!-- The big featured header, it uses blog cover image as a BG if available --}}
{{#tag}}
<header class="site-header outer {{#if feature_image}}" style="background-image: url({{feature_image}}){{else}}no-cover{{/if}}">
<div class="inner">
{{> "site-nav"}}
<div class="site-header-content">
<h1 class="site-title">{{name}}</h1>
<h2 class="site-description">
{{#if description}}
{{description}}
{{else}}
A collection of {{plural ../pagination.total empty='posts' singular='% post' plural='% posts'}}
{{/if}}
</h2>
</div>
</div>
</header>
{{/tag}}
{{!-- The main content area --}}
<main id="site-main" class="site-main outer">
<div class="inner">
<div class="post-feed">
{{#foreach posts}}
{{!-- The tag below includes the markup for each post - partials/post-card.hbs --}}
{{> "post-card"}}
{{/foreach}}
</div>
<div class="inner posts">
<div class="post-feed">
{{#tag}}
<section class="post-card post-card-large">
{{#if feature_image}}
<div class="post-card-image-link">
{{!-- This is a responsive image, it loads different sizes depending on device
https://medium.freecodecamp.org/a-guide-to-responsive-images-with-ready-to-use-templates-c400bd65c433 --}}
<img class="post-card-image"
srcset="{{img_url feature_image size="s"}} 300w,
{{img_url feature_image size="m"}} 600w,
{{img_url feature_image size="l"}} 1000w,
{{img_url feature_image size="xl"}} 2000w"
sizes="(max-width: 1000px) 400px, 800px"
src="{{img_url feature_image size="m"}}"
alt="{{title}}"
/>
</div>
{{/if}}
<div class="post-card-content">
<div class="post-card-content-link">
<header class="post-card-header">
<h2 class="post-card-title">{{name}}</h2>
</header>
<div class="post-card-excerpt">
{{#if description}}
{{description}}
{{else}}
A collection of {{plural ../pagination.total empty='zero posts' singular='% post' plural='% posts'}}
{{/if}}
</div>
</div>
</div>
</section>
{{/tag}}
{{#foreach posts}}
{{!-- The tag below includes the markup for each post - partials/post-card.hbs --}}
{{> "post-card"}}
{{/foreach}}
</div>
{{pagination}}
</div>
</main>

6447
yarn.lock

File diff suppressed because it is too large Load Diff