source: Dev/trunk/src/client/dojox/encoding/base64.js @ 532

Last change on this file since 532 was 483, checked in by hendrikvanantwerpen, 11 years ago

Added Dojo 1.9.3 release.

File size: 1.6 KB
Line 
1define(["dojo/_base/lang"], function(lang) {
2       
3        var base64 = lang.getObject("dojox.encoding.base64", true);
4
5        var p="=";
6        var tab="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
7
8        base64.encode=function(/* byte[] */ba){
9                // summary:
10                //              Encode an array of bytes as a base64-encoded string
11                var s=[], l=ba.length;
12                var rm=l%3;
13                var x=l-rm;
14                for (var i=0; i<x;){
15                        var t=ba[i++]<<16|ba[i++]<<8|ba[i++];
16                        s.push(tab.charAt((t>>>18)&0x3f));
17                        s.push(tab.charAt((t>>>12)&0x3f));
18                        s.push(tab.charAt((t>>>6)&0x3f));
19                        s.push(tab.charAt(t&0x3f));
20                }
21                //      deal with trailers, based on patch from Peter Wood.
22                switch(rm){
23                        case 2:{
24                                var t=ba[i++]<<16|ba[i++]<<8;
25                                s.push(tab.charAt((t>>>18)&0x3f));
26                                s.push(tab.charAt((t>>>12)&0x3f));
27                                s.push(tab.charAt((t>>>6)&0x3f));
28                                s.push(p);
29                                break;
30                        }
31                        case 1:{
32                                var t=ba[i++]<<16;
33                                s.push(tab.charAt((t>>>18)&0x3f));
34                                s.push(tab.charAt((t>>>12)&0x3f));
35                                s.push(p);
36                                s.push(p);
37                                break;
38                        }
39                }
40                return s.join("");      //      string
41        };
42
43        base64.decode=function(/* string */str){
44                // summary:
45                //              Convert a base64-encoded string to an array of bytes
46                var s=str.split(""), out=[];
47                var l=s.length;
48                while(s[--l]==p){ }     //      strip off trailing padding
49                for (var i=0; i<l;){
50                        var t=tab.indexOf(s[i++])<<18;
51                        if(i<=l){ t|=tab.indexOf(s[i++])<<12 };
52                        if(i<=l){ t|=tab.indexOf(s[i++])<<6 };
53                        if(i<=l){ t|=tab.indexOf(s[i++]) };
54                        out.push((t>>>16)&0xff);
55                        out.push((t>>>8)&0xff);
56                        out.push(t&0xff);
57                }
58                //      strip off any null bytes
59                while(out[out.length-1]==0){ out.pop(); }
60                return out;     //      byte[]
61        };
62       
63        return base64;
64});
Note: See TracBrowser for help on using the repository browser.