angular .module('webui.services.base64', []) .factory('$base64', [function() { var obj = {}; var a64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/', a256 = { indexOf: function (c) { return c.charCodeAt(0); }, charAt: String.fromCharCode }; function code(s, discard, alpha, beta, w1, w2) { s = String(s); var b = 0, x = '', i, c, bs = 1, sb = 1, length = s.length, tmp; for (i = 0; i < length || (!discard && sb > 1); i += 1) { b *= w1; bs *= w1; if (i < length) { c = alpha.indexOf(s.charAt(i)); if (c <= -1 || c >= w1) { throw new RangeError(); } sb *= w1; b += c; } while (bs >= w2) { bs /= w2; if (sb > 1) { tmp = b; b %= bs; x += beta.charAt((tmp - b) / bs); sb /= w2; } } } return x; } obj.btoa = function (s) { s = code(s, false, a256, a64, 256, 64); return s + '===='.slice((s.length % 4) || 4); }; obj.atob = function (s) { var i; s = String(s).split('='); for (i = s.length - 1; i >= 0; i -= 1) { if (s[i].length % 4 === 1) { throw new RangeError(); } s[i] = code(s[i], true, a64, a256, 64, 256); } return s.join(''); }; return obj; }]);