Skip to content

Commit

Permalink
🎨Removed seconds option from {{reading_time}} (#9573)
Browse files Browse the repository at this point in the history
closes #9569

- Removed the `<1 min read` time clause, effectively making `1 min read` the minimum reading time
- Removed the `seconds` option for i18n strings, which contained the less than one minute display string
- Kept the other i18n string options the same
- Amended and improved tests for new functionality
  • Loading branch information
rkalis authored and aileen committed Apr 18, 2018
1 parent 2667ad3 commit 2a4d759
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 18 deletions.
5 changes: 1 addition & 4 deletions core/server/helpers/reading_time.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@ module.exports = function reading_time(options) {// eslint-disable-line camelcas
readingTimeSeconds,
readingTimeMinutes,
readingTime,
seconds = _.isString(options.hash.seconds) ? options.hash.seconds : '&lt; 1 min read',
minute = _.isString(options.hash.minute) ? options.hash.minute : '1 min read',
minutes = _.isString(options.hash.minutes) ? options.hash.minutes : '% min read';

Expand All @@ -50,9 +49,7 @@ module.exports = function reading_time(options) {// eslint-disable-line camelcas

readingTimeMinutes = Math.round(readingTimeSeconds / 60);

if (readingTimeSeconds < 60) {
readingTime = seconds;
} else if (readingTimeMinutes === 1) {
if (readingTimeMinutes <= 1) {
readingTime = minute;
} else {
readingTime = minutes.replace('%', readingTimeMinutes);
Expand Down
52 changes: 38 additions & 14 deletions core/test/unit/helpers/reading_time_spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ var should = require('should'), // jshint ignore:line
// Stuff we are testing
helpers = require('../../../server/helpers');

var articleHtml =
var almostOneMinute =
'<div class="kg-card-markdown"><p>Ghost has a number of different user roles for your team</p>' +
'<h3 id="authors">Authors</h3><p>The base user level in Ghost is an author. Authors can write posts,' +
' edit their own posts, and publish their own posts. Authors are <strong>trusted</strong> users. If you ' +
Expand All @@ -20,21 +20,34 @@ var articleHtml =
' users to fill out their user profiles, including bio and social links. These will populate rich structured data ' +
'for posts and generally create more opportunities for themes to fully populate their design.</p></div>';

var almostOneAndAHalfMinute = almostOneMinute +
'<div>' +
'<p>Ghost has a number of different user roles for your team</p>' +
'<h3 id="authors">Authors</h3><p>The base user level in Ghost is an author. Authors can write posts,' +
' edit their own posts, and publish their own posts. Authors are <strong>trusted</strong> users. If you ' +
'don\'t trust users to be allowed to publish their own posts, you shouldn\'t invite them to Ghost admin.</p>' +
'<h3 id="editors">Editors</h3><p>Editors are the 2nd user level in Ghost. Editors can do everything that an' +
' Author can do, but they can also edit and publish the posts of others - as well as their own. Editors can also invite new' +
' authors to the site.</p><h3 id="administrators">Administrators</h3><p>The top user level in Ghost is Administrator.' +
' Again, administrators can do everything that Authors and Editors can do, but they can also edit all site settings ' +
'and data, not just content. Additionally, administrators have full access to invite</p>' +
'</div>';

describe('{{reading_time}} helper', function () {
it('[success] renders reading time for less than one minute text correctly', function () {
it('[success] renders reading time for less than one minute text as one minute', function () {
var data = {
html: articleHtml,
html: almostOneMinute,
title: 'Test',
slug: 'slug'
},
result = helpers.reading_time.call(data);

String(result).should.equal('&lt; 1 min read');
String(result).should.equal('1 min read');
});

it('[success] renders reading time for more than one minute text correctly', function () {
it('[success] renders reading time for one minute text as one minute', function () {
var data = {
html: articleHtml +
html: almostOneMinute +
'This needed about twenty-five more words before passing the one minute reading time, ' +
'since the word count was 250, and the average speed is 275.',
title: 'Test',
Expand All @@ -45,32 +58,43 @@ describe('{{reading_time}} helper', function () {
String(result).should.equal('1 min read');
});

it('[success] renders reading time for just under 1.5 minutes text as one minute', function () {
var data = {
html: almostOneAndAHalfMinute,
title: 'Test',
slug: 'slug'
},
result = helpers.reading_time.call(data);

String(result).should.equal('1 min read');
});

it('[success] adds time for feature image', function () {
var data = {
html: articleHtml,
html: almostOneAndAHalfMinute,
title: 'Test',
slug: 'slug',
feature_image: '/content/images/someimage.jpg'
},
result = helpers.reading_time.call(data);

// The reading time for this HTML snippet would be 55 seconds without the image
// Adding the 12 additional seconds for the image results in a reading time > 1 minute
String(result).should.equal('1 min read');
// The reading time for this HTML snippet would 89 seconds without the image
// Adding the 12 additional seconds for the image results in a readng time of over 1.5 minutes, rounded to 2
String(result).should.equal('2 min read');
});

it('[success] adds time for inline images', function () {
var data = {
html: articleHtml +
html: almostOneAndAHalfMinute +
'<img src="test.png">',
title: 'Test',
slug: 'slug'
},
result = helpers.reading_time.call(data);

// The reading time for this HTML snippet would be 55 seconds without the image
// Adding the 12 additional seconds for the image results in a reading time > 1 minute
String(result).should.equal('1 min read');
// The reading time for this HTML snippet would 89 seconds without the image
// Adding the 12 additional seconds for the image results in a readng time of over 1.5 minutes, rounded to 2
String(result).should.equal('2 min read');
});

it('[failure] does not render reading time when not post', function () {
Expand Down

0 comments on commit 2a4d759

Please sign in to comment.