e44a7e37b6
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@151 b3834d28-1941-0410-a4f8-b48e95affb8f
66 lines
1.7 KiB
JavaScript
66 lines
1.7 KiB
JavaScript
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");
|
|
|
|
(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[]
|
|
};
|
|
})();
|
|
|
|
}
|