@bigfishtv/cockpit
Version:
50 lines (40 loc) • 1.51 kB
JavaScript
/*
* Title Caps
*
* Ported to JavaScript By John Resig - http://ejohn.org/ - 21 May 2008
* Original by John Gruber - http://daringfireball.net/ - 10 May 2008
* License: http://www.opensource.org/licenses/mit-license.php
*/
var small = '(a|an|and|as|at|but|by|en|for|if|in|of|on|or|the|to|v[.]?|via|vs[.]?)';
var punct = '([!"#$%&\'()*+,./:;<=>?@[\\\\\\]^_`{|}~-]*)';
/**
* Takes string and returns a title-cased version of it, e.g. "cats and dogs" -> "Cats and Dogs"
* @param {String} title
* @return {string}
*/
export default function titleCase(title) {
var parts = [],
split = /[:.;?!] |(?: |^)["Ò]/g,
index = 0;
title = title.toLowerCase();
while (true) {
var m = split.exec(title);
parts.push(title.substring(index, m ? m.index : title.length).replace(/\b([A-Za-z][a-z.'Õ]*)\b/g, function (all) {
return (/[A-Za-z]\.[A-Za-z]/.test(all) ? all : upper(all)
);
}).replace(RegExp('\\b' + small + '\\b', 'ig'), lower).replace(RegExp('^' + punct + small + '\\b', 'ig'), function (all, punct, word) {
return punct + upper(word);
}).replace(RegExp('\\b' + small + punct + '$', 'ig'), upper));
index = split.lastIndex;
if (m) parts.push(m[0]);else break;
}
return parts.join('').replace(/ V(s?)\. /gi, ' v$1. ').replace(/(['Õ])S\b/gi, '$1s').replace(/\b(AT&T|Q&A)\b/gi, function (all) {
return all.toUpperCase();
});
}
function lower(word) {
return word.toLowerCase();
}
function upper(word) {
return word.substr(0, 1).toUpperCase() + word.substr(1);
}