Compare commits

...

547 Commits
0.9.1 ... 3.0.1

Author SHA1 Message Date
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
1bf2cdb52a Upgrading Casper to 2.4.1 2018-07-31 11:31:35 +01:00
f67caaba5c 🐛 Fixed content overflow on mobile
closes https://github.com/TryGhost/Casper/issues/464
- setting max-width of `kg-markdown-card` wrapper that is still used by non-Koenig posts
2018-07-30 12:21:17 +01:00
25d1e368d6 Upgrading Casper to 2.4.0 2018-07-24 15:13:30 +02:00
5c6cce1519 Ghost 1.25 Koenig updates (#463)
refs https://github.com/TryGhost/Ghost/pull/9741
- Ghost 1.25 has updated the HTML output of Koenig beta posts
  - the `<div class="kg-post">` wrapper around post content has been removed
  - for image cards the `.kg-image-wide` and `.kg-image-full` classes have been changed to `.kg-width-wide` and `.kg-width-full` and applied to the `<figure>` element rather than the `<img>` element
- this will be the default for *all* posts after upgrading to Ghost 2.0

Example output of the `{{content}}` helper for Koenig beta...

Before 1.25.0 (Ghost 1.23.0-1.24.9):
```html
<div class="kg-post">
    <figure class="kg-image-card">
        <img class="kg-image kg-image-wide" src="...">
        <figcaption>example wide image</figcaption>
    </figure>
</div>
```

After 1.25.0:
```html
<figure class="kg-image-card kg-width-wide">
    <img class="kg-image" src="...">
    <figcaption>example wide image</figcaption>
</figure>
```

For reference, in Ghost 1.x a non Koenig post with nothing but an image in the markdown (`![](...)`) would generate output like this:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

closes #314

Adds infinite scroll logic to Casper 2.0

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Added style consistency between variable declarations, if/else statements and functions.
2014-09-07 23:34:40 +02:00
e669b29895 Merge pull request #129 from Douten/patch-1
Fix bouncing scroll-down arrow bug in webkit
2014-09-03 13:13:01 +01:00
bcce1e9a08 Fix bouncing scroll-down arrow bug in webkit
Webkit transform currently requires a vendor prefix. Without it, the arrow bounces and rotate to the original un-rotated state. See https://www.dropbox.com/s/46sjiihtjya42s8/wk-rotate.mov
2014-09-03 01:16:53 -04:00
f55a5a202f Version bump to 1.0.1 2014-08-26 21:07:46 +01:00
5d0db596f8 Merge pull request #125 from designbyjake/master
Swap Noto Serif to PT Serif
2014-08-25 14:36:59 +02:00
eb860f0755 Merge pull request #127 from PaulAdamDavis/emoji-icon-fix
Rename icon assets & references
2014-08-19 18:04:45 +02:00
094c09ade4 Rename icon assets & references
Closes #120

- Renames icon fonts and unicode references

This uses the same basic theory behind 8b25a3d07c which has been proven to work
2014-08-19 16:22:55 +01:00
c7554d995b Swap Noto Serif to PT Serif 2014-08-17 16:01:47 +01:00
3950251944 Merge pull request #119 from rossta/post_hbs_typo
Fix link tag typo
2014-08-13 09:21:49 +02:00
1d494fddd1 fix link tag typo 2014-08-12 22:14:54 -04:00
15d2aa09f4 Merge pull request #118 from PaulAdamDavis/nowrap-fix
Add nowrap to date & rss button
2014-08-12 13:13:35 +02:00
869a4e25f9 Add nowrap to date & rss button
Closes #117, Closes https://github.com/TryGhost/Ghost/issues/3755

- Adds white-space: nowrap; to prevent strings wrapping and breaking onto multiple lines
2014-08-12 09:54:43 +01:00
ad2ffd878c Adding download instructions to readme 2014-08-11 08:16:40 +01:00
5da18ddb3b Fix bug where footer text would wrap to a new line 2014-08-07 16:16:51 +03:00
8fd21ea939 Merge pull request #113 from ErisDS/helper-updates
Updating Casper's use of title and author helpers
2014-08-05 23:43:08 +02:00
ba881b059f Updating Casper's use of title and author helpers
Related to TryGhost/Ghost#3599 and TryGhost/Ghost#3389

- The title helper no longer needs triple-stashes to be safe
- The #author can now be used as a context block again
2014-08-05 20:49:37 +01:00
b84309f482 Stop text from wrapping to a new line with icon
Fixes #112
2014-08-04 12:49:41 +03:00
cefc04c2b2 Merge pull request #109 from halfdan/patch-1
Simplify author link
2014-07-31 22:33:05 +01:00
7dfe3f4a0d Simplify author link
no issue
2014-07-31 21:32:01 +00:00
a60cdab266 Tweak 2014-07-31 18:58:48 +03:00
8ff0ac386c Replace dodgy author helper with better one 2014-07-31 16:54:34 +03:00
f6f2a06f7a Merge pull request #111 from PaulAdamDavis/master
Pluralise post count for author page
2014-07-29 23:32:14 +02:00
2ac6e818d9 Pluralise post count for author page
No issue

- Introduces the new `plural` helper to correctly word the number of posts
2014-07-29 18:25:20 +01:00
a2ff1c2186 Version bump 2014-07-27 16:47:30 +02:00
45240cdc03 Prevent scroll-down contrast BG from overlapping in Firefox
Closes #110
2014-07-27 16:46:37 +02:00
5a4334106e OCD 2014-07-22 13:36:11 +02:00
97f3bfea82 Cleanup old styles + minor display bugfix 2014-07-22 13:35:00 +02:00
e9eca20883 Add fallback text if user has no entered a bio 2014-07-22 13:31:58 +02:00
00eca81a1e Bouncy ball of love 2014-07-22 13:21:33 +02:00
5dc787d572 When cover images are used, add subtle gradient top overlay for more contrast behind nav buttons 2014-07-21 21:40:31 +02:00
a2e43b155b Restoring lost class 2014-07-21 20:55:24 +02:00
c922b6bab5 Update pagination button styles to match new nav button styles 2014-07-21 20:42:29 +02:00
35adcc0fd3 Add post meta back into post.hbs 2014-07-21 20:37:05 +02:00
41d4e2525b Random padding fix 2014-07-21 20:27:14 +02:00
f6ee7d89f9 Add author image to post author-box, if available 2014-07-21 20:19:49 +02:00
91ca337fe6 Link post.hbs author to new author profile page, add icons to meta data 2014-07-21 19:52:45 +02:00
48164cc3cd Fix in case an author has a cover image but no profile image 2014-07-21 19:30:53 +02:00
6659c9514a Fix in case author has no image 2014-07-21 19:09:17 +02:00
4bd2ce6740 Make everything look good with no cover images + crossbrowser fixes 2014-07-21 19:07:56 +02:00
6ae074b724 Introduce new post loop partial + new multi-author post meta 2014-07-21 18:20:36 +02:00
088a867cea First pass on major Casper overhaul and new Multi-user support
- Introduces author.hbs page template
- Completely refactors header styling with new full-screen cover images
- Adds new, improved pagination with additional styles for archive pages
- Cleans up a fuckload of bloat and old styles
2014-07-21 14:45:34 +02:00
3db098c1e0 Revert "Sticky footer"
This reverts commit 3242e72cfc.
2014-07-20 17:28:49 +02:00
3242e72cfc Sticky footer 2014-07-20 17:27:20 +02:00
fe888da667 Bigger padding on mobile header 2014-07-20 17:07:00 +02:00
8464b3d7a7 Cleaning up old styles 2014-07-20 17:01:17 +02:00
cd5045999b Sexier blog description styling 2014-07-20 16:57:38 +02:00
448082bd48 New navigation structure to make way for MU changes 2014-07-20 16:43:44 +02:00
2dafaa257a Merge pull request #108 from designbyjake/typography
Typography updates
2014-07-14 09:50:54 +02:00
9a860f2b3f Typography updates 2014-07-12 18:56:26 +01:00
75fd290804 Updated homepage load-in animations 2014-07-11 12:22:28 +02:00
faeee8d8a0 Merge pull request #107 from PaulAdamDavis/master
Add keyframe animations to the home page header
2014-07-11 11:36:39 +02:00
11008f9831 Add keyframe animations to the home page header 2014-07-11 09:49:40 +01:00
e9725f1ac6 Merge pull request #103 from namanyayg/patch-1
Fixing typo in screen.css
2014-06-02 09:31:00 +02:00
5482da42b9 Fixing typo in screen.css
Line 135, 'corret' to 'correct'.
2014-06-01 23:08:09 +05:30
628789944e Fix giant gap on single post pages 2014-04-16 08:30:06 +02:00
e6c6767aa1 Better author meta mobile styles
Fixes #97
2014-04-16 08:27:44 +02:00
8a2edd67b0 Fix inconsistencies between archive header vs home header 2014-04-15 13:27:36 +02:00
213db8aa97 Merge pull request #94 from nblackburn/master
Made title visible in tag template
2014-04-15 13:14:36 +02:00
97646bc406 Made title visible in tag template
Made the title visible at all times as it presented as a inconsistency
in the template.
2014-04-07 11:03:27 +01:00
2530642253 Merge pull request #92 from razvanc/master
Added the possibility to go back to the front page.
2014-03-27 12:37:15 +01:00
dba42065c7 Added the possibility to go back to the front page. 2014-03-27 12:47:45 +02:00
b18c94f29e Revert "Better blockquotes"
This reverts commit a9eda22a4e.
2014-03-27 09:46:17 +01:00
3dcedcd0a3 Read more chiclet 2014-03-22 15:15:41 +01:00
cee5389fb5 Gratuitous linebreak 2014-03-22 14:55:15 +01:00
cafb25786f Give post titles more weight 2014-03-22 13:32:31 +01:00
a9eda22a4e Better blockquotes 2014-03-22 12:08:52 +01:00
a41588f3e5 Version bump to 0.9.3 2014-03-20 19:17:26 +00:00
c965ac3f42 Merge pull request #89 from polygonix/add_taghbs
Add tag.hbs template
2014-03-19 22:12:10 +01:00
381cdc7e29 Add tag.hbs template
Adds a tag.hbs template and some styles to correspond with it.
2014-03-19 11:10:43 +11:00
fdb52484b5 Update copyright 2014-03-13 22:39:56 +01:00
51b63ddeca Merge pull request #85 from polygonix/add-package-json
Added "package.json" file
2014-03-03 11:00:26 +01:00
b020823408 Added "package.json" file
Includes "name" and "version" setting
2014-03-03 20:58:59 +11:00
7406c1b7da Merge pull request #82 from kennwhite/master
HTML5 valid markup for Twitter share link
2014-03-03 10:27:32 +01:00
be45bc3ce5 Updated icon font 2014-03-03 10:21:19 +01:00
87b892e461 HTML5 valid markup for Twitter share link 2014-03-02 21:51:53 -05:00
1655d519f6 Merge pull request #81 from halfdan/update-fitvids
Update jquery.fitvids.js to 1.1
2014-03-01 12:14:08 +01:00
53b33f2d4a Update jquery.fitvids.js to 1.1
fixes #80
2014-03-01 03:51:08 +01:00
f39e92a5fd Merge pull request #79 from cobbspur/hover
Added hover state for Author meta anchor
2014-02-28 23:42:31 +01:00
348b8cf6ce Remove unused old Normalize.css file 2014-02-24 14:33:37 +01:00
a60dcf99d5 Remove CSS @import with inline minified normalize.css
See #57
2014-02-24 14:32:10 +01:00
835ec25f0b Added hover state for Author meta anchor 2014-02-23 12:20:41 +00:00
48bf106f25 Remove specific resolution optimisation 2014-02-03 23:21:26 +07:00
55784b4348 Corrected link 2014-02-02 16:39:22 +01:00
0efa582d77 Better responsive images
Closes #76
2014-01-31 14:35:24 +07:00
7546018136 Add support for author.url and author.location output
Closes #72
2014-01-27 19:16:17 +07:00
74a7b8bf25 Merge pull request #70 from altonius/patch-1
Update post.hbs - make twitter link https
2014-01-23 18:49:33 -08:00
492ba62e1f Update post.hbs
updated twitter url to use https inline with the other sharing services
2014-01-15 20:58:34 +11:00
3c1b7d68ec 2013 => 2014 2014-01-13 01:34:33 +01:00
9a261d1e93 Adding explicit favicon link 2014-01-12 21:52:21 +00:00
b7a6f81a18 Removed conditional author check
Because a post always has an author. Except when Ghost first runs, and there is the welcome post with no author. But in this case Ghost simply outputs nothing - I haven’t been able to make anything explode.
2014-01-10 17:00:41 +01:00
61cfb3064b Cleaned up comments and indentation 2014-01-10 16:59:27 +01:00
8b420d01a5 Add missing span to page template
Fixes #67
2014-01-10 16:31:25 +01:00
36fe40b9d7 Merge pull request #66 from mjbshaw/patch-1
Respect the blog URL (and subdirectory) in footer
2014-01-07 12:06:42 -08:00
0e1329f51f Respect the blog URL (and subdirectory) in footer 2014-01-07 12:31:32 -07:00
5c8fc51848 Adding encode helper to share link 2014-01-06 21:06:42 +00:00
054f138135 Merge pull request #61 from jitendravyas/master 2013-12-28 15:15:28 +00:00
97e23d1238 replaced to html5 charset tag
http-equiv="Content-Type" content="text/html" is invalid in HTML5.
2013-12-28 15:15:07 +00:00
2d539998d4 Make blog title and description more legible on light backgrounds
Adds a light shadow to blog title and description to give slightly more contrast between text and background when a cover image is used with a predominently light colour. This is not a complete fix, because heavy shadows do not lend to the aesthetic of Casper - however it does go some way to making a small improvement to legibility in most cases.

Related: https://github.com/TryGhost/Ghost/issues/1768
2013-12-28 14:09:01 +01:00
f503b7e5eb Merge pull request #62 from jitendravyas/patch-1
removed chrome frame option from meta tag
2013-12-28 03:13:36 -08:00
5b1e9c590f removed chrome frame option from meta tag
Google has discontinue the Chrome frame project so I suggest to remove it. Event HTML5 boilerplate has removed it 8fc26501f4
2013-12-28 16:25:38 +05:30
657f9fb749 More stupid fixes 2013-12-02 11:53:48 +01:00
11ddc30545 Fix moronic bug
Introduced by me in 9096fbd977
2013-12-02 11:49:26 +01:00
7bc3dfa7e6 Merge pull request #55 from halfdan/asset-helper
Use asset helper to generate paths.
2013-11-28 07:21:05 -08:00
b5819fd970 Use asset helper to generate paths.
fixes #54
2013-11-28 13:43:06 +00:00
e4e8b0d902 Merge pull request #53 from NullGeo/master
Update normalize.css to v2.1.3
2013-11-17 03:52:07 -08:00
9dcf734f04 Update normalize.css to v2.1.3 2013-11-16 23:43:35 -07:00
8b38234565 Rename LICENSE.txt to LICENSE 2013-11-14 14:48:35 +00:00
72c4010f32 Merge pull request #39 from egdelwonk/feature/969_page_template
Added page template to be compatible with pull #1139.
2013-11-06 12:31:32 -08:00
94f98f0d58 Replace Droid with Noto
Fixes #30 #46
2013-10-31 19:34:00 +01:00
2dcf64a8ce Proper spacing for iframe embeds and responsive videos 2013-10-31 19:22:54 +01:00
38be6803b4 Cleanup 2013-10-31 19:09:15 +01:00
9096fbd977 Remove unscoped IDs
Fixes #15
2013-10-31 19:07:10 +01:00
4616c5bd1d Responsive videos by default u guyz 2013-10-31 18:35:57 +01:00
0a7074a716 Oops 2013-10-30 16:56:55 +01:00
928e7e3ffe Make the single post view less shit when there's no blog logo 2013-10-30 16:55:54 +01:00
92ff4f4145 Merge pull request #51 from cobbspur/prefix
Uses prefix for tag helper
2013-10-28 01:41:25 -07:00
7aee698a98 Uses prefix for tag helper 2013-10-27 09:42:52 +00:00
fec0cc6ca6 Merge pull request #48 from willglynn/code_wrapping
<code>/<tt> elements should wrap since they're used inline
2013-10-26 09:19:10 -07:00
23a97124ab <code>/<tt> elements should wrap since they're used inline 2013-10-25 08:29:57 -05:00
a930d49bc3 Enhanced copyright date to be dynamic
Closes #41
2013-10-18 19:52:29 +02:00
692166bc2a Fix positioning/rendering 2013-10-18 19:49:36 +02:00
d504ec0a16 Fix incorrect icon font implementation
Closes #35
2013-10-18 19:42:50 +02:00
06aee0b2c5 Merge pull request #42 from marchdoe/master
Extra semicolon
2013-10-18 10:35:55 -07:00
6ae7958315 Merge pull request #43 from chanster-net/master
Fixed invalid meta tag
2013-10-18 10:35:43 -07:00
58efcd6777 Fixed invalid meta tag. charset should be declared in the content attribute. 2013-10-18 10:08:42 -05:00
09061d71f0 Extra semicolon
Deleting an extra semicolon.
2013-10-17 23:26:54 -04:00
2ca7344203 Added page template to be compatible with pull #1139. 2013-10-17 12:54:08 -05:00
d70beddd28 Merge pull request #31 from alicoding/master
Auto height for img in post-content
2013-10-15 00:58:45 -07:00
fa41e47672 Merge pull request #28 from JoeBonham/patch-1
Replaced table.plain LESS with equivalent CSS
2013-10-14 13:29:13 -07:00
8c52f22c9b Auto height for img in post-content 2013-10-14 12:16:00 -04:00
4b334adf8a Fixed table.plain css
Looked to be LESS formatted CSS that hadn't been compiled. Just replaced with the equivalent compiled CSS.
2013-10-14 14:20:16 +01:00
10beda3f6c Consistently use triple braces for post titles 2013-10-09 19:28:59 +01:00
6096654136 Updating ghost link 2013-10-06 17:49:48 +02:00
436f94e9a9 Moving webfonts from http:// to //
https://en.ghost.org/forum/bugs-suggestions/475-suggestion-remove-system-dependence-on-google-web-fonts
2013-10-04 09:52:54 +02:00
55 changed files with 10523 additions and 1421 deletions

17
.editorconfig Normal file
View File

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

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

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

15
.github/workflows/deploy-theme.yml vendored Normal file
View File

@ -0,0 +1,15 @@
name: Deploy Theme
on:
push:
branches:
- master
jobs:
deploy:
runs-on: ubuntu-18.04
steps:
- uses: actions/checkout@master
- uses: TryGhost/action-deploy-theme@v1.2.0
with:
api-url: ${{ secrets.GHOST_ADMIN_API_URL }}
api-key: ${{ secrets.GHOST_ADMIN_API_KEY }}
theme-name: "casper-master"

9
.gitignore vendored
View File

@ -13,9 +13,16 @@ results
npm-debug.log
node_modules
package-lock.json
.idea/*
*.iml
projectFilesBackup
.DS_Store
.DS_Store
dist/
config.json
changelog.md
changelog.md.bk

11
.travis.yml Normal file
View File

@ -0,0 +1,11 @@
dist: xenial
language: node_js
node_js:
- 10
cache: yarn
# Don't run builds for renovate PRs
if: NOT head_branch =~ ^renovate

2
.yarnrc Normal file
View File

@ -0,0 +1,2 @@
version-tag-prefix ""
version-git-message "%s"

View File

@ -1,4 +1,4 @@
Copyright (c) 2013 Ghost Foundation - Released under The MIT License.
Copyright (c) 2013-2019 Ghost Foundation
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
@ -19,4 +19,4 @@ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
OTHER DEALINGS IN THE SOFTWARE.

View File

@ -1,14 +1,70 @@
# Casper
The default theme for [Ghost](http://github.com/tryghost/ghost/).
The default theme for [Ghost](http://github.com/tryghost/ghost/). This is the latest development version of Casper! If you're just looking to download the latest release, head over to the [releases](https://github.com/TryGhost/Casper/releases) page.
## Copyright & License
&nbsp;
Copyright (C) 2013 Ghost Foundation - Released under the MIT License.
![screenshot-desktop](https://user-images.githubusercontent.com/353959/66987533-40eae100-f0c1-11e9-822e-cbaf38fb8e3f.png)
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
&nbsp;
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
# First time using a Ghost theme?
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Ghost uses a simple templating language called [Handlebars](http://handlebarsjs.com/) for its themes.
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/api/handlebars-themes/) which explains every possible Handlebars helper and template.
**The main files are:**
- `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, eg. "all posts tagged with `news`"
- `author.hbs` - Used for author archives, eg. "all posts written by Jamie"
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 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](https://nodejs.org/), [Yarn](https://yarnpkg.com/) and [Gulp](https://gulpjs.com) installed globally. After that, from the theme's root directory:
```bash
# install dependencies
yarn install
# run development server
yarn dev
```
Now you can edit `/assets/css/` files, which will be compiled to `/assets/built/` automatically.
The `zip` Gulp task packages the theme files into `dist/<theme-name>.zip`, which you can then upload to your site.
```bash
# 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)
# SVG Icons
Casper uses inline SVG icons, included via Handlebars partials. You can find all icons inside `/partials/icons`. To use an icon just include the name of the relevant file, eg. To include the SVG icon in `/partials/icons/rss.hbs` - use `{{> "icons/rss"}}`.
You can add your own SVG icons in the same manner.
# Copyright & License
Copyright (c) 2013-2019 Ghost Foundation - Released under the [MIT license](LICENSE).

9
SECURITY.md Normal file
View File

@ -0,0 +1,9 @@
# Reporting Security Vulnerabilities
Potential security vulnerabilities can be reported directly us at `security@ghost.org`. The Ghost Security Team communicates privately and works in a secured, isolated repository for tracking, testing, and resolving security-related issues.
The full, up-to-date details of our security policy and procedure can always be found in our documentation:
https://ghost.org/docs/concepts/security/
Please refer to this before emailing us. Thanks for helping make Ghost safe for everyone 🙏.

2
assets/built/casper.js Normal file
View File

@ -0,0 +1,2 @@
!function(n){"use strict";n.fn.fitVids=function(e){var i={customSelector:null,ignore:null};if(!document.getElementById("fit-vids-style")){var t=document.head||document.getElementsByTagName("head")[0],r=document.createElement("div");r.innerHTML='<p>x</p><style id="fit-vids-style">.fluid-width-video-container{flex-grow: 1;width:100%;}.fluid-width-video-wrapper{width:100%;position:relative;padding:0;}.fluid-width-video-wrapper iframe,.fluid-width-video-wrapper object,.fluid-width-video-wrapper embed {position:absolute;top:0;left:0;width:100%;height:100%;}</style>',t.appendChild(r.childNodes[1])}return e&&n.extend(i,e),this.each(function(){var e=['iframe[src*="player.vimeo.com"]','iframe[src*="youtube.com"]','iframe[src*="youtube-nocookie.com"]','iframe[src*="kickstarter.com"][src*="video.html"]',"object","embed"];i.customSelector&&e.push(i.customSelector);var r=".fitvidsignore";i.ignore&&(r=r+", "+i.ignore);var t=n(this).find(e.join(","));(t=(t=t.not("object object")).not(r)).each(function(){var e=n(this);if(!(0<e.parents(r).length||"embed"===this.tagName.toLowerCase()&&e.parent("object").length||e.parent(".fluid-width-video-wrapper").length)){e.css("height")||e.css("width")||!isNaN(e.attr("height"))&&!isNaN(e.attr("width"))||(e.attr("height",9),e.attr("width",16));var t=("object"===this.tagName.toLowerCase()||e.attr("height")&&!isNaN(parseInt(e.attr("height"),10))?parseInt(e.attr("height"),10):e.height())/(isNaN(parseInt(e.attr("width"),10))?e.width():parseInt(e.attr("width"),10));if(!e.attr("name")){var i="fitvid"+n.fn.fitVids._count;e.attr("name",i),n.fn.fitVids._count++}e.wrap('<div class="fluid-width-video-container"><div class="fluid-width-video-wrapper"></div></div>').parent(".fluid-width-video-wrapper").css("padding-top",100*t+"%"),e.removeAttr("height").removeAttr("width")}})})},n.fn.fitVids._count=0}(window.jQuery||window.Zepto),function(e,t){t.addEventListener("DOMContentLoaded",function(){t.querySelectorAll(".kg-gallery-image img").forEach(function(e){var t=e.closest(".kg-gallery-image"),i=e.attributes.width.value/e.attributes.height.value;t.style.flex=i+" 1 0%"})})}(window,document),function(t,i){var r=i.querySelector("link[rel=next]");if(r){var n=i.querySelector(".post-feed");if(n){var o=300,s=!1,a=!1,d=t.scrollY,l=t.innerHeight,c=i.documentElement.scrollHeight;t.addEventListener("scroll",f,{passive:!0}),t.addEventListener("resize",v),h()}}function u(){if(404===this.status)return t.removeEventListener("scroll",f),void t.removeEventListener("resize",v);this.response.querySelectorAll(".post-card").forEach(function(e){n.appendChild(i.importNode(e,!0))});var e=this.response.querySelector("link[rel=next]");e?r.href=e.href:(t.removeEventListener("scroll",f),t.removeEventListener("resize",v)),c=i.documentElement.scrollHeight,a=s=!1}function e(){if(!a)if(d+l<=c-o)s=!1;else{a=!0;var e=new t.XMLHttpRequest;e.responseType="document",e.addEventListener("load",u),e.open("GET",r.href),e.send(null)}}function h(){s||t.requestAnimationFrame(e),s=!0}function f(){d=t.scrollY,h()}function v(){l=t.innerHeight,c=i.documentElement.scrollHeight,h()}}(window,document),function(s,a){s.Casper||(s.Casper={}),s.Casper.stickyNavTitle=function(e){var t=a.querySelector(e.navSelector),i=a.querySelector(e.titleSelector),r=s.scrollY,n=!1;function o(){i.getBoundingClientRect().top+s.scrollY+(i.offsetHeight+35)<=r?t.classList.add(e.activeClass):t.classList.remove(e.activeClass),n=!1}s.addEventListener("scroll",function(){r=s.scrollY,function(){n||requestAnimationFrame(o);n=!0}()},{passive:!0}),o()}}(window,document);
//# sourceMappingURL=casper.js.map

File diff suppressed because one or more lines are too long

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

@ -0,0 +1,2 @@
a,abbr,acronym,address,applet,article,aside,audio,big,blockquote,body,canvas,caption,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,ul,var,video{margin:0;padding:0;border:0;font:inherit;font-size:100%;vertical-align:baseline}body{line-height:1}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:after,blockquote:before,q:after,q:before{content:"";content:none}img{max-width:100%}html{box-sizing:border-box;font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}*,:after,:before{box-sizing:inherit}a{background-color:transparent}a:active,a:hover{outline:0}b,strong{font-weight:700}dfn,em,i{font-style:italic}h1{margin:.67em 0;font-size:2em}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}mark{background-color:#fdffb6}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;color:inherit;font:inherit}button{overflow:visible;border:none}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input:focus{outline:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}legend{padding:0;border:0}textarea{overflow:auto}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}html{overflow-y:scroll;font-size:62.5%;-webkit-tap-highlight-color:rgba(0,0,0,0)}body,html{overflow-x:hidden}body{color:#313b3f;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif;font-size:1.6rem;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:600;text-rendering:optimizeLegibility}h1{margin:0 0 .5em;font-size:5.5rem;font-weight:600}@media (max-width:500px){h1{font-size:2.2rem}}h2{margin:1.5em 0 .5em;font-size:2.2rem}@media (max-width:500px){h2{font-size:1.8rem}}h3{margin:1.5em 0 .5em;font-size:1.8rem;font-weight:500}@media (max-width:500px){h3{font-size:1.7rem}}h4{margin:1.5em 0 .5em;font-size:1.6rem;font-weight:500}h5,h6{margin:1.5em 0 .5em;font-size:1.4rem;font-weight:500}
/*# sourceMappingURL=global.css.map */

File diff suppressed because one or more lines are too long

2
assets/built/screen.css Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

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

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

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

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

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

@ -0,0 +1,487 @@
/* 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;
--darkmode: color(var(--darkgrey) l(+2%));
}
/* Reset
/* ---------------------------------------------------------- */
html,
body,
div,
span,
applet,
object,
iframe,
h1,
h2,
h3,
h4,
h5,
h6,
p,
blockquote,
pre,
a,
abbr,
acronym,
address,
big,
cite,
code,
del,
dfn,
em,
img,
ins,
kbd,
q,
s,
samp,
small,
strike,
strong,
sub,
sup,
tt,
var,
dl,
dt,
dd,
ol,
ul,
li,
fieldset,
form,
label,
legend,
table,
caption,
tbody,
tfoot,
thead,
tr,
th,
td,
article,
aside,
canvas,
details,
embed,
figure,
figcaption,
footer,
header,
hgroup,
menu,
nav,
output,
ruby,
section,
summary,
time,
mark,
audio,
video {
margin: 0;
padding: 0;
border: 0;
font: inherit;
font-size: 100%;
vertical-align: baseline;
}
body {
line-height: 1;
}
ol,
ul {
list-style: none;
}
blockquote,
q {
quotes: none;
}
blockquote:before,
blockquote:after,
q:before,
q:after {
content: "";
content: none;
}
table {
border-spacing: 0;
border-collapse: collapse;
}
img {
max-width: 100%;
}
html {
box-sizing: border-box;
font-family: sans-serif;
-ms-text-size-adjust: 100%;
-webkit-text-size-adjust: 100%;
}
*,
*:before,
*:after {
box-sizing: inherit;
}
a {
background-color: transparent;
}
a:active,
a:hover {
outline: 0;
}
b,
strong {
font-weight: bold;
}
i,
em,
dfn {
font-style: italic;
}
h1 {
margin: 0.67em 0;
font-size: 2em;
}
small {
font-size: 80%;
}
sub,
sup {
position: relative;
font-size: 75%;
line-height: 0;
vertical-align: baseline;
}
sup {
top: -0.5em;
}
sub {
bottom: -0.25em;
}
img {
border: 0;
}
svg:not(:root) {
overflow: hidden;
}
mark {
background-color: #fdffb6;
}
code,
kbd,
pre,
samp {
font-family: monospace, monospace;
font-size: 1em;
}
button,
input,
optgroup,
select,
textarea {
margin: 0; /* 3 */
color: inherit; /* 1 */
font: inherit; /* 2 */
}
button {
overflow: visible;
border: none;
}
button,
select {
text-transform: none;
}
button,
html input[type="button"],
/* 1 */
input[type="reset"],
input[type="submit"] {
cursor: pointer; /* 3 */
-webkit-appearance: button; /* 2 */
}
button[disabled],
html input[disabled] {
cursor: default;
}
button::-moz-focus-inner,
input::-moz-focus-inner {
padding: 0;
border: 0;
}
input {
line-height: normal;
}
input:focus {
outline: none;
}
input[type="checkbox"],
input[type="radio"] {
box-sizing: border-box; /* 1 */
padding: 0; /* 2 */
}
input[type="number"]::-webkit-inner-spin-button,
input[type="number"]::-webkit-outer-spin-button {
height: auto;
}
input[type="search"] {
box-sizing: content-box; /* 2 */
-webkit-appearance: textfield; /* 1 */
}
input[type="search"]::-webkit-search-cancel-button,
input[type="search"]::-webkit-search-decoration {
-webkit-appearance: none;
}
legend {
padding: 0; /* 2 */
border: 0; /* 1 */
}
textarea {
overflow: auto;
}
table {
border-spacing: 0;
border-collapse: collapse;
}
td,
th {
padding: 0;
}
/* ==========================================================================
Base styles: opinionated defaults
========================================================================== */
html {
overflow-x: hidden;
overflow-y: scroll;
font-size: 62.5%;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
body {
overflow-x: hidden;
color: color(var(--midgrey) l(-30%));
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif;
font-size: 1.6rem;
line-height: 1.6em;
font-weight: 400;
font-style: normal;
letter-spacing: 0;
text-rendering: optimizeLegibility;
background: #fff;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
-moz-font-feature-settings: "liga" on;
}
::selection {
text-shadow: none;
background: color(var(--blue) lightness(+30%));
}
hr {
position: relative;
display: block;
width: 100%;
margin: 2.5em 0 3.5em;
padding: 0;
height: 1px;
border: 0;
border-top: 1px solid color(var(--lightgrey) l(+10%));
}
audio,
canvas,
iframe,
img,
svg,
video {
vertical-align: middle;
}
fieldset {
margin: 0;
padding: 0;
border: 0;
}
textarea {
resize: vertical;
}
p,
ul,
ol,
dl,
blockquote {
margin: 0 0 1.5em 0;
}
ol,
ul {
padding-left: 1.3em;
padding-right: 1.5em;
}
ol ol,
ul ul,
ul ol,
ol ul {
margin: 0.5em 0 1em;
}
ul {
list-style: disc;
}
ol {
list-style: decimal;
}
ul,
ol {
max-width: 100%;
}
li {
margin: 0.5em 0;
padding-left: 0.3em;
line-height: 1.6em;
}
dt {
float: left;
margin: 0 20px 0 0;
width: 120px;
color: var(--darkgrey);
font-weight: 500;
text-align: right;
}
dd {
margin: 0 0 5px 0;
text-align: left;
}
blockquote {
margin: 1.5em 0;
padding: 0 1.6em 0 1.6em;
border-left: var(--whitegrey) 0.5em solid;
}
blockquote p {
margin: 0.8em 0;
font-size: 1.2em;
font-weight: 300;
}
blockquote small {
display: inline-block;
margin: 0.8em 0 0.8em 1.5em;
font-size: 0.9em;
opacity: 0.8;
}
/* Quotation marks */
blockquote small:before {
content: "\2014 \00A0";
}
blockquote cite {
font-weight: bold;
}
blockquote cite a {
font-weight: normal;
}
a {
color: color(var(--blue) l(-5%));
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
h1,
h2,
h3,
h4,
h5,
h6 {
margin-top: 0;
line-height: 1.15;
font-weight: 600;
text-rendering: optimizeLegibility;
}
h1 {
margin: 0 0 0.5em 0;
font-size: 5.5rem;
font-weight: 600;
}
@media (max-width: 500px) {
h1 {
font-size: 2.2rem;
}
}
h2 {
margin: 1.5em 0 0.5em 0;
font-size: 2.2rem;
}
@media (max-width: 500px) {
h2 {
font-size: 1.8rem;
}
}
h3 {
margin: 1.5em 0 0.5em 0;
font-size: 1.8rem;
font-weight: 500;
}
@media (max-width: 500px) {
h3 {
font-size: 1.7rem;
}
}
h4 {
margin: 1.5em 0 0.5em 0;
font-size: 1.6rem;
font-weight: 500;
}
h5 {
margin: 1.5em 0 0.5em 0;
font-size: 1.4rem;
font-weight: 500;
}
h6 {
margin: 1.5em 0 0.5em 0;
font-size: 1.4rem;
font-weight: 500;
}

View File

@ -1,406 +0,0 @@
/*! normalize.css v2.1.2 | MIT License | git.io/normalize */
/* ==========================================================================
HTML5 display definitions
========================================================================== */
/**
* Correct `block` display not defined in IE 8/9.
*/
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
main,
nav,
section,
summary {
display: block;
}
/**
* Correct `inline-block` display not defined in IE 8/9.
*/
audio,
canvas,
video {
display: inline-block;
}
/**
* Prevent modern browsers from displaying `audio` without controls.
* Remove excess height in iOS 5 devices.
*/
audio:not([controls]) {
display: none;
height: 0;
}
/**
* Address `[hidden]` styling not present in IE 8/9.
* Hide the `template` element in IE, Safari, and Firefox < 22.
*/
[hidden],
template {
display: none;
}
/* ==========================================================================
Base
========================================================================== */
/**
* 1. Set default font family to sans-serif.
* 2. Prevent iOS text size adjust after orientation change, without disabling
* user zoom.
*/
html {
font-family: sans-serif; /* 1 */
-ms-text-size-adjust: 100%; /* 2 */
-webkit-text-size-adjust: 100%; /* 2 */
}
/**
* Remove default margin.
*/
body {
margin: 0;
}
/* ==========================================================================
Links
========================================================================== */
/**
* Remove the gray background color from active links in IE 10.
*/
a {
background: transparent;
}
/**
* Address `outline` inconsistency between Chrome and other browsers.
*/
a:focus {
outline: thin dotted;
}
/**
* Improve readability when focused and also mouse hovered in all browsers.
*/
a:active,
a:hover {
outline: 0;
}
/* ==========================================================================
Typography
========================================================================== */
/**
* Address variable `h1` font-size and margin within `section` and `article`
* contexts in Firefox 4+, Safari 5, and Chrome.
*/
h1 {
font-size: 2em;
margin: 0.67em 0;
}
/**
* Address styling not present in IE 8/9, Safari 5, and Chrome.
*/
abbr[title] {
border-bottom: 1px dotted;
}
/**
* Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome.
*/
b,
strong {
font-weight: bold;
}
/**
* Address styling not present in Safari 5 and Chrome.
*/
dfn {
font-style: italic;
}
/**
* Address differences between Firefox and other browsers.
*/
hr {
-moz-box-sizing: content-box;
box-sizing: content-box;
height: 0;
}
/**
* Address styling not present in IE 8/9.
*/
mark {
background: #ff0;
color: #000;
}
/**
* Correct font family set oddly in Safari 5 and Chrome.
*/
code,
kbd,
pre,
samp {
font-family: monospace, serif;
font-size: 1em;
}
/**
* Improve readability of pre-formatted text in all browsers.
*/
pre {
white-space: pre-wrap;
}
/**
* Set consistent quote types.
*/
q {
quotes: "\201C" "\201D" "\2018" "\2019";
}
/**
* Address inconsistent and variable font size in all browsers.
*/
small {
font-size: 80%;
}
/**
* Prevent `sub` and `sup` affecting `line-height` in all browsers.
*/
sub,
sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}
sup {
top: -0.5em;
}
sub {
bottom: -0.25em;
}
/* ==========================================================================
Embedded content
========================================================================== */
/**
* Remove border when inside `a` element in IE 8/9.
*/
img {
border: 0;
}
/**
* Correct overflow displayed oddly in IE 9.
*/
svg:not(:root) {
overflow: hidden;
}
/* ==========================================================================
Figures
========================================================================== */
/**
* Address margin not present in IE 8/9 and Safari 5.
*/
figure {
margin: 0;
}
/* ==========================================================================
Forms
========================================================================== */
/**
* Define consistent border, margin, and padding.
*/
fieldset {
border: 1px solid #c0c0c0;
margin: 0 2px;
padding: 0.35em 0.625em 0.75em;
}
/**
* 1. Correct `color` not being inherited in IE 8/9.
* 2. Remove padding so people aren't caught out if they zero out fieldsets.
*/
legend {
border: 0; /* 1 */
padding: 0; /* 2 */
}
/**
* 1. Correct font family not being inherited in all browsers.
* 2. Correct font size not being inherited in all browsers.
* 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome.
*/
button,
input,
select,
textarea {
font-family: inherit; /* 1 */
font-size: 100%; /* 2 */
margin: 0; /* 3 */
}
/**
* Address Firefox 4+ setting `line-height` on `input` using `!important` in
* the UA stylesheet.
*/
button,
input {
line-height: normal;
}
/**
* Address inconsistent `text-transform` inheritance for `button` and `select`.
* All other form control elements do not inherit `text-transform` values.
* Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+.
* Correct `select` style inheritance in Firefox 4+ and Opera.
*/
button,
select {
text-transform: none;
}
/**
* 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
* and `video` controls.
* 2. Correct inability to style clickable `input` types in iOS.
* 3. Improve usability and consistency of cursor style between image-type
* `input` and others.
*/
button,
html input[type="button"], /* 1 */
input[type="reset"],
input[type="submit"] {
-webkit-appearance: button; /* 2 */
cursor: pointer; /* 3 */
}
/**
* Re-set default cursor for disabled elements.
*/
button[disabled],
html input[disabled] {
cursor: default;
}
/**
* 1. Address box sizing set to `content-box` in IE 8/9.
* 2. Remove excess padding in IE 8/9.
*/
input[type="checkbox"],
input[type="radio"] {
box-sizing: border-box; /* 1 */
padding: 0; /* 2 */
}
/**
* 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome.
* 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome
* (include `-moz` to future-proof).
*/
input[type="search"] {
-webkit-appearance: textfield; /* 1 */
-moz-box-sizing: content-box;
-webkit-box-sizing: content-box; /* 2 */
box-sizing: content-box;
}
/**
* Remove inner padding and search cancel button in Safari 5 and Chrome
* on OS X.
*/
input[type="search"]::-webkit-search-cancel-button,
input[type="search"]::-webkit-search-decoration {
-webkit-appearance: none;
}
/**
* Remove inner padding and border in Firefox 4+.
*/
button::-moz-focus-inner,
input::-moz-focus-inner {
border: 0;
padding: 0;
}
/**
* 1. Remove default vertical scrollbar in IE 8/9.
* 2. Improve readability and alignment in all browsers.
*/
textarea {
overflow: auto; /* 1 */
vertical-align: top; /* 2 */
}
/* ==========================================================================
Tables
========================================================================== */
/**
* Remove most spacing between table cells.
*/
table {
border-collapse: collapse;
border-spacing: 0;
}

File diff suppressed because it is too large Load Diff

View File

@ -1,41 +0,0 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg xmlns="http://www.w3.org/2000/svg">
<metadata>
This is a custom SVG font generated by IcoMoon.
<iconset grid="16"></iconset>
</metadata>
<defs>
<font id="icons" horiz-adv-x="512" >
<font-face units-per-em="512" ascent="480" descent="-32" />
<missing-glyph horiz-adv-x="512" />
<glyph class="hidden" unicode="&#xf000;" d="M0,480L 512 -32L0 -32 z" horiz-adv-x="0" />
<glyph unicode="&#xe001;" d="M 421.344-32C 420.944,197.616, 220.592,385.264,0,385.696L0,480 c 270.656,0, 512-230.304, 512-512L 421.344-32
z M 343.6-31.968l-90.608,0 c 0.304,56.384-28.336,119.488-73.664,166.736C 134.256,182.4, 54.368,212.416, 0.224,212.128L 0.224,306.4
C 169.264,302.752, 340.16,143.088, 343.6-31.968z M 64.256,96.048c 35.312,0, 63.936-28.656, 63.936-64c0-35.328-28.624-63.984-63.936-63.984
S 0.32-3.28, 0.32,32.048C 0.32,67.392, 28.944,96.048, 64.256,96.048z" data-tags="feed, rss" />
<glyph unicode="&#xe002;" d="M 512,382.791c-18.838-8.354-39.082-14.001-60.33-16.54c 21.686,13, 38.343,33.585, 46.186,58.115
c-20.298-12.039-42.778-20.78-66.705-25.49c-19.16,20.415-46.461,33.17-76.673,33.17c-58.011,0-105.044-47.029-105.044-105.039
c0-8.233, 0.929-16.25, 2.72-23.939c-87.3,4.382-164.701,46.2-216.509,109.753c-9.042-15.514-14.223-33.558-14.223-52.809
c0-36.444, 18.544-68.596, 46.73-87.433c-17.219,0.546-33.416,5.271-47.577,13.139c-0.010-0.438-0.010-0.878-0.010-1.321
c0-50.894, 36.209-93.348, 84.261-103c-8.813-2.4-18.094-3.686-27.674-3.686c-6.769,0-13.349,0.66-19.764,1.886
c 13.368-41.73, 52.16-72.103, 98.126-72.948c-35.95-28.175-81.243-44.967-130.458-44.967c-8.479,0-16.84,0.497-25.058,1.47
c 46.486-29.805, 101.701-47.197, 161.021-47.197c 193.211,0, 298.868,160.062, 298.868,298.872c0,4.554-0.103,9.084-0.305,13.59
C 480.11,343.227, 497.918,361.727, 512,382.791z" data-tags="twitter, tweet, social" />
<glyph unicode="&#xe003;" d="M 0.403,45.168c-0.122,1.266-0.226,2.535-0.292,3.815C 0.176,47.703, 0.281,46.434, 0.403,45.168zM 117.954,197.426c 46.005-1.369, 76.867,46.349, 68.931,106.599c-7.947,60.24-51.698,108.584-97.704,109.961
c-46.013,1.365-76.87-44.741-68.926-105C 28.196,248.752, 71.931,198.799, 117.954,197.426zM 512,352L 512,394.655 C 512,441.595, 473.609,480, 426.671,480L 85.343,480 C 39.205,480, 1.337,442.884, 0.061,397.037
c 29.181,25.693, 69.662,47.158, 111.437,47.158c 44.652,0, 178.622,0, 178.622,0l-39.974-33.809l-56.634,0
c 37.565-14.402, 57.578-58.062, 57.578-102.861c0-37.624-20.905-69.977-50.444-92.984c-28.822-22.451-34.286-31.854-34.286-50.939
c0-16.289, 30.873-44, 47.016-55.394c 47.191-33.269, 62.458-64.156, 62.458-115.728c0-8.214-1.021-16.415-3.033-24.48l 153.871,0
C 473.609-32, 512,6.375, 512,53.345L 512,319.999 l-96,0 L 416,224 l-32,0 l0,96 l-95.999,0 l0,32 L 384,352 L 384,448 l 32,0 l0-96 L 512,352 zM 92.943,97.032c 10.807,0, 20.711,0.295, 30.968,0.295c-13.573,13.167-24.313,29.3-24.313,49.19
c0,11.804, 3.782,23.168, 9.067,33.26c-5.391-0.385-10.895-0.497-16.563-0.497c-37.178,0-68.753,12.038-92.102,31.927l0-33.621
l 0.003-100.865C 26.723,89.408, 58.447,97.032, 92.943,97.032zM 1.71,36.371c-0.556,2.729-0.983,5.503-1.271,8.317C 0.726,41.874, 1.154,39.1, 1.71,36.371zM 227.725,3.577c-7.529,29.403-34.227,43.982-71.444,69.784c-13.536,4.366-28.447,6.937-44.447,7.104
c-44.809,0.482-86.554-17.471-110.108-44.186C 9.686-2.574, 44.243-32, 85.343-32l 143.222,0 c 0.908,5.564, 1.348,11.316, 1.348,17.216
C 229.913-8.517, 229.146-2.388, 227.725,3.577z" data-tags="google plus, social" />
<glyph unicode="&#xe004;" d="M 426.672,480L 85.342,480 C 38.406,480,0,441.593,0,394.656l0-341.313 C0,6.374, 38.406-32, 85.342-32l 341.33,0.001
c 46.938,0, 85.328,38.373, 85.328,85.344L 512,394.656 C 512,441.593, 473.609,480, 426.672,480z M 435.296,224L 352,224 l0-224 l-96,0 L 256,224 l-46.263,0 l0,73.282 L 256,297.282
l0,47.593 C 256,409.546, 283.896,448, 359.935,448l 87.622,0 l0-79.285 l-71.565,0 c-21.241,0.035-23.876-11.076-23.876-31.756L 352,297.282l 96,0
L 435.296,224z" data-tags="facebook, social" />
<glyph unicode="&#xe000;" d="M0,480 L0,377.6 L 307.2,377.6 L 307.2,480 L0,480 Z M0,480M0,275.2 L0,172.8 L 512,172.8 L 512,275.2 L0,275.2 Z M0,275.2M0,70.4 L0-32 L 204.8-32 L 204.8,70.4 L0,70.4 Z M0,70.4M 307.2,70.4 L 307.2-32 L 512-32 L 512,70.4 L 307.2,70.4 Z M 307.2,70.4M 409.6,480 L 409.6,377.6 L 512,377.6 L 512,480 L 409.6,480 Z M 409.6,480" data-tags="ghst" />
<glyph unicode="&#x20;" horiz-adv-x="256" />
</font></defs></svg>

Before

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

View File

@ -1,41 +0,0 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg xmlns="http://www.w3.org/2000/svg">
<metadata>
This is a custom SVG font generated by IcoMoon.
<iconset grid="16"></iconset>
</metadata>
<defs>
<font id="icons" horiz-adv-x="512" >
<font-face units-per-em="512" ascent="480" descent="-32" />
<missing-glyph horiz-adv-x="512" />
<glyph class="hidden" unicode="&#xf000;" d="M0,480L 512 -32L0 -32 z" horiz-adv-x="0" />
<glyph unicode="&#xe001;" d="M 421.344-32C 420.944,197.616, 220.592,385.264,0,385.696L0,480 c 270.656,0, 512-230.304, 512-512L 421.344-32
z M 343.6-31.968l-90.608,0 c 0.304,56.384-28.336,119.488-73.664,166.736C 134.256,182.4, 54.368,212.416, 0.224,212.128L 0.224,306.4
C 169.264,302.752, 340.16,143.088, 343.6-31.968z M 64.256,96.048c 35.312,0, 63.936-28.656, 63.936-64c0-35.328-28.624-63.984-63.936-63.984
S 0.32-3.28, 0.32,32.048C 0.32,67.392, 28.944,96.048, 64.256,96.048z" />
<glyph unicode="&#xe002;" d="M 512,382.791c-18.838-8.354-39.082-14.001-60.33-16.54c 21.686,13, 38.343,33.585, 46.186,58.115
c-20.298-12.039-42.778-20.78-66.705-25.49c-19.16,20.415-46.461,33.17-76.673,33.17c-58.011,0-105.044-47.029-105.044-105.039
c0-8.233, 0.929-16.25, 2.72-23.939c-87.3,4.382-164.701,46.2-216.509,109.753c-9.042-15.514-14.223-33.558-14.223-52.809
c0-36.444, 18.544-68.596, 46.73-87.433c-17.219,0.546-33.416,5.271-47.577,13.139c-0.010-0.438-0.010-0.878-0.010-1.321
c0-50.894, 36.209-93.348, 84.261-103c-8.813-2.4-18.094-3.686-27.674-3.686c-6.769,0-13.349,0.66-19.764,1.886
c 13.368-41.73, 52.16-72.103, 98.126-72.948c-35.95-28.175-81.243-44.967-130.458-44.967c-8.479,0-16.84,0.497-25.058,1.47
c 46.486-29.805, 101.701-47.197, 161.021-47.197c 193.211,0, 298.868,160.062, 298.868,298.872c0,4.554-0.103,9.084-0.305,13.59
C 480.11,343.227, 497.918,361.727, 512,382.791z" />
<glyph unicode="&#xe003;" d="M 0.403,45.168c-0.122,1.266-0.226,2.535-0.292,3.815C 0.176,47.703, 0.281,46.434, 0.403,45.168zM 117.954,197.426c 46.005-1.369, 76.867,46.349, 68.931,106.599c-7.947,60.24-51.698,108.584-97.704,109.961
c-46.013,1.365-76.87-44.741-68.926-105C 28.196,248.752, 71.931,198.799, 117.954,197.426zM 512,352L 512,394.655 C 512,441.595, 473.609,480, 426.671,480L 85.343,480 C 39.205,480, 1.337,442.884, 0.061,397.037
c 29.181,25.693, 69.662,47.158, 111.437,47.158c 44.652,0, 178.622,0, 178.622,0l-39.974-33.809l-56.634,0
c 37.565-14.402, 57.578-58.062, 57.578-102.861c0-37.624-20.905-69.977-50.444-92.984c-28.822-22.451-34.286-31.854-34.286-50.939
c0-16.289, 30.873-44, 47.016-55.394c 47.191-33.269, 62.458-64.156, 62.458-115.728c0-8.214-1.021-16.415-3.033-24.48l 153.871,0
C 473.609-32, 512,6.375, 512,53.345L 512,319.999 l-96,0 L 416,224 l-32,0 l0,96 l-95.999,0 l0,32 L 384,352 L 384,448 l 32,0 l0-96 L 512,352 zM 92.943,97.032c 10.807,0, 20.711,0.295, 30.968,0.295c-13.573,13.167-24.313,29.3-24.313,49.19
c0,11.804, 3.782,23.168, 9.067,33.26c-5.391-0.385-10.895-0.497-16.563-0.497c-37.178,0-68.753,12.038-92.102,31.927l0-33.621
l 0.003-100.865C 26.723,89.408, 58.447,97.032, 92.943,97.032zM 1.71,36.371c-0.556,2.729-0.983,5.503-1.271,8.317C 0.726,41.874, 1.154,39.1, 1.71,36.371zM 227.725,3.577c-7.529,29.403-34.227,43.982-71.444,69.784c-13.536,4.366-28.447,6.937-44.447,7.104
c-44.809,0.482-86.554-17.471-110.108-44.186C 9.686-2.574, 44.243-32, 85.343-32l 143.222,0 c 0.908,5.564, 1.348,11.316, 1.348,17.216
C 229.913-8.517, 229.146-2.388, 227.725,3.577z" />
<glyph unicode="&#xe004;" d="M 426.672,480L 85.342,480 C 38.406,480,0,441.593,0,394.656l0-341.313 C0,6.374, 38.406-32, 85.342-32l 341.33,0.001
c 46.938,0, 85.328,38.373, 85.328,85.344L 512,394.656 C 512,441.593, 473.609,480, 426.672,480z M 435.296,224L 352,224 l0-224 l-96,0 L 256,224 l-46.263,0 l0,73.282 L 256,297.282
l0,47.593 C 256,409.546, 283.896,448, 359.935,448l 87.622,0 l0-79.285 l-71.565,0 c-21.241,0.035-23.876-11.076-23.876-31.756L 352,297.282l 96,0
L 435.296,224z" />
<glyph unicode="&#xe000;" d="M0,480 L0,377.6 L 307.2,377.6 L 307.2,480 L0,480 Z M0,480M0,275.2 L0,172.8 L 512,172.8 L 512,275.2 L0,275.2 Z M0,275.2M0,70.4 L0-32 L 204.8-32 L 204.8,70.4 L0,70.4 Z M0,70.4M 307.2,70.4 L 307.2-32 L 512-32 L 512,70.4 L 307.2,70.4 Z M 307.2,70.4M 409.6,480 L 409.6,377.6 L 512,377.6 L 512,480 L 409.6,480 Z M 409.6,480" />
<glyph unicode="&#x20;" horiz-adv-x="256" />
</font></defs></svg>

Before

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Binary file not shown.

24
assets/js/gallery-card.js Normal file
View File

@ -0,0 +1,24 @@
/* eslint-env browser */
/**
* Gallery card support
* Used on any individual post/page
*
* Detects when a gallery card has been used and applies sizing to make sure
* the display matches what is seen in the editor.
*/
(function (window, document) {
var resizeImagesInGalleries = function resizeImagesInGalleries() {
var images = document.querySelectorAll('.kg-gallery-image img');
images.forEach(function (image) {
var container = image.closest('.kg-gallery-image');
var width = image.attributes.width.value;
var height = image.attributes.height.value;
var ratio = width / height;
container.style.flex = ratio + ' 1 0%';
});
};
document.addEventListener('DOMContentLoaded', resizeImagesInGalleries);
})(window, document);

View File

@ -1,18 +0,0 @@
/**
* Main JS file for Casper behaviours
*/
/*globals jQuery, document */
(function ($) {
"use strict";
$(document).ready(function(){
// On the home page, move the blog icon inside the header
// for better relative/absolute positioning.
//$("#blog-logo").prependTo("#site-head-content");
});
}(jQuery));

View File

@ -0,0 +1,112 @@
/* 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) {
// 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('.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

@ -0,0 +1,89 @@
/*jshint browser:true */
/*!
* FitVids 1.3
*
*
* Copyright 2017, Chris Coyier + Dave Rupert + Ghost Foundation
* This is an unofficial release, ported by John O'Nolan
* Credit to Thierry Koblentz - http://www.alistapart.com/articles/creating-intrinsic-ratios-for-video/
* Released under the MIT license
*
*/
;(function( $ ){
'use strict';
$.fn.fitVids = function( options ) {
var settings = {
customSelector: null,
ignore: null
};
if(!document.getElementById('fit-vids-style')) {
// appendStyles: https://github.com/toddmotto/fluidvids/blob/master/dist/fluidvids.js
var head = document.head || document.getElementsByTagName('head')[0];
var css = '.fluid-width-video-container{flex-grow: 1;width:100%;}.fluid-width-video-wrapper{width:100%;position:relative;padding:0;}.fluid-width-video-wrapper iframe,.fluid-width-video-wrapper object,.fluid-width-video-wrapper embed {position:absolute;top:0;left:0;width:100%;height:100%;}';
var div = document.createElement("div");
div.innerHTML = '<p>x</p><style id="fit-vids-style">' + css + '</style>';
head.appendChild(div.childNodes[1]);
}
if ( options ) {
$.extend( settings, options );
}
return this.each(function(){
var selectors = [
'iframe[src*="player.vimeo.com"]',
'iframe[src*="youtube.com"]',
'iframe[src*="youtube-nocookie.com"]',
'iframe[src*="kickstarter.com"][src*="video.html"]',
'object',
'embed'
];
if (settings.customSelector) {
selectors.push(settings.customSelector);
}
var ignoreList = '.fitvidsignore';
if(settings.ignore) {
ignoreList = ignoreList + ', ' + settings.ignore;
}
var $allVideos = $(this).find(selectors.join(','));
$allVideos = $allVideos.not('object object'); // SwfObj conflict patch
$allVideos = $allVideos.not(ignoreList); // Disable FitVids on this video.
$allVideos.each(function(){
var $this = $(this);
if($this.parents(ignoreList).length > 0) {
return; // Disable FitVids on this video.
}
if (this.tagName.toLowerCase() === 'embed' && $this.parent('object').length || $this.parent('.fluid-width-video-wrapper').length) { return; }
if ((!$this.css('height') && !$this.css('width')) && (isNaN($this.attr('height')) || isNaN($this.attr('width'))))
{
$this.attr('height', 9);
$this.attr('width', 16);
}
var height = ( this.tagName.toLowerCase() === 'object' || ($this.attr('height') && !isNaN(parseInt($this.attr('height'), 10))) ) ? parseInt($this.attr('height'), 10) : $this.height(),
width = !isNaN(parseInt($this.attr('width'), 10)) ? parseInt($this.attr('width'), 10) : $this.width(),
aspectRatio = height / width;
if(!$this.attr('name')){
var videoName = 'fitvid' + $.fn.fitVids._count;
$this.attr('name', videoName);
$.fn.fitVids._count++;
}
$this.wrap('<div class="fluid-width-video-container"><div class="fluid-width-video-wrapper"></div></div>').parent('.fluid-width-video-wrapper').css('padding-top', (aspectRatio * 100)+'%');
$this.removeAttr('height').removeAttr('width');
});
});
};
// Internal counter for unique video names.
$.fn.fitVids._count = 0;
// Works with either jQuery or Zepto
})( window.jQuery || window.Zepto );

View File

@ -0,0 +1,61 @@
/* eslint-env browser */
/**
* Nav/Title replacement
* Used on invividual post pages, displays the post title in place of the nav
* bar when scrolling past the title
*
* Usage:
* ```
* Casper.stickyTitle({
* navSelector: '.site-nav-main',
* titleSelector: '.post-full-title',
* activeClass: 'nav-post-title-active'
* });
* ```
*/
(function (window, document) {
// set up Casper as a global object
if (!window.Casper) {
window.Casper = {};
}
window.Casper.stickyNavTitle = function stickyNavTitle(options) {
var nav = document.querySelector(options.navSelector);
var title = document.querySelector(options.titleSelector);
var lastScrollY = window.scrollY;
var ticking = false;
function onScroll() {
lastScrollY = window.scrollY;
requestTick();
}
function requestTick() {
if (!ticking) {
requestAnimationFrame(update);
}
ticking = true;
}
function update() {
var trigger = title.getBoundingClientRect().top + window.scrollY;
var triggerOffset = title.offsetHeight + 35;
// show/hide post title
if (lastScrollY >= trigger + triggerOffset) {
nav.classList.add(options.activeClass);
} else {
nav.classList.remove(options.activeClass);
}
ticking = false;
}
window.addEventListener('scroll', onScroll, {passive: true});
update();
};
})(window, document);

BIN
assets/screenshot-desktop.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

BIN
assets/screenshot-mobile.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

59
author.hbs Normal file
View File

@ -0,0 +1,59 @@
{{!< 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-archive-header">
{{> site-header}}
{{> header-background background=cover_image}} {{!--Special header-image.hbs partial to generate the background image--}}
<div class="inner">
<div class="site-header-content author-header">
{{#if profile_image}}
<img class="author-profile-image" src="{{profile_image}}" alt="{{name}}" />
{{/if}}
<div class="author-header-content">
<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}}</div>
{{/if}}
<div class="author-stats">
{{plural ../pagination.total empty='No posts' singular='% post' plural='% posts'}}
</div>
{{#if website}}
<span class="author-social-link"><a href="{{website}}" target="_blank" rel="noopener">Website</a></span>
{{/if}}
{{#if twitter}}
<span class="author-social-link"><a href="{{twitter_url}}" target="_blank" rel="noopener">Twitter</a></span>
{{/if}}
{{#if facebook}}
<span class="author-social-link"><a href="{{facebook_url}}" target="_blank" rel="noopener">Facebook</a></span>
{{/if}}
</div>
</div>
</div>
</div>
</div>
</header>
{{/author}}
{{!-- The main content area --}}
<main id="site-main" class="site-main outer">
<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>
</div>
</main>

6
config.example.json Normal file
View File

@ -0,0 +1,6 @@
{
"github": {
"username": "<username>",
"token": "<gh-personal-access-token>"
}
}

View File

@ -1,43 +1,129 @@
<!DOCTYPE html>
<html>
<html lang="{{@site.lang}}">
<head>
{{! Document Settings }}
<meta http-equiv="Content-Type" content="text/html" charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
{{! Page Meta }}
{{!-- Document Settings --}}
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
{{!-- Base Meta --}}
<title>{{meta_title}}</title>
<meta name="description" content="{{meta_description}}" />
<meta name="HandheldFriendly" content="True" />
<meta name="MobileOptimized" content="320" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
{{! Styles'n'Scripts }}
<link rel="stylesheet" type="text/css" href="/assets/css/screen.css" />
<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Droid+Serif:400,700,400italic|Open+Sans:700,400" />
{{!-- Styles'n'Scripts --}}
<link rel="stylesheet" type="text/css" href="{{asset "built/screen.css"}}" />
{{! Ghost outputs important style and meta data with this tag }}
{{!-- This tag outputs SEO meta+structured data and other important settings --}}
{{ghost_head}}
</head>
<body class="{{body_class}}">
{{! Everything else gets inserted here }}
{{{body}}}
<div class="site-wrapper">
<footer class="site-footer">
<a class="subscribe icon-feed" href="{{@blog.url}}/rss/"><span class="tooltip">Subscribe!</span></a>
<div class="inner">
<section class="copyright">All content copyright <a href="/">{{@blog.title}}</a> &copy; 2013 &bull; All rights reserved.</section>
<section class="poweredby">Proudly published with <a class="icon-ghost" href="http://tryghost.org">Ghost</a></section>
{{!-- 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="{{@site.url}}">{{@site.title}}</a> &copy; {{date format="YYYY"}}</section>
<nav class="site-footer-nav">
<a href="{{@site.url}}">Latest Posts</a>
{{#if @site.facebook}}<a href="{{facebook_url @site.facebook}}" target="_blank" rel="noopener">Facebook</a>{{/if}}
{{#if @site.twitter}}<a href="{{twitter_url @site.twitter}}" target="_blank" rel="noopener">Twitter</a>{{/if}}
<a href="https://ghost.org" target="_blank" rel="noopener">Ghost</a>
</nav>
</div>
</footer>
</div>
{{!-- The big email subscribe modal content --}}
{{#if @labs.members}}
<div class="subscribe-success-message">
<a class="subscribe-close" href="javascript:;"></a>
You've successfully subscribed to {{@site.title}}!
</div>
<div id="subscribe" class="subscribe-overlay">
<a class="subscribe-close" href="#"></a>
<div class="subscribe-overlay-content">
{{#if @site.logo}}
<img class="subscribe-overlay-logo" src="{{@site.logo}}" alt="{{@site.title}}" />
{{/if}}
<div class="subscribe-form">
<h1 class="subscribe-overlay-title">Subscribe to {{@site.title}}</h1>
<p class="subscribe-overlay-description">Stay up to date! Get all the latest & greatest posts delivered straight to your inbox</p>
<form data-members-form="subscribe">
<div class="form-group">
<input class="subscribe-email" data-members-email placeholder="youremail@example.com"
autocomplete="false" />
<button class="button primary" type="submit">
<span class="button-content">Subscribe</span>
<span class="button-loader">{{> "icons/loader"}}</span>
</button>
</div>
<div class="message-success">
<strong>Great!</strong> Check your inbox and click the link to confirm your subscription.
</div>
<div class="message-error">
Please enter a valid email address!
</div>
</form>
</div>
</div>
</footer>
</div>
{{/if}}
{{! Ghost outputs important scripts and data with this tag }}
{{!-- jQuery, required for fitvids --}}
<script
src="https://code.jquery.com/jquery-3.4.1.min.js"
integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo="
crossorigin="anonymous">
</script>
{{!-- Fitvids (for responsive video embeds), infinite scroll, floating header, and gallery card support --}}
<script src="{{asset "built/casper.js"}}"></script>
{{!-- Scripts for Members subscription --}}
<script>
// Parse the URL parameter
function getParameterByName(name, url) {
if (!url) url = window.location.href;
name = name.replace(/[\[\]]/g, "\\$&");
var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
results = regex.exec(url);
if (!results) return null;
if (!results[2]) return '';
return decodeURIComponent(results[2].replace(/\+/g, " "));
}
// Give the parameter a variable name
var action = getParameterByName('action');
$(document).ready(function () {
if (action == 'subscribe') {
$('body').addClass("subscribe-success");
}
$('.subscribe-success-message .subscribe-close').click(function () {
$('.subscribe-success-message').addClass('close');
});
// Reset form on opening subscrion overlay
$('.subscribe-button').click(function() {
$('.subscribe-overlay form').removeClass();
$('.subscribe-email').val('');
});
});
</script>
{{!-- 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}}
{{! The main JavaScript file for Casper }}
<script type="text/javascript" src="/assets/js/index.js"></script>
</body>
</html>
</html>

30
error-404.hbs Normal file
View File

@ -0,0 +1,30 @@
{{!--
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.
--}}
{{!< default}}
{{!-- The tag above means: insert everything in this file
into the {body} of the default.hbs template --}}
<header class="site-header">
{{> site-header}}
</header>
<main id="site-main" class="site-main 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>
{{#get "posts" limit="3" include="authors,tags"}}
<div class="post-feed">
{{#foreach posts}}
{{> "post-card"}}
{{/foreach}}
</div>
{{/get}}
</div>
</main>

66
error.hbs Normal file
View File

@ -0,0 +1,66 @@
{{!--
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 JavaScript, or ghost_head / ghost_foot in this file.
--}}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<title>{{meta_title}}</title>
<meta name="HandheldFriendly" content="True" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" type="text/css" href="{{asset "built/screen.css"}}" />
</head>
<body>
<div class="site-wrapper">
<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 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>
{{#if errorDetails}}
<section class="error-stack">
<h3>Theme errors</h3>
<ul class="error-stack-list">
{{#foreach errorDetails}}
<li>
<em class="error-stack-function">{{{rule}}}</em>
{{#foreach failures}}
<p><span class="error-stack-file">Ref: {{ref}}</span></p>
<p><span class="error-stack-file">Message: {{message}}</span></p>
{{/foreach}}
</li>
{{/foreach}}
</ul>
</section>
{{/if}}
</div>
</main>
</div>
</body>
</html>

216
gulpfile.js Normal file
View File

@ -0,0 +1,216 @@
const {series, watch, src, dest, parallel} = require('gulp');
const pump = require('pump');
// gulp plugins and utils
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
const autoprefixer = require('autoprefixer');
const colorFunction = require('postcss-color-function');
const cssnano = require('cssnano');
const customProperties = require('postcss-custom-properties');
const easyimport = require('postcss-easy-import');
function serve(done) {
livereload.listen();
done();
}
const handleError = (done) => {
return function (err) {
if (err) {
beeper();
}
return done(err);
};
};
function hbs(done) {
pump([
src(['*.hbs', 'partials/**/*.hbs']),
livereload()
], handleError(done));
}
function css(done) {
const processors = [
easyimport,
customProperties({preserve: false}),
colorFunction(),
autoprefixer(),
cssnano()
];
pump([
src('assets/css/*.css', {sourcemaps: true}),
postcss(processors),
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 targetDir = 'dist/';
const themeName = require('./package.json').name;
const filename = themeName + '.zip';
pump([
src([
'**',
'!node_modules', '!node_modules/**',
'!dist', '!dist/**'
]),
zip(filename),
dest(targetDir)
], handleError(done));
}
const cssWatcher = () => watch('assets/css/**', css);
const hbsWatcher = () => watch(['*.hbs', 'partials/**/*.hbs'], hbs);
const watcher = parallel(cssWatcher, hbsWatcher);
const build = series(css, js);
const dev = series(build, serve, watcher);
exports.build = build;
exports.zip = series(build, zipper);
exports.default = dev;
// release imports
const path = require('path');
const releaseUtils = require('@tryghost/release-utils');
let config;
try {
config = require('./config');
} catch (err) {
config = null;
}
const REPO = 'TryGhost/Casper';
const USER_AGENT = 'Casper';
const CHANGELOG_PATH = path.join(process.cwd(), '.', 'changelog.md');
const changelog = ({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 previousRelease = () => {
return releaseUtils
.releases
.get({
userAgent: USER_AGENT,
uri: `https://api.github.com/repos/${REPO}/releases`
})
.then((response) => {
if (!response || !response.length) {
console.log('No releases found. Skipping');
return;
}
let prevVersion = response[0].tag_name || response[0].name;
console.log(`Previous version ${prevVersion}`);
return prevVersion;
});
};
/**
*
* `yarn ship` will trigger `postship` task.
*
* [optional] For full automation
*
* `GHOST=2.10.1,2.10.0 yarn ship`
* First value: Ships with Ghost
* Second value: Compatible with Ghost/GScan
*
* You can manually run in case the task has thrown an error.
*
* `npm_package_version=0.5.0 gulp release`
*/
const release = () => {
// @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
var packageJSON = JSON.parse(fs.readFileSync('./package.json'));
const newVersion = packageJSON.version;
let shipsWithGhost = '{version}';
let compatibleWithGhost = '2.10.0';
const ghostEnvValues = process.env.GHOST || null;
if (ghostEnvValues) {
shipsWithGhost = ghostEnvValues.split(',')[0];
compatibleWithGhost = ghostEnvValues.split(',')[1];
if (!compatibleWithGhost) {
compatibleWithGhost = '2.10.0';
}
}
if (!newVersion || newVersion === '') {
console.log('Invalid version.');
return;
}
console.log(`\nDraft release for ${newVersion}.`);
if (!config || !config.github || !config.github.username || !config.github.token) {
console.log('Please copy config.example.json and configure Github token.');
return;
}
return previousRelease()
.then((previousVersion) => {
changelog({previousVersion});
return releaseUtils
.releases
.create({
draft: true,
preRelease: false,
tagName: newVersion,
releaseName: newVersion,
userAgent: USER_AGENT,
uri: `https://api.github.com/repos/${REPO}/releases`,
github: {
username: config.github.username,
token: config.github.token
},
content: [`**Ships with Ghost ${shipsWithGhost} Compatible with Ghost >= ${compatibleWithGhost}**\n\n`],
changelogPath: CHANGELOG_PATH
})
.then((response) => {
console.log(`\nRelease draft generated: ${response.releaseUrl}\n`);
});
});
};
exports.release = release;

114
index.hbs
View File

@ -1,40 +1,98 @@
{{!< default}}
{{!-- The tag above means: insert everything in this file
into the {body} of the default.hbs template --}}
{{! The comment above "< default" means - insert everything in this file into
the {body} of the default.hbs template, which contains our header/footer. }}
{{! The big featured header on the homepage, with the site logo and description }}
<header id="site-head" {{#if @blog.cover}}style="background-image: url({{@blog.cover}})"{{/if}}>
<div class="vertical">
<div id="site-head-content" class="inner">
{{#if @blog.logo}}<a id="blog-logo" href="{{@blog.url}}"><img src="{{@blog.logo}}" alt="Blog Logo" /></a>{{/if}}
<h1 class="blog-title">{{@blog.title}}</h1>
<h2 class="blog-description">{{@blog.description}}</h2>
<header class="site-home-header">
{{> header-background background=@site.cover_image}} {{!--Special header-image.hbs partial to generate the background image--}}
<div class="inner">
{{> "site-nav"}}
<div class="site-header-content">
<h1 class="site-title">
{{#if @site.logo}}
<img class="site-logo" src="{{img_url @site.logo size="l"}}" alt="{{@site.title}}" />
{{else}}
{{@site.title}}
{{/if}}
</h1>
<h2 class="site-description">{{@site.description}}</h2>
</div>
</div>
</div>
</header>
{{! The main content area on the homepage }}
<main class="content" role="main">
{{!-- The main content area --}}
<main id="site-main" class="site-main outer">
<div class="inner posts">
{{! Each post will be output using this markup }}
{{#foreach posts}}
<div class="post-feed">
{{#foreach posts}}
<article class="{{post_class}}">
<header class="post-header">
<span class="post-meta"><time datetime="{{date format='YYYY-MM-DD'}}">{{date format="DD MMM YYYY"}}</time> {{#if tags}}on {{tags}}{{/if}}</span>
<h2 class="post-title"><a href="{{url}}">{{title}}</a></h2>
{{!-- The tag below includes the markup for each post - partials/post-card.hbs --}}
{{> "post-card"}}
</header>
<section class="post-excerpt">
<p>{{excerpt}}&hellip;</p>
</section>
</article>
{{/foreach}}
</div>
{{/foreach}}
</div>
</main>
{{!! After all the posts, we have the previous/next pagination links }}
{{pagination}}
{{> site-header}}
</main>
{{!-- The #contentFor helper here will send everything inside it up to the matching #block helper found in default.hbs --}}
{{#contentFor "scripts"}}
<script>
// NOTE: Scroll performance is poor in Safari
// - this appears to be due to the events firing much more slowly in Safari.
// Dropping the scroll event and using only a raf loop results in smoother
// scrolling but continuous processing even when not scrolling
$(document).ready(function () {
var nav = document.querySelector('.site-nav-main .site-nav');
var feed = document.querySelector('.post-feed');
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 = feed.getBoundingClientRect().top + window.scrollY;
var progressMax = lastDocumentHeight - lastWindowHeight;
// show/hide nav
if (lastScrollY >= trigger - 20) {
nav.classList.add('fixed-nav-active');
} else {
nav.classList.remove('fixed-nav-active');
}
ticking = false;
}
window.addEventListener('scroll', onScroll, { passive: true });
window.addEventListener('resize', onResize, false);
update();
});
</script>
{{/contentFor}}

90
package.json Normal file
View File

@ -0,0 +1,90 @@
{
"name": "casper",
"description": "A clean, minimal default theme for the Ghost publishing platform",
"demo": "https://demo.ghost.io",
"version": "3.0.1",
"engines": {
"ghost": ">=3.0.0",
"ghost-api": "v3"
},
"license": "MIT",
"screenshots": {
"desktop": "assets/screenshot-desktop.jpg",
"mobile": "assets/screenshot-mobile.jpg"
},
"scripts": {
"dev": "gulp",
"zip": "gulp zip",
"test": "gscan --v3 .",
"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"
},
"gpm": {
"type": "theme",
"categories": [
"Minimal",
"Magazine"
]
},
"keywords": [
"ghost",
"theme",
"ghost-theme"
],
"repository": {
"type": "git",
"url": "https://github.com/TryGhost/Casper.git"
},
"bugs": "https://github.com/TryGhost/Casper/issues",
"contributors": "https://github.com/TryGhost/Casper/graphs/contributors",
"devDependencies": {
"@tryghost/release-utils": "0.3.2",
"autoprefixer": "9.6.5",
"beeper": "2.0.0",
"cssnano": "4.1.10",
"gscan": "3.0.0",
"gulp": "4.0.2",
"gulp-concat": "^2.6.1",
"gulp-livereload": "4.0.2",
"gulp-postcss": "8.0.0",
"gulp-uglify": "3.0.2",
"gulp-zip": "5.0.1",
"postcss-color-function": "4.1.0",
"postcss-custom-properties": "9.0.2",
"postcss-easy-import": "3.0.0",
"pump": "3.0.0"
},
"browserslist": [
"defaults"
],
"config": {
"posts_per_page": 25,
"image_sizes": {
"xxs": {
"width": 30
},
"xs": {
"width": 100
},
"s": {
"width": 300
},
"m": {
"width": 600
},
"l": {
"width": 1000
},
"xl": {
"width": 2000
}
}
}
}

65
page.hbs Normal file
View File

@ -0,0 +1,65 @@
{{!< default}}
{{!-- The tag above means: insert everything in this file
into the {body} of the default.hbs template --}}
{{!-- The big featured header, it uses blog cover image as a BG if available --}}
<header class="site-header">
<div class="outer site-nav-main">
<div class="inner">
{{> "site-nav"}}
</div>
</div>
</header>
{{!-- Everything inside the #post tags pulls data from the post --}}
{{#post}}
<main id="site-main" class="site-main outer">
<div class="inner">
<article class="post-full {{post_class}} {{#unless feature_image}}no-image{{/unless}}">
<header class="post-full-header">
<h1 class="post-full-title">{{title}}</h1>
</header>
{{#if feature_image}}
<figure class="post-full-image">
{{!-- 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="(max-width: 800px) 400px,
(max-width: 1170px) 1170px,
2000px"
src="{{img_url feature_image size="xl"}}"
alt="{{title}}"
/>
</figure>
{{/if}}
<section class="post-full-content">
<div class="post-content">
{{content}}
</div>
</section>
</article>
</div>
</main>
{{/post}}
{{!-- The #contentFor helper here will send everything inside it up to the matching #block helper found in default.hbs --}}
{{#contentFor "scripts"}}
<script>
$(function() {
var $postContent = $(".post-full-content");
$postContent.fitVids();
});
</script>
{{/contentFor}}

View File

@ -0,0 +1,47 @@
{{!--
Wow what the hell is going on in here even?
Ok so, several templates use this big header with a giant BG image. Nice idea, but big images
have a heavy impact on performance, so it's a good idea to make them responsive. Because we
can only get the image dynamically using Handlebars, and we can only set the image to properly
be a background image using CSS, we end up with a handful of inline styles.
If the template in question has a background image, then we render responsive image styles
for it, and apply those styles to the <header> tag. Else, we just output a <header> tag
with a `no-image` class so we can style it accordingly.
--}}
{{#if background}}
<style type="text/css">
.responsive-header-img {
background-image: url({{img_url background size='xl'}});
}
@media(max-width: 1000px) {
.responsive-header-img {
background-image: url({{img_url background size='l'}});
background-image: -webkit-image-set(url({{img_url background size='l'}}) 1x,
url({{img_url background size='xl'}}) 2x);
background-image: image-set(url({{img_url background size='l'}}) 1x,
url({{img_url background size='xl'}}) 2x);
}
}
@media(max-width: 600px) {
.responsive-header-img {
background-image: url({{img_url background size='m'}});
background-image: -webkit-image-set(url({{img_url background size='m'}}) 1x,
url({{img_url background size='l'}}) 2x);
background-image: image-set(url({{img_url background size='m'}}) 1x,
url({{img_url background size='l'}}) 2x);
}
}
</style>
<div class="outer site-header-background responsive-header-img">
{{else}}
<div class="outer site-header-background no-image">
{{/if}}

View File

@ -0,0 +1 @@
<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd"><path d="M3.513 18.998C4.749 15.504 8.082 13 12 13s7.251 2.504 8.487 5.998C18.47 21.442 15.417 23 12 23s-6.47-1.558-8.487-4.002zM12 12c2.21 0 4-2.79 4-5s-1.79-4-4-4-4 1.79-4 4 1.79 5 4 5z" fill="#FFF"/></g></svg>

After

Width:  |  Height:  |  Size: 308 B

View File

@ -0,0 +1 @@
<svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg"><path d="M16 0c8.837 0 16 7.163 16 16s-7.163 16-16 16S0 24.837 0 16 7.163 0 16 0zm5.204 4.911h-3.546c-2.103 0-4.443.885-4.443 3.934.01 1.062 0 2.08 0 3.225h-2.433v3.872h2.509v11.147h4.61v-11.22h3.042l.275-3.81h-3.397s.007-1.695 0-2.187c0-1.205 1.253-1.136 1.329-1.136h2.054V4.911z" /></svg>

After

Width:  |  Height:  |  Size: 350 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

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

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><circle cx="6.18" cy="17.82" r="2.18"/><path d="M4 4.44v2.83c7.03 0 12.73 5.7 12.73 12.73h2.83c0-8.59-6.97-15.56-15.56-15.56zm0 5.66v2.83c3.9 0 7.07 3.17 7.07 7.07h2.83c0-5.47-4.43-9.9-9.9-9.9z"/></svg>

After

Width:  |  Height:  |  Size: 263 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><path d="M30.063 7.313c-.813 1.125-1.75 2.125-2.875 2.938v.75c0 1.563-.188 3.125-.688 4.625a15.088 15.088 0 0 1-2.063 4.438c-.875 1.438-2 2.688-3.25 3.813a15.015 15.015 0 0 1-4.625 2.563c-1.813.688-3.75 1-5.75 1-3.25 0-6.188-.875-8.875-2.625.438.063.875.125 1.375.125 2.688 0 5.063-.875 7.188-2.5-1.25 0-2.375-.375-3.375-1.125s-1.688-1.688-2.063-2.875c.438.063.813.125 1.125.125.5 0 1-.063 1.5-.25-1.313-.25-2.438-.938-3.313-1.938a5.673 5.673 0 0 1-1.313-3.688v-.063c.813.438 1.688.688 2.625.688a5.228 5.228 0 0 1-1.875-2c-.5-.875-.688-1.813-.688-2.75 0-1.063.25-2.063.75-2.938 1.438 1.75 3.188 3.188 5.25 4.25s4.313 1.688 6.688 1.813a5.579 5.579 0 0 1 1.5-5.438c1.125-1.125 2.5-1.688 4.125-1.688s3.063.625 4.188 1.813a11.48 11.48 0 0 0 3.688-1.375c-.438 1.375-1.313 2.438-2.563 3.188 1.125-.125 2.188-.438 3.313-.875z"/></svg>

After

Width:  |  Height:  |  Size: 888 B

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

@ -0,0 +1,69 @@
<article class="post-card {{post_class}} {{#unless feature_image}}no-image{{else}}{{#is "home"}}{{#has index="nth:6"}}post-card-large{{/has}}{{/is}}{{/unless}}">
{{#if feature_image}}
<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, 700px"
src="{{img_url feature_image size="m"}}"
alt="{{title}}"
/>
</a>
{{/if}}
<div class="post-card-content">
<a class="post-card-content-link" href="{{url}}">
<header class="post-card-header">
{{#if primary_tag}}
{{#primary_tag}}
<div class="post-card-primary-tag">{{name}}</div>
{{/primary_tag}}
{{/if}}
<h2 class="post-card-title">{{title}}</h2>
</header>
<section class="post-card-excerpt">
{{#if feature_image}}
<p>{{excerpt words="30"}}</p>
{{else}}
<p>{{excerpt words="44"}}</p>
{{/if}}
</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="{{img_url profile_image size="xs"}}" alt="{{name}}" />
</a>
{{else}}
<a href="{{url}}" class="static-avatar author-profile-image">{{> "icons/avatar"}}</a>
{{/if}}
</li>
{{/foreach}}
</ul>
<div class="post-card-byline-content">
<span>{{#has author="count:>2"}}Multiple authors{{else}}{{authors}}{{/has}}</span>
<span class="post-card-byline-date"><time datetime="{{date format="YYYY-MM-DD"}}">{{date format="D MMM YYYY"}}</time> <span class="bull">&bull;</span> {{reading_time}}</span>
</div>
</footer>
</div>{{!--/.post-card-content--}}
</article>

5
partials/site-header.hbs Normal file
View File

@ -0,0 +1,5 @@
<div class="outer site-nav-main">
<div class="inner">
{{> "site-nav"}}
</div>
</div>

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

@ -0,0 +1,32 @@
<nav class="site-nav">
<div class="site-nav-left">
{{#if @site.logo}}
<a class="site-nav-logo" href="{{@site.url}}"><img src="{{@site.logo}}" alt="{{@site.title}}" /></a>
{{else}}
<a class="site-nav-logo" href="{{@site.url}}">{{@site.title}}</a>
{{/if}}
<div class="site-nav-content">
{{#if @site.navigation}}
{{navigation}}
{{/if}}
{{#is "post"}}
<span class="nav-post-title {{#unless @site.logo}}dash{{/unless}}">{{post.title}}</span>
{{/is}}
</div>
</div>
<div class="site-nav-right">
<div class="social-links">
{{#if @site.facebook}}
<a class="social-link social-link-fb" href="{{facebook_url @site.facebook}}" title="Facebook" target="_blank" rel="noopener">{{> "icons/facebook"}}</a>
{{/if}}
{{#if @site.twitter}}
<a class="social-link social-link-tw" href="{{twitter_url @site.twitter}}" title="Twitter" target="_blank" rel="noopener">{{> "icons/twitter"}}</a>
{{/if}}
</div>
{{#if @labs.members}}
<a class="subscribe-button" href="#subscribe">Subscribe</a>
{{else}}
<a class="rss-button" href="https://feedly.com/i/subscription/feed/{{@site.url}}/rss/" title="RSS" target="_blank" rel="noopener">{{> "icons/rss"}}</a>
{{/if}}
</div>
</nav>

View File

@ -0,0 +1,19 @@
<section class="subscribe-form">
<h3 class="subscribe-form-title">Subscribe to {{@site.title}}</h3>
<p class="subscribe-form-description">Get the latest posts delivered right to your inbox</p>
<form data-members-form="subscribe">
<div class="form-group">
<input class="subscribe-email" data-members-email placeholder="youremail@example.com" autocomplete="false" />
<button class="button primary" type="submit">
<span class="button-content">Subscribe</span>
<span class="button-loader">{{> "icons/loader"}}</span>
</button>
</div>
<div class="message-success">
<strong>Great!</strong> Check your inbox and click the link to confirm your subscription.
</div>
<div class="message-error">
Please enter a valid email address!
</div>
</form>
</section>

246
post.hbs
View File

@ -1,64 +1,214 @@
{{!< default}}
{{! The comment above "< default" means - insert everything in this file into
the {body} of the default.hbs template, which contains our header/footer. }}
{{!-- The tag above means: insert everything in this file
into the {body} of the default.hbs template --}}
<main class="content" role="main">
<header class="site-header">
{{> site-header}}
</header>
<article class="{{post_class}}">
{{!-- Everything inside the #post tags pulls data from the post --}}
{{#post}}
{{! Each post has the blog logo at the top, with a link back to the home page }}
<header class="post-header">
<a id="blog-logo" href="{{@blog.url}}">
{{#if @blog.logo}}
<img src="{{@blog.logo}}" alt="Blog Logo" />
{{else}}
{{@blog.title}}
{{/if}}
</a>
</header>
<main id="site-main" class="site-main outer">
<div class="inner">
{{! Everything inside the #post tags pulls data from the post }}
{{#post}}
<article class="post-full {{post_class}} {{#unless feature_image}}no-image{{/unless}}">
{{! Everything below outputs content of the the post which has been published }}
<span class="post-meta"><time datetime="{{date format="YYYY-MM-DD"}}">{{date format='DD MMM YYYY'}}</time> {{#if tags}}on {{tags separator=" | "}}{{/if}}</span>
<header class="post-full-header">
<h1 class="post-title">{{title}}</h1>
<section class="post-content">
{{content}}
</section>
<footer class="post-footer">
{{#if author}}
<section class="author">
<h4>{{author.name}}</h4>
<p>{{author.bio}}</p>
{{#if primary_tag}}
<section class="post-full-tags">
{{#primary_tag}}
<a href="{{url}}">{{name}}</a>
{{/primary_tag}}
</section>
{{/if}}
<h1 class="post-full-title">{{title}}</h1>
{{#if custom_excerpt}}
<p class="post-full-custom-excerpt">{{custom_excerpt}}</p>
{{/if}}
<div class="post-full-byline">
<section class="post-full-byline-content">
<ul class="author-list">
{{#foreach authors}}
<li class="author-list-item">
<div class="author-card">
{{#if profile_image}}
<img class="author-profile-image" src="{{img_url profile_image size="xs"}}" alt="{{name}}" />
{{else}}
<div class="author-profile-image">{{> "icons/avatar"}}</div>
{{/if}}
<div class="author-info">
{{#if bio}}
<div class="bio">
<h2>{{name}}</h2>
<p>{{bio}}</p>
<p><a href="{{url}}">More posts</a> by {{name}}.</p>
</div>
{{else}}
<h2>{{name}}</h2>
<p>Read <a href="{{url}}">more posts</a> by this author.</p>
{{/if}}
</div>
</div>
{{#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>
<section class="post-full-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 format="D MMM YYYY"}}</time>
<span class="byline-reading-time"><span class="bull">&bull;</span> {{reading_time}}</span>
</div>
</section>
</section>
</div>
</header>
{{#if feature_image}}
<figure class="post-full-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="(max-width: 800px) 400px,
(max-width: 1170px) 1170px,
2000px"
src="{{img_url feature_image size="xl"}}"
alt="{{title}}"
/>
</figure>
{{/if}}
<section class="share">
<h4>Share this post</h4>
<a class="icon-twitter" href="http://twitter.com/share?text={{title}}&url={{url absolute="true"}}"
onclick="window.open(this.href, 'twitter-share', 'width=550,height=235');return false;">
<span class="hidden">Twitter</span>
</a>
<a class="icon-facebook" href="https://www.facebook.com/sharer/sharer.php?u={{url absolute="true"}}"
onclick="window.open(this.href, 'facebook-share','width=580,height=296');return false;">
<span class="hidden">Facebook</span>
</a>
<a class="icon-google-plus" href="https://plus.google.com/share?url={{url absolute="true"}}"
onclick="window.open(this.href, 'google-plus-share', 'width=490,height=530');return false;">
<span class="hidden">Google+</span>
</a>
<section class="post-full-content">
<div class="post-content">
{{content}}
</div>
</section>
</footer>
{{!-- Email subscribe form at the bottom of the page --}}
{{#if @labs.members}}
{{> subscribe-form}}
{{/if}}
{{/post}}
{{!--
<section class="post-full-comments">
If you want to embed comments, this is a good place to do it!
</section>
--}}
</article>
</article>
</main>
</div>
</main>
{{!-- Links to Previous/Next posts --}}
<aside class="read-next outer">
<div class="inner">
<div class="read-next-feed">
{{#if primary_tag}}
{{#get "posts" filter="tags:{{primary_tag.slug}}+id:-{{id}}" limit="3" as |related_posts|}}
{{#if related_posts}}
<article class="read-next-card">
<header class="read-next-card-header">
{{#../primary_tag}}
<h3><span>More in</span> <a href="{{url}}">{{name}}</a></h3>
{{/../primary_tag}}
</header>
<div class="read-next-card-content">
<ul>
{{#foreach related_posts}}
<li>
<h4><a href="{{url}}">{{title}}</a></h4>
<div class="read-next-card-meta">
<p><time datetime="{{date format="YYYY-MM-DD"}}">{{date format="D MMM YYYY"}}</time>
{{reading_time}}</p>
</div>
</li>
{{/foreach}}
</ul>
</div>
<footer class="read-next-card-footer">
<a href="{{#../primary_tag}}{{url}}{{/../primary_tag}}">{{plural meta.pagination.total empty='No posts' singular='% post' plural='See all % posts'}}
→</a>
</footer>
</article>
{{/if}}
{{/get}}
{{/if}}
{{!-- If there's a next post, display it using the same markup included from - partials/post-card.hbs --}}
{{#next_post}}
{{> "post-card"}}
{{/next_post}}
{{!-- If there's a previous post, display it using the same markup included from - partials/post-card.hbs --}}
{{#prev_post}}
{{> "post-card"}}
{{/prev_post}}
</div>
</div>
</aside>
{{/post}}
{{!-- The #contentFor helper here will send everything inside it up to the matching #block helper found in default.hbs --}}
{{#contentFor "scripts"}}
<script>
$(document).ready(function () {
// FitVids - start
var $postContent = $(".post-full-content");
$postContent.fitVids();
// FitVids - end
// Replace nav with title on scroll - start
Casper.stickyNavTitle({
navSelector: '.site-nav-main',
titleSelector: '.post-full-title',
activeClass: 'nav-post-title-active'
});
// Replace nav with title on scroll - end
// Hover on avatar
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}}

9
renovate.json Normal file
View File

@ -0,0 +1,9 @@
{
"extends": [
"@tryghost:theme"
],
"travis": { "enabled": true },
"node": {
"supportPolicy": ["lts_latest"]
}
}

32
tag.hbs Normal file
View File

@ -0,0 +1,32 @@
{{!< default}}
{{!-- The tag above means - insert everything in this file into the {body} of the default.hbs template --}}
{{#tag}}
<header class="site-archive-header">
{{> site-header}}
{{> header-background background=feature_image}} {{!--Special header-image.hbs partial to generate the background image--}}
<div class="inner 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 posts">
<div class="post-feed">
{{#foreach posts}}
{{!-- The tag below includes the markup for each post - partials/post-card.hbs --}}
{{> "post-card"}}
{{/foreach}}
</div>
</div>
</main>

5118
yarn.lock Normal file

File diff suppressed because it is too large Load Diff