Skip to content

Commit

Permalink
String#padStart and String#padEnd
Browse files Browse the repository at this point in the history
  • Loading branch information
chrisyip committed Jun 16, 2016
1 parent 67f6716 commit 21c8467
Show file tree
Hide file tree
Showing 4 changed files with 102 additions and 0 deletions.
7 changes: 7 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -440,6 +440,13 @@ You can use `$` and `#` for defining parameters.

Aliases: `String#tpl()` & `String#template()`

#### padStart / padEnd

```js
'foo'.padStart(10, 'bar') // barbarbfoo
'foo'.padEnd(10, 'bar') // foobarbarb
```

#### repeat

[http://people.mozilla.org/\~jorendorff/es6-draft.html#sec-string.prototype.repeat](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-string.prototype.repeat)
Expand Down
10 changes: 10 additions & 0 deletions lib/string.js
Original file line number Diff line number Diff line change
Expand Up @@ -213,3 +213,13 @@ if (isUndefined(proto.repeat)) {
if (isUndefined(String.isString)) {
String.isString = isString
}

var padding = require('./string/padding')

if (isUndefined(proto.padStart)) {
proto.padStart = padding.padStart
}

if (isUndefined(proto.padEnd)) {
proto.padEnd = padding.padEnd
}
53 changes: 53 additions & 0 deletions lib/string/padding.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
var proto = String.prototype
var bind = require('../var/defineFn')(proto)
var repeat = require('./repeat')
var isString = require('../var/isString')
var isUndefined = require('../var/isUndefined')

function getPadString (padString) {
if (isUndefined(padString)) {
return ' '
}

if (!isString(padString)) {
return String(padString)
}

return padString
}

function repeatPadString (str, padString, targetlength) {
var len = targetlength - str.length

if (len <= 0) {
return ''
}

if (len === padString.length) {
return padString
}

if (len > padString.length) {
padString = repeat(padString, Math.ceil(len / padString.length)).slice(0, len)
}

return padString.slice(0, len)
}

module.exports = {
padStart: function padStart (targetlength, padString) {
var ps = getPadString(padString)

var str = this

return ps ? repeatPadString(str, ps, targetlength) + str : str
},

padEnd: function padEnd (targetlength, padString) {
var ps = getPadString(padString)

var str = this

return ps ? str + repeatPadString(str, ps, targetlength) : str
}
}
32 changes: 32 additions & 0 deletions test/string.js
Original file line number Diff line number Diff line change
Expand Up @@ -169,4 +169,36 @@ describe('String', function () {
assert.equal(false, 'foo'.caseCmp('Foo', true))
})
})

describe('#padStart()', function () {
it('should pads string with a given string', function () {
var str = 'foo'

assert.equal(str.padStart(10), ' foo')
assert.equal(str.padStart(10, undefined), ' foo')
assert.equal(str.padStart(10, null), 'nullnulfoo')
assert.equal(str.padStart(10, true), 'truetrufoo')
assert.equal(str.padStart(10, 1), '1111111foo')
assert.equal(str.padStart(10, 'bar'), 'barbarbfoo')
assert.equal(str.padStart(10, {}), '[objectfoo')
assert.equal(str.padStart(10, []), 'foo')
assert.equal(str.padStart(10, /\s/), '/\\s//\\sfoo')
})
})

describe('#padEnd()', function () {
it('should pads string with a given string', function () {
var str = 'foo'

assert.equal(str.padEnd(10), 'foo ')
assert.equal(str.padEnd(10, undefined), 'foo ')
assert.equal(str.padEnd(10, null), 'foonullnul')
assert.equal(str.padEnd(10, true), 'footruetru')
assert.equal(str.padEnd(10, 1), 'foo1111111')
assert.equal(str.padEnd(10, 'bar'), 'foobarbarb')
assert.equal(str.padEnd(10, {}), 'foo[object')
assert.equal(str.padEnd(10, []), 'foo')
assert.equal(str.padEnd(10, /\s/), 'foo/\\s//\\s')
})
})
})

0 comments on commit 21c8467

Please sign in to comment.