dist/undermore.js
function(str) {

        // allow browser implementation if it exists
        // https://developer.mozilla.org/en-US/docs/Web/API/window.btoa
        if (typeof atob!=='undefined') {
            // utf8 decode after the fact to make sure we convert > 0xFF to ascii
            return _.utf8_decode(atob(str));
        }
        // allow node.js Buffer implementation if it exists
        if (Buffer) {
            return new Buffer(str, 'base64').toString('binary');
        }
        // now roll our own
        // decoder
        // [https://gist.github.com/1020396] by [https://github.com/atk]
        str = str.replace(/=+$/, '');
        for (
            // initialize result and counters
            var bc = 0, bs, buffer, idx = 0, output = '';
            // get next character
            buffer = str.charAt(idx++);
            // character found in table? initialize bit storage and add its ascii value;
            ~ buffer && (bs = bc % 4 ? bs * 64 + buffer : buffer,
                // and if not first of each 4 characters,
                // convert the first 8 bits to one ascii character
                bc++ % 4) ? output += String.fromCharCode(255 & bs >> (-2 * bc & 6)) : 0
        ) {
            // try to find character in table (0-63, not found => -1)
            buffer = chars.indexOf(buffer);
        }
        return output;
    }
function(str) {

        // allow browser implementation if it exists
        // https://developer.mozilla.org/en-US/docs/Web/API/window.btoa
        if (typeof atob!=='undefined') {
            // utf8 decode after the fact to make sure we convert > 0xFF to ascii
            return _.utf8_decode(atob(str));
        }
        // allow node.js Buffer implementation if it exists
        if (Buffer) {
            return new Buffer(str, 'base64').toString('binary');
        }
        // now roll our own
        // decoder
        // [https://gist.github.com/1020396] by [https://github.com/atk]
        str = str.replace(/=+$/, '');
        for (
            // initialize result and counters
            var bc = 0, bs, buffer, idx = 0, output = '';
            // get next character
            buffer = str.charAt(idx++);
            // character found in table? initialize bit storage and add its ascii value;
            ~ buffer && (bs = bc % 4 ? bs * 64 + buffer : buffer,
                // and if not first of each 4 characters,
                // convert the first 8 bits to one ascii character
                bc++ % 4) ? output += String.fromCharCode(255 & bs >> (-2 * bc & 6)) : 0
        ) {
            // try to find character in table (0-63, not found => -1)
            buffer = chars.indexOf(buffer);
        }
        return output;
    }
function ( str ) { // allow browser implementation if it exists // https://developer.mozilla.org/en-US/docs/Web/API/window.btoa if ( typeof atob !== 'undefined' ) { // utf8 decode after the fact to make sure we convert > 0xFF to ascii return _ . utf8_decode ( atob ( str ) ) ; } // allow node.js Buffer implementation if it exists if ( Buffer ) { return new Buffer ( str , 'base64' ) . toString ( 'binary' ) ; } // now roll our own // decoder // [https://gist.github.com/1020396] by [https://github.com/atk] str = str . replace ( / =+$ / , '' ) ; for ( // initialize result and counters var bc = 0 , bs , buffer , idx = 0 , output = '' ; // get next character buffer = str . charAt ( idx ++ ) ; // character found in table? initialize bit storage and add its ascii value; ~ buffer && ( bs = bc % 4 ? bs * 64 + buffer : buffer , // and if not first of each 4 characters, // convert the first 8 bits to one ascii character bc ++ % 4 ) ? output += String . fromCharCode ( 255 & bs >> ( - 2 * bc & 6 ) ) : 0 ) { // try to find character in table (0-63, not found => -1) buffer = chars . indexOf ( buffer ) ; } return output ; }
base64_decode decode a string. This is not a strict polyfill for window.atob
because it handles unicode characters

@function module:undermore.base64_decode
@link https://github.com/davidchambers/Base64.js
@param {string} str The string to decode
@return {string}
@example _.base64_decode('4pyI') => '✈'
base64_decode decode a string . This is not a strict polyfill for window . atob because it handles unicode characters