EASYAIuniappNewUI/node_modules/licia/dataUrl.js
2025-02-08 18:50:38 +08:00

69 lines
2.1 KiB
JavaScript

var isDataUrl = require('./isDataUrl');
var trim = require('./trim');
var endWith = require('./endWith');
var startWith = require('./startWith');
var contain = require('./contain');
var decodeUriComponent = require('./decodeUriComponent');
var defaults = require('./defaults');
var isStr = require('./isStr');
var convertBin = require('./convertBin');
exports = {
parse: function(dataUrl) {
if (!isDataUrl(dataUrl)) {
return null;
}
dataUrl = dataUrl.slice('data:'.length);
var commaIdx = dataUrl.indexOf(',');
var mime = trim(dataUrl.slice(0, commaIdx));
var data = trim(dataUrl.slice(commaIdx + 1));
var base64 = false;
if (endWith(mime, ';base64')) {
base64 = true;
mime = mime.slice(0, -';base64'.length);
}
var charset = '';
if (contain(mime, 'charset=')) {
charset = mime.split('charset=')[1];
mime = mime.split(';')[0];
}
if (!mime) {
mime = 'text/plain';
}
if (!base64 && startWith(mime, 'text/') && contain(data, '%')) {
data = decodeUriComponent(data);
}
return {
data: data,
mime: mime,
charset: charset,
base64: base64
};
},
stringify: function(data, mime) {
var options =
arguments.length > 2 && arguments[2] !== undefined
? arguments[2]
: {};
defaults(options, {
base64: true,
charset: ''
});
var result = 'data:' + mime;
if (options.charset && startWith(mime, 'text/')) {
result += ';charset=' + options.charset;
}
if (!isStr(data)) {
data = convertBin(data, 'base64');
options.base64 = true;
}
if (options.base64) {
result += ';base64';
} else if (startWith(mime, 'text/') || !mime) {
data = encodeURIComponent(data);
}
return result + ',' + data;
}
};
module.exports = exports;