Compare commits

...

33 Commits
2.3.3 ... 2.7.0

Author SHA1 Message Date
Kevin Ansfield
f695d69aeb Upgrading Casper to 2.7.0 2018-10-16 15:45:26 +01:00
Aileen Nowak
d53b25bf5d Remove double slash in link
no issue
2018-10-12 12:56:54 +07:00
Aileen Nowak
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
John O'Nolan
5ad6e1ed1f Add titles to icon links 2018-10-12 12:01:05 +07:00
Nazar Gargol
36971db512 Upgrading Casper to 2.6.4 2018-10-09 16:06:07 +02:00
Péter Szabolcs Nagy
bfcab7172f Minified javascript in zip(#476)
no issue

* Added js minification step to gulp zip script
2018-10-08 16:34:07 +05:30
John O'Nolan
fce92d6cf1 Link to required dependencies
Refs https://github.com/TryGhost/Casper/pull/468
2018-10-08 11:45:06 +07:00
Oshawk
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
Antonio
6f4fe840b3 [Fix] Inline <code> tag word-break inside a <p> tag (#483) 2018-10-08 06:38:28 +02:00
Fabien O'Carroll
8a9efb5ef1 Upgrading Casper to 2.6.3 2018-09-25 11:32:08 +07:00
Peter Zimon
04854967a8 Adjusting spaces for galleries and wide images in a sequence (#480) 2018-09-24 14:35:47 +02:00
Nazar Gargol
fa18115aa6 Upgrading Casper to 2.6.2 2018-09-11 13:42:34 +02:00
Aileen Nowak
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
kirrg001
78993720fd Upgrading Casper to 2.6.1 2018-08-31 11:26:01 +01:00
Zimo
676e17bd13 Restructure spacings for generic figure element 2018-08-31 11:24:50 +01:00
kirrg001
67e595741c Upgrading Casper to 2.6.0 2018-08-30 17:45:43 +01:00
Kevin Ansfield
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
Kevin Ansfield
a0e42e0599 Rebuild CSS 2018-08-30 14:56:38 +01:00
Kevin Ansfield
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
kirrg001
7380ed0291 Upgrading Casper to 2.5.1 2018-08-22 14:31:02 +02:00
Kevin Ansfield
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
kirrg001
89ea6c5872 Upgrading Casper to 2.5.0 2018-08-16 13:59:03 +02:00
Hannah Wolfe
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
Hannah Wolfe
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
kirrg001
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
John O'Nolan
36841d4624 Set minimum Ghost version to 2.0 2018-08-11 20:22:43 +01:00
Kevin Ansfield
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
kirrg001
5d318225f5 Upgrading Casper to 2.4.2 2018-08-08 17:08:21 +02:00
Nulla Wu
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
Kevin Ansfield
1bf2cdb52a Upgrading Casper to 2.4.1 2018-07-31 11:31:35 +01:00
Peter Zimon
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
kirrg001
25d1e368d6 Upgrading Casper to 2.4.0 2018-07-24 15:13:30 +02:00
Kevin Ansfield
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
18 changed files with 996 additions and 101 deletions

6
.travis.yml Normal file
View File

@@ -0,0 +1,6 @@
language: node_js
sudo: false
node_js:
- "8"

View File

@@ -32,7 +32,7 @@ One really neat trick is that you can also create custom one-off templates just
# Development
Casper styles are compiled using Gulp/PostCSS to polyfill future CSS spec. You'll need Node and Gulp installed globally. After that, from the theme's root directory:
Casper styles are compiled using Gulp/PostCSS to polyfill future CSS spec. You'll need [Node](https://nodejs.org/), [Yarn](https://yarnpkg.com/) and [Gulp](https://gulpjs.com) installed globally. After that, from the theme's root directory:
```bash
$ yarn install

View File

@@ -0,0 +1,2 @@
$(function(t){var o=1,r=window.location.pathname,a=t(document),s=t(".post-feed"),c=300,l=!1,w=!1,d=window.scrollY,v=window.innerHeight,u=a.height();function f(){d=window.scrollY,e()}function g(){v=window.innerHeight,u=a.height(),e()}function e(){l||requestAnimationFrame(n),l=!0}function n(){var e,n;if(n=/(?:page\/)(\d)(?:\/)$/i,(e=(e=r).replace(/#(.*)$/g,"").replace("////g","/")).match(n)&&(o=parseInt(e.match(n)[1]),e=e.replace(n,"")),r=e,!w)if(d+v<=u-c)l=!1;else{if(o>=maxPages)return window.removeEventListener("scroll",f,{passive:!0}),void window.removeEventListener("resize",g);w=!0;var i=r+"page/"+(o+=1)+"/";t.get(i,function(e){var n=document.createRange().createContextualFragment(e).querySelectorAll(".post");n.length&&[].forEach.call(n,function(e){s[0].appendChild(e)})}).fail(function(e){404===e.status&&(window.removeEventListener("scroll",f,{passive:!0}),window.removeEventListener("resize",g))}).always(function(){u=a.height(),l=w=!1})}}window.addEventListener("scroll",f,{passive:!0}),window.addEventListener("resize",g),n()});
//# sourceMappingURL=infinitescroll.js.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,2 @@
!function(d){"use strict";d.fn.fitVids=function(t){var i={customSelector:null,ignore:null};if(!document.getElementById("fit-vids-style")){var e=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>',e.appendChild(r.childNodes[1])}return t&&d.extend(i,t),this.each(function(){var t=['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&&t.push(i.customSelector);var r=".fitvidsignore";i.ignore&&(r=r+", "+i.ignore);var e=d(this).find(t.join(","));(e=(e=e.not("object object")).not(r)).each(function(){var t=d(this);if(!(0<t.parents(r).length||"embed"===this.tagName.toLowerCase()&&t.parent("object").length||t.parent(".fluid-width-video-wrapper").length)){t.css("height")||t.css("width")||!isNaN(t.attr("height"))&&!isNaN(t.attr("width"))||(t.attr("height",9),t.attr("width",16));var e=("object"===this.tagName.toLowerCase()||t.attr("height")&&!isNaN(parseInt(t.attr("height"),10))?parseInt(t.attr("height"),10):t.height())/(isNaN(parseInt(t.attr("width"),10))?t.width():parseInt(t.attr("width"),10));if(!t.attr("name")){var i="fitvid"+d.fn.fitVids._count;t.attr("name",i),d.fn.fitVids._count++}t.wrap('<div class="fluid-width-video-container"><div class="fluid-width-video-wrapper"></div></div>').parent(".fluid-width-video-wrapper").css("padding-top",100*e+"%"),t.removeAttr("height").removeAttr("width")}})})},d.fn.fitVids._count=0}(window.jQuery||window.Zepto);
//# sourceMappingURL=jquery.fitvids.js.map

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -815,6 +815,7 @@ The first (most recent) post in the list is styled to be bigger than the others
.post-full-content a {
color: #000;
word-break: break-word;
box-shadow: var(--blue) 0 -1px 0 inset;
}
@@ -842,6 +843,7 @@ The first (most recent) post in the list is styled to be bigger than the others
display: block;
margin: 1.5em auto;
max-width: 1040px;
height: auto;
}
@media (max-width: 1040px) {
.post-full-content img,
@@ -881,8 +883,9 @@ Usage (In Ghost editor):
}
/* Override third party iframe styles */
.post-full-content iframe {
margin: 0 auto;
margin: 0 auto !important;
}
.post-full-content blockquote {
@@ -912,6 +915,10 @@ Usage (In Ghost editor):
border-radius: 3px;
}
.post-full-content p code {
word-break: break-all;
}
.post-full-content pre {
overflow-x: auto;
margin: 1.5em 0 3em;
@@ -932,7 +939,7 @@ Usage (In Ghost editor):
background: transparent;
}
.post-full-content pre code * {
.post-full-content pre code :not(span) {
color: inherit;
}
@@ -1819,92 +1826,106 @@ Usage (In Ghost editor):
/* 7.6. Koenig Styles
/* ---------------------------------------------------------- */
/* For Ghost 1.0 */
.kg-card-markdown {
.post-content {
display: flex;
flex-direction: column;
align-items: center;
max-width: 920px;
}
.post-template .kg-card-markdown > p:first-child {
.post-template .post-content > p:first-child {
font-size: 1.25em;
line-height: 1.5em;
}
/* ^ .kg-card-markdown will be deprecated */
.post-template .kg-post > p:first-child {
font-size: 1.25em;
line-height: 1.5em;
}
.kg-post {
display: flex;
flex-direction: column;
align-items: center;
max-width: 920px;
}
.post-full-content .kg-image {
max-width: 100%;
}
/* Preventing full-width image overlap with post image. */
.post-full-image + .post-full-content .kg-post *:first-child .kg-image {
.post-full-image + .post-full-content .kg-content *:first-child .kg-image {
width: 100%;
}
.post-full-content .kg-image-wide {
.post-full-content .kg-width-wide .kg-image {
max-width: 1040px;
}
.post-full-content .kg-image-full {
.post-full-content .kg-width-full .kg-image {
max-width: 100vw;
}
.kg-post figcaption {
.post-full-content figure {
margin: 1.5em 0 3em;
}
.post-full-content figure img {
margin: 0;
}
.post-full-content figcaption {
margin: 1.0em 0 0;
font-size: 80%;
line-height: 1.6em;
text-align: center;
}
.kg-image-card {
margin: 0 0 1.5em;
}
.kg-image-card figcaption {
margin: -1.0em 0 1.5em;
.kg-width-full figcaption {
padding: 0 1.5em;
}
.kg-embed-card {
display: flex;
flex-direction: column;
align-items: center;
margin: 1.5em 0 3em;
min-width: 100%;
}
.kg-embed-card figcaption {
margin: 0.5em 0 0;
}
.kg-embed-card .fluid-width-video-wrapper {
margin: 0;
}
.kg-image-full + figcaption {
padding: 0 1.5em;
}
@media (max-width: 1040px) {
.post-full-content .kg-image-full {
.post-full-content .kg-width-full .kg-image {
width: 100vw;
}
}
.kg-gallery-container {
display: flex;
flex-direction: column;
max-width: 1040px;
width: 100vw;
}
.kg-gallery-row {
display: flex;
flex-direction: row;
justify-content: center;
}
.kg-gallery-image img {
display: block;
margin: 0;
width: 100%;
height: 100%;
}
.kg-gallery-row:not(:first-of-type) {
margin: 0.75em 0 0 0;
}
.kg-gallery-image:not(:first-of-type) {
margin: 0 0 0 0.75em;
}
.kg-gallery-card + .kg-image-card.kg-width-wide,
.kg-gallery-card + .kg-gallery-card,
.kg-image-card.kg-width-wide + .kg-gallery-card,
.kg-image-card.kg-width-wide + .kg-image-card.kg-width-wide {
margin: -2.25em 0 3em;
}
/* 8. Author Template
/* ---------------------------------------------------------- */

View File

@@ -55,13 +55,25 @@
</div>
{{/if}}
<script>
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%';
})
</script>
{{!-- jQuery + Fitvids, which makes all video embeds responsive --}}
<script
src="https://code.jquery.com/jquery-3.2.1.min.js"
integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4="
crossorigin="anonymous">
</script>
<script type="text/javascript" src="{{asset "js/jquery.fitvids.js"}}"></script>
<script type="text/javascript" src="{{asset "built/jquery.fitvids.js"}}"></script>
{{#if pagination.pages}}
<script>
@@ -70,7 +82,7 @@
// we reached the last page already.
var maxPages = parseInt('{{pagination.pages}}');
</script>
<script src="{{asset "js/infinitescroll.js"}}"></script>
<script src="{{asset "built/infinitescroll.js"}}"></script>
{{/if}}
{{!-- The #block helper will pull in data from the #contentFor other template files. In this case, there's some JavaScript which we only want to use in post.hbs, but it needs to be included down here, after jQuery has already loaded. --}}

View File

@@ -6,6 +6,8 @@ var livereload = require('gulp-livereload');
var postcss = require('gulp-postcss');
var sourcemaps = require('gulp-sourcemaps');
var zip = require('gulp-zip');
var uglify = require('gulp-uglify');
var filter = require('gulp-filter');
// postcss plugins
var autoprefixer = require('autoprefixer');
@@ -24,10 +26,12 @@ var nodemonServerInit = function () {
livereload.listen(1234);
};
gulp.task('build', ['css'], function (/* cb */) {
gulp.task('build', ['css', 'js'], function (/* cb */) {
return nodemonServerInit();
});
gulp.task('generate', ['css', 'js']);
gulp.task('css', function () {
var processors = [
easyimport,
@@ -46,11 +50,25 @@ gulp.task('css', function () {
.pipe(livereload());
});
gulp.task('js', function () {
var jsFilter = filter(['**/*.js'], {restore: true});
return gulp.src('assets/js/*.js')
.on('error', swallowError)
.pipe(sourcemaps.init())
.pipe(jsFilter)
.pipe(uglify())
.pipe(jsFilter.restore)
.pipe(sourcemaps.write('.'))
.pipe(gulp.dest('assets/built/'))
.pipe(livereload());
});
gulp.task('watch', function () {
gulp.watch('assets/css/**', ['css']);
});
gulp.task('zip', ['css'], function () {
gulp.task('zip', ['css', 'js'], function () {
var targetDir = 'dist/';
var themeName = require('./package.json').name;
var filename = themeName + '.zip';

View File

@@ -2,9 +2,9 @@
"name": "casper",
"description": "The default personal blogging theme for Ghost. Beautiful, minimal and responsive.",
"demo": "https://demo.ghost.io",
"version": "2.3.3",
"version": "2.7.0",
"engines": {
"ghost": ">=1.2.0"
"ghost": ">=2.0.0"
},
"license": "MIT",
"screenshots": {
@@ -12,8 +12,9 @@
"mobile": "assets/screenshot-mobile.jpg"
},
"scripts": {
"dev": "gulp",
"zip": "gulp zip"
"dev": "gulp",
"zip": "gulp zip",
"test": "gscan ."
},
"author": {
"name": "Ghost Foundation",
@@ -29,7 +30,8 @@
},
"keywords": [
"ghost",
"theme"
"theme",
"ghost-theme"
],
"repository": {
"type": "git",
@@ -40,6 +42,7 @@
"devDependencies": {
"autoprefixer": "6.3.6",
"cssnano": "3.7.1",
"gscan": "^2.0.0",
"gulp": "3.9.1",
"gulp-livereload": "3.8.1",
"gulp-postcss": "6.1.1",
@@ -49,7 +52,9 @@
"gulp-zip": "4.0.0",
"postcss-color-function": "2.0.1",
"postcss-custom-properties": "5.0.1",
"postcss-easy-import": "1.0.1"
"postcss-easy-import": "1.0.1",
"gulp-filter": "5.1.0",
"gulp-uglify": "3.0.1"
},
"config": {
"posts_per_page": 25

View File

@@ -27,7 +27,9 @@ into the {body} of the default.hbs template --}}
{{/if}}
<section class="post-full-content">
{{content}}
<div class="post-content">
{{content}}
</div>
</section>
</article>

View File

@@ -1,5 +1,5 @@
{{!-- Everything inside the #author tags pulls data from the author --}}
{{#author}}
{{#primary_author}}
<section class="author-card">
{{#if profile_image}}
@@ -20,4 +20,4 @@
<a class="author-card-button" href="{{url}}">Read More</a>
</div>
{{/author}}
{{/primary_author}}

View File

@@ -20,7 +20,7 @@
{{> "icons/facebook"}}
</a>
</div>
<progress class="progress" value="0">
<progress id="reading-progress" class="progress" value="0">
<div class="progress-container">
<span class="progress-bar"></span>
</div>

View File

@@ -14,16 +14,16 @@
<div class="site-nav-right">
<div class="social-links">
{{#if @blog.facebook}}
<a class="social-link social-link-fb" href="{{facebook_url @blog.facebook}}" target="_blank" rel="noopener">{{> "icons/facebook"}}</a>
<a class="social-link social-link-fb" href="{{facebook_url @blog.facebook}}" title="Facebook" target="_blank" rel="noopener">{{> "icons/facebook"}}</a>
{{/if}}
{{#if @blog.twitter}}
<a class="social-link social-link-tw" href="{{twitter_url @blog.twitter}}" target="_blank" rel="noopener">{{> "icons/twitter"}}</a>
<a class="social-link social-link-tw" href="{{twitter_url @blog.twitter}}" title="Twitter" target="_blank" rel="noopener">{{> "icons/twitter"}}</a>
{{/if}}
</div>
{{#if @labs.subscribers}}
<a class="subscribe-button" href="#subscribe">Subscribe</a>
{{else}}
<a class="rss-button" href="https://feedly.com/i/subscription/feed/{{@blog.url}}/rss/" target="_blank" rel="noopener">{{> "icons/rss"}}</a>
<a class="rss-button" href="https://feedly.com/i/subscription/feed/{{@blog.url}}/rss/" title="RSS" target="_blank" rel="noopener">{{> "icons/rss"}}</a>
{{/if}}
</div>
</nav>

View File

@@ -33,7 +33,9 @@ into the {body} of the default.hbs template --}}
{{/if}}
<section class="post-full-content">
{{content}}
<div class="post-content">
{{content}}
</div>
</section>
{{!-- Email subscribe form at the bottom of the page --}}
@@ -141,7 +143,7 @@ $(document).ready(function () {
$postContent.fitVids();
// End fitVids
var progressBar = document.querySelector('progress');
var progressBar = document.querySelector('#reading-progress');
var header = document.querySelector('.floating-header');
var title = document.querySelector('.post-full-title');

901
yarn.lock

File diff suppressed because it is too large Load Diff