Skip to content
Legokichi Duckscallion edited this page Aug 10, 2014 · 1 revision

DataURIScheme.js

DataURIScheme.js は https://github.com/legokichi/WMDataURIScheme.js で公開されている JavaScript ライブラリです。 Browser, Worker 環境で動作し、Closure Compiler で Minify した状態でも動作します。

DataURIScheme.js を組み込むと、 global.WMDataURIScheme が追加されます。

DataURIScheme は、UTF8文字列をdata URI schemeに相互変換するライブラリです。サロゲートペアに対応しているのが特徴です。

## DataURIScheme 名前空間です。 ## DataURIScheme.StringToDataURI URLShortener.StringToDataURI(str:String, mimetype:String, callback:Function(dataURI: DataURISchemeString):void):void は、文字列をdata URI schemeに変換します。
function DataURIScheme_StringToDataURI(str,        // @arg String
                                       mimeType,   // @arg MimeTypeString
                                       callback) { // @arg Function - callback(err:Error|null, String:DataURISchemeString):void
                                                   // @ret void
//{@dev
    Valid(Valid.type(str, "String"), DataURIScheme_StringToDataURI, "str");
    Valid(Valid.type(mimeType, "String"), DataURIScheme_StringToDataURI, "mimetype");
    Valid(Valid.type(callback, "Function"), DataURIScheme_DataURIToString, "callback");
//}@dev
    var reader = new FileReader();
    reader.addEventListener("loadend", function() {
        var dataURI = reader.result.replace(";base64,", ";charset=utf-8;base64,");
        // example: data:text/plain;charset=utf-8;base64,YfCgrp9i8J+SqQ==
        //{@dev
        console.info(dataURI);
        //}@dev
        callback(null, dataURI);
    });
    reader.addEventListener("error", function(ev) {
        var err = new Error(ev.target.error.name+": "+ev.target.error.message);
        console.info(err);
        callback(err, "");
    });
    reader.readAsDataURL(new Blob([str], {type: mimeType}));
}
var original = "a𠮟b💩";
DataURIScheme.StringToDataURI(original, "text/plain", function(err, dataURI){
    if(!!err) return console.error(err);
    console.log(dataURI);
});
## DataURIScheme.DataURIToString URLShortener.DataURIToString(dataURI:DataURISchemeString, callback:Function(str:String):void):void は、data URI schemeを文字列に変換します。
function DataURIScheme_DataURIToString(dataURI,    // @arg DataURISchemeString
                                       callback) { // @arg Function - callback(err:Error|null, String):void
                                                   // @ret void
//{@dev
    Valid(Valid.type(dataURI, "String"), DataURIScheme_DataURIToString, "dataURI");
    Valid(Valid.type(callback, "Function"), DataURIScheme_DataURIToString, "callback");
//}@dev
    if(!/^data\:.*?base64\,.+/.test(dataURI)){
        setTimeout(function(){
            callback(new Error("Unvalid format. "+dataURI), "");
        });
        return;
    }
    var tmp = dataURI.split(',');
    var mimeType = tmp[0].split(':')[1].split(';')[0];
    var byteString = atob(tmp[1]);
    var bytes = new Uint8Array(byteString.length);
    for (var i=0; i < bytes.length; i++) {
        bytes[i] = byteString.charCodeAt(i);
    }
    var reader = new FileReader();
    reader.addEventListener("loadend", function() {
        //{@dev
        console.info(reader.result);
        //}@dev
        callback(null, reader.result);
    });
    reader.addEventListener("error", function(ev) {
        var err = new Error(ev.target.error.name+": "+ev.target.error.message);
        console.info(err);
        callback(err, "");
    });
    reader.readAsText(new Blob([bytes.buffer], {type: mimeType}));
}
var dataURI = "data:text/plain;charset=utf-8;base64,YfCgrp9i8J+SqQ==";
DataURIScheme.DataURIToString(original, "text/plain", function(err, str){
    if(!!err) return console.error(err);
    console.log(str);
});
Clone this wiki locally