aboutsummaryrefslogtreecommitdiffstats
path: root/jsaccess/jsa/js-contrib/jquery.base64.js
diff options
context:
space:
mode:
Diffstat (limited to 'jsaccess/jsa/js-contrib/jquery.base64.js')
-rw-r--r--jsaccess/jsa/js-contrib/jquery.base64.js362
1 files changed, 362 insertions, 0 deletions
diff --git a/jsaccess/jsa/js-contrib/jquery.base64.js b/jsaccess/jsa/js-contrib/jquery.base64.js
new file mode 100644
index 0000000..a643623
--- /dev/null
+++ b/jsaccess/jsa/js-contrib/jquery.base64.js
@@ -0,0 +1,362 @@
+/**
+ * jQuery Plugin - base64 codec
+ * @lisence MIT License https://github.com/yatt/jquery.base64/blob/master/license.txt
+ * @author yatt/brainfs http://d.hatena.ne.jp/yatt http://twitter.com/brainfs
+ * @version 0.0.1
+ * @info
+ */
+
+(function($){
+ var base64module = {};
+
+// *** begin
+ /* /_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
+ charset = shift_jis
+
+ +++ Base64 Encode / Decode +++
+
+
+ LastModified : 2006-11/08
+
+ Powered by kerry
+ http://202.248.69.143/~goma/
+
+ 動作ブラウザ :: IE4+ , NN4.06+ , Gecko , Opera6+
+
+
+ * [RFC 2045] Multipurpose Internet Mail Extensions
+ (MIME) Part One:
+ Format of Internet Message Bodies
+ ftp://ftp.isi.edu/in-notes/rfc2045.txt
+
+ /_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
+
+ * Usage:
+
+ // エンコード
+ b64_string = base64.encode( my_data [, strMode] );
+
+ // デコード
+ my_data = base64.decode( b64_string [, strMode] );
+
+
+ strMode -> 入力データが文字列の場合 1 を
+
+ /_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ */
+
+
+// [yatt] enclose
+//base64 = new function()
+var base64 = new function()
+//
+{
+ var utfLibName = "utf";
+ var b64char = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+ var b64encTable = b64char.split("");
+ var b64decTable = [];
+ for (var i=0; i<b64char.length; i++) b64decTable[b64char.charAt(i)] = i;
+
+ this.encode = function(_dat, _strMode)
+ {
+ return encoder( _strMode? unpackUTF8(_dat): unpackChar(_dat) );
+ }
+
+ var encoder = function(_ary)
+ {
+ var md = _ary.length % 3;
+ var b64 = "";
+ var i, tmp = 0;
+
+ if (md) for (i=3-md; i>0; i--) _ary[_ary.length] = 0;
+
+ for (i=0; i<_ary.length; i+=3)
+ {
+ tmp = (_ary[i]<<16) | (_ary[i+1]<<8) | _ary[i+2];
+ b64 += b64encTable[ (tmp >>>18) & 0x3f]
+ + b64encTable[ (tmp >>>12) & 0x3f]
+ + b64encTable[ (tmp >>> 6) & 0x3f]
+ + b64encTable[ tmp & 0x3f];
+ }
+
+ if (md) // 3の倍数にパディングした 0x0 分 = に置き換え
+ {
+ md = 3- md;
+ b64 = b64.substr(0, b64.length- md);
+ while (md--) b64 += "=";
+ }
+
+ return b64;
+ }
+
+ this.decode = function(_b64, _strMode)
+ {
+ var tmp = decoder( _b64 );
+ return _strMode? packUTF8(tmp): packChar(tmp);
+ }
+
+ var decoder = function(_b64)
+ {
+ _b64 = _b64.replace(/[^A-Za-z0-9\+\/]/g, "");
+ var md = _b64.length % 4;
+ var j, i, tmp;
+ var dat = [];
+
+ // replace 時 = も削っている。その = の代わりに 0x0 を補間
+ if (md) for (i=0; i<4-md; i++) _b64 += "A";
+
+ for (j=i=0; i<_b64.length; i+=4, j+=3)
+ {
+ tmp = (b64decTable[_b64.charAt( i )] <<18)
+ | (b64decTable[_b64.charAt(i+1)] <<12)
+ | (b64decTable[_b64.charAt(i+2)] << 6)
+ | b64decTable[_b64.charAt(i+3)];
+ dat[ j ] = tmp >>> 16;
+ dat[j+1] = (tmp >>> 8) & 0xff;
+ dat[j+2] = tmp & 0xff;
+ }
+ // 補完された 0x0 分削る
+ if (md) dat.length -= [0,0,2,1][md];
+
+ return dat;
+ }
+
+ var packUTF8 = function(_x){ return utf.packUTF8(_x) };
+ var unpackUTF8 = function(_x){ return utf.unpackUTF8(_x) };
+ var packChar = function(_x){ return utf.packChar(_x) };
+ var unpackChar = function(_x){ return utf.unpackChar(_x) };
+// var packUTF8 = function(_x){ return window[utfLibName].packUTF8(_x) };
+// var unpackUTF8 = function(_x){ return window[utfLibName].unpackUTF8(_x) };
+// var packChar = function(_x){ return window[utfLibName].packChar(_x) };
+// var unpackChar = function(_x){ return window[utfLibName].unpackChar(_x) };
+}
+
+
+ /* /_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
+ charset = shift_jis
+
+ +++ UTF8/16 ライブラリ +++
+
+
+ LastModified : 2006-10/16
+
+ Powered by kerry
+ http://202.248.69.143/~goma/
+
+ 動作ブラウザ :: IE4+ , NN4.06+ , Gecko , Opera6+
+
+
+
+ * [RFC 2279] UTF-8, a transformation format of ISO 10646
+ ftp://ftp.isi.edu/in-notes/rfc2279.txt
+
+ * [RFC 1738] Uniform Resource Locators (URL)
+ ftp://ftp.isi.edu/in-notes/rfc1738.txt
+
+ /_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
+
+ Usage:
+
+ // 文字列を UTF16 (文字コード) へ
+ utf16code_array = utf.unpackUTF16( my_string );
+
+ // 文字列を UTF8 (文字コード) へ
+ utf8code_array = utf.unpackUTF8( my_string );
+
+ // UTF8 (文字コード) から文字列へ。 utf.unpackUTF8() したものを元に戻す
+ my_string = utf.packUTF8( utf8code_array );
+
+ // UTF8/16 (文字コード) を文字列へ
+ my_string = utf.packChar( utfCode_array );
+
+ // UTF16 (文字コード) から UTF8 (文字コード) へ
+ utf8code_array = utf.toUTF8( utf16code_array );
+
+ // UTF8 (文字コード) から UTF16 (文字コード) へ
+ utf16code_array = utf.toUTF16( utf8code_array );
+
+
+
+ // URL 文字列へエンコード
+ url_string = utf.URLencode( my_string );
+
+ // URL 文字列からデコード
+ my_string = utf.URLdecode( url_string );
+
+ /_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ */
+
+
+// [yatt] enclose
+//utf = new function()
+var utf = new function()
+//
+{
+ this.unpackUTF16 = function(_str)
+ {
+ var i, utf16=[];
+ for (i=0; i<_str.length; i++) utf16[i] = _str.charCodeAt(i);
+ return utf16;
+ }
+
+ this.unpackChar = function(_str)
+ {
+ var utf16 = this.unpackUTF16(_str);
+ var i,n, tmp = [];
+ for (n=i=0; i<utf16.length; i++) {
+ if (utf16[i]<=0xff) tmp[n++] = utf16[i];
+ else {
+ tmp[n++] = utf16[i] >> 8;
+ tmp[n++] = utf16[i] & 0xff;
+ }
+ }
+ return tmp;
+ }
+
+ this.packChar =
+ this.packUTF16 = function(_utf16)
+ {
+ var i, str = "";
+ for (i in _utf16) str += String.fromCharCode(_utf16[i]);
+ return str;
+ }
+
+ this.unpackUTF8 = function(_str)
+ {
+ return this.toUTF8( this.unpackUTF16(_str) );
+ }
+
+ this.packUTF8 = function(_utf8)
+ {
+ return this.packUTF16( this.toUTF16(_utf8) );
+ }
+
+ this.toUTF8 = function(_utf16)
+ {
+ var utf8 = [];
+ var idx = 0;
+ var i, j, c;
+ for (i=0; i<_utf16.length; i++)
+ {
+ c = _utf16[i];
+ if (c <= 0x7f) utf8[idx++] = c;
+ else if (c <= 0x7ff)
+ {
+ utf8[idx++] = 0xc0 | (c >>> 6 );
+ utf8[idx++] = 0x80 | (c & 0x3f);
+ }
+ else if (c <= 0xffff)
+ {
+ utf8[idx++] = 0xe0 | (c >>> 12 );
+ utf8[idx++] = 0x80 | ((c >>> 6 ) & 0x3f);
+ utf8[idx++] = 0x80 | (c & 0x3f);
+ }
+ else
+ {
+ j = 4;
+ while (c >> (6*j)) j++;
+ utf8[idx++] = ((0xff00 >>> j) & 0xff) | (c >>> (6*--j) );
+ while (j--)
+ utf8[idx++] = 0x80 | ((c >>> (6*j)) & 0x3f);
+ }
+ }
+ return utf8;
+ }
+
+ this.toUTF16 = function(_utf8)
+ {
+ var utf16 = [];
+ var idx = 0;
+ var i,s;
+ for (i=0; i<_utf8.length; i++, idx++)
+ {
+ if (_utf8[i] <= 0x7f) utf16[idx] = _utf8[i];
+ else
+ {
+ if ( (_utf8[i]>>5) == 0x6)
+ {
+ utf16[idx] = ( (_utf8[i] & 0x1f) << 6 )
+ | ( _utf8[++i] & 0x3f );
+ }
+ else if ( (_utf8[i]>>4) == 0xe)
+ {
+ utf16[idx] = ( (_utf8[i] & 0xf) << 12 )
+ | ( (_utf8[++i] & 0x3f) << 6 )
+ | ( _utf8[++i] & 0x3f );
+ }
+ else
+ {
+ s = 1;
+ while (_utf8[i] & (0x20 >>> s) ) s++;
+ utf16[idx] = _utf8[i] & (0x1f >>> s);
+ while (s-->=0) utf16[idx] = (utf16[idx] << 6) ^ (_utf8[++i] & 0x3f);
+ }
+ }
+ }
+ return utf16;
+ }
+
+ this.URLencode = function(_str)
+ {
+ return _str.replace(/([^a-zA-Z0-9_\-\.])/g, function(_tmp, _c)
+ {
+ if (_c == "\x20") return "+";
+ var tmp = utf.toUTF8( [_c.charCodeAt(0)] );
+ var c = "";
+ for (var i in tmp)
+ {
+ i = tmp[i].toString(16);
+ if (i.length == 1) i = "0"+ i;
+ c += "%"+ i;
+ }
+ return c;
+ } );
+ }
+
+ this.URLdecode = function(_dat)
+ {
+ _dat = _dat.replace(/\+/g, "\x20");
+ _dat = _dat.replace( /%([a-fA-F0-9][a-fA-F0-9])/g,
+ function(_tmp, _hex){ return String.fromCharCode( parseInt(_hex, 16) ) } );
+ return this.packChar( this.toUTF16( this.unpackUTF16(_dat) ) );
+ }
+}
+
+// *** end
+
+ // add functions
+ $.extend({
+ base64: {
+ encode: base64.encode,
+ decode: base64.decode,
+ codec: typeof atob == 'function' ? 'builtin' : 'alternate'
+ }
+ })
+
+ //
+ // override jQuery.ajax:
+ // if ajax 'dataType' option value ended by ':b64', then
+ // decode base64 string automatically
+ //
+ $.ajax = (function(ajax){
+ return function(option){
+ var flg = 0
+
+ // dataType string ended by ':b64' or not?
+ if (option.dataType && option.dataType.match(/:b64/)){
+ option.dataType = option.dataType.replace(':b64', '')
+ flg = 1
+ }
+
+ if (flg){
+ option.success = (function(callback){
+ return function(data, status, xhr){
+ data = $.base64.decode(data)
+ callback(data, status, xhr)
+ }
+ })(option.success || function(data, status, xhr){})
+ }
+
+ return ajax.apply(this, arguments)
+ }
+ })($.ajax)
+
+})(jQuery)