// ========================================================================== // Project: SproutCore Costello - Property Observing Library // Copyright: ©2006-2011 Strobe Inc. and contributors. // Portions ©2008-2011 Apple Inc. All rights reserved. // License: Licensed under MIT license (see license.js) // ========================================================================== /** @class Implements support methods useful when working with strings in SproutCore applications. */ SC.String = /** @scope SC.String.prototype */ { // Interpolate string. looks for %@ or %@1; to control the order of params. /** Apply formatting options to the string. This will look for occurrences of %@ in your string and substitute them with the arguments you pass into this method. If you want to control the specific order of replacement, you can add a number after the key as well to indicate which argument you want to insert. Ordered insertions are most useful when building loc strings where values you need to insert may appear in different orders. Examples ----- "Hello %@ %@".fmt('John', 'Doe') => "Hello John Doe" "Hello %@2, %@1".fmt('John', 'Doe') => "Hello Doe, John" @param {Object...} args optional arguments @returns {String} formatted string */ fmt: function(str, formats) { // first, replace any ORDERED replacements. var idx = 0; // the current index for non-numerical replacements return str.replace(/%@([0-9]+)?/g, function(s, argIndex) { argIndex = (argIndex) ? parseInt(argIndex,0) - 1 : idx++ ; s = formats[argIndex]; return ((s === null) ? '(null)' : (s === undefined) ? '' : s).toString(); }) ; }, /** Splits the string into words, separated by spaces. Empty strings are removed from the results. @returns {Array} An array of non-empty strings */ w: function(str) { var ary = [], ary2 = str.split(' '), len = ary2.length, string, idx=0; for (idx=0; idx