unzip
unzip an archive and displays text files in utf-8.
HTML
<!DOCTYPE html>
<html>
<head>
<title></title>
<style type="text/css">
body { font-size: 8pt; font-family: Sans-Serif; }
table { border-collapse: collapse; width: 100%; }
table td { border: 1px solid #000; }
</style>
</head>
<body>
<div id="content"></div>
<table id="result"></table>
<textarea id="displayArea" cols="80" rows="25" readonly="readonly"></textarea>
<script type="text/javascript">
var content = document.getElementById("content");
if (!window.FileReader)
{
alert("Not supported!");
}
else
{
content.innerHTML = '<input type="file" id="file" />';
var displayArea = document.getElementById("displayArea");
function displayText(entry) {
return function () {
displayArea.value = entry.openText();
};
}
function displayEntries(event) {
var table = document.getElementById("result");
table.innerHTML = "";
for (var i = 0; i < event.result.length; i++)
{
var entry = event.result[i];
var tr = document.createElement("tr");
var nameCell = document.createElement("td");
var sizeCell = document.createElement("td");
var compressedCell = document.createElement("td");
var dateCell = document.createElement("td");
var methodCell = document.createElement("td");
var displayCell = document.createElement("td");
var displayLink = document.createElement("a");
var li = document.createElement("li");
var a = document.createElement("a");
a.textContent = entry.filename;
a.href = "#"
...
JavaScript
Unzip = function (buffer) {
this._buffer = buffer;
this._stream = new ZipStream(buffer);
var context = this;
// TODO: Utiliser les web workers
setTimeout(function () {
context._readEntries(context._stream);
if (typeof context.onload === "function")
{
context.onload({ target: context, result: context._entries });
}
}, 0);
}
Unzip.END_OF_CENTRAL_DIRECTORY_SIGNATURE = 0x06054b50;
Unzip.END_OF_CENTRAL_RECORD_BASESIZE = 22;
Unzip.CENTRAL_HEADER_SIGNATURE = 0x02014b50;
Unzip.LOCAL_HEADER_SIGNATURE = 0x04034b50
Unzip.prototype = {
_readEntries: function (stream) {
/// <summary>Search for and read the central directory of a zip file filling the entries array.</summary>
/// <param name="stream" type="ZipStream">The stream</param>
// Search for the end of central directory
var locatedEndOfCentralDir = this._locateBlockWithSignature(
Unzip.END_OF_CENTRAL_DIRECTORY_SIGNATURE, this._buffer.byteLength, Unzip.END_OF_CENTRAL_RECORD_BASESIZE, 0xffff);
if (locatedEndOfCentralDir < 0)
{
throw new Error("Cannot find central directory");
}
// Read end of central directory record
stream.seek(locatedEndOfCentralDir, ZipStream.ORIGIN_BEGIN);
var thisDiskNumber = stream.readLEUShort();
var startCentralDirDisk = stream.readLEUShort();
var entriesForThisDisk = stream.readLEUShort();
var entriesForWholeCentralDir = stream.readLEUShort();
var centralDirSize = stream.readLEUInt();
var offsetOfCentralDir = stream.readLEUInt();
var commentSize = stream.readLEUShort();
if (commentSize > 0)
{
this._comment = stream.readString(commentSize);
}
// Check zip64 header
if (thisDiskNumber === 0xffff
|| startCentralDirDisk === 0xffff
|| entriesForThisDisk === 0xffff
||...