diff --git a/core/client/controllers/post-settings-menu.js b/core/client/controllers/post-settings-menu.js
index 65b48f71e9..aaf59ae048 100644
--- a/core/client/controllers/post-settings-menu.js
+++ b/core/client/controllers/post-settings-menu.js
@@ -13,24 +13,6 @@ var PostSettingsMenuController = Ember.ObjectController.extend({
this.addObserver('title', this, 'titleObserver');
}
},
- isStaticPage: function (key, val) {
- var self = this;
-
- if (arguments.length > 1) {
- this.set('page', val);
-
- return this.get('model').save().then(function () {
- self.notifications.showSuccess('Successfully converted to ' + (val ? 'static page' : 'post'));
-
- return self.get('page');
- }).catch(function (errors) {
- self.notifications.showErrors(errors);
- return Ember.RSVP.reject(errors);
- });
- }
-
- return this.get('page');
- }.property('page'),
/**
* The placeholder is the published date of the post,
* or the current date if the pubdate has not been set.
@@ -47,14 +29,15 @@ var PostSettingsMenuController = Ember.ObjectController.extend({
slugValue: boundOneWay('slug'),
//Lazy load the slug generator for slugPlaceholder
slugGenerator: Ember.computed(function () {
- return SlugGenerator.create({ghostPaths: this.get('ghostPaths')});
+ return SlugGenerator.create({
+ ghostPaths: this.get('ghostPaths')
+ });
}),
//Requests slug from title
generateSlugPlaceholder: function () {
var self = this,
- slugGenerator = this.get('slugGenerator'),
title = this.get('title');
- slugGenerator.generateSlug(title).then(function (slug) {
+ this.get('slugGenerator').generateSlug(title).then(function (slug) {
self.set('slugPlaceholder', slug);
});
},
@@ -80,7 +63,34 @@ var PostSettingsMenuController = Ember.ObjectController.extend({
return this.get('title');
}.property(),
+ showErrors: function (errors) {
+ errors = Ember.isArray(errors) ? errors : [errors];
+ this.notifications.closePassive();
+ this.notifications.showErrors(errors);
+ },
+ showSuccess: function (message) {
+ this.notifications.closePassive();
+ this.notifications.showSuccess(message);
+ },
actions: {
+ togglePage: function () {
+ var value = this.toggleProperty('page'),
+ self = this;
+
+ // If this is a new post. Don't save the model. Defer the save
+ // to the user pressing the save button
+ if (this.get('isNew')) {
+ return;
+ }
+
+ return this.get('model').save().then(function () {
+ self.showSuccess('Successfully converted to ' + (value ? 'static page' : 'post'));
+ return value;
+ }).catch(function (errors) {
+ self.showErrors(errors);
+ self.get('model').rollback();
+ });
+ },
/**
* triggered by user manually changing slug
*/
@@ -135,13 +145,13 @@ var PostSettingsMenuController = Ember.ObjectController.extend({
}
// Save post model properties excluding any changes to the post body
- return self.get('model').save().then(function () {
- self.notifications.showSuccess('Permalink successfully changed to ' +
- self.get('slug') + '.');
- }).catch(function (errors) {
- self.notifications.showErrors(errors);
- return Ember.RSVP.reject(errors);
- });
+ return self.get('model').save();
+ }).then(function () {
+ self.showSuccess('Permalink successfully changed to ' +
+ self.get('slug') + '.');
+ }).catch(function (errors) {
+ self.showErrors(errors);
+ self.get('model').rollback();
});
},
@@ -164,37 +174,41 @@ var PostSettingsMenuController = Ember.ObjectController.extend({
return;
}
- // Do nothing if the user didn't actually change the date
- if (publishedAt && publishedAt.isSame(newPublishedAt)) {
- return;
- }
-
// Validate new Published date
if (!newPublishedAt.isValid()) {
errMessage = 'Published Date must be a valid date with format: ' +
'DD MMM YY @ HH:mm (e.g. 6 Dec 14 @ 15:00)';
}
-
- //Can't publish in the future yet
if (newPublishedAt.diff(new Date(), 'h') > 0) {
errMessage = 'Published Date cannot currently be in the future.';
}
//If errors, notify and exit.
if (errMessage) {
- this.notifications.showError(errMessage);
+ this.showErrors(errMessage);
+ return;
+ }
+
+ // Do nothing if the user didn't actually change the date
+ if (publishedAt && publishedAt.isSame(newPublishedAt)) {
return;
}
//Validation complete
this.set('published_at', newPublishedAt);
+ // If this is a new post. Don't save the model. Defer the save
+ // to the user pressing the save button
+ if (this.get('isNew')) {
+ return;
+ }
+
this.get('model').save().then(function () {
- self.notifications.showSuccess('Publish date successfully changed to ' +
+ self.showSuccess('Publish date successfully changed to ' +
formatDate(self.get('published_at')) + '.');
}).catch(function (errors) {
- self.notifications.showErrors(errors);
- return Ember.RSVP.reject(errors);
+ self.showErrors(errors);
+ self.get('model').rollback();
});
}
}
diff --git a/core/client/templates/post-settings-menu.hbs b/core/client/templates/post-settings-menu.hbs
index 9ef5749d1f..b7b1b76d9b 100644
--- a/core/client/templates/post-settings-menu.hbs
+++ b/core/client/templates/post-settings-menu.hbs
@@ -22,8 +22,8 @@