123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- /*
- Copyright (c) 2004-2012, The Dojo Foundation All Rights Reserved.
- Available via Academic Free License >= 2.1 OR the modified BSD license.
- see: http://dojotoolkit.org/license for details
- */
- if(!dojo._hasResource["dojox.encoding.base64"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
- dojo._hasResource["dojox.encoding.base64"] = true;
- dojo.provide("dojox.encoding.base64");
- dojo.getObject("encoding.base64", true, dojox);
- (function(){
- var p="=";
- var tab="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
- var dxe=dojox.encoding;
- dxe.base64.encode=function(/* byte[] */ba){
- // summary
- // Encode an array of bytes as a base64-encoded string
- var s=[], l=ba.length;
- var rm=l%3;
- var x=l-rm;
- for (var i=0; i<x;){
- var t=ba[i++]<<16|ba[i++]<<8|ba[i++];
- s.push(tab.charAt((t>>>18)&0x3f));
- s.push(tab.charAt((t>>>12)&0x3f));
- s.push(tab.charAt((t>>>6)&0x3f));
- s.push(tab.charAt(t&0x3f));
- }
- // deal with trailers, based on patch from Peter Wood.
- switch(rm){
- case 2:{
- var t=ba[i++]<<16|ba[i++]<<8;
- s.push(tab.charAt((t>>>18)&0x3f));
- s.push(tab.charAt((t>>>12)&0x3f));
- s.push(tab.charAt((t>>>6)&0x3f));
- s.push(p);
- break;
- }
- case 1:{
- var t=ba[i++]<<16;
- s.push(tab.charAt((t>>>18)&0x3f));
- s.push(tab.charAt((t>>>12)&0x3f));
- s.push(p);
- s.push(p);
- break;
- }
- }
- return s.join(""); // string
- };
- dxe.base64.decode=function(/* string */str){
- // summary
- // Convert a base64-encoded string to an array of bytes
- var s=str.split(""), out=[];
- var l=s.length;
- while(s[--l]==p){ } // strip off trailing padding
- for (var i=0; i<l;){
- var t=tab.indexOf(s[i++])<<18;
- if(i<=l){ t|=tab.indexOf(s[i++])<<12 };
- if(i<=l){ t|=tab.indexOf(s[i++])<<6 };
- if(i<=l){ t|=tab.indexOf(s[i++]) };
- out.push((t>>>16)&0xff);
- out.push((t>>>8)&0xff);
- out.push(t&0xff);
- }
- // strip off any null bytes
- while(out[out.length-1]==0){ out.pop(); }
- return out; // byte[]
- };
- })();
- }
|