| @@ -1,4 +1,373 @@ | ||
| 1 | +/* | |
| 2 | + * [hi-base64]{@link https://github.com/emn178/hi-base64} | |
| 3 | + * | |
| 4 | + * @version 0.2.1 | |
| 5 | + * @author Chen, Yi-Cyuan [[email protected]] | |
| 6 | + * @copyright Chen, Yi-Cyuan 2014-2017 | |
| 7 | + * @license MIT | |
| 8 | + */ | |
| 9 | +/*jslint bitwise: true */ | |
| 10 | +/*Modified by Pagelayer*/ | |
| 11 | +(function () { | |
| 12 | + 'use strict'; | |
| 1 | 13 | |
| 14 | + var root = typeof window === 'object' ? window : {}; | |
| 15 | + var NODE_JS = false; | |
| 16 | + if (NODE_JS) { | |
| 17 | + root = global; | |
| 18 | + } | |
| 19 | + var COMMON_JS = !root.HI_BASE64_NO_COMMON_JS && typeof module === 'object' && module.exports; | |
| 20 | + var AMD = typeof define === 'function' && define.amd; | |
| 21 | + var BASE64_ENCODE_CHAR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split(''); | |
| 22 | + var BASE64_DECODE_CHAR = { | |
| 23 | + 'A': 0, 'B': 1, 'C': 2, 'D': 3, 'E': 4, 'F': 5, 'G': 6, 'H': 7, 'I': 8, | |
| 24 | + 'J': 9, 'K': 10, 'L': 11, 'M': 12, 'N': 13, 'O': 14, 'P': 15, 'Q': 16, | |
| 25 | + 'R': 17, 'S': 18, 'T': 19, 'U': 20, 'V': 21, 'W': 22, 'X': 23, 'Y': 24, | |
| 26 | + 'Z': 25, 'a': 26, 'b': 27, 'c': 28, 'd': 29, 'e': 30, 'f': 31, 'g': 32, | |
| 27 | + 'h': 33, 'i': 34, 'j': 35, 'k': 36, 'l': 37, 'm': 38, 'n': 39, 'o': 40, | |
| 28 | + 'p': 41, 'q': 42, 'r': 43, 's': 44, 't': 45, 'u': 46, 'v': 47, 'w': 48, | |
| 29 | + 'x': 49, 'y': 50, 'z': 51, '0': 52, '1': 53, '2': 54, '3': 55, '4': 56, | |
| 30 | + '5': 57, '6': 58, '7': 59, '8': 60, '9': 61, '+': 62, '/': 63, '-': 62, | |
| 31 | + '_': 63 | |
| 32 | + }; | |
| 2 | 33 | |
| 3 | -// Create Base64 Object | |
| 4 | -var pagelayer_Base64={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encode:function(e){var t="";var n,r,i,s,o,u,a;var f=0;e=this._utf8_encode(e);while(f<e.length){n=e.charCodeAt(f++);r=e.charCodeAt(f++);i=e.charCodeAt(f++);s=n>>2;o=(n&3)<<4|r>>4;u=(r&15)<<2|i>>6;a=i&63;if(isNaN(r)){u=a=64}else if(isNaN(i)){a=64}t=t+this._keyStr.charAt(s)+this._keyStr.charAt(o)+this._keyStr.charAt(u)+this._keyStr.charAt(a)}return t},decode:function(e){var t="";var n,r,i;var s,o,u,a;var f=0;e=e.replace(/[^A-Za-z0-9+/=]/g,"");while(f<e.length){s=this._keyStr.indexOf(e.charAt(f++));o=this._keyStr.indexOf(e.charAt(f++));u=this._keyStr.indexOf(e.charAt(f++));a=this._keyStr.indexOf(e.charAt(f++));n=s<<2|o>>4;r=(o&15)<<4|u>>2;i=(u&3)<<6|a;t=t+String.fromCharCode(n);if(u!=64){t=t+String.fromCharCode(r)}if(a!=64){t=t+String.fromCharCode(i)}}t=this._utf8_decode(t);return t},_utf8_encode:function(e){e=e.replace(/rn/g,"n");var t="";for(var n=0;n<e.length;n++){var r=e.charCodeAt(n);if(r<128){t+=String.fromCharCode(r)}else if(r>127&&r<2048){t+=String.fromCharCode(r>>6|192);t+=String.fromCharCode(r&63|128)}else{t+=String.fromCharCode(r>>12|224);t+=String.fromCharCode(r>>6&63|128);t+=String.fromCharCode(r&63|128)}}return t},_utf8_decode:function(e){var t="";var n=0;var r=c1=c2=0;while(n<e.length){r=e.charCodeAt(n);if(r<128){t+=String.fromCharCode(r);n++}else if(r>191&&r<224){c2=e.charCodeAt(n+1);t+=String.fromCharCode((r&31)<<6|c2&63);n+=2}else{c2=e.charCodeAt(n+1);c3=e.charCodeAt(n+2);t+=String.fromCharCode((r&15)<<12|(c2&63)<<6|c3&63);n+=3}}return t}}; | |
| 34 | + var utf8ToBytes = function (str) { | |
| 35 | + var bytes = []; | |
| 36 | + for (var i = 0; i < str.length; i++) { | |
| 37 | + var c = str.charCodeAt(i); | |
| 38 | + if (c < 0x80) { | |
| 39 | + bytes[bytes.length] = c; | |
| 40 | + } else if (c < 0x800) { | |
| 41 | + bytes[bytes.length] = 0xc0 | (c >> 6); | |
| 42 | + bytes[bytes.length] = 0x80 | (c & 0x3f); | |
| 43 | + } else if (c < 0xd800 || c >= 0xe000) { | |
| 44 | + bytes[bytes.length] = 0xe0 | (c >> 12); | |
| 45 | + bytes[bytes.length] = 0x80 | ((c >> 6) & 0x3f); | |
| 46 | + bytes[bytes.length] = 0x80 | (c & 0x3f); | |
| 47 | + } else { | |
| 48 | + c = 0x10000 + (((c & 0x3ff) << 10) | (str.charCodeAt(++i) & 0x3ff)); | |
| 49 | + bytes[bytes.length] = 0xf0 | (c >> 18); | |
| 50 | + bytes[bytes.length] = 0x80 | ((c >> 12) & 0x3f); | |
| 51 | + bytes[bytes.length] = 0x80 | ((c >> 6) & 0x3f); | |
| 52 | + bytes[bytes.length] = 0x80 | (c & 0x3f); | |
| 53 | + } | |
| 54 | + } | |
| 55 | + return bytes; | |
| 56 | + }; | |
| 57 | + | |
| 58 | + var decodeAsBytes = function (base64Str) { | |
| 59 | + var v1, v2, v3, v4, bytes = [], index = 0, length = base64Str.length; | |
| 60 | + if (base64Str.charAt(length - 2) === '=') { | |
| 61 | + length -= 2; | |
| 62 | + } else if (base64Str.charAt(length - 1) === '=') { | |
| 63 | + length -= 1; | |
| 64 | + } | |
| 65 | + | |
| 66 | + // 4 char to 3 bytes | |
| 67 | + for (var i = 0, count = length >> 2 << 2; i < count;) { | |
| 68 | + v1 = BASE64_DECODE_CHAR[base64Str.charAt(i++)]; | |
| 69 | + v2 = BASE64_DECODE_CHAR[base64Str.charAt(i++)]; | |
| 70 | + v3 = BASE64_DECODE_CHAR[base64Str.charAt(i++)]; | |
| 71 | + v4 = BASE64_DECODE_CHAR[base64Str.charAt(i++)]; | |
| 72 | + bytes[index++] = (v1 << 2 | v2 >>> 4) & 255; | |
| 73 | + bytes[index++] = (v2 << 4 | v3 >>> 2) & 255; | |
| 74 | + bytes[index++] = (v3 << 6 | v4) & 255; | |
| 75 | + } | |
| 76 | + | |
| 77 | + // remain bytes | |
| 78 | + var remain = length - count; | |
| 79 | + if (remain === 2) { | |
| 80 | + v1 = BASE64_DECODE_CHAR[base64Str.charAt(i++)]; | |
| 81 | + v2 = BASE64_DECODE_CHAR[base64Str.charAt(i++)]; | |
| 82 | + bytes[index++] = (v1 << 2 | v2 >>> 4) & 255; | |
| 83 | + } else if (remain === 3) { | |
| 84 | + v1 = BASE64_DECODE_CHAR[base64Str.charAt(i++)]; | |
| 85 | + v2 = BASE64_DECODE_CHAR[base64Str.charAt(i++)]; | |
| 86 | + v3 = BASE64_DECODE_CHAR[base64Str.charAt(i++)]; | |
| 87 | + bytes[index++] = (v1 << 2 | v2 >>> 4) & 255; | |
| 88 | + bytes[index++] = (v2 << 4 | v3 >>> 2) & 255; | |
| 89 | + } | |
| 90 | + return bytes; | |
| 91 | + }; | |
| 92 | + | |
| 93 | + var encodeFromBytes = function (bytes) { | |
| 94 | + var v1, v2, v3, base64Str = '', length = bytes.length; | |
| 95 | + for (var i = 0, count = parseInt(length / 3) * 3; i < count;) { | |
| 96 | + v1 = bytes[i++]; | |
| 97 | + v2 = bytes[i++]; | |
| 98 | + v3 = bytes[i++]; | |
| 99 | + base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] + | |
| 100 | + BASE64_ENCODE_CHAR[(v1 << 4 | v2 >>> 4) & 63] + | |
| 101 | + BASE64_ENCODE_CHAR[(v2 << 2 | v3 >>> 6) & 63] + | |
| 102 | + BASE64_ENCODE_CHAR[v3 & 63]; | |
| 103 | + } | |
| 104 | + | |
| 105 | + // remain char | |
| 106 | + var remain = length - count; | |
| 107 | + if (remain === 1) { | |
| 108 | + v1 = bytes[i]; | |
| 109 | + base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] + | |
| 110 | + BASE64_ENCODE_CHAR[(v1 << 4) & 63] + | |
| 111 | + '=='; | |
| 112 | + } else if (remain === 2) { | |
| 113 | + v1 = bytes[i++]; | |
| 114 | + v2 = bytes[i]; | |
| 115 | + base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] + | |
| 116 | + BASE64_ENCODE_CHAR[(v1 << 4 | v2 >>> 4) & 63] + | |
| 117 | + BASE64_ENCODE_CHAR[(v2 << 2) & 63] + | |
| 118 | + '='; | |
| 119 | + } | |
| 120 | + return base64Str; | |
| 121 | + }; | |
| 122 | + | |
| 123 | + var btoa = root.btoa, atob = root.atob, utf8Base64Encode, utf8Base64Decode; | |
| 124 | + if (NODE_JS) { | |
| 125 | + } else if (!btoa) { | |
| 126 | + btoa = function (str) { | |
| 127 | + var v1, v2, v3, base64Str = '', length = str.length; | |
| 128 | + for (var i = 0, count = parseInt(length / 3) * 3; i < count;) { | |
| 129 | + v1 = str.charCodeAt(i++); | |
| 130 | + v2 = str.charCodeAt(i++); | |
| 131 | + v3 = str.charCodeAt(i++); | |
| 132 | + base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] + | |
| 133 | + BASE64_ENCODE_CHAR[(v1 << 4 | v2 >>> 4) & 63] + | |
| 134 | + BASE64_ENCODE_CHAR[(v2 << 2 | v3 >>> 6) & 63] + | |
| 135 | + BASE64_ENCODE_CHAR[v3 & 63]; | |
| 136 | + } | |
| 137 | + | |
| 138 | + // remain char | |
| 139 | + var remain = length - count; | |
| 140 | + if (remain === 1) { | |
| 141 | + v1 = str.charCodeAt(i); | |
| 142 | + base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] + | |
| 143 | + BASE64_ENCODE_CHAR[(v1 << 4) & 63] + | |
| 144 | + '=='; | |
| 145 | + } else if (remain === 2) { | |
| 146 | + v1 = str.charCodeAt(i++); | |
| 147 | + v2 = str.charCodeAt(i); | |
| 148 | + base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] + | |
| 149 | + BASE64_ENCODE_CHAR[(v1 << 4 | v2 >>> 4) & 63] + | |
| 150 | + BASE64_ENCODE_CHAR[(v2 << 2) & 63] + | |
| 151 | + '='; | |
| 152 | + } | |
| 153 | + return base64Str; | |
| 154 | + }; | |
| 155 | + | |
| 156 | + utf8Base64Encode = function (str) { | |
| 157 | + var v1, v2, v3, base64Str = '', bytes = utf8ToBytes(str), length = bytes.length; | |
| 158 | + for (var i = 0, count = parseInt(length / 3) * 3; i < count;) { | |
| 159 | + v1 = bytes[i++]; | |
| 160 | + v2 = bytes[i++]; | |
| 161 | + v3 = bytes[i++]; | |
| 162 | + base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] + | |
| 163 | + BASE64_ENCODE_CHAR[(v1 << 4 | v2 >>> 4) & 63] + | |
| 164 | + BASE64_ENCODE_CHAR[(v2 << 2 | v3 >>> 6) & 63] + | |
| 165 | + BASE64_ENCODE_CHAR[v3 & 63]; | |
| 166 | + } | |
| 167 | + | |
| 168 | + // remain char | |
| 169 | + var remain = length - count; | |
| 170 | + if (remain === 1) { | |
| 171 | + v1 = bytes[i]; | |
| 172 | + base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] + | |
| 173 | + BASE64_ENCODE_CHAR[(v1 << 4) & 63] + | |
| 174 | + '=='; | |
| 175 | + } else if (remain === 2) { | |
| 176 | + v1 = bytes[i++]; | |
| 177 | + v2 = bytes[i]; | |
| 178 | + base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] + | |
| 179 | + BASE64_ENCODE_CHAR[(v1 << 4 | v2 >>> 4) & 63] + | |
| 180 | + BASE64_ENCODE_CHAR[(v2 << 2) & 63] + | |
| 181 | + '='; | |
| 182 | + } | |
| 183 | + return base64Str; | |
| 184 | + }; | |
| 185 | + | |
| 186 | + atob = function (base64Str) { | |
| 187 | + var v1, v2, v3, v4, str = '', length = base64Str.length; | |
| 188 | + if (base64Str.charAt(length - 2) === '=') { | |
| 189 | + length -= 2; | |
| 190 | + } else if (base64Str.charAt(length - 1) === '=') { | |
| 191 | + length -= 1; | |
| 192 | + } | |
| 193 | + | |
| 194 | + // 4 char to 3 bytes | |
| 195 | + for (var i = 0, count = length >> 2 << 2; i < count;) { | |
| 196 | + v1 = BASE64_DECODE_CHAR[base64Str.charAt(i++)]; | |
| 197 | + v2 = BASE64_DECODE_CHAR[base64Str.charAt(i++)]; | |
| 198 | + v3 = BASE64_DECODE_CHAR[base64Str.charAt(i++)]; | |
| 199 | + v4 = BASE64_DECODE_CHAR[base64Str.charAt(i++)]; | |
| 200 | + str += String.fromCharCode((v1 << 2 | v2 >>> 4) & 255) + | |
| 201 | + String.fromCharCode((v2 << 4 | v3 >>> 2) & 255) + | |
| 202 | + String.fromCharCode((v3 << 6 | v4) & 255); | |
| 203 | + } | |
| 204 | + | |
| 205 | + // remain bytes | |
| 206 | + var remain = length - count; | |
| 207 | + if (remain === 2) { | |
| 208 | + v1 = BASE64_DECODE_CHAR[base64Str.charAt(i++)]; | |
| 209 | + v2 = BASE64_DECODE_CHAR[base64Str.charAt(i++)]; | |
| 210 | + str += String.fromCharCode((v1 << 2 | v2 >>> 4) & 255); | |
| 211 | + } else if (remain === 3) { | |
| 212 | + v1 = BASE64_DECODE_CHAR[base64Str.charAt(i++)]; | |
| 213 | + v2 = BASE64_DECODE_CHAR[base64Str.charAt(i++)]; | |
| 214 | + v3 = BASE64_DECODE_CHAR[base64Str.charAt(i++)]; | |
| 215 | + str += String.fromCharCode((v1 << 2 | v2 >>> 4) & 255) + | |
| 216 | + String.fromCharCode((v2 << 4 | v3 >>> 2) & 255); | |
| 217 | + } | |
| 218 | + return str; | |
| 219 | + }; | |
| 220 | + | |
| 221 | + utf8Base64Decode = function (base64Str) { | |
| 222 | + var str = '', bytes = decodeAsBytes(base64Str), length = bytes.length; | |
| 223 | + var i = 0, followingChars = 0, b, c; | |
| 224 | + while (i < length) { | |
| 225 | + b = bytes[i++]; | |
| 226 | + if (b <= 0x7F) { | |
| 227 | + str += String.fromCharCode(b); | |
| 228 | + continue; | |
| 229 | + } else if (b > 0xBF && b <= 0xDF) { | |
| 230 | + c = b & 0x1F; | |
| 231 | + followingChars = 1; | |
| 232 | + } else if (b <= 0xEF) { | |
| 233 | + c = b & 0x0F; | |
| 234 | + followingChars = 2; | |
| 235 | + } else if (b <= 0xF7) { | |
| 236 | + c = b & 0x07; | |
| 237 | + followingChars = 3; | |
| 238 | + } else { | |
| 239 | + throw 'not a UTF-8 string'; | |
| 240 | + } | |
| 241 | + | |
| 242 | + for (var j = 0; j < followingChars; ++j) { | |
| 243 | + b = bytes[i++]; | |
| 244 | + if (b < 0x80 || b > 0xBF) { | |
| 245 | + throw 'not a UTF-8 string'; | |
| 246 | + } | |
| 247 | + c <<= 6; | |
| 248 | + c += b & 0x3F; | |
| 249 | + } | |
| 250 | + if (c >= 0xD800 && c <= 0xDFFF) { | |
| 251 | + throw 'not a UTF-8 string'; | |
| 252 | + } | |
| 253 | + if (c > 0x10FFFF) { | |
| 254 | + throw 'not a UTF-8 string'; | |
| 255 | + } | |
| 256 | + | |
| 257 | + if (c <= 0xFFFF) { | |
| 258 | + str += String.fromCharCode(c); | |
| 259 | + } else { | |
| 260 | + c -= 0x10000; | |
| 261 | + str += String.fromCharCode((c >> 10) + 0xD800); | |
| 262 | + str += String.fromCharCode((c & 0x3FF) + 0xDC00); | |
| 263 | + } | |
| 264 | + } | |
| 265 | + return str; | |
| 266 | + }; | |
| 267 | + } else { | |
| 268 | + utf8Base64Encode = function (str) { | |
| 269 | + var result = ''; | |
| 270 | + for (var i = 0; i < str.length; i++) { | |
| 271 | + var charcode = str.charCodeAt(i); | |
| 272 | + if (charcode < 0x80) { | |
| 273 | + result += String.fromCharCode(charcode); | |
| 274 | + } else if (charcode < 0x800) { | |
| 275 | + result += String.fromCharCode(0xc0 | (charcode >> 6)) + | |
| 276 | + String.fromCharCode(0x80 | (charcode & 0x3f)); | |
| 277 | + } else if (charcode < 0xd800 || charcode >= 0xe000) { | |
| 278 | + result += String.fromCharCode(0xe0 | (charcode >> 12)) + | |
| 279 | + String.fromCharCode(0x80 | ((charcode >> 6) & 0x3f)) + | |
| 280 | + String.fromCharCode(0x80 | (charcode & 0x3f)); | |
| 281 | + } else { | |
| 282 | + charcode = 0x10000 + (((charcode & 0x3ff) << 10) | (str.charCodeAt(++i) & 0x3ff)); | |
| 283 | + result += String.fromCharCode(0xf0 | (charcode >> 18)) + | |
| 284 | + String.fromCharCode(0x80 | ((charcode >> 12) & 0x3f)) + | |
| 285 | + String.fromCharCode(0x80 | ((charcode >> 6) & 0x3f)) + | |
| 286 | + String.fromCharCode(0x80 | (charcode & 0x3f)); | |
| 287 | + } | |
| 288 | + } | |
| 289 | + return btoa(result); | |
| 290 | + }; | |
| 291 | + | |
| 292 | + utf8Base64Decode = function (base64Str) { | |
| 293 | + var tmpStr = atob(base64Str.trim('=').replace(/-/g, '+').replace(/_/g, '/')); | |
| 294 | + if (!/[^\x00-\x7F]/.test(tmpStr)) { | |
| 295 | + return tmpStr; | |
| 296 | + } | |
| 297 | + var str = '', i = 0, length = tmpStr.length, followingChars = 0, b, c; | |
| 298 | + while (i < length) { | |
| 299 | + b = tmpStr.charCodeAt(i++); | |
| 300 | + if (b <= 0x7F) { | |
| 301 | + str += String.fromCharCode(b); | |
| 302 | + continue; | |
| 303 | + } else if (b > 0xBF && b <= 0xDF) { | |
| 304 | + c = b & 0x1F; | |
| 305 | + followingChars = 1; | |
| 306 | + } else if (b <= 0xEF) { | |
| 307 | + c = b & 0x0F; | |
| 308 | + followingChars = 2; | |
| 309 | + } else if (b <= 0xF7) { | |
| 310 | + c = b & 0x07; | |
| 311 | + followingChars = 3; | |
| 312 | + } else { | |
| 313 | + throw 'not a UTF-8 string'; | |
| 314 | + } | |
| 315 | + | |
| 316 | + for (var j = 0; j < followingChars; ++j) { | |
| 317 | + b = tmpStr.charCodeAt(i++); | |
| 318 | + if (b < 0x80 || b > 0xBF) { | |
| 319 | + throw 'not a UTF-8 string'; | |
| 320 | + } | |
| 321 | + c <<= 6; | |
| 322 | + c += b & 0x3F; | |
| 323 | + } | |
| 324 | + if (c >= 0xD800 && c <= 0xDFFF) { | |
| 325 | + throw 'not a UTF-8 string'; | |
| 326 | + } | |
| 327 | + if (c > 0x10FFFF) { | |
| 328 | + throw 'not a UTF-8 string'; | |
| 329 | + } | |
| 330 | + | |
| 331 | + if (c <= 0xFFFF) { | |
| 332 | + str += String.fromCharCode(c); | |
| 333 | + } else { | |
| 334 | + c -= 0x10000; | |
| 335 | + str += String.fromCharCode((c >> 10) + 0xD800); | |
| 336 | + str += String.fromCharCode((c & 0x3FF) + 0xDC00); | |
| 337 | + } | |
| 338 | + } | |
| 339 | + return str; | |
| 340 | + }; | |
| 341 | + } | |
| 342 | + | |
| 343 | + var encode = function (str, asciiOnly) { | |
| 344 | + var notString = typeof(str) != 'string'; | |
| 345 | + if (notString && str.constructor === root.ArrayBuffer) { | |
| 346 | + str = new Uint8Array(str); | |
| 347 | + } | |
| 348 | + if (notString) { | |
| 349 | + return encodeFromBytes(str); | |
| 350 | + } else { | |
| 351 | + if (!asciiOnly && /[^\x00-\x7F]/.test(str)) { | |
| 352 | + return utf8Base64Encode(str); | |
| 353 | + } else { | |
| 354 | + return btoa(str); | |
| 355 | + } | |
| 356 | + } | |
| 357 | + }; | |
| 358 | + | |
| 359 | + var decode = function (base64Str, asciiOnly) { | |
| 360 | + return asciiOnly ? atob(base64Str) : utf8Base64Decode(base64Str); | |
| 361 | + }; | |
| 362 | + | |
| 363 | + var exports = { | |
| 364 | + encode: encode, | |
| 365 | + decode: decode, | |
| 366 | + atob: atob, | |
| 367 | + btoa: btoa | |
| 368 | + }; | |
| 369 | + decode.bytes = decodeAsBytes; | |
| 370 | + decode.string = decode; | |
| 371 | + | |
| 372 | + root.pagelayer_Base64 = exports; | |
| 373 | +})(); | |