0
Fork 0
mirror of https://github.com/TryGhost/Ghost.git synced 2025-02-17 23:44:39 -05:00

Add view post link on published and updated posts

closes #1756

- adds a post url link to 'post updated' and 'post published' in editor
- adds join function in ghost paths
- adds a '/' detection to makeRoute method
- adds test for join function
This commit is contained in:
cobbspur 2014-12-15 10:11:29 +00:00
parent 4c3d548bb3
commit 53d12a9659
5 changed files with 89 additions and 8 deletions

View file

@ -182,8 +182,12 @@ EditorControllerMixin = Ember.Mixin.create(MarkerManager, {
}, },
showSaveNotification: function (prevStatus, status, delay) { showSaveNotification: function (prevStatus, status, delay) {
var message = this.messageMap.success.post[prevStatus][status]; var message = this.messageMap.success.post[prevStatus][status],
path = this.get('ghostPaths.url').join(this.get('config.blogUrl'), this.get('url'));
if (status === 'published') {
message += '&nbsp;<a href="' + path + '">View Post</a>';
}
this.notifications.showSuccess(message, {delayed: delay}); this.notifications.showSuccess(message, {delayed: delay});
}, },

View file

@ -22,6 +22,7 @@ var Post = DS.Model.extend(NProgressSaveMixin, ValidationEngine, {
published_at: DS.attr('moment-date'), published_at: DS.attr('moment-date'),
published_by: DS.belongsTo('user', {async: true}), published_by: DS.belongsTo('user', {async: true}),
tags: DS.hasMany('tag', {embedded: 'always'}), tags: DS.hasMany('tag', {embedded: 'always'}),
url: DS.attr('string'),
// Computed post properties // Computed post properties

View file

@ -1,12 +1,18 @@
var makeRoute = function (root, args) { var makeRoute = function (root, args) {
var parts = Array.prototype.slice.call(args, 0).join('/'), var slashAtStart,
route = [root, parts].join('/'); slashAtEnd,
parts,
route;
if (route.slice(-1) !== '/') { slashAtStart = /^\//;
route += '/'; slashAtEnd = /\/$/;
} route = root.replace(slashAtEnd, '');
parts = Array.prototype.slice.call(args, 0);
return route; parts.forEach(function (part) {
route = [route, part.replace(slashAtStart, '').replace(slashAtEnd, '')].join('/');
});
return route += '/';
}; };
function ghostPaths() { function ghostPaths() {
@ -34,6 +40,16 @@ function ghostPaths() {
return makeRoute(apiRoot, arguments); return makeRoute(apiRoot, arguments);
}, },
join: function () {
if (arguments.length > 1) {
return makeRoute(arguments[0], Array.prototype.slice.call(arguments, 1));
} else if (arguments.length === 1) {
var arg = arguments[0];
return arg.slice(-1) === '/' ? arg : arg + '/';
}
return '/';
},
asset: assetUrl asset: assetUrl
} }
}; };

View file

@ -17,7 +17,7 @@ function getValidKeys() {
environment: process.env.NODE_ENV, environment: process.env.NODE_ENV,
database: config.database.client, database: config.database.client,
mail: _.isObject(config.mail) ? config.mail.transport : '', mail: _.isObject(config.mail) ? config.mail.transport : '',
blogUrl: config.url, blogUrl: config.url.replace(/\/$/, ''),
blogTitle: config.theme.title blogTitle: config.theme.title
}; };

View file

@ -0,0 +1,60 @@
/* jshint expr:true */
import ghostPaths from 'ghost/utils/ghost-paths';
describe('ghost-paths', function () {
describe('join', function () {
var join = ghostPaths().url.join;
it('should join two or more paths, normalizing slashes', function () {
var path;
path = join('/one/', '/two/');
expect(path).to.equal('/one/two/');
path = join('/one', '/two/');
expect(path).to.equal('/one/two/');
path = join('/one/', 'two/');
expect(path).to.equal('/one/two/');
path = join('/one/', 'two/', '/three/');
expect(path).to.equal('/one/two/three/');
path = join('/one/', 'two', 'three/');
expect(path).to.equal('/one/two/three/');
});
it('should not change the slash at the beginning', function () {
var path;
path = join('one/');
expect(path).to.equal('one/');
path = join('one/', 'two');
expect(path).to.equal('one/two/');
path = join('/one/', 'two');
expect(path).to.equal('/one/two/');
path = join('one/', 'two', 'three');
expect(path).to.equal('one/two/three/');
path = join('/one/', 'two', 'three');
expect(path).to.equal('/one/two/three/');
});
it('should always return a slash at the end', function () {
var path;
path = join();
expect(path).to.equal('/');
path = join('');
expect(path).to.equal('/');
path = join('one');
expect(path).to.equal('one/');
path = join('one/');
expect(path).to.equal('one/');
path = join('one', 'two');
expect(path).to.equal('one/two/');
path = join('one', 'two/');
expect(path).to.equal('one/two/');
});
});
});