Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
D
douban-api-proxy
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
captainwong
douban-api-proxy
Commits
cd546eb6
Commit
cd546eb6
authored
Jun 17, 2019
by
Ozzieisaacs
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Update comic reader js
parent
e67d7078
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
311 additions
and
292 deletions
+311
-292
archive.js
cps/static/js/archive/archive.js
+23
-24
rarvm.js
cps/static/js/archive/rarvm.js
+112
-106
unrar.js
cps/static/js/archive/unrar.js
+68
-65
untar.js
cps/static/js/archive/untar.js
+13
-10
unzip.js
cps/static/js/archive/unzip.js
+15
-21
bitstream.js
cps/static/js/io/bitstream.js
+23
-19
bytebuffer.js
cps/static/js/io/bytebuffer.js
+12
-9
bytestream.js
cps/static/js/io/bytestream.js
+12
-8
kthoom.js
cps/static/js/kthoom.js
+33
-30
No files found.
cps/static/js/archive/archive.js
View file @
cd546eb6
...
...
@@ -8,7 +8,7 @@
* Copyright(c) 2011 Google Inc.
*/
/* global bitjs */
/* global bitjs
, Uint8Array
*/
var
bitjs
=
bitjs
||
{};
bitjs
.
archive
=
bitjs
.
archive
||
{};
...
...
@@ -17,7 +17,7 @@ bitjs.archive = bitjs.archive || {};
// ===========================================================================
// Stolen from Closure because it's the best way to do Java-like inheritance.
bitjs
.
base
=
function
(
me
,
opt
_methodName
,
var_a
rgs
)
{
bitjs
.
base
=
function
(
me
,
opt
MethodName
,
varA
rgs
)
{
var
caller
=
arguments
.
callee
.
caller
;
if
(
caller
.
superClass_
)
{
// This is a constructor. Call the superclass constructor.
...
...
@@ -28,10 +28,10 @@ bitjs.archive = bitjs.archive || {};
var
args
=
Array
.
prototype
.
slice
.
call
(
arguments
,
2
);
var
foundCaller
=
false
;
for
(
var
ctor
=
me
.
constructor
;
ctor
;
ctor
=
ctor
.
superClass_
&&
ctor
.
superClass_
.
constructor
)
{
if
(
ctor
.
prototype
[
opt
_m
ethodName
]
===
caller
)
{
if
(
ctor
.
prototype
[
opt
M
ethodName
]
===
caller
)
{
foundCaller
=
true
;
}
else
if
(
foundCaller
)
{
return
ctor
.
prototype
[
opt
_m
ethodName
].
apply
(
me
,
args
);
return
ctor
.
prototype
[
opt
M
ethodName
].
apply
(
me
,
args
);
}
}
...
...
@@ -39,8 +39,8 @@ bitjs.archive = bitjs.archive || {};
// then one of two things happened:
// 1) The caller is an instance method.
// 2) This method was not called by the right caller.
if
(
me
[
opt
_m
ethodName
]
===
caller
)
{
return
me
.
constructor
.
prototype
[
opt
_m
ethodName
].
apply
(
me
,
args
);
if
(
me
[
opt
M
ethodName
]
===
caller
)
{
return
me
.
constructor
.
prototype
[
opt
M
ethodName
].
apply
(
me
,
args
);
}
else
{
throw
Error
(
"goog.base called from a method of one name "
+
...
...
@@ -49,10 +49,10 @@ bitjs.archive = bitjs.archive || {};
};
bitjs
.
inherits
=
function
(
childCtor
,
parentCtor
)
{
/** @constructor */
function
tempCtor
()
{};
t
empCtor
.
prototype
=
parentCtor
.
prototype
;
function
TempCtor
()
{}
T
empCtor
.
prototype
=
parentCtor
.
prototype
;
childCtor
.
superClass_
=
parentCtor
.
prototype
;
childCtor
.
prototype
=
new
t
empCtor
();
childCtor
.
prototype
=
new
T
empCtor
();
childCtor
.
prototype
.
constructor
=
childCtor
;
};
// ===========================================================================
...
...
@@ -188,10 +188,10 @@ bitjs.archive = bitjs.archive || {};
* Base class for all Unarchivers.
*
* @param {ArrayBuffer} arrayBuffer The Array Buffer.
* @param {string} opt
_p
athToBitJS Optional string for where the BitJS files are located.
* @param {string} opt
P
athToBitJS Optional string for where the BitJS files are located.
* @constructor
*/
bitjs
.
archive
.
Unarchiver
=
function
(
arrayBuffer
,
opt
_p
athToBitJS
)
{
bitjs
.
archive
.
Unarchiver
=
function
(
arrayBuffer
,
opt
P
athToBitJS
)
{
/**
* The ArrayBuffer object.
* @type {ArrayBuffer}
...
...
@@ -204,7 +204,7 @@ bitjs.archive = bitjs.archive || {};
* @type {string}
* @private
*/
this
.
pathToBitJS_
=
opt
_p
athToBitJS
||
"/"
;
this
.
pathToBitJS_
=
opt
P
athToBitJS
||
"/"
;
/**
* A map from event type to an array of listeners.
...
...
@@ -319,8 +319,8 @@ bitjs.archive = bitjs.archive || {};
* @extends {bitjs.archive.Unarchiver}
* @constructor
*/
bitjs
.
archive
.
Unzipper
=
function
(
arrayBuffer
,
opt
_p
athToBitJS
)
{
bitjs
.
base
(
this
,
arrayBuffer
,
opt
_p
athToBitJS
);
bitjs
.
archive
.
Unzipper
=
function
(
arrayBuffer
,
opt
P
athToBitJS
)
{
bitjs
.
base
(
this
,
arrayBuffer
,
opt
P
athToBitJS
);
};
bitjs
.
inherits
(
bitjs
.
archive
.
Unzipper
,
bitjs
.
archive
.
Unarchiver
);
bitjs
.
archive
.
Unzipper
.
prototype
.
getScriptFileName
=
function
()
{
...
...
@@ -332,8 +332,8 @@ bitjs.archive = bitjs.archive || {};
* @extends {bitjs.archive.Unarchiver}
* @constructor
*/
bitjs
.
archive
.
Unrarrer
=
function
(
arrayBuffer
,
opt
_p
athToBitJS
)
{
bitjs
.
base
(
this
,
arrayBuffer
,
opt
_p
athToBitJS
);
bitjs
.
archive
.
Unrarrer
=
function
(
arrayBuffer
,
opt
P
athToBitJS
)
{
bitjs
.
base
(
this
,
arrayBuffer
,
opt
P
athToBitJS
);
};
bitjs
.
inherits
(
bitjs
.
archive
.
Unrarrer
,
bitjs
.
archive
.
Unarchiver
);
bitjs
.
archive
.
Unrarrer
.
prototype
.
getScriptFileName
=
function
()
{
...
...
@@ -345,8 +345,8 @@ bitjs.archive = bitjs.archive || {};
* @extends {bitjs.archive.Unarchiver}
* @constructor
*/
bitjs
.
archive
.
Untarrer
=
function
(
arrayBuffer
,
opt
_p
athToBitJS
)
{
bitjs
.
base
(
this
,
arrayBuffer
,
opt
_p
athToBitJS
);
bitjs
.
archive
.
Untarrer
=
function
(
arrayBuffer
,
opt
P
athToBitJS
)
{
bitjs
.
base
(
this
,
arrayBuffer
,
opt
P
athToBitJS
);
};
bitjs
.
inherits
(
bitjs
.
archive
.
Untarrer
,
bitjs
.
archive
.
Unarchiver
);
bitjs
.
archive
.
Untarrer
.
prototype
.
getScriptFileName
=
function
()
{
...
...
@@ -357,20 +357,19 @@ bitjs.archive = bitjs.archive || {};
* Factory method that creates an unarchiver based on the byte signature found
* in the arrayBuffer.
* @param {ArrayBuffer} ab
* @param {string=} opt
_p
athToBitJS Path to the unarchiver script files.
* @param {string=} opt
P
athToBitJS Path to the unarchiver script files.
* @return {bitjs.archive.Unarchiver}
*/
bitjs
.
archive
.
GetUnarchiver
=
function
(
ab
,
opt
_p
athToBitJS
)
{
bitjs
.
archive
.
GetUnarchiver
=
function
(
ab
,
opt
P
athToBitJS
)
{
var
unarchiver
=
null
;
var
pathToBitJS
=
opt
_pathToBitJS
||
''
;
var
pathToBitJS
=
opt
PathToBitJS
||
""
;
var
h
=
new
Uint8Array
(
ab
,
0
,
10
);
if
(
h
[
0
]
==
0x52
&&
h
[
1
]
==
0x61
&&
h
[
2
]
==
0x72
&&
h
[
3
]
==
0x21
)
{
// Rar!
if
(
h
[
0
]
==
=
0x52
&&
h
[
1
]
===
0x61
&&
h
[
2
]
===
0x72
&&
h
[
3
]
=
==
0x21
)
{
// Rar!
unarchiver
=
new
bitjs
.
archive
.
Unrarrer
(
ab
,
pathToBitJS
);
}
else
if
(
h
[
0
]
==
80
&&
h
[
1
]
==
75
)
{
// PK (Zip)
}
else
if
(
h
[
0
]
==
=
80
&&
h
[
1
]
=
==
75
)
{
// PK (Zip)
unarchiver
=
new
bitjs
.
archive
.
Unzipper
(
ab
,
pathToBitJS
);
}
else
{
// Try with tar
console
.
log
(
'geter'
);
unarchiver
=
new
bitjs
.
archive
.
Untarrer
(
ab
,
pathToBitJS
);
}
return
unarchiver
;
...
...
cps/static/js/archive/rarvm.js
View file @
cd546eb6
This diff is collapsed.
Click to expand it.
cps/static/js/archive/unrar.js
View file @
cd546eb6
This diff is collapsed.
Click to expand it.
cps/static/js/archive/untar.js
View file @
cd546eb6
...
...
@@ -10,9 +10,11 @@
* TAR format: http://www.gnu.org/software/automake/manual/tar/Standard.html
*/
/* global bitjs, importScripts, Uint8Array */
// This file expects to be invoked as a Worker (see onmessage below).
importScripts
(
'../io/bytestream.js'
);
importScripts
(
'archive.js'
);
importScripts
(
"../io/bytestream.js"
);
importScripts
(
"archive.js"
);
// Progress variables.
var
currentFilename
=
""
;
...
...
@@ -21,6 +23,7 @@ var currentBytesUnarchivedInFile = 0;
var
currentBytesUnarchived
=
0
;
var
totalUncompressedBytesInArchive
=
0
;
var
totalFilesInArchive
=
0
;
var
allLocalFiles
=
[];
// Helper functions.
var
info
=
function
(
str
)
{
...
...
@@ -44,8 +47,8 @@ var postProgress = function() {
currentBytesUnarchivedInFile
,
currentBytesUnarchived
,
totalUncompressedBytesInArchive
,
totalFilesInArchive
,
));
totalFilesInArchive
));
};
// takes a ByteStream and parses out the local file information
...
...
@@ -66,7 +69,7 @@ var TarLocalFile = function(bstream) {
this
.
linkname
=
readCleanString
(
bstream
,
100
);
this
.
maybeMagic
=
readCleanString
(
bstream
,
6
);
if
(
this
.
maybeMagic
==
"ustar"
)
{
if
(
this
.
maybeMagic
==
=
"ustar"
)
{
this
.
version
=
readCleanString
(
bstream
,
2
);
this
.
uname
=
readCleanString
(
bstream
,
32
);
this
.
gname
=
readCleanString
(
bstream
,
32
);
...
...
@@ -103,14 +106,14 @@ var TarLocalFile = function(bstream) {
}
// Round up to 512-byte blocks.
var
remaining
=
512
-
bytesRead
%
512
;
var
remaining
=
512
-
(
bytesRead
%
512
)
;
if
(
remaining
>
0
&&
remaining
<
512
)
{
bstream
.
readBytes
(
remaining
);
}
}
else
if
(
this
.
typeflag
==
5
)
{
info
(
" This is a directory."
);
}
}
}
;
var
untar
=
function
(
arrayBuffer
)
{
postMessage
(
new
bitjs
.
archive
.
UnarchiveStartEvent
());
...
...
@@ -125,7 +128,7 @@ var untar = function(arrayBuffer) {
var
bstream
=
new
bitjs
.
io
.
ByteStream
(
arrayBuffer
);
postProgress
();
// While we don't encounter an empty block, keep making TarLocalFiles.
while
(
bstream
.
peekNumber
(
4
)
!=
0
)
{
while
(
bstream
.
peekNumber
(
4
)
!=
=
0
)
{
var
oneLocalFile
=
new
TarLocalFile
(
bstream
);
if
(
oneLocalFile
&&
oneLocalFile
.
isValid
)
{
// If we make it to this point and haven't thrown an error, we have successfully
...
...
@@ -159,8 +162,8 @@ onmessage = function(event) {
// Overrun the buffer.
// unarchiveState = UnarchiveState.WAITING;
}
else
{
console
.
erro
r
(
"Found an error while untarring"
);
console
.
log
(
e
);
er
r
(
"Found an error while untarring"
);
err
(
e
);
throw
e
;
}
}
...
...
cps/static/js/archive/unzip.js
View file @
cd546eb6
...
...
@@ -14,10 +14,10 @@
/* global bitjs, importScripts, Uint8Array*/
// This file expects to be invoked as a Worker (see onmessage below).
importScripts
(
'../io/bitstream.js'
);
importScripts
(
'../io/bytebuffer.js'
);
importScripts
(
'../io/bytestream.js'
);
importScripts
(
'archive.js'
);
importScripts
(
"../io/bitstream.js"
);
importScripts
(
"../io/bytebuffer.js"
);
importScripts
(
"../io/bytestream.js"
);
importScripts
(
"archive.js"
);
// Progress variables.
var
currentFilename
=
""
;
...
...
@@ -118,13 +118,11 @@ ZipLocalFile.prototype.unzip = function() {
currentBytesUnarchivedInFile
=
this
.
compressedSize
;
currentBytesUnarchived
+=
this
.
compressedSize
;
this
.
fileData
=
zeroCompression
(
this
.
fileData
,
this
.
uncompressedSize
);
}
// version == 20, compression method == 8 (DEFLATE)
else
if
(
this
.
compressionMethod
===
8
)
{
}
else
if
(
this
.
compressionMethod
===
8
)
{
// version == 20, compression method == 8 (DEFLATE)
info
(
"ZIP v2.0, DEFLATE: "
+
this
.
filename
+
" ("
+
this
.
compressedSize
+
" bytes)"
);
this
.
fileData
=
inflate
(
this
.
fileData
,
this
.
uncompressedSize
);
}
else
{
}
else
{
err
(
"UNSUPPORTED VERSION/FORMAT: ZIP v"
+
this
.
version
+
", compression method="
+
this
.
compressionMethod
+
": "
+
this
.
filename
+
" ("
+
this
.
compressedSize
+
" bytes)"
);
this
.
fileData
=
null
;
}
...
...
@@ -497,13 +495,11 @@ function inflateBlockData(bstream, hcLiteralTable, hcDistanceTable, buffer) {
// copy literal byte to output
buffer
.
insertByte
(
symbol
);
blockSize
++
;
}
else
{
}
else
{
// end of block reached
if
(
symbol
===
256
)
{
break
;
}
else
{
}
else
{
var
lengthLookup
=
LengthLookupTable
[
symbol
-
257
],
length
=
lengthLookup
[
1
]
+
bstream
.
readBits
(
lengthLookup
[
0
]),
distLookup
=
DistLookupTable
[
decodeSymbol
(
bstream
,
hcDistanceTable
)],
...
...
@@ -566,7 +562,7 @@ function inflate(compressedData, numDecompressedBytes) {
blockSize
=
0
;
// ++numBlocks;
// no compression
if
(
bType
==
0
)
{
if
(
bType
==
=
0
)
{
// skip remaining bits in this byte
while
(
bstream
.
bitPtr
!==
0
)
bstream
.
readBits
(
1
);
var
len
=
bstream
.
readBits
(
16
);
...
...
@@ -575,13 +571,11 @@ function inflate(compressedData, numDecompressedBytes) {
if
(
len
>
0
)
buffer
.
insertBytes
(
bstream
.
readBytes
(
len
));
blockSize
=
len
;
}
// fixed Huffman codes
else
if
(
bType
===
1
)
{
}
else
if
(
bType
===
1
)
{
// fixed Huffman codes
blockSize
=
inflateBlockData
(
bstream
,
getFixedLiteralTable
(),
getFixedDistanceTable
(),
buffer
);
}
// dynamic Huffman codes
else
if
(
bType
===
2
)
{
}
else
if
(
bType
===
2
)
{
// dynamic Huffman codes
var
numLiteralLengthCodes
=
bstream
.
readBits
(
5
)
+
257
;
var
numDistanceCodes
=
bstream
.
readBits
(
5
)
+
1
,
numCodeLengthCodes
=
bstream
.
readBits
(
4
)
+
4
;
...
...
@@ -664,4 +658,4 @@ function inflate(compressedData, numDecompressedBytes) {
// event.data.file has the ArrayBuffer.
onmessage
=
function
(
event
)
{
unzip
(
event
.
data
.
file
,
true
);
};
\ No newline at end of file
};
cps/static/js/io/bitstream.js
100644 → 100755
View file @
cd546eb6
...
...
@@ -8,6 +8,9 @@
* Copyright(c) 2011 Google Inc.
* Copyright(c) 2011 antimatter15
*/
/* global bitjs, Uint8Array */
var
bitjs
=
bitjs
||
{};
bitjs
.
io
=
bitjs
.
io
||
{};
...
...
@@ -30,20 +33,20 @@ bitjs.io = bitjs.io || {};
* @param {ArrayBuffer} ab An ArrayBuffer object or a Uint8Array.
* @param {boolean} rtl Whether the stream reads bits from the byte starting
* from bit 7 to 0 (true) or bit 0 to 7 (false).
* @param {Number} opt
_o
ffset The offset into the ArrayBuffer
* @param {Number} opt
_l
ength The length of this BitStream
* @param {Number} opt
O
ffset The offset into the ArrayBuffer
* @param {Number} opt
L
ength The length of this BitStream
*/
bitjs
.
io
.
BitStream
=
function
(
ab
,
rtl
,
opt
_offset
,
opt_l
ength
)
{
bitjs
.
io
.
BitStream
=
function
(
ab
,
rtl
,
opt
Offset
,
optL
ength
)
{
if
(
!
ab
||
!
ab
.
toString
||
ab
.
toString
()
!==
"[object ArrayBuffer]"
)
{
throw
"Error! BitArray constructed with an invalid ArrayBuffer object"
;
}
var
offset
=
opt
_o
ffset
||
0
;
var
length
=
opt
_l
ength
||
ab
.
byteLength
;
var
offset
=
opt
O
ffset
||
0
;
var
length
=
opt
L
ength
||
ab
.
byteLength
;
this
.
bytes
=
new
Uint8Array
(
ab
,
offset
,
length
);
this
.
bytePtr
=
0
;
// tracks which byte we are on
this
.
bitPtr
=
0
;
// tracks which bit we are on (can have values 0 through 7)
this
.
peekBits
=
rtl
?
this
.
peekBits
_rtl
:
this
.
peekBits_l
tr
;
this
.
peekBits
=
rtl
?
this
.
peekBits
Rtl
:
this
.
peekBitsL
tr
;
};
...
...
@@ -57,8 +60,8 @@ bitjs.io = bitjs.io || {};
* @param {boolean=} movePointers Whether to move the pointer, defaults false.
* @return {number} The peeked bits, as an unsigned number.
*/
bitjs
.
io
.
BitStream
.
prototype
.
peekBits
_l
tr
=
function
(
n
,
movePointers
)
{
if
(
n
<=
0
||
typeof
n
!=
typeof
1
)
{
bitjs
.
io
.
BitStream
.
prototype
.
peekBits
L
tr
=
function
(
n
,
movePointers
)
{
if
(
n
<=
0
||
typeof
n
!=
=
typeof
1
)
{
return
0
;
}
...
...
@@ -77,12 +80,13 @@ bitjs.io = bitjs.io || {};
if
(
bytePtr
>=
bytes
.
length
)
{
throw
"Error! Overflowed the bit stream! n="
+
n
+
", bytePtr="
+
bytePtr
+
", bytes.length="
+
bytes
.
length
+
", bitPtr="
+
bitPtr
;
return
-
1
;
//
return -1;
}
var
numBitsLeftInThisByte
=
(
8
-
bitPtr
);
var
mask
;
if
(
n
>=
numBitsLeftInThisByte
)
{
var
mask
=
(
BITMASK
[
numBitsLeftInThisByte
]
<<
bitPtr
);
mask
=
(
BITMASK
[
numBitsLeftInThisByte
]
<<
bitPtr
);
result
|=
(((
bytes
[
bytePtr
]
&
mask
)
>>
bitPtr
)
<<
bitsIn
);
bytePtr
++
;
...
...
@@ -90,7 +94,7 @@ bitjs.io = bitjs.io || {};
bitsIn
+=
numBitsLeftInThisByte
;
n
-=
numBitsLeftInThisByte
;
}
else
{
var
mask
=
(
BITMASK
[
n
]
<<
bitPtr
);
mask
=
(
BITMASK
[
n
]
<<
bitPtr
);
result
|=
(((
bytes
[
bytePtr
]
&
mask
)
>>
bitPtr
)
<<
bitsIn
);
bitPtr
+=
n
;
...
...
@@ -118,8 +122,8 @@ bitjs.io = bitjs.io || {};
* @param {boolean=} movePointers Whether to move the pointer, defaults false.
* @return {number} The peeked bits, as an unsigned number.
*/
bitjs
.
io
.
BitStream
.
prototype
.
peekBits
_r
tl
=
function
(
n
,
movePointers
)
{
if
(
n
<=
0
||
typeof
n
!=
typeof
1
)
{
bitjs
.
io
.
BitStream
.
prototype
.
peekBits
R
tl
=
function
(
n
,
movePointers
)
{
if
(
n
<=
0
||
typeof
n
!=
=
typeof
1
)
{
return
0
;
}
...
...
@@ -138,7 +142,7 @@ bitjs.io = bitjs.io || {};
if
(
bytePtr
>=
bytes
.
length
)
{
throw
"Error! Overflowed the bit stream! n="
+
n
+
", bytePtr="
+
bytePtr
+
", bytes.length="
+
bytes
.
length
+
", bitPtr="
+
bitPtr
;
return
-
1
;
//
return -1;
}
var
numBitsLeftInThisByte
=
(
8
-
bitPtr
);
...
...
@@ -198,19 +202,19 @@ bitjs.io = bitjs.io || {};
* @return {Uint8Array} The subarray.
*/
bitjs
.
io
.
BitStream
.
prototype
.
peekBytes
=
function
(
n
,
movePointers
)
{
if
(
n
<=
0
||
typeof
n
!=
typeof
1
)
{
if
(
n
<=
0
||
typeof
n
!=
=
typeof
1
)
{
return
0
;
}
// from http://tools.ietf.org/html/rfc1951#page-11
// "Any bits of input up to the next byte boundary are ignored."
while
(
this
.
bitPtr
!=
0
)
{
while
(
this
.
bitPtr
!=
=
0
)
{
this
.
readBits
(
1
);
}
var
movePointers
=
movePointers
||
false
;
var
bytePtr
=
this
.
bytePtr
,
bitPtr
=
this
.
bitPtr
;
var
bytePtr
=
this
.
bytePtr
;
//
bitPtr = this.bitPtr;
var
result
=
this
.
bytes
.
subarray
(
bytePtr
,
bytePtr
+
n
);
...
...
@@ -230,4 +234,4 @@ bitjs.io = bitjs.io || {};
return
this
.
peekBytes
(
n
,
true
);
};
})();
\ No newline at end of file
})();
cps/static/js/io/bytebuffer.js
View file @
cd546eb6
...
...
@@ -8,6 +8,9 @@
* Copyright(c) 2011 Google Inc.
* Copyright(c) 2011 antimatter15
*/
/* global bitjs, Uint8Array */
var
bitjs
=
bitjs
||
{};
bitjs
.
io
=
bitjs
.
io
||
{};
...
...
@@ -20,7 +23,7 @@ bitjs.io = bitjs.io || {};
* @constructor
*/
bitjs
.
io
.
ByteBuffer
=
function
(
numBytes
)
{
if
(
typeof
numBytes
!=
typeof
1
||
numBytes
<=
0
)
{
if
(
typeof
numBytes
!=
=
typeof
1
||
numBytes
<=
0
)
{
throw
"Error! ByteBuffer initialized with '"
+
numBytes
+
"'"
;
}
this
.
data
=
new
Uint8Array
(
numBytes
);
...
...
@@ -55,14 +58,14 @@ bitjs.io = bitjs.io || {};
*/
bitjs
.
io
.
ByteBuffer
.
prototype
.
writeNumber
=
function
(
num
,
numBytes
)
{
if
(
numBytes
<
1
)
{
throw
'Trying to write into too few bytes: '
+
numBytes
;
throw
"Trying to write into too few bytes: "
+
numBytes
;
}
if
(
num
<
0
)
{
throw
'Trying to write a negative number ('
+
num
+
') as an unsigned number to an ArrayBuffer'
;
throw
"Trying to write a negative number ("
+
num
+
") as an unsigned number to an ArrayBuffer"
;
}
if
(
num
>
(
Math
.
pow
(
2
,
numBytes
*
8
)
-
1
))
{
throw
'Trying to write '
+
num
+
' into only '
+
numBytes
+
' bytes'
;
throw
"Trying to write "
+
num
+
" into only "
+
numBytes
+
" bytes"
;
}
// Roll 8-bits at a time into an array of bytes.
...
...
@@ -85,12 +88,12 @@ bitjs.io = bitjs.io || {};
*/
bitjs
.
io
.
ByteBuffer
.
prototype
.
writeSignedNumber
=
function
(
num
,
numBytes
)
{
if
(
numBytes
<
1
)
{
throw
'Trying to write into too few bytes: '
+
numBytes
;
throw
"Trying to write into too few bytes: "
+
numBytes
;
}
var
HALF
=
Math
.
pow
(
2
,
(
numBytes
*
8
)
-
1
);
if
(
num
>=
HALF
||
num
<
-
HALF
)
{
throw
'Trying to write '
+
num
+
' into only '
+
numBytes
+
' bytes'
;
throw
"Trying to write "
+
num
+
" into only "
+
numBytes
+
" bytes"
;
}
// Roll 8-bits at a time into an array of bytes.
...
...
@@ -112,10 +115,10 @@ bitjs.io = bitjs.io || {};
for
(
var
i
=
0
;
i
<
str
.
length
;
++
i
)
{
var
curByte
=
str
.
charCodeAt
(
i
);
if
(
curByte
<
0
||
curByte
>
255
)
{
throw
'Trying to write a non-ASCII string!'
;
throw
"Trying to write a non-ASCII string!"
;
}
this
.
insertByte
(
curByte
);
}
};
})();
\ No newline at end of file
})();
cps/static/js/io/bytestream.js
View file @
cd546eb6
...
...
@@ -8,6 +8,9 @@
* Copyright(c) 2011 Google Inc.
* Copyright(c) 2011 antimatter15
*/
/* global bitjs, Uint8Array */
var
bitjs
=
bitjs
||
{};
bitjs
.
io
=
bitjs
.
io
||
{};
...
...
@@ -19,13 +22,13 @@ bitjs.io = bitjs.io || {};
* out of an ArrayBuffer. In this buffer, everything must be byte-aligned.
*
* @param {ArrayBuffer} ab The ArrayBuffer object.
* @param {number=} opt
_o
ffset The offset into the ArrayBuffer
* @param {number=} opt
_l
ength The length of this BitStream
* @param {number=} opt
O
ffset The offset into the ArrayBuffer
* @param {number=} opt
L
ength The length of this BitStream
* @constructor
*/
bitjs
.
io
.
ByteStream
=
function
(
ab
,
opt
_offset
,
opt_l
ength
)
{
var
offset
=
opt
_o
ffset
||
0
;
var
length
=
opt
_l
ength
||
ab
.
byteLength
;
bitjs
.
io
.
ByteStream
=
function
(
ab
,
opt
Offset
,
optL
ength
)
{
var
offset
=
opt
O
ffset
||
0
;
var
length
=
opt
L
ength
||
ab
.
byteLength
;
this
.
bytes
=
new
Uint8Array
(
ab
,
offset
,
length
);
this
.
ptr
=
0
;
};
...
...
@@ -40,8 +43,9 @@ bitjs.io = bitjs.io || {};
*/
bitjs
.
io
.
ByteStream
.
prototype
.
peekNumber
=
function
(
n
)
{
// TODO: return error if n would go past the end of the stream?
if
(
n
<=
0
||
typeof
n
!=
typeof
1
)
if
(
n
<=
0
||
typeof
n
!=
=
typeof
1
)
{
return
-
1
;
}
var
result
=
0
;
// read from last byte to first byte and roll them in
...
...
@@ -105,7 +109,7 @@ bitjs.io = bitjs.io || {};
* @return {Uint8Array} The subarray.
*/
bitjs
.
io
.
ByteStream
.
prototype
.
peekBytes
=
function
(
n
,
movePointers
)
{
if
(
n
<=
0
||
typeof
n
!=
typeof
1
)
{
if
(
n
<=
0
||
typeof
n
!=
=
typeof
1
)
{
return
null
;
}
...
...
@@ -135,7 +139,7 @@ bitjs.io = bitjs.io || {};
* @return {string} The next n bytes as a string.
*/
bitjs
.
io
.
ByteStream
.
prototype
.
peekString
=
function
(
n
)
{
if
(
n
<=
0
||
typeof
n
!=
typeof
1
)
{
if
(
n
<=
0
||
typeof
n
!=
=
typeof
1
)
{
return
""
;
}
...
...
cps/static/js/kthoom.js
View file @
cd546eb6
...
...
@@ -15,7 +15,10 @@
* Typed Arrays: http://www.khronos.org/registry/typedarray/specs/latest/#6
*/
/* global screenfull, bitjs */
/* global screenfull, bitjs, Uint8Array, opera */
/* exported init, event */
if
(
window
.
opera
)
{
window
.
console
.
log
=
function
(
str
)
{
opera
.
postError
(
str
);
...
...
@@ -101,12 +104,12 @@ kthoom.setSettings = function() {
var
createURLFromArray
=
function
(
array
,
mimeType
)
{
var
offset
=
array
.
byteOffset
;
var
len
=
array
.
byteLength
;
var
url
;
//
var url;
var
blob
;
if
(
mimeType
===
'image/xml+svg'
)
{
const
xmlStr
=
new
TextDecoder
(
'utf-8'
).
decode
(
array
);
return
'data:image/svg+xml;UTF-8,'
+
encodeURIComponent
(
xmlStr
);
if
(
mimeType
===
"image/xml+svg"
)
{
var
xmlStr
=
new
TextDecoder
(
"utf-8"
).
decode
(
array
);
return
"data:image/svg+xml;UTF-8,"
+
encodeURIComponent
(
xmlStr
);
}
// TODO: Move all this browser support testing to a common place
...
...
@@ -140,7 +143,7 @@ kthoom.ImageFile = function(file) {
var
fileExtension
=
file
.
filename
.
split
(
"."
).
pop
().
toLowerCase
();
this
.
mimeType
=
fileExtension
===
"png"
?
"image/png"
:
(
fileExtension
===
"jpg"
||
fileExtension
===
"jpeg"
)
?
"image/jpeg"
:
fileExtension
===
"gif"
?
"image/gif"
:
fileExtension
==
'svg'
?
'image/xml+svg'
:
undefined
;
fileExtension
===
"gif"
?
"image/gif"
:
fileExtension
==
=
"svg"
?
"image/xml+svg"
:
undefined
;
if
(
this
.
mimeType
!==
undefined
)
{
this
.
dataURI
=
createURLFromArray
(
file
.
fileData
,
this
.
mimeType
);
this
.
data
=
file
;
...
...
@@ -154,17 +157,18 @@ function initProgressClick() {
currentImage
=
page
;
updatePage
();
});
}
;
}
function
loadFromArrayBuffer
(
ab
)
{
var
start
=
(
new
Date
).
getTime
();
var
h
=
new
Uint8Array
(
ab
,
0
,
10
);
var
pathToBitJS
=
"../../static/js/archive/"
;
var
lastCompletion
=
0
;
if
(
h
[
0
]
===
0x52
&&
h
[
1
]
===
0x61
&&
h
[
2
]
===
0x72
&&
h
[
3
]
===
0x21
)
{
//Rar!
unarchiver
=
new
bitjs
.
archive
.
Unrarrer
(
ab
,
pathToBitJS
);
}
else
if
(
h
[
0
]
===
80
&&
h
[
1
]
===
75
)
{
//PK (Zip)
unarchiver
=
new
bitjs
.
archive
.
Unzipper
(
ab
,
pathToBitJS
);
}
else
if
(
h
[
0
]
==
255
&&
h
[
1
]
==
216
)
{
// JPEG
}
else
if
(
h
[
0
]
==
=
255
&&
h
[
1
]
=
==
216
)
{
// JPEG
// ToDo: check
updateProgress
(
100
);
lastCompletion
=
100
;
...
...
@@ -180,12 +184,12 @@ function loadFromArrayBuffer(ab) {
if
(
totalImages
===
0
)
{
totalImages
=
e
.
totalFilesInArchive
;
}
updateProgress
(
percentage
*
100
);
updateProgress
(
percentage
*
100
);
lastCompletion
=
percentage
*
100
;
});
unarchiver
.
addEventListener
(
bitjs
.
archive
.
UnarchiveEvent
.
Type
.
INFO
,
function
(
e
)
{
// console.log(e.msg);
77
Enable debug output here
// console.log(e.msg);
//
Enable debug output here
});
unarchiver
.
addEventListener
(
bitjs
.
archive
.
UnarchiveEvent
.
Type
.
EXTRACT
,
function
(
e
)
{
...
...
@@ -211,8 +215,7 @@ function loadFromArrayBuffer(ab) {
if
(
imageFiles
.
length
===
currentImage
+
1
)
{
updatePage
(
lastCompletion
);
}
}
else
{
}
else
{
totalImages
--
;
}
}
...
...
@@ -231,22 +234,22 @@ function loadFromArrayBuffer(ab) {
function
scrollTocToActive
()
{
// Scroll to the thumbnail in the TOC on page change
$
(
'#tocView'
).
stop
().
animate
({
scrollTop
:
$
(
'#tocView a.active'
).
position
().
top
$
(
"#tocView"
).
stop
().
animate
({
scrollTop
:
$
(
"#tocView a.active"
).
position
().
top
},
200
);
}
function
updatePage
()
{
$
(
'.page'
).
text
((
currentImage
+
1
)
+
"/"
+
totalImages
);
$
(
".page"
).
text
((
currentImage
+
1
)
+
"/"
+
totalImages
);
// Mark the current page in the TOC
$
(
'#tocView a[data-page]'
)
$
(
"#tocView a[data-page]"
)
// Remove the currently active thumbnail
.
removeClass
(
'active'
)
.
removeClass
(
"active"
)
// Find the new one
.
filter
(
'[data-page='
+
(
currentImage
+
1
)
+
']'
)
.
filter
(
"[data-page="
+
(
currentImage
+
1
)
+
"]"
)
// Set it to active
.
addClass
(
'active'
);
.
addClass
(
"active"
);
scrollTocToActive
();
updateProgress
();
...
...
@@ -270,8 +273,8 @@ function updateProgress(loadPercentage) {
if
(
loadPercentage
===
100
)
{
$
(
"#progress"
)
.
removeClass
(
'loading'
)
.
find
(
".load"
).
text
(
''
);
.
removeClass
(
"loading"
)
.
find
(
".load"
).
text
(
""
);
}
}
...
...
@@ -326,7 +329,7 @@ function setImage(url) {
xhr
.
onload
=
function
()
{
$
(
"#mainText"
).
css
(
"display"
,
""
);
$
(
"#mainText"
).
innerHTML
(
"<iframe style=
\"
width:100%;height:700px;border:0
\"
src=
\"
data:text/html,"
+
escape
(
xhr
.
responseText
)
+
"
\"
></iframe>"
);
}
}
;
xhr
.
send
(
null
);
}
else
if
(
!
/
(
jpg|jpeg|png|gif
)
$/
.
test
(
imageFiles
[
currentImage
].
filename
)
&&
imageFiles
[
currentImage
].
data
.
uncompressedSize
<
10
*
1024
)
{
xhr
.
open
(
"GET"
,
url
,
true
);
...
...
@@ -378,17 +381,17 @@ function setImage(url) {
function
showLeftPage
()
{
if
(
settings
.
direction
===
0
)
{
showPrevPage
()
showPrevPage
()
;
}
else
{
showNextPage
()
showNextPage
()
;
}
}
function
showRightPage
()
{
if
(
settings
.
direction
===
0
)
{
showNextPage
()
showNextPage
()
;
}
else
{
showPrevPage
()
showPrevPage
()
;
}
}
...
...
@@ -504,7 +507,7 @@ function keyHandler(evt) {
updateScale
(
false
);
break
;
case
kthoom
.
Key
.
SPACE
:
var
container
=
$
(
'#mainContent'
);
var
container
=
$
(
"#mainContent"
);
var
atTop
=
container
.
scrollTop
()
===
0
;
var
atBottom
=
container
.
scrollTop
()
>=
container
[
0
].
scrollHeight
-
container
.
height
();
...
...
@@ -577,9 +580,9 @@ function init(filename) {
$
(
this
).
toggleClass
(
"icon-menu icon-right"
);
// We need this in a timeout because if we call it during the CSS transition, IE11 shakes the page ¯\_(ツ)_/¯
setTimeout
(
function
(){
setTimeout
(
function
()
{
// Focus on the TOC or the main content area, depending on which is open
$
(
'#main:not(.closed) #mainContent, #sidebar.open #tocView'
).
focus
();
$
(
"#main:not(.closed) #mainContent, #sidebar.open #tocView"
).
focus
();
scrollTocToActive
();
},
500
);
});
...
...
@@ -630,7 +633,7 @@ function init(filename) {
}
// Focus the scrollable area so that keyboard scrolling work as expected
$
(
'#mainContent'
).
focus
();
$
(
"#mainContent"
).
focus
();
$
(
"#mainImage"
).
click
(
function
(
evt
)
{
// Firefox does not support offsetX/Y so we have to manually calculate
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment