mirror of
https://github.com/kiwix/kiwix-js.git
synced 2025-09-22 12:01:15 -04:00
Implement multiple archive files
Add GPL v3 License header
This commit is contained in:
parent
2701f47a87
commit
48ce203088
@ -1,5 +1,29 @@
|
|||||||
<?xml version="1.0" encoding="utf-8" ?>
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
|
<!--
|
||||||
|
Port of Evopedia (offline wikipedia reader) in HTML5/Javascript, with Firefox OS as the primary target
|
||||||
|
The original application is at http://www.evopedia.info/
|
||||||
|
It uses wikipedia dumps located at http://dumpathome.evopedia.info/dumps/finished
|
||||||
|
|
||||||
|
Author : Mossroy - mossroy@free.fr
|
||||||
|
|
||||||
|
License:
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU General Public License as published by the
|
||||||
|
Free Software Foundation; either version 3 of the License, or (at your
|
||||||
|
option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public
|
||||||
|
License along with this program; if not, see
|
||||||
|
<http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
-->
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
|
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
|
||||||
@ -11,23 +35,25 @@
|
|||||||
<h1>Evopedia</h1>
|
<h1>Evopedia</h1>
|
||||||
<br/>
|
<br/>
|
||||||
<div id="openLocalFiles" style="visibility:hidden">
|
<div id="openLocalFiles" style="visibility:hidden">
|
||||||
Please pick the file titles.idx from the wikipedia_small_2010-08-14 dump :<br/>
|
Please pick the file titles.idx :<br/>
|
||||||
<input type="file" id="titleFile"/><br/>
|
<input type="file" id="titleFile"/><br/>
|
||||||
Please pick the file wikipedia_00.dat from the same dump :<br/>
|
Please pick the files wikipedia_*.dat from the same dump :<br/>
|
||||||
<input type="file" id="dataFile"/>
|
<input type="file" id="dataFiles" multiple="true"/>
|
||||||
</div>
|
</div>
|
||||||
<br/>
|
<br/>
|
||||||
<input type="button" id="readTitle" value="Read title list from index" onclick="readAllTitlesFromIndex(titleFile)" />
|
<input type="button" id="readTitle" value="Read title list from index" onclick="readAllTitlesFromIndex(titleFile)" />
|
||||||
<br/>
|
<br/>
|
||||||
Choose a title : <select id="titleList" onchange="updateOffsetsFromTitle(this.value)"></select>
|
Choose a title : <select id="titleList" onchange="updateOffsetsFromTitle(this.value)"></select>
|
||||||
<br/>
|
<br/>
|
||||||
|
File number : <input type="text" id="filenumber" value="0" />
|
||||||
|
<br/>
|
||||||
Blockstart : <input type="text" id="blockstart" value="0" />
|
Blockstart : <input type="text" id="blockstart" value="0" />
|
||||||
<br/>
|
<br/>
|
||||||
Blockoffset : <input type="text" id="blockoffset" value="0" />
|
Blockoffset : <input type="text" id="blockoffset" value="0" />
|
||||||
<br/>
|
<br/>
|
||||||
Length : <input type="text" id="length" value="8866" />
|
Length : <input type="text" id="length" value="8866" />
|
||||||
<br/>
|
<br/>
|
||||||
<input type="button" id="readData" value="Read article from dump" onclick="readArticleFromHtmlForm(dataFile)" />
|
<input type="button" id="readData" value="Read article from dump" onclick="readArticleFromHtmlForm(dataFiles)" />
|
||||||
<br/>
|
<br/>
|
||||||
<div id="articleContent"> </div>
|
<div id="articleContent"> </div>
|
||||||
<hr/>
|
<hr/>
|
||||||
|
@ -1,5 +1,28 @@
|
|||||||
|
/*
|
||||||
|
Port of Evopedia (offline wikipedia reader) in HTML5/Javascript, with Firefox OS as the primary target
|
||||||
|
The original application is at http://www.evopedia.info/
|
||||||
|
It uses wikipedia dumps located at http://dumpathome.evopedia.info/dumps/finished
|
||||||
|
|
||||||
var dataFile=document.getElementById('dataFile').files[0];
|
Author : Mossroy - mossroy@free.fr
|
||||||
|
|
||||||
|
License:
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU General Public License as published by the
|
||||||
|
Free Software Foundation; either version 3 of the License, or (at your
|
||||||
|
option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public
|
||||||
|
License along with this program; if not, see
|
||||||
|
<http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
*/
|
||||||
|
var dataFiles=document.getElementById('dataFiles').files;
|
||||||
var titleFile=document.getElementById('titleFile').files[0];
|
var titleFile=document.getElementById('titleFile').files[0];
|
||||||
|
|
||||||
var storage = navigator.getDeviceStorage('music');
|
var storage = navigator.getDeviceStorage('music');
|
||||||
@ -8,15 +31,15 @@ var storage = navigator.getDeviceStorage('music');
|
|||||||
if (!storage) {
|
if (!storage) {
|
||||||
//alert("no device storage available");
|
//alert("no device storage available");
|
||||||
document.getElementById('openLocalFiles').style.visibility="visible";
|
document.getElementById('openLocalFiles').style.visibility="visible";
|
||||||
document.getElementById('dataFile').addEventListener('change', handleDataFileSelect, false);
|
document.getElementById('dataFiles').addEventListener('change', handleDataFileSelect, false);
|
||||||
document.getElementById('titleFile').addEventListener('change', handleTitleFileSelect, false);
|
document.getElementById('titleFile').addEventListener('change', handleTitleFileSelect, false);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
var filerequest = storage.get('wikipedia_small_2010-08-14/wikipedia_00.dat');
|
var filerequest = storage.get('wikipedia_small_2010-08-14/wikipedia_00.dat');
|
||||||
//alert(filerequest);
|
//alert(filerequest);
|
||||||
filerequest.onsuccess = function() {
|
filerequest.onsuccess = function() {
|
||||||
dataFile = filerequest.result;
|
dataFiles[0] = filerequest.result;
|
||||||
//alert(dataFile);
|
//alert(dataFiles);
|
||||||
filerequest = storage.get('wikipedia_small_2010-08-14/titles.idx');
|
filerequest = storage.get('wikipedia_small_2010-08-14/titles.idx');
|
||||||
filerequest.onsuccess = function() {
|
filerequest.onsuccess = function() {
|
||||||
titleFile = filerequest.result;
|
titleFile = filerequest.result;
|
||||||
@ -34,6 +57,7 @@ else {
|
|||||||
|
|
||||||
function updateOffsetsFromTitle(selectValue) {
|
function updateOffsetsFromTitle(selectValue) {
|
||||||
var offsets=selectValue.split(/\|/);
|
var offsets=selectValue.split(/\|/);
|
||||||
|
document.getElementById("filenumber").value=offsets[0];
|
||||||
document.getElementById("blockstart").value=offsets[1];
|
document.getElementById("blockstart").value=offsets[1];
|
||||||
document.getElementById("blockoffset").value=offsets[2];
|
document.getElementById("blockoffset").value=offsets[2];
|
||||||
document.getElementById("length").value=offsets[3];
|
document.getElementById("length").value=offsets[3];
|
||||||
@ -99,29 +123,16 @@ function readAllTitlesFromIndex(titleFile) {
|
|||||||
blockoffset = readIntegerFrom4Bytes(byteArray,i+7);
|
blockoffset = readIntegerFrom4Bytes(byteArray,i+7);
|
||||||
length = readIntegerFrom4Bytes(byteArray,i+11);
|
length = readIntegerFrom4Bytes(byteArray,i+11);
|
||||||
var newLineIndex = i+15;
|
var newLineIndex = i+15;
|
||||||
/*
|
|
||||||
var buf = new ArrayBuffer();
|
|
||||||
var bufView = new Uint16Array(buf);
|
|
||||||
var j=0;
|
|
||||||
while (byteArray[newLineIndex]!=128) {
|
|
||||||
bufView[j] = byteArray[newLineIndex];
|
|
||||||
j++
|
|
||||||
newLineIndex++;
|
|
||||||
}
|
|
||||||
title = String.fromCharCode(bufView);
|
|
||||||
*/
|
|
||||||
while (newLineIndex<byteArray.length && byteArray[newLineIndex]!=128) {
|
while (newLineIndex<byteArray.length && byteArray[newLineIndex]!=128) {
|
||||||
newLineIndex++;
|
newLineIndex++;
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
for (var j=i+15;j<newLineIndex;j++) {
|
|
||||||
title += String.fromCharCode(byteArray[j]);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
// TODO : Read the title properly with UTF-8 encoding
|
|
||||||
title = utf8ByteArrayToString(byteArray,i+15,newLineIndex);
|
title = utf8ByteArrayToString(byteArray,i+15,newLineIndex);
|
||||||
|
|
||||||
comboTitleList.options[titleNumber] = new Option (title, filenumber+"|"+blockstart+"|"+blockoffset+"|"+length);
|
if (title) {
|
||||||
|
comboTitleList.options[titleNumber] = new Option (title, filenumber+"|"+blockstart+"|"+blockoffset+"|"+length);
|
||||||
|
}
|
||||||
titleNumber++;
|
titleNumber++;
|
||||||
i=newLineIndex-1;
|
i=newLineIndex-1;
|
||||||
}
|
}
|
||||||
@ -129,7 +140,7 @@ function readAllTitlesFromIndex(titleFile) {
|
|||||||
|
|
||||||
var blob = titleFile;
|
var blob = titleFile;
|
||||||
|
|
||||||
// Read in the image file as a binary string.
|
// Read in the image file as a binary string
|
||||||
reader.readAsArrayBuffer(blob);
|
reader.readAsArrayBuffer(blob);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -137,15 +148,40 @@ function readAllTitlesFromIndex(titleFile) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function readArticleFromHtmlForm(dataFile) {
|
function readArticleFromHtmlForm(dataFiles) {
|
||||||
if (dataFile) {
|
if (dataFiles && dataFiles.length>0) {
|
||||||
|
var filenumber = document.getElementById('filenumber').value;
|
||||||
var blockstart = document.getElementById('blockstart').value;
|
var blockstart = document.getElementById('blockstart').value;
|
||||||
var blockoffset = document.getElementById('blockoffset').value;
|
var blockoffset = document.getElementById('blockoffset').value;
|
||||||
var length = document.getElementById('length').value;
|
var length = document.getElementById('length').value;
|
||||||
|
var dataFile;
|
||||||
|
for (var i=0; i<dataFiles.length; i++) {
|
||||||
|
var fileName = dataFiles[i].name;
|
||||||
|
var prefixedFileNumber = "";
|
||||||
|
if (filenumber<10) {
|
||||||
|
prefixedFileNumber = "0"+filenumber;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
prefixedFileNumber = filenumber;
|
||||||
|
}
|
||||||
|
var expectedFileName = "wikipedia_"+prefixedFileNumber+".dat";
|
||||||
|
if (expectedFileName == fileName) {
|
||||||
|
dataFile = dataFiles[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!dataFile) {
|
||||||
|
if (filenumber==255) {
|
||||||
|
// TODO : handle redirects (filenumber==255)
|
||||||
|
alert("Redirects not implemented yet");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
alert("File number " + filenumber + " not found");
|
||||||
|
}
|
||||||
|
}
|
||||||
readArticleFromOffset(dataFile, blockstart, blockoffset, length);
|
readArticleFromOffset(dataFile, blockstart, blockoffset, length);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
alert("Data file not set");
|
alert("Data files not set");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -203,7 +239,7 @@ function errorHandler(evt) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function handleDataFileSelect(evt) {
|
function handleDataFileSelect(evt) {
|
||||||
dataFile = evt.target.files[0];
|
dataFiles = evt.target.files;
|
||||||
}
|
}
|
||||||
|
|
||||||
function handleTitleFileSelect(evt) {
|
function handleTitleFileSelect(evt) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user