Plato on Github
Report Home
src/compatibility/base64/btoa.js
Maintainability
71.95
Lines of code
70
Difficulty
25.15
Estimated Errors
0.35
Function weight
By Complexity
By SLOC
/** * @file btoa polyfill * @since 0.2.9 */ /*#ifndef(UMD)*/ "use strict"; /*global _GPF_12_BITS*/ // 12 /*global _GPF_18_BITS*/ // 18 /*global _GPF_1_BYTE*/ // 1 /*global _GPF_2_BYTES*/ // 2 /*global _GPF_6_BITS*/ // 6 /*global _GPF_6_BITS_MASK*/ // 63 /*global _GPF_START*/ // 0 /*global _gpfBase64*/ // Base64 encoding string /*global _gpfMaxUnsignedByte*/ // 255 /*exported _gpfBtoa*/ // btoa polyfill /*#endif*/ var _GPF_BTOA_MAX_PADDING = 3, _GPF_BTOA_INDEX_INCREMENT = 3; function _gpfBtoaCheck (stringToEncode, index) { var value = stringToEncode.charCodeAt(index); if (value > _gpfMaxUnsignedByte) { throw new TypeError("The string to be encoded contains characters outside of the Latin1 range."); } return value; } function _gpfBtoaRead (input, from) { var index = from, a, b, c; a = _gpfBtoaCheck(input, index++); b = _gpfBtoaCheck(input, index++); c = _gpfBtoaCheck(input, index++); return a << _GPF_2_BYTES | b << _GPF_1_BYTE | c; } function _gpfBtoaEncodeChar (bitmap, shift, mask) { return _gpfBase64.charAt(bitmap >> shift & mask); } function _gpfBtoaEncode (bitmap) { return _gpfBtoaEncodeChar(bitmap, _GPF_18_BITS, _GPF_6_BITS_MASK) + _gpfBtoaEncodeChar(bitmap, _GPF_12_BITS, _GPF_6_BITS_MASK) + _gpfBtoaEncodeChar(bitmap, _GPF_6_BITS, _GPF_6_BITS_MASK) + _gpfBtoaEncodeChar(bitmap, _GPF_START, _GPF_6_BITS_MASK); } function _gpfBtoa (stringToEncode) { var index = 0, result = "", rest = stringToEncode.length % _GPF_BTOA_MAX_PADDING; // To determine the final padding for (; index < stringToEncode.length; index += _GPF_BTOA_INDEX_INCREMENT) { result += _gpfBtoaEncode(_gpfBtoaRead(stringToEncode, index)); } // If there's need of padding, replace the last 'A's with equal signs if (rest) { return result.slice(_GPF_START, rest - _GPF_BTOA_MAX_PADDING) + "===".substring(rest); } return result; } /*#ifndef(UMD)*/ gpf.internals._gpfBtoa = _gpfBtoa; /*#endif*/