Example works
This commit is contained in:
commit
690bca781f
7 changed files with 458 additions and 0 deletions
95
lib/utils.js
Normal file
95
lib/utils.js
Normal file
|
@ -0,0 +1,95 @@
|
|||
/*
|
||||
* tar-js
|
||||
* MIT (c) 2011 T. Jameson Little
|
||||
*/
|
||||
|
||||
(function () {
|
||||
"use strict";
|
||||
|
||||
require('require-kiss');
|
||||
|
||||
var lookup = [
|
||||
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
|
||||
'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
|
||||
'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
|
||||
'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f',
|
||||
'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
|
||||
'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
|
||||
'w', 'x', 'y', 'z', '0', '1', '2', '3',
|
||||
'4', '5', '6', '7', '8', '9', '+', '/'
|
||||
];
|
||||
function clean(length) {
|
||||
var i, buffer = new Uint8Array(length);
|
||||
for (i = 0; i < length; i += 1) {
|
||||
buffer[i] = 0;
|
||||
}
|
||||
return buffer;
|
||||
}
|
||||
|
||||
function extend(orig, length, addLength, multipleOf) {
|
||||
var newSize = length + addLength,
|
||||
buffer = clean((parseInt(newSize / multipleOf) + 1) * multipleOf);
|
||||
|
||||
buffer.set(orig);
|
||||
|
||||
return buffer;
|
||||
}
|
||||
|
||||
function pad(num, bytes, base) {
|
||||
num = num.toString(base || 8);
|
||||
return "000000000000".substr(num.length + 12 - bytes) + num;
|
||||
}
|
||||
|
||||
function stringToUint8 (input, out, offset) {
|
||||
var i, length;
|
||||
|
||||
out = out || clean(input.length);
|
||||
|
||||
offset = offset || 0;
|
||||
for (i = 0, length = input.length; i < length; i += 1) {
|
||||
out[offset] = input.charCodeAt(i);
|
||||
offset += 1;
|
||||
}
|
||||
|
||||
return out;
|
||||
}
|
||||
|
||||
function uint8ToBase64(uint8) {
|
||||
var i,
|
||||
extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes
|
||||
output = "",
|
||||
temp, length;
|
||||
|
||||
function tripletToBase64 (num) {
|
||||
return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F];
|
||||
};
|
||||
|
||||
// go through the array every three bytes, we'll deal with trailing stuff later
|
||||
for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) {
|
||||
temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2]);
|
||||
output += tripletToBase64(temp);
|
||||
}
|
||||
|
||||
// this prevents an ERR_INVALID_URL in Chrome (Firefox okay)
|
||||
switch (output.length % 4) {
|
||||
case 1:
|
||||
output += '=';
|
||||
break;
|
||||
case 2:
|
||||
output += '==';
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return output;
|
||||
}
|
||||
|
||||
module.exports.clean = clean;
|
||||
module.exports.pad = pad;
|
||||
module.exports.extend = extend;
|
||||
module.exports.stringToUint8 = stringToUint8;
|
||||
module.exports.uint8ToBase64 = uint8ToBase64;
|
||||
|
||||
provide('utils');
|
||||
}());
|
Loading…
Add table
Add a link
Reference in a new issue