| // https://github.com/tc39/proposal-string-pad-start-end |
| var toLength = require('../internals/to-length'); |
| var repeat = require('../internals/string-repeat'); |
| var requireObjectCoercible = require('../internals/require-object-coercible'); |
| |
| var ceil = Math.ceil; |
| |
| // `String.prototype.{ padStart, padEnd }` methods implementation |
| var createMethod = function (IS_END) { |
| return function ($this, maxLength, fillString) { |
| var S = String(requireObjectCoercible($this)); |
| var stringLength = S.length; |
| var fillStr = fillString === undefined ? ' ' : String(fillString); |
| var intMaxLength = toLength(maxLength); |
| var fillLen, stringFiller; |
| if (intMaxLength <= stringLength || fillStr == '') return S; |
| fillLen = intMaxLength - stringLength; |
| stringFiller = repeat.call(fillStr, ceil(fillLen / fillStr.length)); |
| if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen); |
| return IS_END ? S + stringFiller : stringFiller + S; |
| }; |
| }; |
| |
| module.exports = { |
| // `String.prototype.padStart` method |
| // https://tc39.github.io/ecma262/#sec-string.prototype.padstart |
| start: createMethod(false), |
| // `String.prototype.padEnd` method |
| // https://tc39.github.io/ecma262/#sec-string.prototype.padend |
| end: createMethod(true) |
| }; |