displays the number of characters left when editing the topic title

This commit is contained in:
Régis Hanol
2013-03-15 12:56:14 +01:00
parent 2a5cbd8072
commit aef014f439
6 changed files with 54 additions and 57 deletions
@@ -28,7 +28,7 @@ Discourse.Composer = Discourse.Model.extend({
this._super();
var val = Discourse.KeyValueStore.get('composer.showPreview') || 'true';
this.set('showPreview', val === 'true');
return this.set('archetypeId', Discourse.get('site.default_archetype'));
this.set('archetypeId', Discourse.get('site.default_archetype'));
},
creatingTopic: (function() {
@@ -142,10 +142,7 @@ Discourse.Composer = Discourse.Model.extend({
}).property('action', 'post', 'topic', 'topic.title'),
toggleText: (function() {
if (this.get('showPreview')) {
return Em.String.i18n('composer.hide_preview');
}
return Em.String.i18n('composer.show_preview');
return this.get('showPreview') ? Em.String.i18n('composer.hide_preview') : Em.String.i18n('composer.show_preview');
}).property('showPreview'),
hidePreview: (function() {
@@ -159,14 +156,11 @@ Discourse.Composer = Discourse.Model.extend({
if (this.get('loading')) return true;
// Title is required on new posts
if (this.get('creatingTopic')) {
if (this.blank('title')) return true;
if (this.get('title').trim().length < Discourse.SiteSettings.min_topic_title_length) return true;
}
if (this.get('creatingTopic') && this.get('titleLength') < Discourse.SiteSettings.min_topic_title_length) return true;
// Otherwise just reply is required
if (this.blank('reply')) return true;
if (this.get('reply').trim().length < Discourse.SiteSettings.min_post_length) return true;
if (this.get('replyLength') < Discourse.SiteSettings.min_post_length) return true;
return false;
}).property('reply', 'title', 'creatingTopic', 'loading'),
@@ -438,6 +432,7 @@ Discourse.Composer = Discourse.Model.extend({
saveDraft: function() {
if (this.get('disableDrafts')) return;
if (!this.get('reply')) return;
if (this.get('titleLength') < Discourse.SiteSettings.min_topic_title_length) return;
if (this.get('replyLength') < Discourse.SiteSettings.min_post_length) return;
var data = {
@@ -457,28 +452,38 @@ Discourse.Composer = Discourse.Model.extend({
return Discourse.Draft.save(this.get('draftKey'), this.get('draftSequence'), data).then((function() {
composer.set('draftStatus', Em.String.i18n('composer.saved_draft_tip'));
}), (function() {
composer.set('draftStatus', 'drafts offline');
composer.set('draftStatus', Em.String.i18n('composer.drafts_offline'));
}));
},
resetDraftStatus: (function() {
var len = Discourse.SiteSettings.min_post_length,
replyLength = this.get('replyLength');
if (replyLength === 0) {
this.set('draftStatus', Em.String.i18n('composer.min_length.at_least', { n: len }));
} else if (replyLength < len) {
this.set('draftStatus', Em.String.i18n('composer.min_length.more', { n: len - replyLength }));
} else {
this.set('draftStatus', null);
// 'title' is focused
if ($('#reply-title').is(':focus')) {
var titleDiff = Discourse.SiteSettings.min_topic_title_length - this.get('titleLength');
if (titleDiff > 0) {
return this.set('draftStatus', Em.String.i18n('composer.min_length.need_more_for_title', { n: titleDiff }));
}
// 'reply' is focused
} else if ($('#wmd-input').is(':focus')) {
var replyDiff = Discourse.SiteSettings.min_post_length - this.get('replyLength');
if (replyDiff > 0) {
return this.set('draftStatus', Em.String.i18n('composer.min_length.need_more_for_reply', { n: replyDiff }));
}
}
// hide the counters if the currently focused text field is OK
this.set('draftStatus', null);
}).observes('reply', 'title'),
blank: function(prop) {
var p = this.get(prop);
return !(p && p.length > 0);
},
/**
Computes the length of the title minus non-significant whitespaces
@property titleLength
**/
titleLength: function() {
var title = this.get('title') || "";
return title.replace(/\s+/img, " ").trim().length;
}.property('title'),
/**
Computes the length of the reply minus the quote(s) and non-significant whitespaces
@@ -486,8 +491,7 @@ Discourse.Composer = Discourse.Model.extend({
@property replyLength
**/
replyLength: function() {
var reply = this.get('reply');
if(!reply) reply = "";
var reply = this.get('reply') || "";
while (Discourse.BBCode.QUOTE_REGEXP.test(reply)) { reply = reply.replace(Discourse.BBCode.QUOTE_REGEXP, ""); }
return reply.replace(/\s+/img, " ").trim().length;
}.property('reply')
@@ -547,5 +551,3 @@ Discourse.Composer.reopenClass({
// Draft key
REPLY_AS_NEW_TOPIC_KEY: REPLY_AS_NEW_TOPIC_KEY
});