@@ -86,9 +86,9 @@ function base64Encode(data) {
8686 // * returns 1: 'S2V2aW4gdmFuIFpvbm5ldmVsZA=='
8787 // mozilla has this native
8888 // - but breaks in 2.0.0.12!
89- //if (typeof this.window['atob'] == 'function') {
89+ // if (typeof this.window['atob'] == 'function') {
9090 // return atob(data);
91- //}
91+ // }
9292 let b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=" ;
9393 let o1 ,
9494 o2 ,
@@ -141,7 +141,68 @@ function base64Encode(data) {
141141 return enc ;
142142}
143143
144+ function base64Decode ( data ) {
145+ // http://kevin.vanzonneveld.net
146+ // + original by: Tyler Akins (http://rumkin.com)
147+ // + improved by: Thunder.m
148+ // + input by: Aman Gupta
149+ // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
150+ // + bugfixed by: Onno Marsman
151+ // + bugfixed by: Pellentesque Malesuada
152+ // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
153+ // + input by: Brett Zamir (http://brett-zamir.me)
154+ // + bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
155+ // * example 1: base64_decode('S2V2aW4gdmFuIFpvbm5ldmVsZA==');
156+ // * returns 1: 'Kevin van Zonneveld'
157+ // mozilla has this native
158+ // - but breaks in 2.0.0.12!
159+ // if (typeof this.window['atob'] == 'function') {
160+ // return atob(data);
161+ // }
162+ let b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=" ;
163+ let o1 , o2 , o3 , h1 , h2 , h3 , h4 , bits , i = 0 ,
164+ ac = 0 ,
165+ dec = "" ,
166+ tmp_arr = [ ] ;
167+
168+ if ( ! data ) {
169+ return data ;
170+ }
171+
172+ data += "" ;
173+
174+ do { // unpack four hexets into three octets using index points in b64
175+ h1 = b64 . indexOf ( data . charAt ( i ++ ) ) ;
176+ h2 = b64 . indexOf ( data . charAt ( i ++ ) ) ;
177+ h3 = b64 . indexOf ( data . charAt ( i ++ ) ) ;
178+ h4 = b64 . indexOf ( data . charAt ( i ++ ) ) ;
179+
180+ bits = h1 << 18 | h2 << 12 | h3 << 6 | h4 ;
181+
182+ o1 = bits >> 16 & 0xff ;
183+ o2 = bits >> 8 & 0xff ;
184+ o3 = bits & 0xff ;
185+
186+ if ( h3 === 64 ) {
187+ tmp_arr [ ac ++ ] = String . fromCharCode ( o1 ) ;
188+ } else if ( h4 === 64 ) {
189+ tmp_arr [ ac ++ ] = String . fromCharCode ( o1 , o2 ) ;
190+ } else {
191+ tmp_arr [ ac ++ ] = String . fromCharCode ( o1 , o2 , o3 ) ;
192+ }
193+ } while ( i < data . length ) ;
194+
195+ dec = tmp_arr . join ( "" ) ;
196+
197+ return dec ;
198+ }
199+
144200export function urlSafeBase64Encode ( v ) {
145201 v = base64Encode ( v ) ;
146202 return v . replace ( / \/ / g, "_" ) . replace ( / \+ / g, "-" ) ;
147203}
204+
205+ export function urlSafeBase64Decode ( v ) {
206+ v = v . replace ( / _ / g, "/" ) . replace ( / - / g, "+" ) ;
207+ return base64Decode ( v ) ;
208+ }
0 commit comments