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
a159bb0b
Commit
a159bb0b
authored
Sep 17, 2017
by
OzzieIsaacs
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Code Csmetics kthoom integration
parent
5b9b36f9
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
791 additions
and
791 deletions
+791
-791
archive.js
cps/static/js/archive.js
+326
-325
io.js
cps/static/js/io.js
+465
-466
No files found.
cps/static/js/archive.js
View file @
a159bb0b
...
@@ -13,9 +13,9 @@ bitjs.archive = bitjs.archive || {};
...
@@ -13,9 +13,9 @@ bitjs.archive = bitjs.archive || {};
(
function
()
{
(
function
()
{
// ===========================================================================
// ===========================================================================
// Stolen from Closure because it's the best way to do Java-like inheritance.
// Stolen from Closure because it's the best way to do Java-like inheritance.
bitjs
.
base
=
function
(
me
,
opt_methodName
,
var_args
)
{
bitjs
.
base
=
function
(
me
,
opt_methodName
,
var_args
)
{
var
caller
=
arguments
.
callee
.
caller
;
var
caller
=
arguments
.
callee
.
caller
;
if
(
caller
.
superClass_
)
{
if
(
caller
.
superClass_
)
{
// This is a constructor. Call the superclass constructor.
// This is a constructor. Call the superclass constructor.
...
@@ -45,50 +45,50 @@ bitjs.base = function(me, opt_methodName, var_args) {
...
@@ -45,50 +45,50 @@ bitjs.base = function(me, opt_methodName, var_args) {
'goog.base called from a method of one name '
+
'goog.base called from a method of one name '
+
'to a method of a different name'
);
'to a method of a different name'
);
}
}
};
};
bitjs
.
inherits
=
function
(
childCtor
,
parentCtor
)
{
bitjs
.
inherits
=
function
(
childCtor
,
parentCtor
)
{
/** @constructor */
/** @constructor */
function
tempCtor
()
{};
function
tempCtor
()
{};
tempCtor
.
prototype
=
parentCtor
.
prototype
;
tempCtor
.
prototype
=
parentCtor
.
prototype
;
childCtor
.
superClass_
=
parentCtor
.
prototype
;
childCtor
.
superClass_
=
parentCtor
.
prototype
;
childCtor
.
prototype
=
new
tempCtor
();
childCtor
.
prototype
=
new
tempCtor
();
childCtor
.
prototype
.
constructor
=
childCtor
;
childCtor
.
prototype
.
constructor
=
childCtor
;
};
};
// ===========================================================================
// ===========================================================================
/**
/**
* An unarchive event.
* An unarchive event.
*
*
* @param {string} type The event type.
* @param {string} type The event type.
* @constructor
* @constructor
*/
*/
bitjs
.
archive
.
UnarchiveEvent
=
function
(
type
)
{
bitjs
.
archive
.
UnarchiveEvent
=
function
(
type
)
{
/**
/**
* The event type.
* The event type.
*
*
* @type {string}
* @type {string}
*/
*/
this
.
type
=
type
;
this
.
type
=
type
;
};
};
/**
/**
* The UnarchiveEvent types.
* The UnarchiveEvent types.
*/
*/
bitjs
.
archive
.
UnarchiveEvent
.
Type
=
{
bitjs
.
archive
.
UnarchiveEvent
.
Type
=
{
START
:
'start'
,
START
:
'start'
,
PROGRESS
:
'progress'
,
PROGRESS
:
'progress'
,
EXTRACT
:
'extract'
,
EXTRACT
:
'extract'
,
FINISH
:
'finish'
,
FINISH
:
'finish'
,
INFO
:
'info'
,
INFO
:
'info'
,
ERROR
:
'error'
ERROR
:
'error'
};
};
/**
/**
* Useful for passing info up to the client (for debugging).
* Useful for passing info up to the client (for debugging).
*
*
* @param {string} msg The info message.
* @param {string} msg The info message.
*/
*/
bitjs
.
archive
.
UnarchiveInfoEvent
=
function
(
msg
)
{
bitjs
.
archive
.
UnarchiveInfoEvent
=
function
(
msg
)
{
bitjs
.
base
(
this
,
bitjs
.
archive
.
UnarchiveEvent
.
Type
.
INFO
);
bitjs
.
base
(
this
,
bitjs
.
archive
.
UnarchiveEvent
.
Type
.
INFO
);
/**
/**
...
@@ -97,15 +97,15 @@ bitjs.archive.UnarchiveInfoEvent = function(msg) {
...
@@ -97,15 +97,15 @@ bitjs.archive.UnarchiveInfoEvent = function(msg) {
* @type {string}
* @type {string}
*/
*/
this
.
msg
=
msg
;
this
.
msg
=
msg
;
};
};
bitjs
.
inherits
(
bitjs
.
archive
.
UnarchiveInfoEvent
,
bitjs
.
archive
.
UnarchiveEvent
);
bitjs
.
inherits
(
bitjs
.
archive
.
UnarchiveInfoEvent
,
bitjs
.
archive
.
UnarchiveEvent
);
/**
/**
* An unrecoverable error has occured.
* An unrecoverable error has occured.
*
*
* @param {string} msg The error message.
* @param {string} msg The error message.
*/
*/
bitjs
.
archive
.
UnarchiveErrorEvent
=
function
(
msg
)
{
bitjs
.
archive
.
UnarchiveErrorEvent
=
function
(
msg
)
{
bitjs
.
base
(
this
,
bitjs
.
archive
.
UnarchiveEvent
.
Type
.
ERROR
);
bitjs
.
base
(
this
,
bitjs
.
archive
.
UnarchiveEvent
.
Type
.
ERROR
);
/**
/**
...
@@ -114,39 +114,40 @@ bitjs.archive.UnarchiveErrorEvent = function(msg) {
...
@@ -114,39 +114,40 @@ bitjs.archive.UnarchiveErrorEvent = function(msg) {
* @type {string}
* @type {string}
*/
*/
this
.
msg
=
msg
;
this
.
msg
=
msg
;
};
};
bitjs
.
inherits
(
bitjs
.
archive
.
UnarchiveErrorEvent
,
bitjs
.
archive
.
UnarchiveEvent
);
bitjs
.
inherits
(
bitjs
.
archive
.
UnarchiveErrorEvent
,
bitjs
.
archive
.
UnarchiveEvent
);
/**
/**
* Start event.
* Start event.
*
*
* @param {string} msg The info message.
* @param {string} msg The info message.
*/
*/
bitjs
.
archive
.
UnarchiveStartEvent
=
function
()
{
bitjs
.
archive
.
UnarchiveStartEvent
=
function
()
{
bitjs
.
base
(
this
,
bitjs
.
archive
.
UnarchiveEvent
.
Type
.
START
);
bitjs
.
base
(
this
,
bitjs
.
archive
.
UnarchiveEvent
.
Type
.
START
);
};
};
bitjs
.
inherits
(
bitjs
.
archive
.
UnarchiveStartEvent
,
bitjs
.
archive
.
UnarchiveEvent
);
bitjs
.
inherits
(
bitjs
.
archive
.
UnarchiveStartEvent
,
bitjs
.
archive
.
UnarchiveEvent
);
/**
/**
* Finish event.
* Finish event.
*
*
* @param {string} msg The info message.
* @param {string} msg The info message.
*/
*/
bitjs
.
archive
.
UnarchiveFinishEvent
=
function
()
{
bitjs
.
archive
.
UnarchiveFinishEvent
=
function
()
{
bitjs
.
base
(
this
,
bitjs
.
archive
.
UnarchiveEvent
.
Type
.
FINISH
);
bitjs
.
base
(
this
,
bitjs
.
archive
.
UnarchiveEvent
.
Type
.
FINISH
);
};
};
bitjs
.
inherits
(
bitjs
.
archive
.
UnarchiveFinishEvent
,
bitjs
.
archive
.
UnarchiveEvent
);
bitjs
.
inherits
(
bitjs
.
archive
.
UnarchiveFinishEvent
,
bitjs
.
archive
.
UnarchiveEvent
);
/**
/**
* Progress event.
* Progress event.
*/
*/
bitjs
.
archive
.
UnarchiveProgressEvent
=
function
(
bitjs
.
archive
.
UnarchiveProgressEvent
=
function
(
currentFilename
,
currentFilename
,
currentFileNumber
,
currentFileNumber
,
currentBytesUnarchivedInFile
,
currentBytesUnarchivedInFile
,
currentBytesUnarchived
,
currentBytesUnarchived
,
totalUncompressedBytesInArchive
,
totalUncompressedBytesInArchive
,
totalFilesInArchive
)
{
totalFilesInArchive
)
{
bitjs
.
base
(
this
,
bitjs
.
archive
.
UnarchiveEvent
.
Type
.
PROGRESS
);
bitjs
.
base
(
this
,
bitjs
.
archive
.
UnarchiveEvent
.
Type
.
PROGRESS
);
this
.
currentFilename
=
currentFilename
;
this
.
currentFilename
=
currentFilename
;
...
@@ -155,10 +156,10 @@ bitjs.archive.UnarchiveProgressEvent = function(
...
@@ -155,10 +156,10 @@ bitjs.archive.UnarchiveProgressEvent = function(
this
.
totalFilesInArchive
=
totalFilesInArchive
;
this
.
totalFilesInArchive
=
totalFilesInArchive
;
this
.
currentBytesUnarchived
=
currentBytesUnarchived
;
this
.
currentBytesUnarchived
=
currentBytesUnarchived
;
this
.
totalUncompressedBytesInArchive
=
totalUncompressedBytesInArchive
;
this
.
totalUncompressedBytesInArchive
=
totalUncompressedBytesInArchive
;
};
};
bitjs
.
inherits
(
bitjs
.
archive
.
UnarchiveProgressEvent
,
bitjs
.
archive
.
UnarchiveEvent
);
bitjs
.
inherits
(
bitjs
.
archive
.
UnarchiveProgressEvent
,
bitjs
.
archive
.
UnarchiveEvent
);
/**
/**
* All extracted files returned by an Unarchiver will implement
* All extracted files returned by an Unarchiver will implement
* the following interface:
* the following interface:
*
*
...
@@ -169,28 +170,28 @@ bitjs.inherits(bitjs.archive.UnarchiveProgressEvent, bitjs.archive.UnarchiveEven
...
@@ -169,28 +170,28 @@ bitjs.inherits(bitjs.archive.UnarchiveProgressEvent, bitjs.archive.UnarchiveEven
*
*
*/
*/
/**
/**
* Extract event.
* Extract event.
*/
*/
bitjs
.
archive
.
UnarchiveExtractEvent
=
function
(
unarchivedFile
)
{
bitjs
.
archive
.
UnarchiveExtractEvent
=
function
(
unarchivedFile
)
{
bitjs
.
base
(
this
,
bitjs
.
archive
.
UnarchiveEvent
.
Type
.
EXTRACT
);
bitjs
.
base
(
this
,
bitjs
.
archive
.
UnarchiveEvent
.
Type
.
EXTRACT
);
/**
/**
* @type {UnarchivedFile}
* @type {UnarchivedFile}
*/
*/
this
.
unarchivedFile
=
unarchivedFile
;
this
.
unarchivedFile
=
unarchivedFile
;
};
};
bitjs
.
inherits
(
bitjs
.
archive
.
UnarchiveExtractEvent
,
bitjs
.
archive
.
UnarchiveEvent
);
bitjs
.
inherits
(
bitjs
.
archive
.
UnarchiveExtractEvent
,
bitjs
.
archive
.
UnarchiveEvent
);
/**
/**
* Base class for all Unarchivers.
* Base class for all Unarchivers.
*
*
* @param {ArrayBuffer} arrayBuffer The Array Buffer.
* @param {ArrayBuffer} arrayBuffer The Array Buffer.
* @param {string} opt_pathToBitJS Optional string for where the BitJS files are located.
* @param {string} opt_pathToBitJS Optional string for where the BitJS files are located.
* @constructor
* @constructor
*/
*/
bitjs
.
archive
.
Unarchiver
=
function
(
arrayBuffer
,
opt_pathToBitJS
)
{
bitjs
.
archive
.
Unarchiver
=
function
(
arrayBuffer
,
opt_pathToBitJS
)
{
/**
/**
* The ArrayBuffer object.
* The ArrayBuffer object.
* @type {ArrayBuffer}
* @type {ArrayBuffer}
...
@@ -213,60 +214,60 @@ bitjs.archive.Unarchiver = function(arrayBuffer, opt_pathToBitJS) {
...
@@ -213,60 +214,60 @@ bitjs.archive.Unarchiver = function(arrayBuffer, opt_pathToBitJS) {
for
(
var
type
in
bitjs
.
archive
.
UnarchiveEvent
.
Type
)
{
for
(
var
type
in
bitjs
.
archive
.
UnarchiveEvent
.
Type
)
{
this
.
listeners_
[
bitjs
.
archive
.
UnarchiveEvent
.
Type
[
type
]]
=
[];
this
.
listeners_
[
bitjs
.
archive
.
UnarchiveEvent
.
Type
[
type
]]
=
[];
}
}
};
};
/**
/**
* Private web worker initialized during start().
* Private web worker initialized during start().
* @type {Worker}
* @type {Worker}
* @private
* @private
*/
*/
bitjs
.
archive
.
Unarchiver
.
prototype
.
worker_
=
null
;
bitjs
.
archive
.
Unarchiver
.
prototype
.
worker_
=
null
;
/**
/**
* This method must be overridden by the subclass to return the script filename.
* This method must be overridden by the subclass to return the script filename.
* @return {string} The script filename.
* @return {string} The script filename.
* @protected.
* @protected.
*/
*/
bitjs
.
archive
.
Unarchiver
.
prototype
.
getScriptFileName
=
function
()
{
bitjs
.
archive
.
Unarchiver
.
prototype
.
getScriptFileName
=
function
()
{
throw
'Subclasses of AbstractUnarchiver must overload getScriptFileName()'
;
throw
'Subclasses of AbstractUnarchiver must overload getScriptFileName()'
;
};
};
/**
/**
* Adds an event listener for UnarchiveEvents.
* Adds an event listener for UnarchiveEvents.
*
*
* @param {string} Event type.
* @param {string} Event type.
* @param {function} An event handler function.
* @param {function} An event handler function.
*/
*/
bitjs
.
archive
.
Unarchiver
.
prototype
.
addEventListener
=
function
(
type
,
listener
)
{
bitjs
.
archive
.
Unarchiver
.
prototype
.
addEventListener
=
function
(
type
,
listener
)
{
if
(
type
in
this
.
listeners_
)
{
if
(
type
in
this
.
listeners_
)
{
if
(
this
.
listeners_
[
type
].
indexOf
(
listener
)
==
-
1
)
{
if
(
this
.
listeners_
[
type
].
indexOf
(
listener
)
==
-
1
)
{
this
.
listeners_
[
type
].
push
(
listener
);
this
.
listeners_
[
type
].
push
(
listener
);
}
}
}
}
};
};
/**
/**
* Removes an event listener.
* Removes an event listener.
*
*
* @param {string} Event type.
* @param {string} Event type.
* @param {EventListener|function} An event listener or handler function.
* @param {EventListener|function} An event listener or handler function.
*/
*/
bitjs
.
archive
.
Unarchiver
.
prototype
.
removeEventListener
=
function
(
type
,
listener
)
{
bitjs
.
archive
.
Unarchiver
.
prototype
.
removeEventListener
=
function
(
type
,
listener
)
{
if
(
type
in
this
.
listeners_
)
{
if
(
type
in
this
.
listeners_
)
{
var
index
=
this
.
listeners_
[
type
].
indexOf
(
listener
);
var
index
=
this
.
listeners_
[
type
].
indexOf
(
listener
);
if
(
index
!=
-
1
)
{
if
(
index
!=
-
1
)
{
this
.
listeners_
[
type
].
splice
(
index
,
1
);
this
.
listeners_
[
type
].
splice
(
index
,
1
);
}
}
}
}
};
};
/**
/**
* Receive an event and pass it to the listener functions.
* Receive an event and pass it to the listener functions.
*
*
* @param {bitjs.archive.UnarchiveEvent} e
* @param {bitjs.archive.UnarchiveEvent} e
* @private
* @private
*/
*/
bitjs
.
archive
.
Unarchiver
.
prototype
.
handleWorkerEvent_
=
function
(
e
)
{
bitjs
.
archive
.
Unarchiver
.
prototype
.
handleWorkerEvent_
=
function
(
e
)
{
if
((
e
instanceof
bitjs
.
archive
.
UnarchiveEvent
||
e
.
type
)
&&
if
((
e
instanceof
bitjs
.
archive
.
UnarchiveEvent
||
e
.
type
)
&&
this
.
listeners_
[
e
.
type
]
instanceof
Array
)
{
this
.
listeners_
[
e
.
type
]
instanceof
Array
)
{
this
.
listeners_
[
e
.
type
].
forEach
(
function
(
listener
)
{
listener
(
e
)
});
this
.
listeners_
[
e
.
type
].
forEach
(
function
(
listener
)
{
listener
(
e
)
});
...
@@ -276,9 +277,9 @@ bitjs.archive.Unarchiver.prototype.handleWorkerEvent_ = function(e) {
...
@@ -276,9 +277,9 @@ bitjs.archive.Unarchiver.prototype.handleWorkerEvent_ = function(e) {
}
else
{
}
else
{
console
.
log
(
e
);
console
.
log
(
e
);
}
}
};
};
/**
/**
* Starts the unarchive in a separate Web Worker thread and returns immediately.
* Starts the unarchive in a separate Web Worker thread and returns immediately.
*/
*/
bitjs
.
archive
.
Unarchiver
.
prototype
.
start
=
function
()
{
bitjs
.
archive
.
Unarchiver
.
prototype
.
start
=
function
()
{
...
@@ -305,49 +306,49 @@ bitjs.archive.Unarchiver.prototype.handleWorkerEvent_ = function(e) {
...
@@ -305,49 +306,49 @@ bitjs.archive.Unarchiver.prototype.handleWorkerEvent_ = function(e) {
this
.
worker_
.
postMessage
({
file
:
this
.
ab
});
this
.
worker_
.
postMessage
({
file
:
this
.
ab
});
}
}
};
};
/**
/**
* Terminates the Web Worker for this Unarchiver and returns immediately.
* Terminates the Web Worker for this Unarchiver and returns immediately.
*/
*/
bitjs
.
archive
.
Unarchiver
.
prototype
.
stop
=
function
()
{
bitjs
.
archive
.
Unarchiver
.
prototype
.
stop
=
function
()
{
if
(
this
.
worker_
)
{
if
(
this
.
worker_
)
{
this
.
worker_
.
terminate
();
this
.
worker_
.
terminate
();
}
}
};
};
/**
/**
* Unzipper
* Unzipper
* @extends {bitjs.archive.Unarchiver}
* @extends {bitjs.archive.Unarchiver}
* @constructor
* @constructor
*/
*/
bitjs
.
archive
.
Unzipper
=
function
(
arrayBuffer
,
opt_pathToBitJS
)
{
bitjs
.
archive
.
Unzipper
=
function
(
arrayBuffer
,
opt_pathToBitJS
)
{
bitjs
.
base
(
this
,
arrayBuffer
,
opt_pathToBitJS
);
bitjs
.
base
(
this
,
arrayBuffer
,
opt_pathToBitJS
);
};
};
bitjs
.
inherits
(
bitjs
.
archive
.
Unzipper
,
bitjs
.
archive
.
Unarchiver
);
bitjs
.
inherits
(
bitjs
.
archive
.
Unzipper
,
bitjs
.
archive
.
Unarchiver
);
bitjs
.
archive
.
Unzipper
.
prototype
.
getScriptFileName
=
function
()
{
return
'unzip.js'
};
bitjs
.
archive
.
Unzipper
.
prototype
.
getScriptFileName
=
function
()
{
return
'unzip.js'
};
/**
/**
* Unrarrer
* Unrarrer
* @extends {bitjs.archive.Unarchiver}
* @extends {bitjs.archive.Unarchiver}
* @constructor
* @constructor
*/
*/
bitjs
.
archive
.
Unrarrer
=
function
(
arrayBuffer
,
opt_pathToBitJS
)
{
bitjs
.
archive
.
Unrarrer
=
function
(
arrayBuffer
,
opt_pathToBitJS
)
{
bitjs
.
base
(
this
,
arrayBuffer
,
opt_pathToBitJS
);
bitjs
.
base
(
this
,
arrayBuffer
,
opt_pathToBitJS
);
};
};
bitjs
.
inherits
(
bitjs
.
archive
.
Unrarrer
,
bitjs
.
archive
.
Unarchiver
);
bitjs
.
inherits
(
bitjs
.
archive
.
Unrarrer
,
bitjs
.
archive
.
Unarchiver
);
bitjs
.
archive
.
Unrarrer
.
prototype
.
getScriptFileName
=
function
()
{
return
'unrar.js'
};
bitjs
.
archive
.
Unrarrer
.
prototype
.
getScriptFileName
=
function
()
{
return
'unrar.js'
};
/**
/**
* Untarrer
* Untarrer
* @extends {bitjs.archive.Unarchiver}
* @extends {bitjs.archive.Unarchiver}
* @constructor
* @constructor
*/
*/
bitjs
.
archive
.
Untarrer
=
function
(
arrayBuffer
,
opt_pathToBitJS
)
{
bitjs
.
archive
.
Untarrer
=
function
(
arrayBuffer
,
opt_pathToBitJS
)
{
bitjs
.
base
(
this
,
arrayBuffer
,
opt_pathToBitJS
);
bitjs
.
base
(
this
,
arrayBuffer
,
opt_pathToBitJS
);
};
};
bitjs
.
inherits
(
bitjs
.
archive
.
Untarrer
,
bitjs
.
archive
.
Unarchiver
);
bitjs
.
inherits
(
bitjs
.
archive
.
Untarrer
,
bitjs
.
archive
.
Unarchiver
);
bitjs
.
archive
.
Untarrer
.
prototype
.
getScriptFileName
=
function
()
{
return
'untar.js'
};
bitjs
.
archive
.
Untarrer
.
prototype
.
getScriptFileName
=
function
()
{
return
'untar.js'
};
})();
})();
cps/static/js/io.js
View file @
a159bb0b
...
@@ -14,17 +14,17 @@ bitjs.io = bitjs.io || {};
...
@@ -14,17 +14,17 @@ bitjs.io = bitjs.io || {};
(
function
()
{
(
function
()
{
// mask for getting the Nth bit (zero-based)
// mask for getting the Nth bit (zero-based)
bitjs
.
BIT
=
[
0x01
,
0x02
,
0x04
,
0x08
,
bitjs
.
BIT
=
[
0x01
,
0x02
,
0x04
,
0x08
,
0x10
,
0x20
,
0x40
,
0x80
,
0x10
,
0x20
,
0x40
,
0x80
,
0x100
,
0x200
,
0x400
,
0x800
,
0x100
,
0x200
,
0x400
,
0x800
,
0x1000
,
0x2000
,
0x4000
,
0x8000
];
0x1000
,
0x2000
,
0x4000
,
0x8000
];
// mask for getting N number of bits (0-8)
// mask for getting N number of bits (0-8)
var
BITMASK
=
[
0
,
0x01
,
0x03
,
0x07
,
0x0F
,
0x1F
,
0x3F
,
0x7F
,
0xFF
];
var
BITMASK
=
[
0
,
0x01
,
0x03
,
0x07
,
0x0F
,
0x1F
,
0x3F
,
0x7F
,
0xFF
];
/**
/**
* This bit stream peeks and consumes bits out of a binary stream.
* This bit stream peeks and consumes bits out of a binary stream.
*
*
* @param {ArrayBuffer} ab An ArrayBuffer object or a Uint8Array.
* @param {ArrayBuffer} ab An ArrayBuffer object or a Uint8Array.
...
@@ -33,7 +33,7 @@ var BITMASK = [0, 0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF ];
...
@@ -33,7 +33,7 @@ var BITMASK = [0, 0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF ];
* @param {Number} opt_offset The offset into the ArrayBuffer
* @param {Number} opt_offset The offset into the ArrayBuffer
* @param {Number} opt_length The length of this BitStream
* @param {Number} opt_length The length of this BitStream
*/
*/
bitjs
.
io
.
BitStream
=
function
(
ab
,
rtl
,
opt_offset
,
opt_length
)
{
bitjs
.
io
.
BitStream
=
function
(
ab
,
rtl
,
opt_offset
,
opt_length
)
{
if
(
!
ab
||
!
ab
.
toString
||
ab
.
toString
()
!==
"[object ArrayBuffer]"
)
{
if
(
!
ab
||
!
ab
.
toString
||
ab
.
toString
()
!==
"[object ArrayBuffer]"
)
{
throw
"Error! BitArray constructed with an invalid ArrayBuffer object"
;
throw
"Error! BitArray constructed with an invalid ArrayBuffer object"
;
}
}
...
@@ -44,10 +44,10 @@ bitjs.io.BitStream = function(ab, rtl, opt_offset, opt_length) {
...
@@ -44,10 +44,10 @@ bitjs.io.BitStream = function(ab, rtl, opt_offset, opt_length) {
this
.
bytePtr
=
0
;
// tracks which byte we are on
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
.
bitPtr
=
0
;
// tracks which bit we are on (can have values 0 through 7)
this
.
peekBits
=
rtl
?
this
.
peekBits_rtl
:
this
.
peekBits_ltr
;
this
.
peekBits
=
rtl
?
this
.
peekBits_rtl
:
this
.
peekBits_ltr
;
};
};
/**
/**
* byte0 byte1 byte2 byte3
* byte0 byte1 byte2 byte3
* 7......0 | 7......0 | 7......0 | 7......0
* 7......0 | 7......0 | 7......0 | 7......0
*
*
...
@@ -57,7 +57,7 @@ bitjs.io.BitStream = function(ab, rtl, opt_offset, opt_length) {
...
@@ -57,7 +57,7 @@ bitjs.io.BitStream = function(ab, rtl, opt_offset, opt_length) {
* @param {boolean=} movePointers Whether to move the pointer, defaults false.
* @param {boolean=} movePointers Whether to move the pointer, defaults false.
* @return {number} The peeked bits, as an unsigned number.
* @return {number} The peeked bits, as an unsigned number.
*/
*/
bitjs
.
io
.
BitStream
.
prototype
.
peekBits_ltr
=
function
(
n
,
movePointers
)
{
bitjs
.
io
.
BitStream
.
prototype
.
peekBits_ltr
=
function
(
n
,
movePointers
)
{
if
(
n
<=
0
||
typeof
n
!=
typeof
1
)
{
if
(
n
<=
0
||
typeof
n
!=
typeof
1
)
{
return
0
;
return
0
;
}
}
...
@@ -106,10 +106,10 @@ bitjs.io.BitStream.prototype.peekBits_ltr = function(n, movePointers) {
...
@@ -106,10 +106,10 @@ bitjs.io.BitStream.prototype.peekBits_ltr = function(n, movePointers) {
}
}
return
result
;
return
result
;
};
};
/**
/**
* byte0 byte1 byte2 byte3
* byte0 byte1 byte2 byte3
* 7......0 | 7......0 | 7......0 | 7......0
* 7......0 | 7......0 | 7......0 | 7......0
*
*
...
@@ -119,7 +119,7 @@ bitjs.io.BitStream.prototype.peekBits_ltr = function(n, movePointers) {
...
@@ -119,7 +119,7 @@ bitjs.io.BitStream.prototype.peekBits_ltr = function(n, movePointers) {
* @param {boolean=} movePointers Whether to move the pointer, defaults false.
* @param {boolean=} movePointers Whether to move the pointer, defaults false.
* @return {number} The peeked bits, as an unsigned number.
* @return {number} The peeked bits, as an unsigned number.
*/
*/
bitjs
.
io
.
BitStream
.
prototype
.
peekBits_rtl
=
function
(
n
,
movePointers
)
{
bitjs
.
io
.
BitStream
.
prototype
.
peekBits_rtl
=
function
(
n
,
movePointers
)
{
if
(
n
<=
0
||
typeof
n
!=
typeof
1
)
{
if
(
n
<=
0
||
typeof
n
!=
typeof
1
)
{
return
0
;
return
0
;
}
}
...
@@ -165,30 +165,30 @@ bitjs.io.BitStream.prototype.peekBits_rtl = function(n, movePointers) {
...
@@ -165,30 +165,30 @@ bitjs.io.BitStream.prototype.peekBits_rtl = function(n, movePointers) {
}
}
return
result
;
return
result
;
};
};
/**
/**
* Some voodoo magic.
* Some voodoo magic.
*/
*/
bitjs
.
io
.
BitStream
.
prototype
.
getBits
=
function
()
{
bitjs
.
io
.
BitStream
.
prototype
.
getBits
=
function
()
{
return
(((((
this
.
bytes
[
this
.
bytePtr
]
&
0xff
)
<<
16
)
+
return
(((((
this
.
bytes
[
this
.
bytePtr
]
&
0xff
)
<<
16
)
+
((
this
.
bytes
[
this
.
bytePtr
+
1
]
&
0xff
)
<<
8
)
+
((
this
.
bytes
[
this
.
bytePtr
+
1
]
&
0xff
)
<<
8
)
+
((
this
.
bytes
[
this
.
bytePtr
+
2
]
&
0xff
)))
>>>
(
8
-
this
.
bitPtr
))
&
0xffff
);
((
this
.
bytes
[
this
.
bytePtr
+
2
]
&
0xff
)))
>>>
(
8
-
this
.
bitPtr
))
&
0xffff
);
};
};
/**
/**
* Reads n bits out of the stream, consuming them (moving the bit pointer).
* Reads n bits out of the stream, consuming them (moving the bit pointer).
* @param {number} n The number of bits to read.
* @param {number} n The number of bits to read.
* @return {number} The read bits, as an unsigned number.
* @return {number} The read bits, as an unsigned number.
*/
*/
bitjs
.
io
.
BitStream
.
prototype
.
readBits
=
function
(
n
)
{
bitjs
.
io
.
BitStream
.
prototype
.
readBits
=
function
(
n
)
{
return
this
.
peekBits
(
n
,
true
);
return
this
.
peekBits
(
n
,
true
);
};
};
/**
/**
* This returns n bytes as a sub-array, advancing the pointer if movePointers
* This returns n bytes as a sub-array, advancing the pointer if movePointers
* is true. Only use this for uncompressed blocks as this throws away remaining
* is true. Only use this for uncompressed blocks as this throws away remaining
* bits in the current byte.
* bits in the current byte.
...
@@ -196,7 +196,7 @@ bitjs.io.BitStream.prototype.readBits = function(n) {
...
@@ -196,7 +196,7 @@ bitjs.io.BitStream.prototype.readBits = function(n) {
* @param {boolean=} movePointers Whether to move the pointer, defaults false.
* @param {boolean=} movePointers Whether to move the pointer, defaults false.
* @return {Uint8Array} The subarray.
* @return {Uint8Array} The subarray.
*/
*/
bitjs
.
io
.
BitStream
.
prototype
.
peekBytes
=
function
(
n
,
movePointers
)
{
bitjs
.
io
.
BitStream
.
prototype
.
peekBytes
=
function
(
n
,
movePointers
)
{
if
(
n
<=
0
||
typeof
n
!=
typeof
1
)
{
if
(
n
<=
0
||
typeof
n
!=
typeof
1
)
{
return
0
;
return
0
;
}
}
...
@@ -218,19 +218,19 @@ bitjs.io.BitStream.prototype.peekBytes = function(n, movePointers) {
...
@@ -218,19 +218,19 @@ bitjs.io.BitStream.prototype.peekBytes = function(n, movePointers) {
}
}
return
result
;
return
result
;
};
};
/**
/**
* @param {number} n The number of bytes to read.
* @param {number} n The number of bytes to read.
* @return {Uint8Array} The subarray.
* @return {Uint8Array} The subarray.
*/
*/
bitjs
.
io
.
BitStream
.
prototype
.
readBytes
=
function
(
n
)
{
bitjs
.
io
.
BitStream
.
prototype
.
readBytes
=
function
(
n
)
{
return
this
.
peekBytes
(
n
,
true
);
return
this
.
peekBytes
(
n
,
true
);
};
};
/**
/**
* This object allows you to peek and consume bytes as numbers and strings
* This object allows you to peek and consume bytes as numbers and strings
* out of an ArrayBuffer. In this buffer, everything must be byte-aligned.
* out of an ArrayBuffer. In this buffer, everything must be byte-aligned.
*
*
...
@@ -239,22 +239,22 @@ bitjs.io.BitStream.prototype.readBytes = function(n) {
...
@@ -239,22 +239,22 @@ bitjs.io.BitStream.prototype.readBytes = function(n) {
* @param {number=} opt_length The length of this BitStream
* @param {number=} opt_length The length of this BitStream
* @constructor
* @constructor
*/
*/
bitjs
.
io
.
ByteStream
=
function
(
ab
,
opt_offset
,
opt_length
)
{
bitjs
.
io
.
ByteStream
=
function
(
ab
,
opt_offset
,
opt_length
)
{
var
offset
=
opt_offset
||
0
;
var
offset
=
opt_offset
||
0
;
var
length
=
opt_length
||
ab
.
byteLength
;
var
length
=
opt_length
||
ab
.
byteLength
;
this
.
bytes
=
new
Uint8Array
(
ab
,
offset
,
length
);
this
.
bytes
=
new
Uint8Array
(
ab
,
offset
,
length
);
this
.
ptr
=
0
;
this
.
ptr
=
0
;
};
};
/**
/**
* Peeks at the next n bytes as an unsigned number but does not advance the
* Peeks at the next n bytes as an unsigned number but does not advance the
* pointer
* pointer
* TODO: This apparently cannot read more than 4 bytes as a number?
* TODO: This apparently cannot read more than 4 bytes as a number?
* @param {number} n The number of bytes to peek at.
* @param {number} n The number of bytes to peek at.
* @return {number} The n bytes interpreted as an unsigned number.
* @return {number} The n bytes interpreted as an unsigned number.
*/
*/
bitjs
.
io
.
ByteStream
.
prototype
.
peekNumber
=
function
(
n
)
{
bitjs
.
io
.
ByteStream
.
prototype
.
peekNumber
=
function
(
n
)
{
// TODO: return error if n would go past the end of the stream?
// 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
;
return
-
1
;
...
@@ -268,29 +268,29 @@ bitjs.io.ByteStream.prototype.peekNumber = function(n) {
...
@@ -268,29 +268,29 @@ bitjs.io.ByteStream.prototype.peekNumber = function(n) {
--
curByte
;
--
curByte
;
}
}
return
result
;
return
result
;
};
};
/**
/**
* Returns the next n bytes as an unsigned number (or -1 on error)
* Returns the next n bytes as an unsigned number (or -1 on error)
* and advances the stream pointer n bytes.
* and advances the stream pointer n bytes.
* @param {number} n The number of bytes to read.
* @param {number} n The number of bytes to read.
* @return {number} The n bytes interpreted as an unsigned number.
* @return {number} The n bytes interpreted as an unsigned number.
*/
*/
bitjs
.
io
.
ByteStream
.
prototype
.
readNumber
=
function
(
n
)
{
bitjs
.
io
.
ByteStream
.
prototype
.
readNumber
=
function
(
n
)
{
var
num
=
this
.
peekNumber
(
n
);
var
num
=
this
.
peekNumber
(
n
);
this
.
ptr
+=
n
;
this
.
ptr
+=
n
;
return
num
;
return
num
;
};
};
/**
/**
* Returns the next n bytes as a signed number but does not advance the
* Returns the next n bytes as a signed number but does not advance the
* pointer.
* pointer.
* @param {number} n The number of bytes to read.
* @param {number} n The number of bytes to read.
* @return {number} The bytes interpreted as a signed number.
* @return {number} The bytes interpreted as a signed number.
*/
*/
bitjs
.
io
.
ByteStream
.
prototype
.
peekSignedNumber
=
function
(
n
)
{
bitjs
.
io
.
ByteStream
.
prototype
.
peekSignedNumber
=
function
(
n
)
{
var
num
=
this
.
peekNumber
(
n
);
var
num
=
this
.
peekNumber
(
n
);
var
HALF
=
Math
.
pow
(
2
,
(
n
*
8
)
-
1
);
var
HALF
=
Math
.
pow
(
2
,
(
n
*
8
)
-
1
);
var
FULL
=
HALF
*
2
;
var
FULL
=
HALF
*
2
;
...
@@ -298,29 +298,29 @@ bitjs.io.ByteStream.prototype.peekSignedNumber = function(n) {
...
@@ -298,29 +298,29 @@ bitjs.io.ByteStream.prototype.peekSignedNumber = function(n) {
if
(
num
>=
HALF
)
num
-=
FULL
;
if
(
num
>=
HALF
)
num
-=
FULL
;
return
num
;
return
num
;
};
};
/**
/**
* Returns the next n bytes as a signed number and advances the stream pointer.
* Returns the next n bytes as a signed number and advances the stream pointer.
* @param {number} n The number of bytes to read.
* @param {number} n The number of bytes to read.
* @return {number} The bytes interpreted as a signed number.
* @return {number} The bytes interpreted as a signed number.
*/
*/
bitjs
.
io
.
ByteStream
.
prototype
.
readSignedNumber
=
function
(
n
)
{
bitjs
.
io
.
ByteStream
.
prototype
.
readSignedNumber
=
function
(
n
)
{
var
num
=
this
.
peekSignedNumber
(
n
);
var
num
=
this
.
peekSignedNumber
(
n
);
this
.
ptr
+=
n
;
this
.
ptr
+=
n
;
return
num
;
return
num
;
};
};
/**
/**
* This returns n bytes as a sub-array, advancing the pointer if movePointers
* This returns n bytes as a sub-array, advancing the pointer if movePointers
* is true.
* is true.
* @param {number} n The number of bytes to read.
* @param {number} n The number of bytes to read.
* @param {boolean} movePointers Whether to move the pointers.
* @param {boolean} movePointers Whether to move the pointers.
* @return {Uint8Array} The subarray.
* @return {Uint8Array} The subarray.
*/
*/
bitjs
.
io
.
ByteStream
.
prototype
.
peekBytes
=
function
(
n
,
movePointers
)
{
bitjs
.
io
.
ByteStream
.
prototype
.
peekBytes
=
function
(
n
,
movePointers
)
{
if
(
n
<=
0
||
typeof
n
!=
typeof
1
)
{
if
(
n
<=
0
||
typeof
n
!=
typeof
1
)
{
return
null
;
return
null
;
}
}
...
@@ -332,25 +332,25 @@ bitjs.io.ByteStream.prototype.peekBytes = function(n, movePointers) {
...
@@ -332,25 +332,25 @@ bitjs.io.ByteStream.prototype.peekBytes = function(n, movePointers) {
}
}
return
result
;
return
result
;
};
};
/**
/**
* Reads the next n bytes as a sub-array.
* Reads the next n bytes as a sub-array.
* @param {number} n The number of bytes to read.
* @param {number} n The number of bytes to read.
* @return {Uint8Array} The subarray.
* @return {Uint8Array} The subarray.
*/
*/
bitjs
.
io
.
ByteStream
.
prototype
.
readBytes
=
function
(
n
)
{
bitjs
.
io
.
ByteStream
.
prototype
.
readBytes
=
function
(
n
)
{
return
this
.
peekBytes
(
n
,
true
);
return
this
.
peekBytes
(
n
,
true
);
};
};
/**
/**
* Peeks at the next n bytes as a string but does not advance the pointer.
* Peeks at the next n bytes as a string but does not advance the pointer.
* @param {number} n The number of bytes to peek at.
* @param {number} n The number of bytes to peek at.
* @return {string} The next n bytes as a string.
* @return {string} The next n bytes as a string.
*/
*/
bitjs
.
io
.
ByteStream
.
prototype
.
peekString
=
function
(
n
)
{
bitjs
.
io
.
ByteStream
.
prototype
.
peekString
=
function
(
n
)
{
if
(
n
<=
0
||
typeof
n
!=
typeof
1
)
{
if
(
n
<=
0
||
typeof
n
!=
typeof
1
)
{
return
""
;
return
""
;
}
}
...
@@ -360,62 +360,62 @@ bitjs.io.ByteStream.prototype.peekString = function(n) {
...
@@ -360,62 +360,62 @@ bitjs.io.ByteStream.prototype.peekString = function(n) {
result
+=
String
.
fromCharCode
(
this
.
bytes
[
p
]);
result
+=
String
.
fromCharCode
(
this
.
bytes
[
p
]);
}
}
return
result
;
return
result
;
};
};
/**
/**
* Returns the next n bytes as an ASCII string and advances the stream pointer
* Returns the next n bytes as an ASCII string and advances the stream pointer
* n bytes.
* n bytes.
* @param {number} n The number of bytes to read.
* @param {number} n The number of bytes to read.
* @return {string} The next n bytes as a string.
* @return {string} The next n bytes as a string.
*/
*/
bitjs
.
io
.
ByteStream
.
prototype
.
readString
=
function
(
n
)
{
bitjs
.
io
.
ByteStream
.
prototype
.
readString
=
function
(
n
)
{
var
strToReturn
=
this
.
peekString
(
n
);
var
strToReturn
=
this
.
peekString
(
n
);
this
.
ptr
+=
n
;
this
.
ptr
+=
n
;
return
strToReturn
;
return
strToReturn
;
};
};
/**
/**
* A write-only Byte buffer which uses a Uint8 Typed Array as a backing store.
* A write-only Byte buffer which uses a Uint8 Typed Array as a backing store.
* @param {number} numBytes The number of bytes to allocate.
* @param {number} numBytes The number of bytes to allocate.
* @constructor
* @constructor
*/
*/
bitjs
.
io
.
ByteBuffer
=
function
(
numBytes
)
{
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
+
"'"
;
throw
"Error! ByteBuffer initialized with '"
+
numBytes
+
"'"
;
}
}
this
.
data
=
new
Uint8Array
(
numBytes
);
this
.
data
=
new
Uint8Array
(
numBytes
);
this
.
ptr
=
0
;
this
.
ptr
=
0
;
};
};
/**
/**
* @param {number} b The byte to insert.
* @param {number} b The byte to insert.
*/
*/
bitjs
.
io
.
ByteBuffer
.
prototype
.
insertByte
=
function
(
b
)
{
bitjs
.
io
.
ByteBuffer
.
prototype
.
insertByte
=
function
(
b
)
{
// TODO: throw if byte is invalid?
// TODO: throw if byte is invalid?
this
.
data
[
this
.
ptr
++
]
=
b
;
this
.
data
[
this
.
ptr
++
]
=
b
;
};
};
/**
/**
* @param {Array.<number>|Uint8Array|Int8Array} bytes The bytes to insert.
* @param {Array.<number>|Uint8Array|Int8Array} bytes The bytes to insert.
*/
*/
bitjs
.
io
.
ByteBuffer
.
prototype
.
insertBytes
=
function
(
bytes
)
{
bitjs
.
io
.
ByteBuffer
.
prototype
.
insertBytes
=
function
(
bytes
)
{
// TODO: throw if bytes is invalid?
// TODO: throw if bytes is invalid?
this
.
data
.
set
(
bytes
,
this
.
ptr
);
this
.
data
.
set
(
bytes
,
this
.
ptr
);
this
.
ptr
+=
bytes
.
length
;
this
.
ptr
+=
bytes
.
length
;
};
};
/**
/**
* Writes an unsigned number into the next n bytes. If the number is too large
* Writes an unsigned number into the next n bytes. If the number is too large
* to fit into n bytes or is negative, an error is thrown.
* to fit into n bytes or is negative, an error is thrown.
* @param {number} num The unsigned number to write.
* @param {number} num The unsigned number to write.
* @param {number} numBytes The number of bytes to write the number into.
* @param {number} numBytes The number of bytes to write the number into.
*/
*/
bitjs
.
io
.
ByteBuffer
.
prototype
.
writeNumber
=
function
(
num
,
numBytes
)
{
bitjs
.
io
.
ByteBuffer
.
prototype
.
writeNumber
=
function
(
num
,
numBytes
)
{
if
(
numBytes
<
1
)
{
if
(
numBytes
<
1
)
{
throw
'Trying to write into too few bytes: '
+
numBytes
;
throw
'Trying to write into too few bytes: '
+
numBytes
;
}
}
...
@@ -436,16 +436,16 @@ bitjs.io.ByteBuffer.prototype.writeNumber = function(num, numBytes) {
...
@@ -436,16 +436,16 @@ bitjs.io.ByteBuffer.prototype.writeNumber = function(num, numBytes) {
}
}
this
.
insertBytes
(
bytes
);
this
.
insertBytes
(
bytes
);
};
};
/**
/**
* Writes a signed number into the next n bytes. If the number is too large
* Writes a signed number into the next n bytes. If the number is too large
* to fit into n bytes, an error is thrown.
* to fit into n bytes, an error is thrown.
* @param {number} num The signed number to write.
* @param {number} num The signed number to write.
* @param {number} numBytes The number of bytes to write the number into.
* @param {number} numBytes The number of bytes to write the number into.
*/
*/
bitjs
.
io
.
ByteBuffer
.
prototype
.
writeSignedNumber
=
function
(
num
,
numBytes
)
{
bitjs
.
io
.
ByteBuffer
.
prototype
.
writeSignedNumber
=
function
(
num
,
numBytes
)
{
if
(
numBytes
<
1
)
{
if
(
numBytes
<
1
)
{
throw
'Trying to write into too few bytes: '
+
numBytes
;
throw
'Trying to write into too few bytes: '
+
numBytes
;
}
}
...
@@ -464,13 +464,13 @@ bitjs.io.ByteBuffer.prototype.writeSignedNumber = function(num, numBytes) {
...
@@ -464,13 +464,13 @@ bitjs.io.ByteBuffer.prototype.writeSignedNumber = function(num, numBytes) {
}
}
this
.
insertBytes
(
bytes
);
this
.
insertBytes
(
bytes
);
};
};
/**
/**
* @param {string} str The ASCII string to write.
* @param {string} str The ASCII string to write.
*/
*/
bitjs
.
io
.
ByteBuffer
.
prototype
.
writeASCIIString
=
function
(
str
)
{
bitjs
.
io
.
ByteBuffer
.
prototype
.
writeASCIIString
=
function
(
str
)
{
for
(
var
i
=
0
;
i
<
str
.
length
;
++
i
)
{
for
(
var
i
=
0
;
i
<
str
.
length
;
++
i
)
{
var
curByte
=
str
.
charCodeAt
(
i
);
var
curByte
=
str
.
charCodeAt
(
i
);
if
(
curByte
<
0
||
curByte
>
255
)
{
if
(
curByte
<
0
||
curByte
>
255
)
{
...
@@ -478,6 +478,5 @@ bitjs.io.ByteBuffer.prototype.writeASCIIString = function(str) {
...
@@ -478,6 +478,5 @@ bitjs.io.ByteBuffer.prototype.writeASCIIString = function(str) {
}
}
this
.
insertByte
(
curByte
);
this
.
insertByte
(
curByte
);
}
}
};
};
})();
})();
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