From 71c99913f661dec16170f7b4166d9009c331e62a Mon Sep 17 00:00:00 2001 From: ericterpstra Date: Sun, 15 Sep 2013 21:22:09 -0500 Subject: [PATCH] Enabled post setting to change published date closes #402 --- core/client/tpl/preview.hbs | 6 +-- core/client/views/post-settings.js | 78 +++++++++++++++++++++++++++--- core/server/views/editor.hbs | 8 +-- 3 files changed, 79 insertions(+), 13 deletions(-) diff --git a/core/client/tpl/preview.hbs b/core/client/tpl/preview.hbs index 63bb37db1d..df332f7092 100644 --- a/core/client/tpl/preview.hbs +++ b/core/client/tpl/preview.hbs @@ -18,14 +18,14 @@ - +
  • Delete
  • diff --git a/core/client/views/post-settings.js b/core/client/views/post-settings.js index 6a49fb583d..5f3d3a51ad 100644 --- a/core/client/views/post-settings.js +++ b/core/client/views/post-settings.js @@ -1,6 +1,6 @@ // The Post Settings Menu available in the content preview screen, as well as the post editor. -/*global window, document, $, _, Backbone, Ghost */ +/*global window, document, $, _, Backbone, Ghost, moment */ (function () { "use strict"; @@ -10,17 +10,30 @@ events: { 'blur .post-setting-slug' : 'editSlug', 'click .post-setting-slug' : 'selectSlug', + 'blur .post-setting-date' : 'editDate', 'click .delete' : 'deletePost' }, - render: function () { - var slug = this.model ? this.model.get('slug') : ''; - //var pubDate = this.model.get('published_at'); + initialize: function () { + if (this.model) { + this.listenTo(this.model, 'change:status', this.render); + } + }, - //pubDate = moment(pubDate).format('DD MMM YY'); + render: function () { + var slug = this.model ? this.model.get('slug') : '', + pubDate = this.model ? this.model.get('published_at') : 'Not Published', + $pubDateEl = $('.post-setting-date'); $('.post-setting-slug').val(slug); - //$('.post-setting-date').val(pubDate); + + // Insert the published date, and make it editable if it exists. + if (this.model && this.model.get('published_at')) { + pubDate = moment(pubDate).format('DD MMM YY'); + $pubDateEl.removeAttr('disabled'); + } + + $pubDateEl.val(pubDate); }, selectSlug: function (e) { @@ -57,6 +70,59 @@ }); }, + editDate: function (e) { + e.preventDefault(); + var self = this, + momentPubDate, + errMessage = '', + pubDate = self.model.get('published_at'), + pubDateEl = e.currentTarget, + newPubDate = pubDateEl.value; + + // Ensure the published date has changed + if (newPubDate.length === 0 || pubDate === newPubDate) { + pubDateEl.value = pubDate === undefined ? 'Not Published' : moment(pubDate).format("DD MMM YY"); + return; + } + + // Validate new Published date + momentPubDate = moment(newPubDate, ["DD MMM YY", "DD MMM YYYY", "DD/MM/YY", "DD/MM/YYYY", "DD-MM-YY", "DD-MM-YYYY"]); + if (!momentPubDate.isValid()) { + errMessage = 'Published Date must be a valid date with format: DD MMM YY (e.g. 6 Dec 14)'; + } + + if (momentPubDate.diff(new Date(), 'h') > 0) { + errMessage = 'Published Date cannot currently be in the future.'; + } + + if (errMessage.length) { + Ghost.notifications.addItem({ + type: 'error', + message: errMessage, + status: 'passive' + }); + pubDateEl.value = moment(pubDate).format("DD MMM YY"); + return; + } + + // Save new 'Published' date + this.model.save({ + published_at: momentPubDate.toDate() + }, { + success : function (model, response, options) { + pubDateEl.value = moment(model.get('published_at')).format("DD MMM YY"); + }, + error : function (model, xhr) { + Ghost.notifications.addItem({ + type: 'error', + message: Ghost.Views.Utils.getRequestErrorMessage(xhr), + status: 'passive' + }); + } + }); + + }, + deletePost: function (e) { e.preventDefault(); var self = this; diff --git a/core/server/views/editor.hbs b/core/server/views/editor.hbs index 5f5197aeb8..1c428413f3 100644 --- a/core/server/views/editor.hbs +++ b/core/server/views/editor.hbs @@ -43,7 +43,7 @@
    -