diff --git a/app/assets/javascripts/discourse/components/formatter.js b/app/assets/javascripts/discourse/components/formatter.js index dbb2b5f58..5e8bd0a95 100644 --- a/app/assets/javascripts/discourse/components/formatter.js +++ b/app/assets/javascripts/discourse/components/formatter.js @@ -4,7 +4,26 @@ Discourse.Formatter = (function(){ var updateRelativeAge, autoUpdatingRelativeAge, relativeAge, relativeAgeTiny, relativeAgeMedium, relativeAgeMediumSpan, longDate, toTitleCase, - shortDate; + shortDate, breakUp; + + breakUp = function(string, maxLength){ + if(string.length <= maxLength) { + return string; + } + + var firstPart = string.substr(0, maxLength); + + var betterSplit = firstPart.substr(1).search(/[A-Z_]/); + if (betterSplit >= 0) { + var offset = 1; + if(string[betterSplit+1] === "_") { + offset = 2; + } + return string.substr(0, betterSplit + offset) + " " + string.substring(betterSplit + offset); + } else { + return firstPart + " " + string.substr(maxLength); + } + }; shortDate = function(date){ return moment(date).shortDate(); @@ -189,6 +208,7 @@ Discourse.Formatter = (function(){ autoUpdatingRelativeAge: autoUpdatingRelativeAge, updateRelativeAge: updateRelativeAge, toTitleCase: toTitleCase, - shortDate: shortDate + shortDate: shortDate, + breakUp: breakUp }; })(); diff --git a/app/assets/javascripts/discourse/helpers/application_helpers.js b/app/assets/javascripts/discourse/helpers/application_helpers.js index cc7eac9f8..d9d8e4e3f 100644 --- a/app/assets/javascripts/discourse/helpers/application_helpers.js +++ b/app/assets/javascripts/discourse/helpers/application_helpers.js @@ -9,17 +9,7 @@ Handlebars.registerHelper('breakUp', function(property, options) { prop = Ember.Handlebars.get(this, property, options); if (!prop) return ""; - tokens = prop.match(new RegExp(".{1,14}", 'g')); - if (tokens.length === 1) return prop; - - result = ""; - _.each(tokens,function(token,index) { - result += token; - if (token.indexOf(' ') === -1 && (index < tokens.length - 1)) { - result += "- "; - } - }); - return result; + return Discourse.Formatter.breakUp(prop, 13); }); /** @@ -320,4 +310,4 @@ Handlebars.registerHelper('faqLink', function(property, options) { (Discourse.SiteSettings.faq_url.length > 0 ? Discourse.SiteSettings.faq_url : Discourse.getURL('/faq')) + "'>" + Em.String.i18n('faq') + "</a>" ); -}); \ No newline at end of file +}); diff --git a/test/javascripts/components/formatter_test.js b/test/javascripts/components/formatter_test.js index 49b9132c4..e456a1185 100644 --- a/test/javascripts/components/formatter_test.js +++ b/test/javascripts/components/formatter_test.js @@ -122,3 +122,14 @@ test("updateRelativeAge", function(){ equal($elem.html(), "2 mins ago"); }); + +test("breakUp", function(){ + + var b = function(s){ return Discourse.Formatter.breakUp(s,5); }; + + equal(b("hello"), "hello"); + equal(b("helloworld"), "hello world"); + equal(b("HeMans"), "He Mans"); + equal(b("he_man"), "he_ man"); + +});