0
Fork 0
mirror of https://github.com/TryGhost/Ghost.git synced 2025-04-08 02:52:39 -05:00

🙀 Image field naming & new img_url helper (#8364)

* 🙀  change database schema for images
    - rename user/post/tag images
    - contains all the required changes from the schema change

* Refactor helper/meta data
    - rename cover to cover_image
    - also rename default settings to match the pattern
    - rename image to profile_image for user
    - rename image to feature_image for tags/posts

* {{image}} >>> {{img_url}}
    - rename
    - change the functionality
    - attr is required
    - e.g. {{img_url feature_image}}

* gscan 1.0.0
    - update yarn.lock

* Update casper reference: 1.0-changes
    - see 5487b4da8d
This commit is contained in:
Katharina Irrgang 2017-04-24 19:21:47 +02:00 committed by Kevin Ansfield
parent df26e38ccf
commit 76bd4fdef6
36 changed files with 319 additions and 243 deletions

@ -1 +1 @@
Subproject commit ccf903fefffdfe6ba63b34922431a5612dba9635
Subproject commit 5487b4da8d2ad7c6a6d003a3a0ee1a860e0de34d

View file

@ -20,27 +20,27 @@ preProcessPosts = function (data, image) {
if (post.html) {
post.html = replaceImage(post.html, image);
}
if (post.image) {
post.image = replaceImage(post.image, image);
if (post.feature_image) {
post.feature_image = replaceImage(post.feature_image, image);
}
});
};
preProcessTags = function (data, image) {
_.each(data.tags, function (tag) {
if (tag.image) {
tag.image = replaceImage(tag.image, image);
if (tag.feature_image) {
tag.feature_image = replaceImage(tag.feature_image, image);
}
});
};
preProcessUsers = function (data, image) {
_.each(data.users, function (user) {
if (user.cover) {
user.cover = replaceImage(user.cover, image);
if (user.cover_image) {
user.cover_image = replaceImage(user.cover_image, image);
}
if (user.image) {
user.image = replaceImage(user.image, image);
if (user.profile_image) {
user.profile_image = replaceImage(user.profile_image, image);
}
});
};

View file

@ -6,8 +6,8 @@ function getAuthorImage(data, absolute) {
var context = data.context ? data.context : null,
contextObject = getContextObject(data, context);
if ((_.includes(context, 'post') || _.includes(context, 'page')) && contextObject.author && contextObject.author.image) {
return utils.url.urlFor('image', {image: contextObject.author.image}, absolute);
if ((_.includes(context, 'post') || _.includes(context, 'page')) && contextObject.author && contextObject.author.profile_image) {
return utils.url.urlFor('image', {image: contextObject.author.profile_image}, absolute);
}
return null;
}

View file

@ -6,7 +6,7 @@ function getContextObject(data, context) {
* If the data object does not contain the requested context, we return the fallback object.
*/
var blog = {
cover: settingsCache.get('cover'),
cover_image: settingsCache.get('cover_image'),
twitter: settingsCache.get('twitter'),
facebook: settingsCache.get('facebook')
},

View file

@ -7,12 +7,12 @@ function getCoverImage(data) {
contextObject = getContextObject(data, context);
if (_.includes(context, 'home') || _.includes(context, 'author')) {
if (contextObject.cover) {
return utils.url.urlFor('image', {image: contextObject.cover}, true);
if (contextObject.cover_image) {
return utils.url.urlFor('image', {image: contextObject.cover_image}, true);
}
} else {
if (contextObject.image) {
return utils.url.urlFor('image', {image: contextObject.image}, true);
if (contextObject.feature_image) {
return utils.url.urlFor('image', {image: contextObject.feature_image}, true);
}
}
return null;

View file

@ -57,7 +57,7 @@ function getMetaData(data, root) {
timezone: settingsCache.get('activeTimezone'),
navigation: settingsCache.get('navigation'),
icon: settingsCache.get('icon'),
cover: settingsCache.get('cover'),
cover_image: settingsCache.get('cover_image'),
logo: settingsCache.get('logo'),
amp: settingsCache.get('amp')
}

View file

@ -23,7 +23,7 @@
"logo": {
"defaultValue": ""
},
"cover": {
"cover_image": {
"defaultValue": ""
},
"icon": {

View file

@ -9,7 +9,7 @@ module.exports = {
html: {type: 'text', maxlength: 1000000000, fieldtype: 'long', nullable: true},
amp: {type: 'text', maxlength: 1000000000, fieldtype: 'long', nullable: true},
plaintext: {type: 'text', maxlength: 1000000000, fieldtype: 'long', nullable: true},
image: {type: 'string', maxlength: 2000, nullable: true},
feature_image: {type: 'string', maxlength: 2000, nullable: true},
featured: {type: 'bool', nullable: false, defaultTo: false},
page: {type: 'bool', nullable: false, defaultTo: false},
status: {type: 'string', maxlength: 50, nullable: false, defaultTo: 'draft'},
@ -33,8 +33,8 @@ module.exports = {
ghost_auth_id: {type: 'string', maxlength: 24, nullable: true},
password: {type: 'string', maxlength: 60, nullable: false},
email: {type: 'string', maxlength: 191, nullable: false, unique: true, validations: {isEmail: true}},
image: {type: 'string', maxlength: 2000, nullable: true},
cover: {type: 'string', maxlength: 2000, nullable: true},
profile_image: {type: 'string', maxlength: 2000, nullable: true},
cover_image: {type: 'string', maxlength: 2000, nullable: true},
bio: {type: 'text', maxlength: 65535, nullable: true},
website: {type: 'string', maxlength: 2000, nullable: true, validations: {isEmptyOrURL: true}},
location: {type: 'text', maxlength: 65535, nullable: true},
@ -108,7 +108,7 @@ module.exports = {
name: {type: 'string', maxlength: 191, nullable: false, validations: {matches: /^([^,]|$)/}},
slug: {type: 'string', maxlength: 191, nullable: false, unique: true},
description: {type: 'text', maxlength: 65535, nullable: true},
image: {type: 'string', maxlength: 2000, nullable: true},
feature_image: {type: 'string', maxlength: 2000, nullable: true},
parent_id: {type: 'string', nullable: true},
visibility: {type: 'string', maxlength: 50, nullable: false, defaultTo: 'public', validations: {isIn: [['public', 'internal']]}},
meta_title: {type: 'string', maxlength: 2000, nullable: true},

View file

@ -123,8 +123,8 @@ generateFeed = function generateFeed(data) {
},
imageUrl;
if (post.image) {
imageUrl = utils.url.urlFor('image', {image: post.image, secure: data.secure}, true);
if (post.feature_image) {
imageUrl = utils.url.urlFor('image', {image: post.feature_image, secure: data.secure}, true);
// Add a media content tag
item.custom_elements.push({

View file

@ -178,7 +178,7 @@ _.extend(BaseSiteMapGenerator.prototype, {
createImageNodeFromDatum: function (datum) {
// Check for cover first because user has cover but the rest only have image
var image = datum.cover || datum.image,
var image = datum.cover_image || datum.profile_image || datum.feature_image,
imageUrl,
imageEl;

View file

@ -1,16 +0,0 @@
// Usage: `{{image}}`, `{{image absolute="true"}}`
//
// Returns the URL for the current object scope i.e. If inside a post scope will return image permalink
// `absolute` flag outputs absolute URL, else URL is relative.
var proxy = require('./proxy'),
url = proxy.url;
module.exports = function image(options) {
var absolute = options && options.hash.absolute;
if (this.image) {
return url.urlFor('image', {image: this.image}, absolute);
}
};

View file

@ -0,0 +1,39 @@
// Usage:
// `{{img_url}}` - does not work, argument is required
// `{{img_url feature_image}}`
// `{{img_url profile_image absolute="true"}}`
//
// Returns the URL for the current object scope i.e. If inside a post scope will return image permalink
// `absolute` flag outputs absolute URL, else URL is relative.
var proxy = require('./proxy'),
errors = require('../errors'),
i18n = require('../i18n'),
url = proxy.url;
module.exports = function imgUrl(attr, options) {
var absolute;
// CASE: if you pass e.g. cover_image, but it is not set, then attr is null!
// in this case we don't throw an error
if (!options) {
attr = undefined;
options = attr;
}
absolute = options && options.hash && options.hash.absolute;
if (attr === undefined) {
throw new errors.IncorrectUsageError({
message: i18n.t('warnings.helpers.img_url.attrIsRequired')
});
}
// CASE: property is not set in the model e.g. cover_image
if (attr === null) {
return;
}
return url.urlFor('image', {image: attr}, absolute);
};

View file

@ -16,7 +16,7 @@ coreHelpers.foreach = require('./foreach');
coreHelpers.get = require('./get');
coreHelpers.ghost_foot = require('./ghost_foot');
coreHelpers.ghost_head = require('./ghost_head');
coreHelpers.image = require('./image');
coreHelpers.img_url = require('./img_url');
coreHelpers.is = require('./is');
coreHelpers.has = require('./has');
coreHelpers.meta_description = require('./meta_description');
@ -45,7 +45,7 @@ registerAllCoreHelpers = function registerAllCoreHelpers() {
registerThemeHelper('foreach', coreHelpers.foreach);
registerThemeHelper('has', coreHelpers.has);
registerThemeHelper('is', coreHelpers.is);
registerThemeHelper('image', coreHelpers.image);
registerThemeHelper('img_url', coreHelpers.img_url);
registerThemeHelper('meta_description', coreHelpers.meta_description);
registerThemeHelper('meta_title', coreHelpers.meta_title);
registerThemeHelper('navigation', coreHelpers.navigation);

View file

@ -91,7 +91,7 @@ tagUpdate = {
},
createTagThenAttachTagToPost: function createTagThenAttachTagToPost(PostModel, TagModel, post, tag, index, options) {
var fields = ['name', 'slug', 'description', 'image', 'visibility', 'parent_id', 'meta_title', 'meta_description'];
var fields = ['name', 'slug', 'description', 'feature_image', 'visibility', 'parent_id', 'meta_title', 'meta_description'];
return function () {
return TagModel.add(_.pick(tag, fields), options).then(function then(createdTag) {
return tagUpdate.attachTagToPost(PostModel, post.id, createdTag, index, options)();

View file

@ -112,7 +112,7 @@ User = ghostBookshelf.Model.extend({
email: self.get('email')
}).then(function (response) {
if (response && response.image) {
self.set('image', response.image);
self.set('profile_image', response.image);
}
});
})();

View file

@ -44,7 +44,7 @@ themeMiddleware.updateTemplateData = function updateTemplateData(req, res, next)
navigation: settingsCache.get('navigation'),
permalinks: settingsCache.get('permalinks'),
icon: settingsCache.get('icon'),
cover: settingsCache.get('cover'),
cover_image: settingsCache.get('cover_image'),
logo: settingsCache.get('logo'),
amp: settingsCache.get('amp')
},

View file

@ -517,6 +517,9 @@
"plural": {
"valuesMustBeDefined": "All values must be defined for empty, singular and plural"
},
"img_url": {
"attrIsRequired": "Attribute is required e.g. \\{\\{img_url feature_image\\}\\}"
},
"template": {
"templateNotFound": "Template {name} not found."
}

View file

@ -74,7 +74,7 @@ describe('Advanced Browse', function () {
describe('2. Posts - filter: "tag:photo,featured:true,image:-null", include: "tags"', function () {
it('Will fetch posts which have either a tag of `photo`, are marked `featured` or have an image.', function (done) {
PostAPI.browse({
filter: 'tag:photo,featured:true,image:-null',
filter: 'tag:photo,featured:true,feature_image:-null',
include: 'tags'
}).then(function (result) {
var ids;
@ -158,7 +158,7 @@ describe('Advanced Browse', function () {
// Note that `pat` doesn't exist (it's `pat-smith`)
it('Will fetch posts by the author `leslie` or `pat` which are either have tag `audio` or an image.', function (done) {
PostAPI.browse({
filter: 'author:[leslie,pat]+(tag:audio,image:-null)',
filter: 'author:[leslie,pat]+(tag:audio,feature_image:-null)',
include: 'author,tags'
}).then(function (result) {
var ids, authors;
@ -181,8 +181,8 @@ describe('Advanced Browse', function () {
_.each(result.posts, function (post) {
var tags = _.map(post.tags, 'slug');
// This construct ensures we get an assertion or a failure
if (!_.isEmpty(post.image)) {
post.image.should.not.be.empty();
if (!_.isEmpty(post.feature_image)) {
post.feature_image.should.not.be.empty();
} else {
tags = _.map(post.tags, 'slug');
tags.should.containEql('audio');
@ -322,7 +322,7 @@ describe('Advanced Browse', function () {
describe('8. Tags filter: "image:-null+description:-null"', function () {
it('Will fetch tags which have an image and a description', function (done) {
TagAPI.browse({filter: 'image:-null+description:-null', order: 'name ASC'}).then(function (result) {
TagAPI.browse({filter: 'feature_image:-null+description:-null', order: 'name ASC'}).then(function (result) {
var ids;
// 1. Result should have the correct base structure
should.exist(result);
@ -341,9 +341,9 @@ describe('Advanced Browse', function () {
// @TODO standardise how alphabetical ordering is done across DBs (see #6104)
// ids.should.eql([4, 2, 3]);
should.exist(result.tags[0].image);
should.exist(result.tags[1].image);
should.exist(result.tags[2].image);
should.exist(result.tags[0].feature_image);
should.exist(result.tags[1].feature_image);
should.exist(result.tags[2].feature_image);
should.exist(result.tags[0].description);
should.exist(result.tags[1].description);

View file

@ -934,7 +934,7 @@ describe('Post Model', function () {
(!!createdPost.get('page')).should.equal(false);
createdPost.get('language').should.equal('en_US');
// testing for nulls
(createdPost.get('image') === null).should.equal(true);
(createdPost.get('feature_image') === null).should.equal(true);
(createdPost.get('meta_title') === null).should.equal(true);
(createdPost.get('meta_description') === null).should.equal(true);

View file

@ -97,7 +97,7 @@ describe('User Model', function run() {
UserModel.add(userData, context).then(function (createdUser) {
should.exist(createdUser);
createdUser.attributes.image.should.eql(
createdUser.attributes.profile_image.should.eql(
'http://www.gravatar.com/avatar/2fab21a4c4ed88e76add10650c73bae1?d=404', 'Gravatar found'
);
done();

View file

@ -681,16 +681,16 @@ describe('Importer', function () {
outputData.posts[0].markdown.should.containEql('/content/images/photos/cat.jpg');
outputData.posts[0].html.should.containEql('/content/images/photos/cat.jpg');
inputData.posts[0].image.should.eql('/images/my-image.png');
outputData.posts[0].image.should.eql('/content/images/my-image.png');
inputData.posts[0].feature_image.should.eql('/images/my-image.png');
outputData.posts[0].feature_image.should.eql('/content/images/my-image.png');
inputData.tags[0].image.should.eql('/images/my-image.png');
outputData.tags[0].image.should.eql('/content/images/my-image.png');
inputData.tags[0].feature_image.should.eql('/images/my-image.png');
outputData.tags[0].feature_image.should.eql('/content/images/my-image.png');
inputData.users[0].image.should.eql('/images/my-image.png');
inputData.users[0].cover.should.eql('/images/photos/cat.jpg');
outputData.users[0].image.should.eql('/content/images/my-image.png');
outputData.users[0].cover.should.eql('/content/images/photos/cat.jpg');
inputData.users[0].profile_image.should.eql('/images/my-image.png');
inputData.users[0].cover_image.should.eql('/images/photos/cat.jpg');
outputData.users[0].profile_image.should.eql('/content/images/my-image.png');
outputData.users[0].cover_image.should.eql('/content/images/photos/cat.jpg');
});
it('does import the images correctly', function () {

View file

@ -13,7 +13,7 @@ describe('getAuthorImage', function () {
context: ['post'],
post: {
author: {
image: '/content/images/2016/01/myimage.jpg'
profile_image: '/content/images/2016/01/myimage.jpg'
}
}
}, false);
@ -26,7 +26,7 @@ describe('getAuthorImage', function () {
context: ['post'],
post: {
author: {
image: '/content/images/2016/01/myimage.jpg'
profile_image: '/content/images/2016/01/myimage.jpg'
}
}
}, true);
@ -39,7 +39,7 @@ describe('getAuthorImage', function () {
context: ['amp', 'post'],
post: {
author: {
image: '/content/images/2016/01/myimage.jpg'
profile_image: '/content/images/2016/01/myimage.jpg'
}
}
}, false);
@ -51,7 +51,7 @@ describe('getAuthorImage', function () {
context: ['amp', 'post'],
post: {
author: {
image: '/content/images/2016/01/myimage.jpg'
profile_image: '/content/images/2016/01/myimage.jpg'
}
}
}, true);

View file

@ -51,7 +51,7 @@ describe('getContextObject', function () {
before(function () {
sandbox.stub(settingsCache, 'get', function (key) {
return {
cover: 'test.png'
cover_image: 'test.png'
}[key];
});
});
@ -66,7 +66,7 @@ describe('getContextObject', function () {
contextObject = getContextObject(data, context);
should.exist(contextObject);
contextObject.should.have.property('cover', 'test.png');
contextObject.should.have.property('cover_image', 'test.png');
});
});
});

View file

@ -6,7 +6,7 @@ describe('getCoverImage', function () {
var coverImageUrl = getCoverImage({
context: ['home'],
home: {
cover: '/content/images/my-test-image.jpg'
cover_image: '/content/images/my-test-image.jpg'
}
});
coverImageUrl.should.not.equal('/content/images/my-test-image.jpg');
@ -17,7 +17,7 @@ describe('getCoverImage', function () {
var coverImageUrl = getCoverImage({
context: ['author'],
author: {
cover: '/content/images/my-test-image.jpg'
cover_image: '/content/images/my-test-image.jpg'
}
});
coverImageUrl.should.not.equal('/content/images/my-test-image.jpg');
@ -28,7 +28,7 @@ describe('getCoverImage', function () {
var coverImageUrl = getCoverImage({
context: ['post'],
post: {
image: '/content/images/my-test-image.jpg'
feature_image: '/content/images/my-test-image.jpg'
}
});
coverImageUrl.should.not.equal('/content/images/my-test-image.jpg');
@ -39,7 +39,7 @@ describe('getCoverImage', function () {
var coverImageUrl = getCoverImage({
context: ['amp', 'post'],
post: {
image: '/content/images/my-test-image.jpg'
feature_image: '/content/images/my-test-image.jpg'
}
});
coverImageUrl.should.not.equal('/content/images/my-test-image.jpg');

View file

@ -19,7 +19,7 @@ var should = require('should'), // jshint ignore:line
// both of which are required for migrations to work properly.
describe('DB version integrity', function () {
// Only these variables should need updating
var currentSchemaHash = '961370c4b76ac026104182be9bb75695',
var currentSchemaHash = '0d3a45d3db7f7ae6effb654621ca8ab5',
currentFixturesHash = 'ad12de59b939b13dc198611a6438ab51';
// If this test is failing, then it is likely a change has been made that requires a DB version bump,

View file

@ -33,7 +33,7 @@ describe('{{ghost_head}} helper', function () {
var localSettingsCache = {
title: 'Ghost',
description: 'blog description',
cover: '/content/images/blog-cover.png',
cover_image: '/content/images/blog-cover.png',
amp: true
};
@ -102,7 +102,7 @@ describe('{{ghost_head}} helper', function () {
var post = {
meta_description: 'all about our blog',
title: 'About',
image: '/content/images/test-image-about.png',
feature_image: '/content/images/test-image-about.png',
published_at: moment('2008-05-31T19:18:15').toISOString(),
updated_at: moment('2014-10-06T15:23:54').toISOString(),
page: true,
@ -110,7 +110,7 @@ describe('{{ghost_head}} helper', function () {
name: 'Author name',
url: 'http://testauthorurl.com',
slug: 'Author',
image: '/content/images/test-author-image.png',
profile_image: '/content/images/test-author-image.png',
website: 'http://authorwebsite.com',
facebook: 'testuser',
twitter: '@testuser',
@ -163,7 +163,7 @@ describe('{{ghost_head}} helper', function () {
meta_description: 'tag meta description',
name: 'tagtitle',
meta_title: 'tag meta title',
image: '/content/images/tag-image.png'
feature_image: '/content/images/tag-image.png'
};
helpers.ghost_head.call(
@ -206,7 +206,7 @@ describe('{{ghost_head}} helper', function () {
description: 'tag description',
name: 'tagtitle',
meta_title: '',
image: '/content/images/tag-image.png'
feature_image: '/content/images/tag-image.png'
};
helpers.ghost_head.call(
@ -248,7 +248,7 @@ describe('{{ghost_head}} helper', function () {
meta_description: '',
name: 'tagtitle',
meta_title: '',
image: '/content/images/tag-image.png'
feature_image: '/content/images/tag-image.png'
};
helpers.ghost_head.call(
@ -271,7 +271,7 @@ describe('{{ghost_head}} helper', function () {
meta_description: 'tag meta description',
title: 'tagtitle',
meta_title: 'tag meta title',
image: '/content/images/tag-image.png'
feature_image: '/content/images/tag-image.png'
};
helpers.ghost_head.call(
@ -296,8 +296,8 @@ describe('{{ghost_head}} helper', function () {
name: 'Author name',
slug: 'AuthorName',
bio: 'Author bio',
image: '/content/images/test-author-image.png',
cover: '/content/images/author-cover-image.png',
profile_image: '/content/images/test-author-image.png',
cover_image: '/content/images/author-cover-image.png',
website: 'http://authorwebsite.com',
facebook: 'testuser',
twitter: '@testuser'
@ -345,8 +345,8 @@ describe('{{ghost_head}} helper', function () {
name: 'Author name',
slug: 'AuthorName',
bio: 'Author bio',
image: '/content/images/test-author-image.png',
cover: '/content/images/author-cover-image.png',
profile_image: '/content/images/test-author-image.png',
cover_image: '/content/images/author-cover-image.png',
website: 'http://authorwebsite.com'
};
@ -390,7 +390,7 @@ describe('{{ghost_head}} helper', function () {
var post = {
meta_description: 'blog description',
title: 'Welcome to Ghost',
image: '/content/images/test-image.png',
feature_image: '/content/images/test-image.png',
published_at: moment('2008-05-31T19:18:15').toISOString(),
updated_at: moment('2014-10-06T15:23:54').toISOString(),
tags: [{name: 'tag1'}, {name: 'tag2'}, {name: 'tag3'}],
@ -398,7 +398,7 @@ describe('{{ghost_head}} helper', function () {
name: 'Author name',
url: 'http://testauthorurl.com',
slug: 'Author',
image: '/content/images/test-author-image.png',
profile_image: '/content/images/test-author-image.png',
website: 'http://authorwebsite.com',
bio: 'Author bio',
facebook: 'testuser',
@ -470,7 +470,7 @@ describe('{{ghost_head}} helper', function () {
var post = {
meta_description: 'blog description',
title: 'Welcome to Ghost',
image: '/content/images/test-image.png',
feature_image: '/content/images/test-image.png',
published_at: moment('2008-05-31T19:18:15').toISOString(),
updated_at: moment('2014-10-06T15:23:54').toISOString(),
tags: [{name: 'tag1'}, {name: 'tag2'}, {name: 'tag3'}],
@ -478,7 +478,7 @@ describe('{{ghost_head}} helper', function () {
name: 'Author name',
url: 'http://testauthorurl.com',
slug: 'Author',
image: '/content/images/test-author-image.png',
profile_image: '/content/images/test-author-image.png',
website: 'http://authorwebsite.com',
bio: 'Author bio',
facebook: 'testuser',
@ -551,7 +551,7 @@ describe('{{ghost_head}} helper', function () {
meta_description: 'blog "test" description',
title: 'title',
meta_title: 'Welcome to Ghost "test"',
image: '/content/images/test-image.png',
feature_image: '/content/images/test-image.png',
published_at: moment('2008-05-31T19:18:15').toISOString(),
updated_at: moment('2014-10-06T15:23:54').toISOString(),
tags: [{name: 'tag1'}, {name: 'tag2'}, {name: 'tag3'}],
@ -559,7 +559,7 @@ describe('{{ghost_head}} helper', function () {
name: 'Author name',
url: 'http//:testauthorurl.com',
slug: 'Author',
image: '/content/images/test-author-image.png',
profile_image: '/content/images/test-author-image.png',
website: 'http://authorwebsite.com',
facebook: 'testuser',
twitter: '@testuser'
@ -630,7 +630,7 @@ describe('{{ghost_head}} helper', function () {
var post = {
meta_description: 'blog description',
title: 'Welcome to Ghost',
image: '/content/images/test-image.png',
feature_image: '/content/images/test-image.png',
published_at: moment('2008-05-31T19:18:15').toISOString(),
updated_at: moment('2014-10-06T15:23:54').toISOString(),
tags: [],
@ -638,7 +638,7 @@ describe('{{ghost_head}} helper', function () {
name: 'Author name',
url: 'http//:testauthorurl.com',
slug: 'Author',
image: '/content/images/test-author-image.png',
profile_image: '/content/images/test-author-image.png',
website: 'http://authorwebsite.com',
facebook: 'testuser',
twitter: '@testuser'
@ -705,7 +705,7 @@ describe('{{ghost_head}} helper', function () {
var post = {
meta_description: 'blog description',
title: 'Welcome to Ghost',
image: null,
feature_image: null,
published_at: moment('2008-05-31T19:18:15').toISOString(),
updated_at: moment('2014-10-06T15:23:54').toISOString(),
tags: [{name: 'tag1'}, {name: 'tag2'}, {name: 'tag3'}],
@ -713,7 +713,7 @@ describe('{{ghost_head}} helper', function () {
name: 'Author name',
url: 'http//:testauthorurl.com',
slug: 'Author',
image: null,
profile_image: null,
website: 'http://authorwebsite.com',
facebook: 'testuser',
twitter: '@testuser'
@ -926,7 +926,7 @@ describe('{{ghost_head}} helper', function () {
var localSettingsCache = {
title: 'Ghost',
description: 'blog description',
cover: '/content/images/blog-cover.png',
cover_image: '/content/images/blog-cover.png',
amp: true,
icon: '/content/images/favicon.png'
};
@ -961,7 +961,7 @@ describe('{{ghost_head}} helper', function () {
var localSettingsCache = {
title: 'Ghost',
description: 'blog description',
cover: '/content/images/blog-cover.png',
cover_image: '/content/images/blog-cover.png',
amp: true,
icon: '/content/images/favicon.png'
};
@ -1021,7 +1021,7 @@ describe('{{ghost_head}} helper', function () {
var localSettingsCache = {
title: 'Ghost',
description: 'blog description',
cover: '/content/images/blog-cover.png',
cover_image: '/content/images/blog-cover.png',
icon: '/content/images/favicon.png',
ghost_head: '<style>body {background: red;}</style>'
};

View file

@ -2,8 +2,9 @@ var should = require('should'), // jshint ignore:line
sinon = require('sinon'),
configUtils = require('../../utils/configUtils'),
// Stuff we are testing
// Stuff we are testing
helpers = require('../../../server/helpers'),
errors = require('../../../server/errors'),
sandbox = sinon.sandbox.create();
@ -21,39 +22,35 @@ describe('{{image}} helper', function () {
});
it('should output relative url of image', function () {
var rendered = helpers.image.call({
image: '/content/images/image-relative-url.png',
author: {
image: '/content/images/author-image-relative-url.png'
}
});
var rendered = helpers.img_url('/content/images/image-relative-url.png', {});
should.exist(rendered);
rendered.should.equal('/content/images/image-relative-url.png');
});
it('should output absolute url of image if the option is present ', function () {
var rendered = helpers.image.call({
image: '/content/images/image-relative-url.png',
author: {image: '/content/images/author-image-relative-url.png'}
},
{
hash: {absolute: 'true'}
});
var rendered = helpers.img_url('/content/images/image-relative-url.png', {hash: {absolute: 'true'}});
should.exist(rendered);
rendered.should.equal('http://localhost:82832/content/images/image-relative-url.png');
});
it('should have no output if there is no image ', function () {
var rendered = helpers.image.call({image: null}, {hash: {absolute: 'true'}});
should.not.exist(rendered);
it('should output author url', function () {
var rendered = helpers.img_url('/content/images/author-image-relative-url.png', {});
should.exist(rendered);
rendered.should.equal('/content/images/author-image-relative-url.png');
});
it('should have no output if there is no image property ', function () {
var rendered = helpers.image.call({}, {hash: {absolute: 'true'}});
it('should have no output if there is no image ', function (done) {
try {
helpers.img_url(undefined, {hash: {absolute: 'true'}});
done(new Error('we expect an error from img_url'));
} catch (err) {
(err instanceof errors.IncorrectUsageError).should.eql(true);
done();
}
});
it('should have no output if there is no image ', function () {
var rendered = helpers.img_url(null, {hash: {absolute: 'true'}});
should.not.exist(rendered);
});
@ -66,38 +63,19 @@ describe('{{image}} helper', function () {
});
it('should output relative url of image', function () {
var rendered = helpers.image.call({
image: '/blog/content/images/image-relative-url.png',
author: {
image: '/blog/content/images/author-image-relative-url.png'
}
});
var rendered = helpers.img_url('/blog/content/images/image-relative-url.png', {});
should.exist(rendered);
rendered.should.equal('/blog/content/images/image-relative-url.png');
});
it('should output absolute url of image if the option is present ', function () {
var rendered = helpers.image.call({
image: '/blog/content/images/image-relative-url.png',
author: {image: '/blog/content/images/author-image-relatve-url.png'}
},
{
hash: {absolute: 'true'}
});
var rendered = helpers.img_url('/blog/content/images/image-relative-url.png', {hash: {absolute: 'true'}});
should.exist(rendered);
rendered.should.equal('http://localhost:82832/blog/content/images/image-relative-url.png');
});
it('should not change output for an external url', function () {
var rendered = helpers.image.call({
image: 'http://example.com/picture.jpg',
author: {
image: '/blog/content/images/author-image-relative-url.png'
}
});
var rendered = helpers.img_url('http://example.com/picture.jpg', {});
should.exist(rendered);
rendered.should.equal('http://example.com/picture.jpg');
});

View file

@ -10,7 +10,7 @@ describe('Helpers', function () {
var hbsHelpers = ['each', 'if', 'unless', 'with', 'helperMissing', 'blockHelperMissing', 'log', 'lookup'],
ghostHelpers = [
'asset', 'author', 'body_class', 'content', 'date', 'encode', 'excerpt', 'facebook_url', 'foreach', 'get',
'ghost_foot', 'ghost_head', 'has', 'image', 'is', 'meta_description', 'meta_title', 'navigation',
'ghost_foot', 'ghost_head', 'has', 'img_url', 'is', 'meta_description', 'meta_title', 'navigation',
'next_post', 'page_url', 'pagination', 'plural', 'post_class', 'prev_post', 'tags', 'title', 'twitter_url',
'url'
],

View file

@ -164,7 +164,7 @@ describe('Generators', function () {
it('adds an image:image element if post has a cover image', function () {
var urlNode = generator.createUrlNodeFromDatum(_.extend(makeFakeDatum(100), {
image: 'post-100.jpg',
feature_image: 'post-100.jpg',
page: false
}));
@ -177,14 +177,14 @@ describe('Generators', function () {
sandbox.stub(generator, 'getData', function () {
return Promise.resolve([
_.extend(makeFakeDatum(100), {
image: 'post-100.jpg',
feature_image: 'post-100.jpg',
page: false
}),
_.extend(makeFakeDatum(200), {
page: false
}),
_.extend(makeFakeDatum(300), {
image: 'post-300.jpg',
feature_image: 'post-300.jpg',
page: false
})
]);
@ -294,7 +294,7 @@ describe('Generators', function () {
it('adds an image:image element if page has an image', function () {
var urlNode = generator.createUrlNodeFromDatum(_.extend(makeFakeDatum(100), {
image: 'page-100.jpg',
feature_image: 'page-100.jpg',
page: true
}));
@ -321,7 +321,7 @@ describe('Generators', function () {
it('adds an image:image element if tag has an image', function () {
var urlNode = generator.createUrlNodeFromDatum(_.extend(makeFakeDatum(100), {
image: 'tag-100.jpg'
feature_image: 'tag-100.jpg'
}));
urlNode.should.be.a.ValidUrlNode({withImage: true});
@ -348,7 +348,7 @@ describe('Generators', function () {
it('does not create a node for a user with visibility that is not public', function () {
var urlNode = generator.createUrlNodeFromDatum(_.extend(makeFakeDatum(100), {
cover: 'user-100.jpg',
cover_image: 'user-100.jpg',
status: 'active',
visibility: 'notpublic'
}));
@ -358,7 +358,7 @@ describe('Generators', function () {
it('adds an image:image element if user has a cover image', function () {
var urlNode = generator.createUrlNodeFromDatum(_.extend(makeFakeDatum(100), {
cover: '/content/images/2016/01/user-100.jpg',
cover_image: '/content/images/2016/01/user-100.jpg',
status: 'active'
}));

View file

@ -97,7 +97,7 @@ describe('Themes', function () {
var updateTemplateData = middleware[1],
themeDataExpectedProps = ['posts_per_page'],
blogDataExpectedProps = [
'url', 'title', 'description', 'logo', 'cover', 'icon', 'twitter', 'facebook', 'navigation',
'url', 'title', 'description', 'logo', 'cover_image', 'icon', 'twitter', 'facebook', 'navigation',
'permalinks', 'timezone', 'amp'
],
updateOptionsStub;

File diff suppressed because one or more lines are too long

View file

@ -44,7 +44,7 @@ data.tags = [
id: ObjectId.generate(),
name: 'photo',
slug: 'photo',
image: 'some/image/path.jpg',
feature_image: 'some/image/path.jpg',
description: 'Photo posts',
created_by: data.users[1].id
},
@ -52,7 +52,7 @@ data.tags = [
id: ObjectId.generate(),
name: 'Video',
slug: 'video',
image: 'some/image/path.jpg',
feature_image: 'some/image/path.jpg',
description: 'Video posts',
created_by: data.users[0].id
},
@ -60,7 +60,7 @@ data.tags = [
id: ObjectId.generate(),
name: 'Audio',
slug: 'audio',
image: 'some/image/path.jpg',
feature_image: 'some/image/path.jpg',
description: 'Audio posts',
created_by: data.users[0].id
},
@ -131,7 +131,7 @@ data.posts = [
markdown: 'Hello World!',
featured: false,
author_id: data.users[1].id,
image: 'some/image/path.jpg',
feature_image: 'some/image/path.jpg',
tags: [data.tags[0].id, data.tags[3].id, data.tags[5].id]
},
{
@ -141,7 +141,7 @@ data.posts = [
markdown: 'Hello World!',
featured: false,
author_id: data.users[0].id,
image: 'some/image/path.jpg',
feature_image: 'some/image/path.jpg',
tags: [data.tags[0].id, data.tags[2].id]
},
{
@ -178,7 +178,7 @@ data.posts = [
markdown: 'Hello World!',
featured: false,
author_id: data.users[0].id,
image: 'some/image/path.jpg',
feature_image: 'some/image/path.jpg',
tags: [data.tags[1].id]
},
{

View file

@ -29,7 +29,7 @@
"slug": "welcome-to-ghost",
"markdown": "You're live! Nice. \n![Cat Photo](/images/photos/cat.jpg)\n\n![Cat Photo](/images/photos/cat.jpg)\n![My pic](/images/my-image.png)",
"html": "<p>You're live! Nice. <br>\n<img src=\"/images/photos/cat.jpg\" alt=\"Cat Photo\"></p>\n\n<p><img src=\"/images/photos/cat.jpg\" alt=\"Cat Photo\">\n<img src=\"/images/my-image.png\" alt=\"My pic\"></p>",
"image": "/images/my-image.png",
"feature_image": "/images/my-image.png",
"featured": 0,
"page": 0,
"status": "published",
@ -52,7 +52,7 @@
"name": "Getting Started",
"slug": "getting-started",
"description": null,
"image": "/images/my-image.png",
"feature_image": "/images/my-image.png",
"parent_id": null,
"meta_title": null,
"meta_description": null,
@ -66,8 +66,8 @@
{
"name": "test user",
"email": "test@ghost.org",
"image": "/images/my-image.png",
"cover": "/images/photos/cat.jpg"
"profile_image": "/images/my-image.png",
"cover_image": "/images/photos/cat.jpg"
}
],
"posts_tags": [
@ -79,4 +79,4 @@
]
}
}
}
}

View file

@ -0,0 +1,82 @@
{
"images": [
{
"name": "my-image.png",
"path": "/tmp/test/path/images/my-image.png",
"originalPath": "images/my-image.png",
"targetDir": "/test/content/images",
"newPath": "/content/images/my-image.png"
},
{
"name": "photos/cat.jpg",
"path": "/tmp/test/path/images/photos/cat.jpg",
"originalPath": "images/photos/cat.jpg",
"targetDir": "/test/content/images/photos",
"newPath": "/content/images/photos/cat.jpg"
}
],
"data": {
"meta": {
"exported_on": 1388318311015,
"version": "000"
},
"data": {
"posts": [
{
"id": 1,
"uuid": "8492fbba-1102-4b53-8e3e-abe207952f0c",
"title": "Welcome to Ghost",
"slug": "welcome-to-ghost",
"markdown": "You're live! Nice. \n![Cat Photo](/images/photos/cat.jpg)\n\n![Cat Photo](/images/photos/cat.jpg)\n![My pic](/images/my-image.png)",
"html": "<p>You're live! Nice. <br>\n<img src=\"/images/photos/cat.jpg\" alt=\"Cat Photo\"></p>\n\n<p><img src=\"/images/photos/cat.jpg\" alt=\"Cat Photo\">\n<img src=\"/images/my-image.png\" alt=\"My pic\"></p>",
"image": "/images/my-image.png",
"featured": 0,
"page": 0,
"status": "published",
"language": "en_US",
"meta_title": null,
"meta_description": null,
"author_id": 1,
"created_at": 1388318310782,
"created_by": 1,
"updated_at": 1388318310782,
"updated_by": 1,
"published_at": 1388318310783,
"published_by": 1
}
],
"tags": [
{
"id": 1,
"uuid": "a950117a-9735-4584-931d-25a28015a80d",
"name": "Getting Started",
"slug": "getting-started",
"description": null,
"image": "/images/my-image.png",
"parent_id": null,
"meta_title": null,
"meta_description": null,
"created_at": 1388318310790,
"created_by": 1,
"updated_at": 1388318310790,
"updated_by": 1
}
],
"users": [
{
"name": "test user",
"email": "test@ghost.org",
"image": "/images/my-image.png",
"cover": "/images/photos/cat.jpg"
}
],
"posts_tags": [
{
"id": 1,
"post_id": 1,
"tag_id": 1
}
]
}
}
}

View file

@ -52,7 +52,7 @@
"ghost-ignition": "2.8.11",
"ghost-storage-base": "0.0.1",
"glob": "5.0.15",
"gscan": "0.2.4",
"gscan": "1.0.0",
"html-to-text": "3.2.0",
"icojs": "0.7.2",
"image-size": "0.5.1",

144
yarn.lock
View file

@ -26,8 +26,8 @@ addressparser@~0.3.2:
resolved "https://registry.yarnpkg.com/addressparser/-/addressparser-0.3.2.tgz#59873f35e8fcf6c7361c10239261d76e15348bb2"
ajv@^4.9.1:
version "4.11.5"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.5.tgz#b6ee74657b993a01dce44b7944d56f485828d5bd"
version "4.11.7"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.7.tgz#8655a5d86d0824985cc471a1d913fb6729a0ec48"
dependencies:
co "^4.6.0"
json-stable-stringify "^1.0.1"
@ -109,11 +109,11 @@ archiver@1.3.0, archiver@^1.0.0:
zip-stream "^1.1.0"
are-we-there-yet@~1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.2.tgz#80e470e95a084794fe1899262c5667c6e88de1b3"
version "1.1.4"
resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d"
dependencies:
delegates "^1.0.0"
readable-stream "^2.0.0 || ^1.1.13"
readable-stream "^2.0.6"
argparse@^1.0.2, argparse@^1.0.7:
version "1.0.9"
@ -135,8 +135,8 @@ arr-diff@^2.0.0:
arr-flatten "^1.0.1"
arr-flatten@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.1.tgz#e5ffe54d45e19f32f216e91eb99c8ce892bb604b"
version "1.0.3"
resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.3.tgz#a274ed85ac08849b6bd7847c4580745dc51adfb1"
array-differ@^1.0.0:
version "1.0.0"
@ -182,12 +182,18 @@ async@1.x, async@^1.4.0, async@^1.5.0, async@^1.5.2, async@~1.5.2:
version "1.5.2"
resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
async@2.1.4, async@^2.0.0:
async@2.1.4:
version "2.1.4"
resolved "https://registry.yarnpkg.com/async/-/async-2.1.4.tgz#2d2160c7788032e4dd6cbe2502f1f9a2c8f6cde4"
dependencies:
lodash "^4.14.0"
async@^2.0.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/async/-/async-2.3.0.tgz#1013d1051047dd320fe24e494d5c66ecaf6147d9"
dependencies:
lodash "^4.14.0"
async@~0.1.22:
version "0.1.22"
resolved "https://registry.yarnpkg.com/async/-/async-0.1.22.tgz#0fc1aaa088a0e3ef0ebe2d8831bab0dcf8845061"
@ -235,8 +241,8 @@ babel-runtime@^6.11.6, babel-runtime@^6.6.1, babel-runtime@^6.9.2:
regenerator-runtime "^0.10.0"
babylon@^6.8.1:
version "6.16.1"
resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.16.1.tgz#30c5a22f481978a9e7f8cdfdf496b11d94b404d3"
version "6.17.0"
resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.0.tgz#37da948878488b9c4e3c4038893fa3314b3fc932"
bal-util@~1.18.0:
version "1.18.0"
@ -366,8 +372,8 @@ boom@2.x.x:
hoek "2.x.x"
brace-expansion@^1.0.0:
version "1.1.6"
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.6.tgz#7197d7eaa9b87e648390ea61fc66c84427420df9"
version "1.1.7"
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.7.tgz#3effc3c50e000531fb720eaff80f0ae8ef23cf59"
dependencies:
balanced-match "^0.4.1"
concat-map "0.0.1"
@ -418,7 +424,7 @@ buffer-equal@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-0.0.1.tgz#91bc74b11ea405bc916bc6aa908faafa5b4aac4b"
buffer-shims@^1.0.0:
buffer-shims@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51"
@ -490,8 +496,8 @@ caniuse-api@^1.5.2:
lodash.uniq "^4.5.0"
caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639:
version "1.0.30000649"
resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000649.tgz#1ee1754a6df235450c8b7cd15e0ebf507221a86a"
version "1.0.30000660"
resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000660.tgz#d2d57b309dc5a11bb5b46018f51855f7a41efee5"
caseless@~0.11.0:
version "0.11.0"
@ -796,8 +802,8 @@ cookie@0.3.1:
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb"
cookiejar@^2.0.6:
version "2.1.0"
resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.0.tgz#86549689539b6d0e269b6637a304be508194d898"
version "2.1.1"
resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.1.tgz#41ad57b1b555951ec171412a81942b1e8200d34a"
cookies@0.5.0:
version "0.5.0"
@ -965,19 +971,13 @@ debug@2.2.0, debug@~2.2.0:
dependencies:
ms "0.7.1"
debug@2.6.1, debug@2.x.x, debug@^2.1.3, debug@^2.2.0:
debug@2.6.1:
version "2.6.1"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.1.tgz#79855090ba2c4e3115cc7d8769491d58f0491351"
dependencies:
ms "0.7.2"
debug@2.6.3:
version "2.6.3"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.3.tgz#0f7eb8c30965ec08c72accfa0130c8b79984141d"
dependencies:
ms "0.7.2"
debug@2.6.4:
debug@2.6.4, debug@2.x.x, debug@^2.1.3, debug@^2.2.0:
version "2.6.4"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.4.tgz#7586a9b3c39741c0282ae33445c4e8ac74734fe0"
dependencies:
@ -1144,8 +1144,8 @@ ee-first@1.1.1:
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
electron-to-chromium@^1.2.7:
version "1.3.2"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.2.tgz#b8ce5c93b308db0e92f6d0435c46ddec8f6363ab"
version "1.3.8"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.8.tgz#b2c8a2c79bb89fbbfd3724d9555e15095b5f5fb6"
emits@3.0.0:
version "3.0.0"
@ -1486,10 +1486,10 @@ finalhandler@0.5.0:
unpipe "~1.0.0"
finalhandler@~1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.0.1.tgz#bcd15d1689c0e5ed729b6f7f541a6df984117db8"
version "1.0.2"
resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.0.2.tgz#d0e36f9dbc557f2de14423df6261889e9d60c93a"
dependencies:
debug "2.6.3"
debug "2.6.4"
encodeurl "~1.0.1"
escape-html "~1.0.3"
on-finished "~2.3.0"
@ -1565,8 +1565,8 @@ forever-agent@~0.6.1:
resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
form-data@^2.1.1, form-data@~2.1.1:
version "2.1.2"
resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.2.tgz#89c3534008b97eada4cbb157d58f6f5df025eae4"
version "2.1.4"
resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1"
dependencies:
asynckit "^0.4.0"
combined-stream "^1.0.5"
@ -1649,8 +1649,8 @@ function-bind@^1.0.2:
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771"
gauge@~2.7.1:
version "2.7.3"
resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.3.tgz#1c23855f962f17b3ad3d0dc7443f304542edfe09"
version "2.7.4"
resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
dependencies:
aproba "^1.0.3"
console-control-strings "^1.0.0"
@ -1711,7 +1711,7 @@ ghost-gql@0.0.6:
dependencies:
lodash "^4.17.4"
ghost-ignition@2.8.11:
ghost-ignition@2.8.11, ghost-ignition@^2.8.2, ghost-ignition@^2.8.7:
version "2.8.11"
resolved "https://registry.yarnpkg.com/ghost-ignition/-/ghost-ignition-2.8.11.tgz#38a018ca2b63bc57e9f2c9037d45b4714b66eba0"
dependencies:
@ -1727,22 +1727,6 @@ ghost-ignition@2.8.11:
prettyjson "1.1.3"
uuid "^3.0.0"
ghost-ignition@^2.8.2, ghost-ignition@^2.8.7:
version "2.8.10"
resolved "https://registry.yarnpkg.com/ghost-ignition/-/ghost-ignition-2.8.10.tgz#7bde7d3d7d87790736f9991fb4f497154e56db14"
dependencies:
bunyan "1.8.5"
bunyan-loggly "1.1.0"
caller "1.0.1"
debug "^2.2.0"
find-root "1.0.0"
json-stringify-safe "5.0.1"
lodash "^4.16.4"
moment "^2.15.2"
nconf "0.8.4"
prettyjson "1.1.3"
uuid "^3.0.0"
ghost-storage-base@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/ghost-storage-base/-/ghost-storage-base-0.0.1.tgz#b31b57d2e54574a96153a54bf2e9ea599f12bec8"
@ -1836,8 +1820,8 @@ global-prefix@^0.1.4:
which "^1.2.12"
global@~4.3.0:
version "4.3.1"
resolved "https://registry.yarnpkg.com/global/-/global-4.3.1.tgz#5f757908c7cbabce54f386ae440e11e26b7916df"
version "4.3.2"
resolved "https://registry.yarnpkg.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f"
dependencies:
min-document "^2.19.0"
process "~0.5.1"
@ -2104,9 +2088,9 @@ grunt@~0.4.0:
underscore.string "~2.2.1"
which "~1.0.5"
gscan@0.2.4:
version "0.2.4"
resolved "https://registry.yarnpkg.com/gscan/-/gscan-0.2.4.tgz#f25f0bfbbc22cf731e8f4279d85b69e8e5bc7ff4"
gscan@1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/gscan/-/gscan-1.0.0.tgz#7b4e9856e8d987c4d0d9bd39f6aa6e7a2d29c415"
dependencies:
bluebird "3.4.6"
chalk "1.1.1"
@ -2251,8 +2235,8 @@ hooker@^0.2.3, hooker@~0.2.3:
resolved "https://registry.yarnpkg.com/hooker/-/hooker-0.2.3.tgz#b834f723cc4a242aa65963459df6d984c5d3d959"
hosted-git-info@^2.1.4:
version "2.4.1"
resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.4.1.tgz#4b0445e41c004a8bd1337773a4ff790ca40318c8"
version "2.4.2"
resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.4.2.tgz#0076b9f46a270506ddbaaea56496897460612a67"
html-comment-regex@^1.1.0:
version "1.1.1"
@ -3375,13 +3359,13 @@ mkdirp@0.3.2:
version "0.3.2"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.3.2.tgz#4bfb891e9c48b93d6b567f2c3cf2dd3f56bcdef8"
mkdirp@0.5.0, mkdirp@^0.5.0:
mkdirp@0.5.0:
version "0.5.0"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.0.tgz#1d73076a6df986cd9344e15e71fcc05a4c9abf12"
dependencies:
minimist "0.0.8"
mkdirp@0.5.1, mkdirp@0.5.x, mkdirp@0.x.x, "mkdirp@>=0.5 0", mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1:
mkdirp@0.5.1, mkdirp@0.5.x, mkdirp@0.x.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1:
version "0.5.1"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
dependencies:
@ -3577,8 +3561,8 @@ node-pre-gyp@~0.6.31:
tar-pack "^3.4.0"
node-uuid@^1.4.7, node-uuid@~1.4.7:
version "1.4.7"
resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.7.tgz#6da5a17668c4b3dd59623bda11cf7fa4c1f60a6f"
version "1.4.8"
resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.8.tgz#b040eb0923968afabf8d32fb1f17f1167fdab907"
nodemailer@0.7.1:
version "0.7.1"
@ -3620,8 +3604,8 @@ nopt@~1.0.10:
abbrev "1"
normalize-package-data@^2.3.2, normalize-package-data@^2.3.4:
version "2.3.6"
resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.6.tgz#498fa420c96401f787402ba21e600def9f981fff"
version "2.3.8"
resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.8.tgz#d819eda2a9dedbd1ffa563ea4071d936782295bb"
dependencies:
hosted-git-info "^2.1.4"
is-builtin-module "^1.0.0"
@ -4161,8 +4145,8 @@ postcss-zindex@^2.0.1:
uniqs "^2.0.0"
postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.8, postcss@^5.2.16:
version "5.2.16"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.16.tgz#732b3100000f9ff8379a48a53839ed097376ad57"
version "5.2.17"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.17.tgz#cf4f597b864d65c8a492b2eabe9d706c879c388b"
dependencies:
chalk "^1.1.3"
js-base64 "^2.1.9"
@ -4302,8 +4286,8 @@ qs@~6.4.0:
resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233"
query-string@^4.1.0:
version "4.3.2"
resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.2.tgz#ec0fd765f58a50031a3968c2431386f8947a5cdd"
version "4.3.4"
resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb"
dependencies:
object-assign "^4.1.0"
strict-uri-encode "^1.0.0"
@ -4382,16 +4366,16 @@ readable-stream@1.1, readable-stream@1.1.14, readable-stream@1.1.x, readable-str
isarray "0.0.1"
string_decoder "~0.10.x"
readable-stream@^2.0.0, "readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.5, readable-stream@^2.1.4, readable-stream@^2.1.5:
version "2.2.6"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.6.tgz#8b43aed76e71483938d12a8d46c6cf1a00b1f816"
readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.1.5:
version "2.2.9"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.9.tgz#cf78ec6f4a6d1eb43d26488cac97f042e74b7fc8"
dependencies:
buffer-shims "^1.0.0"
buffer-shims "~1.0.0"
core-util-is "~1.0.0"
inherits "~2.0.1"
isarray "~1.0.0"
process-nextick-args "~1.0.6"
string_decoder "~0.10.x"
string_decoder "~1.0.0"
util-deprecate "~1.0.1"
readable-stream@~1.0.17, readable-stream@~1.0.2:
@ -4893,8 +4877,8 @@ sqlstring@2.2.0:
resolved "https://registry.yarnpkg.com/sqlstring/-/sqlstring-2.2.0.tgz#c3135c4ea8abcd7e7ee741a4966a891d86a4f191"
sshpk@^1.7.0:
version "1.11.0"
resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.11.0.tgz#2d8d5ebb4a6fab28ffba37fa62a90f4a3ea59d77"
version "1.13.0"
resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.0.tgz#ff2a3e4fd04497555fed97b39a0fd82fafb3a33c"
dependencies:
asn1 "~0.2.3"
assert-plus "^1.0.0"
@ -4961,6 +4945,12 @@ string_decoder@~0.10.x:
version "0.10.31"
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
string_decoder@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.0.tgz#f06f41157b664d86069f84bdbdc9b0d8ab281667"
dependencies:
buffer-shims "~1.0.0"
stringstream@~0.0.4:
version "0.0.5"
resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878"
@ -5330,8 +5320,8 @@ uuid@^2.0.2:
resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a"
v8flags@^2.0.2:
version "2.0.12"
resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.0.12.tgz#73235d9f7176f8e8833fb286795445f7938d84e5"
version "2.1.1"
resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.1.1.tgz#aab1a1fa30d45f88dd321148875ac02c0b55e5b4"
dependencies:
user-home "^1.1.1"