mirror of
https://github.com/TryGhost/Ghost.git
synced 2025-02-10 23:36:14 -05:00
Removing multiple hyphens
Closes #228. Also deals with the fact that if there's a trailing hyphen, it no longer removes one extra character.
This commit is contained in:
parent
d8d88f40cd
commit
a6b3851491
2 changed files with 5 additions and 35 deletions
|
@ -85,30 +85,13 @@ Post = GhostBookshelf.Model.extend({
|
||||||
};
|
};
|
||||||
|
|
||||||
// Remove reserved chars: `:/?#[]@!$&'()*+,;=` as well as `\` and convert spaces to hyphens
|
// Remove reserved chars: `:/?#[]@!$&'()*+,;=` as well as `\` and convert spaces to hyphens
|
||||||
slug = title.replace(/[:\/\?#\[\]@!$&'()*+,;=\\]/g, '').replace(/\s/g, '-').toLowerCase();
|
slug = title.replace(/[:\/\?#\[\]@!$&'()*+,;=\\]/g, '').replace(/(\s|\.)/g, '-').replace(/-+/g, '-').toLowerCase();
|
||||||
// Remove trailing hyphen
|
// Remove trailing hypen
|
||||||
slug = slug.charAt(slug.length - 1) === '-' ? slug.substr(0, slug.length - 2) : slug;
|
slug = slug.charAt(slug.length - 1) === '-' ? slug.substr(0, slug.length - 1) : slug;
|
||||||
// Check the filtered slug doesn't match any of the reserved keywords
|
// Check the filtered slug doesn't match any of the reserved keywords
|
||||||
slug = /^(ghost|ghost\-admin|admin|wp\-admin|dashboard|login|archive|archives|category|categories|tag|tags|page|pages|post|posts)$/g
|
slug = /^(ghost|ghost\-admin|admin|wp\-admin|dashboard|login|archive|archives|category|categories|tag|tags|page|pages|post|posts)$/g
|
||||||
.test(slug) ? slug + '-post' : slug;
|
.test(slug) ? slug + '-post' : slug;
|
||||||
|
|
||||||
// Replace multiple hyphens and anything with less than two letters with one hyphen
|
|
||||||
shortSlug = _.filter(slug.split('-'), function (part) {
|
|
||||||
return part.length > 2;
|
|
||||||
}).join('-');
|
|
||||||
|
|
||||||
// If we've gotten rid of everything, come back through with lower threshold
|
|
||||||
if (shortSlug.length < 1) {
|
|
||||||
shortSlug = _.filter(slug.split('-'), function (part) {
|
|
||||||
return part.length > 1;
|
|
||||||
}).join('-');
|
|
||||||
|
|
||||||
// If we've still got no slug, default to just 'post'
|
|
||||||
if (shortSlug.length < 1) {
|
|
||||||
shortSlug = "post";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Test for duplicate slugs.
|
// Test for duplicate slugs.
|
||||||
return checkIfSlugExists(shortSlug);
|
return checkIfSlugExists(shortSlug);
|
||||||
},
|
},
|
||||||
|
@ -264,4 +247,4 @@ Posts = GhostBookshelf.Collection.extend({
|
||||||
module.exports = {
|
module.exports = {
|
||||||
Post: Post,
|
Post: Post,
|
||||||
Posts: Posts
|
Posts: Posts
|
||||||
};
|
};
|
||||||
|
|
|
@ -121,19 +121,6 @@ describe('Post Model', function () {
|
||||||
}).otherwise(done);
|
}).otherwise(done);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('can generate slugs without 2 letter words', function (done) {
|
|
||||||
var newPost = {
|
|
||||||
title: 'I am an idiot',
|
|
||||||
content: 'Test Content 1'
|
|
||||||
};
|
|
||||||
|
|
||||||
PostModel.add(newPost).then(function (createdPost) {
|
|
||||||
|
|
||||||
createdPost.get('slug').should.equal('idiot');
|
|
||||||
|
|
||||||
done();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('can generate slugs without duplicate hyphens', function (done) {
|
it('can generate slugs without duplicate hyphens', function (done) {
|
||||||
var newPost = {
|
var newPost = {
|
||||||
|
@ -212,4 +199,4 @@ describe('Post Model', function () {
|
||||||
done();
|
done();
|
||||||
}).then(null, done);
|
}).then(null, done);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
Loading…
Add table
Reference in a new issue