WMDataURIScheme
Legokichi Duckscallion edited this page Aug 10, 2014
·
1 revision
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);
});
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);
});