/**
* string.js - string utility extensions.
*
* @license Copyright 2011 The xhrdavclient library authors.
* All rights reserved.
*/
goog.provide('xhrdav.utils.string');
goog.require('goog.array');
goog.require('goog.functions');
/**
* Letter type enum(use camelize param etc.)
*
* @enum {number}
*/
xhrdav.utils.string.LetterType = {
LOWER: 0,
UPPER: 1
};
/**
* Capitalize string
*
* Example:
* "foo" # => "Foo", "fOO" # => "Foo"
*
* @param {string} text Source string.
* @return {string} Capitalized string.
*/
xhrdav.utils.string.capitalize = function(text) {
return (text.charAt(0).toUpperCase() + text.slice(1).toLowerCase());
};
/**
* Dasherize stirng
*
* Example:
* "puni_puni" # => "puni-puni"
* @param {string} text Source string.
* @return {string} converted string.
*/
xhrdav.utils.string.dasherize = function(text) {
return text.split('_').join('-');
};
/**
* Camelize string
*
* Example:
* "foo_bar" #=> "FooBar"
* "foo" #=> "Foo"
* options firstLetter: xhrdav.utils.string.LetterType.LOWER
* "foo_bar" #=> "fooBar"
* "Foo" #=> "foo"
* options with_dasherize: true
* "content_type" #=> "Content-Type"
* "location" #=> "Location"
* "Content-Type" #=> "Content-Type"
*
* @param {string} text Source string.
* @param {{firstLetter: xhrdav.utils.string.LetterType, with_dasherize: boolean}} options
* ext options
* @return {string} Camelized string.
* @see xhrdav.utils.string.LetterType
*/
xhrdav.utils.string.camelize = function(text, options) {
var ns = xhrdav.utils.string,
lType = ns.LetterType;
if (!goog.isDef(options)) options = {};
if (!goog.isDefAndNotNull(options.firstLetter) ||
options.firstLetter > lType.UPPER) {
options.firstLetter = lType.UPPER;
}
var str = (!!options.with_dasherize) ? text.split('-').join('_') : text;
var buf;
if (options.firstLetter == lType.LOWER) {
buf = goog.array.map(str.split('_'), function(v, i) {
return ((i == 0) ? v.toLowerCase() : ns.capitalize(v));
});
} else if (options.firstLetter == lType.UPPER) {
buf = goog.array.map(str.split('_'), function(v, i) {
return ns.capitalize(v);
});
}
str = (!!options.with_dasherize) ? buf.join('-') : buf.join('');
str = goog.array.reduce(str.split('/'), function(result, v, i) {
return (result += (i == 0) ? v : '.' + ns.capitalize(v));
}, '');
return str;
};
/* Entry point for closure compiler */
goog.exportSymbol('xhrdav.utils.string.LetterType',
xhrdav.utils.string.LetterType);
goog.exportSymbol('xhrdav.utils.string.capitalize',
xhrdav.utils.string.capitalize);
goog.exportSymbol('xhrdav.utils.string.dasherize',
xhrdav.utils.string.dasherize);
goog.exportSymbol('xhrdav.utils.string.camelize',
xhrdav.utils.string.camelize);