Commit 5ef70890 authored by OzzieIsaacs's avatar OzzieIsaacs

Search for custom columns implemented #494

Search for ratings related to #559
Search description #572
code cosmetics
parent 791f4a80
...@@ -160,7 +160,8 @@ var RarVolumeHeader = function(bstream) { ...@@ -160,7 +160,8 @@ var RarVolumeHeader = function(bstream) {
// read in filename // read in filename
this.filename = bstream.readBytes(this.nameSize); this.filename = bstream.readBytes(this.nameSize);
for (var _i = 0, _s = ""; _i < this.filename.length ; _i++) { var _s = ""
for (var _i = 0; _i < this.filename.length ; _i++) {
_s += String.fromCharCode(this.filename[_i]); _s += String.fromCharCode(this.filename[_i]);
} }
...@@ -209,7 +210,7 @@ var RarVolumeHeader = function(bstream) { ...@@ -209,7 +210,7 @@ var RarVolumeHeader = function(bstream) {
} }
}; };
var BLOCK_LZ = 0; //var BLOCK_LZ = 0;
var rLDecode = [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 16, 20, 24, 28, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224], var rLDecode = [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 16, 20, 24, 28, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224],
rLBits = [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5], rLBits = [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5],
...@@ -227,17 +228,17 @@ var rDBits = [0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, ...@@ -227,17 +228,17 @@ var rDBits = [0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5,
5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14,
15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16]; 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16];
var rLOW_DIST_REP_COUNT = 16; var rLowDistRepCount = 16;
var rNC = 299, var rNC = 299,
rDC = 60, rDC = 60,
rLDC = 17, rLDC = 17,
rRC = 28, rRC = 28,
rBC = 20, rBC = 20,
rHUFF_TABLE_SIZE = (rNC + rDC + rRC + rLDC); rHuffTableSize = (rNC + rDC + rRC + rLDC);
//var UnpBlockType = BLOCK_LZ; //var UnpBlockType = BLOCK_LZ;
var UnpOldTable = new Array(rHUFF_TABLE_SIZE); var UnpOldTable = new Array(rHuffTableSize);
var BD = { //bitdecode var BD = { //bitdecode
DecodeLen: new Array(16), DecodeLen: new Array(16),
...@@ -270,8 +271,8 @@ var rBuffer; ...@@ -270,8 +271,8 @@ var rBuffer;
// read in Huffman tables for RAR // read in Huffman tables for RAR
function RarReadTables(bstream) { function RarReadTables(bstream) {
var BitLength = new Array(rBC), var BitLength = new Array(rBC),
Table = new Array(rHUFF_TABLE_SIZE); Table = new Array(rHuffTableSize);
var i;
// before we start anything we need to get byte-aligned // before we start anything we need to get byte-aligned
bstream.readBits( (8 - bstream.bitPtr) & 0x7 ); bstream.readBits( (8 - bstream.bitPtr) & 0x7 );
...@@ -281,7 +282,6 @@ function RarReadTables(bstream) { ...@@ -281,7 +282,6 @@ function RarReadTables(bstream) {
} }
if (!bstream.readBits(1)) { //discard old table if (!bstream.readBits(1)) { //discard old table
var i;
for (i = UnpOldTable.length; i--;) UnpOldTable[i] = 0; for (i = UnpOldTable.length; i--;) UnpOldTable[i] = 0;
} }
...@@ -307,24 +307,25 @@ function RarReadTables(bstream) { ...@@ -307,24 +307,25 @@ function RarReadTables(bstream) {
// now all 20 bit lengths are obtained, we construct the Huffman Table: // now all 20 bit lengths are obtained, we construct the Huffman Table:
RarMakeDecodeTables(BitLength, 0, BD, rBC); rarMakeDecodeTables(BitLength, 0, BD, rBC);
var TableSize = rHUFF_TABLE_SIZE; var TableSize = rHuffTableSize;
//console.log(DecodeLen, DecodePos, DecodeNum); //console.log(DecodeLen, DecodePos, DecodeNum);
for (i = 0; i < TableSize;) { for (i = 0; i < TableSize;) {
var N;
var num = RarDecodeNumber(bstream, BD); var num = RarDecodeNumber(bstream, BD);
if (num < 16) { if (num < 16) {
Table[i] = (num + UnpOldTable[i]) & 0xf; Table[i] = (num + UnpOldTable[i]) & 0xf;
i++; i++;
} else if (num < 18) { } else if (num < 18) {
var N = (num === 16) ? (bstream.readBits(3) + 3) : (bstream.readBits(7) + 11); N = (num === 16) ? (bstream.readBits(3) + 3) : (bstream.readBits(7) + 11);
while (N-- > 0 && i < TableSize) { while (N-- > 0 && i < TableSize) {
Table[i] = Table[i - 1]; Table[i] = Table[i - 1];
i++; i++;
} }
} else { } else {
var N = (num === 18) ? (bstream.readBits(3) + 3) : (bstream.readBits(7) + 11); N = (num === 18) ? (bstream.readBits(3) + 3) : (bstream.readBits(7) + 11);
while (N-- > 0 && i < TableSize) { while (N-- > 0 && i < TableSize) {
Table[i++] = 0; Table[i++] = 0;
...@@ -332,10 +333,10 @@ function RarReadTables(bstream) { ...@@ -332,10 +333,10 @@ function RarReadTables(bstream) {
} }
} }
RarMakeDecodeTables(Table, 0, LD, rNC); rarMakeDecodeTables(Table, 0, LD, rNC);
RarMakeDecodeTables(Table, rNC, DD, rDC); rarMakeDecodeTables(Table, rNC, DD, rDC);
RarMakeDecodeTables(Table, rNC + rDC, LDD, rLDC); rarMakeDecodeTables(Table, rNC + rDC, LDD, rLDC);
RarMakeDecodeTables(Table, rNC + rDC + rLDC, RD, rRC); rarMakeDecodeTables(Table, rNC + rDC + rLDC, RD, rRC);
for (i = UnpOldTable.length; i--;) { for (i = UnpOldTable.length; i--;) {
UnpOldTable[i] = Table[i]; UnpOldTable[i] = Table[i];
...@@ -348,20 +349,20 @@ function RarDecodeNumber(bstream, dec) { ...@@ -348,20 +349,20 @@ function RarDecodeNumber(bstream, dec) {
var DecodeLen = dec.DecodeLen, DecodePos = dec.DecodePos, DecodeNum = dec.DecodeNum; var DecodeLen = dec.DecodeLen, DecodePos = dec.DecodePos, DecodeNum = dec.DecodeNum;
var bitField = bstream.getBits() & 0xfffe; var bitField = bstream.getBits() & 0xfffe;
//some sort of rolled out binary search //some sort of rolled out binary search
var bits = ((bitField < DecodeLen[8])? var bits = ((bitField < DecodeLen[8]) ?
((bitField < DecodeLen[4]) ? ((bitField < DecodeLen[4]) ?
((bitField < DecodeLen[2]) ? ((bitField < DecodeLen[2]) ?
((bitField < DecodeLen[1]) ? 1 : 2) ((bitField < DecodeLen[1]) ? 1 : 2)
: ((bitField < DecodeLen[3]) ? 3 : 4)) : ((bitField < DecodeLen[3]) ? 3 : 4))
: (bitField < DecodeLen[6])? : (bitField < DecodeLen[6]) ?
((bitField < DecodeLen[5]) ? 5 : 6) ((bitField < DecodeLen[5]) ? 5 : 6)
:((bitField < DecodeLen[7]) ? 7 : 8)) : ((bitField < DecodeLen[7]) ? 7 : 8))
: ((bitField < DecodeLen[12]) ? : ((bitField < DecodeLen[12]) ?
((bitField < DecodeLen[10]) ? ((bitField < DecodeLen[10]) ?
((bitField < DecodeLen[9]) ? 9 : 10) ((bitField < DecodeLen[9]) ? 9 : 10)
:((bitField < DecodeLen[11]) ? 11 : 12)) : ((bitField < DecodeLen[11]) ? 11 : 12))
: (bitField < DecodeLen[14]) ? : (bitField < DecodeLen[14]) ?
((bitField < DecodeLen[13]) ? 13 : 14) ((bitField < DecodeLen[13]) ? 13 : 14)
: 15)); : 15));
bstream.readBits(bits); bstream.readBits(bits);
var N = DecodePos[bits] + ((bitField - DecodeLen[bits -1]) >>> (16 - bits)); var N = DecodePos[bits] + ((bitField - DecodeLen[bits -1]) >>> (16 - bits));
...@@ -370,7 +371,7 @@ function RarDecodeNumber(bstream, dec) { ...@@ -370,7 +371,7 @@ function RarDecodeNumber(bstream, dec) {
} }
function RarMakeDecodeTables(BitLength, offset, dec, size) { function rarMakeDecodeTables(BitLength, offset, dec, size) {
var DecodeLen = dec.DecodeLen, DecodePos = dec.DecodePos, DecodeNum = dec.DecodeNum; var DecodeLen = dec.DecodeLen, DecodePos = dec.DecodePos, DecodeNum = dec.DecodeNum;
var LenCount = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], var LenCount = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
TmpPos = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], TmpPos = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
...@@ -385,7 +386,7 @@ function RarMakeDecodeTables(BitLength, offset, dec, size) { ...@@ -385,7 +386,7 @@ function RarMakeDecodeTables(BitLength, offset, dec, size) {
DecodeLen[0] = 0; DecodeLen[0] = 0;
for (var I = 1; I < 16; ++I) { for (var I = 1; I < 16; ++I) {
N = 2 * (N+LenCount[I]); N = 2 * (N + LenCount[I]);
M = (N << (15-I)); M = (N << (15-I));
if (M > 0xFFFF) if (M > 0xFFFF)
M = 0xFFFF; M = 0xFFFF;
...@@ -393,9 +394,11 @@ function RarMakeDecodeTables(BitLength, offset, dec, size) { ...@@ -393,9 +394,11 @@ function RarMakeDecodeTables(BitLength, offset, dec, size) {
DecodePos[I] = DecodePos[I-1] + LenCount[I-1]; DecodePos[I] = DecodePos[I-1] + LenCount[I-1];
TmpPos[I] = DecodePos[I]; TmpPos[I] = DecodePos[I];
} }
for (I = 0; I < size; ++I) for (I = 0; I < size; ++I) {
if (BitLength[I + offset] != 0) if (BitLength[I + offset] != 0) {
DecodeNum[ TmpPos[ BitLength[offset + I] & 0xF ]++] = I; DecodeNum[ TmpPos[ BitLength[offset + I] & 0xF ]++] = I;
}
}
} }
// TODO: implement // TODO: implement
...@@ -504,7 +507,7 @@ function RarReadTables20(bstream) { ...@@ -504,7 +507,7 @@ function RarReadTables20(bstream) {
TableSize = rNC20 + rDC20 + rRC20; TableSize = rNC20 + rDC20 + rRC20;
for (var I = 0; I < rBC20; I++) for (var I = 0; I < rBC20; I++)
BitLength[I] = bstream.readBits(4); BitLength[I] = bstream.readBits(4);
RarMakeDecodeTables(BitLength, 0, BD, rBC20); rarMakeDecodeTables(BitLength, 0, BD, rBC20);
I = 0; I = 0;
while (I < TableSize) { while (I < TableSize) {
var num = RarDecodeNumber(bstream, BD); var num = RarDecodeNumber(bstream, BD);
...@@ -528,9 +531,9 @@ function RarReadTables20(bstream) { ...@@ -528,9 +531,9 @@ function RarReadTables20(bstream) {
} }
} }
} }
RarMakeDecodeTables(Table, 0, LD, rNC20); rarMakeDecodeTables(Table, 0, LD, rNC20);
RarMakeDecodeTables(Table, rNC20, DD, rDC20); rarMakeDecodeTables(Table, rNC20, DD, rDC20);
RarMakeDecodeTables(Table, rNC20 + rDC20, RD, rRC20); rarMakeDecodeTables(Table, rNC20 + rDC20, RD, rRC20);
for (var i = UnpOldTable20.length; i--;) UnpOldTable20[i] = Table[i]; for (var i = UnpOldTable20.length; i--;) UnpOldTable20[i] = Table[i];
} }
...@@ -596,7 +599,7 @@ function Unpack29(bstream, Solid) { ...@@ -596,7 +599,7 @@ function Unpack29(bstream, Solid) {
} else { } else {
var LowDist = RarDecodeNumber(bstream, LDD); var LowDist = RarDecodeNumber(bstream, LDD);
if (LowDist === 16) { if (LowDist === 16) {
lowDistRepCount = rLOW_DIST_REP_COUNT - 1; lowDistRepCount = rLowDistRepCount - 1;
Distance += prevLowDist; Distance += prevLowDist;
} else { } else {
Distance += LowDist; Distance += LowDist;
...@@ -774,8 +777,7 @@ var RarLocalFile = function(bstream) { ...@@ -774,8 +777,7 @@ var RarLocalFile = function(bstream) {
if (this.header.headType != FILE_HEAD && this.header.headType != ENDARC_HEAD) { if (this.header.headType != FILE_HEAD && this.header.headType != ENDARC_HEAD) {
this.isValid = false; this.isValid = false;
info("Error! RAR Volume did not include a FILE_HEAD header "); info("Error! RAR Volume did not include a FILE_HEAD header ");
} } else {
else {
// read in the compressed data // read in the compressed data
this.fileData = null; this.fileData = null;
if (this.header.packSize > 0) { if (this.header.packSize > 0) {
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* TAR format: http://www.gnu.org/software/automake/manual/tar/Standard.html * TAR format: http://www.gnu.org/software/automake/manual/tar/Standard.html
*/ */
/* global bitjs, importScripts, Uint8Array */ /* global bitjs, importScripts, Uint8Array */
// This file expects to be invoked as a Worker (see onmessage below). // This file expects to be invoked as a Worker (see onmessage below).
importScripts("io.js"); importScripts("io.js");
...@@ -72,9 +72,9 @@ var TarLocalFile = function(bstream) { ...@@ -72,9 +72,9 @@ var TarLocalFile = function(bstream) {
if (this.prefix.length) { if (this.prefix.length) {
this.name = this.prefix + this.name; this.name = this.prefix + this.name;
} }
bstream.readBytes(12); // 512 - 500 bstream.readBytes(12); // 512 - 500
} else { } else {
bstream.readBytes(255); // 512 - 257 bstream.readBytes(255); // 512 - 257
} }
// Done header, now rest of blocks are the file contents. // Done header, now rest of blocks are the file contents.
...@@ -88,7 +88,7 @@ var TarLocalFile = function(bstream) { ...@@ -88,7 +88,7 @@ var TarLocalFile = function(bstream) {
// A regular file. // A regular file.
if (this.typeflag === 0) { if (this.typeflag === 0) {
info(" This is a regular file."); info(" This is a regular file.");
var sizeInBytes = parseInt(this.size); // var sizeInBytes = parseInt(this.size);
this.fileData = new Uint8Array(bstream.bytes.buffer, bstream.ptr, this.size); this.fileData = new Uint8Array(bstream.bytes.buffer, bstream.ptr, this.size);
if (this.name.length > 0 && this.size > 0 && this.fileData && this.fileData.buffer) { if (this.name.length > 0 && this.size > 0 && this.fileData && this.fileData.buffer) {
this.isValid = true; this.isValid = true;
...@@ -100,9 +100,9 @@ var TarLocalFile = function(bstream) { ...@@ -100,9 +100,9 @@ var TarLocalFile = function(bstream) {
var remaining = 512 - this.size % 512; var remaining = 512 - this.size % 512;
if (remaining > 0 && remaining < 512) { if (remaining > 0 && remaining < 512) {
bstream.readBytes(remaining); bstream.readBytes(remaining);
} }
} else if (this.typeflag === 5) { } else if (this.typeflag === 5) {
info(" This is a directory.") info(" This is a directory.");
} }
}; };
...@@ -127,7 +127,7 @@ var untar = function(arrayBuffer) { ...@@ -127,7 +127,7 @@ var untar = function(arrayBuffer) {
if (oneLocalFile && oneLocalFile.isValid) { if (oneLocalFile && oneLocalFile.isValid) {
localFiles.push(oneLocalFile); localFiles.push(oneLocalFile);
totalUncompressedBytesInArchive += oneLocalFile.size; totalUncompressedBytesInArchive += oneLocalFile.size;
} }
} }
totalFilesInArchive = localFiles.length; totalFilesInArchive = localFiles.length;
......
...@@ -119,8 +119,7 @@ ZipLocalFile.prototype.unzip = function() { ...@@ -119,8 +119,7 @@ ZipLocalFile.prototype.unzip = function() {
// version == 20, compression method == 8 (DEFLATE) // version == 20, compression method == 8 (DEFLATE)
info("ZIP v2.0, DEFLATE: " + this.filename + " (" + this.compressedSize + " bytes)"); info("ZIP v2.0, DEFLATE: " + this.filename + " (" + this.compressedSize + " bytes)");
this.fileData = inflate(this.fileData, this.uncompressedSize); 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)"); err("UNSUPPORTED VERSION/FORMAT: ZIP v" + this.version + ", compression method=" + this.compressionMethod + ": " + this.filename + " (" + this.compressedSize + " bytes)");
this.fileData = null; this.fileData = null;
} }
...@@ -510,30 +509,30 @@ function inflate(compressedData, numDecompressedBytes) { ...@@ -510,30 +509,30 @@ function inflate(compressedData, numDecompressedBytes) {
var buffer = new bitjs.io.ByteBuffer(numDecompressedBytes); var buffer = new bitjs.io.ByteBuffer(numDecompressedBytes);
//var numBlocks = 0; //var numBlocks = 0;
var blockSize = 0; var blockSize = 0;
var bFinal;
// block format: http://tools.ietf.org/html/rfc1951#page-9 // block format: http://tools.ietf.org/html/rfc1951#page-9
do { do {
var bFinal = bstream.readBits(1); bFinal = bstream.readBits(1);
var bType = bstream.readBits(2); var bType = bstream.readBits(2);
blockSize = 0; blockSize = 0;
// ++numBlocks; // ++numBlocks;
// no compression // no compression
if (bType === 0) { if (bType === 0) {
// skip remaining bits in this byte // skip remaining bits in this byte
while (bstream.bitPtr != 0) bstream.readBits(1); while (bstream.bitPtr !== 0) bstream.readBits(1);
var len = bstream.readBits(16), var len = bstream.readBits(16),
nlen = bstream.readBits(16); // nlen = bstream.readBits(16);
// TODO: check if nlen is the ones-complement of len? // TODO: check if nlen is the ones-complement of len?
if(len > 0) buffer.insertBytes(bstream.readBytes(len)); if (len > 0) buffer.insertBytes(bstream.readBytes(len));
blockSize = len; blockSize = len;
} }
// fixed Huffman codes // fixed Huffman codes
else if(bType === 1) { else if (bType === 1) {
blockSize = inflateBlockData(bstream, getFixedLiteralTable(), getFixedDistanceTable(), buffer); blockSize = inflateBlockData(bstream, getFixedLiteralTable(), getFixedDistanceTable(), buffer);
} }
// dynamic Huffman codes // dynamic Huffman codes
else if(bType === 2) { else if (bType === 2) {
var numLiteralLengthCodes = bstream.readBits(5) + 257; var numLiteralLengthCodes = bstream.readBits(5) + 257;
var numDistanceCodes = bstream.readBits(5) + 1, var numDistanceCodes = bstream.readBits(5) + 1,
numCodeLengthCodes = bstream.readBits(4) + 4; numCodeLengthCodes = bstream.readBits(4) + 4;
...@@ -567,24 +566,25 @@ function inflate(compressedData, numDecompressedBytes) { ...@@ -567,24 +566,25 @@ function inflate(compressedData, numDecompressedBytes) {
var prevCodeLength = 0; var prevCodeLength = 0;
while (literalCodeLengths.length < numLiteralLengthCodes + numDistanceCodes) { while (literalCodeLengths.length < numLiteralLengthCodes + numDistanceCodes) {
var symbol = decodeSymbol(bstream, codeLengthsCodes); var symbol = decodeSymbol(bstream, codeLengthsCodes);
var repeat;
if (symbol <= 15) { if (symbol <= 15) {
literalCodeLengths.push(symbol); literalCodeLengths.push(symbol);
prevCodeLength = symbol; prevCodeLength = symbol;
} }
else if (symbol === 16) { else if (symbol === 16) {
var repeat = bstream.readBits(2) + 3; repeat = bstream.readBits(2) + 3;
while (repeat--) { while (repeat--) {
literalCodeLengths.push(prevCodeLength); literalCodeLengths.push(prevCodeLength);
} }
} }
else if (symbol === 17) { else if (symbol === 17) {
var repeat = bstream.readBits(3) + 3; repeat = bstream.readBits(3) + 3;
while (repeat--) { while (repeat--) {
literalCodeLengths.push(0); literalCodeLengths.push(0);
} }
} }
else if (symbol === 18) { else if (symbol === 18) {
var repeat = bstream.readBits(7) + 11; repeat = bstream.readBits(7) + 11;
while (repeat--) { while (repeat--) {
literalCodeLengths.push(0); literalCodeLengths.push(0);
} }
......
...@@ -8,6 +8,10 @@ ...@@ -8,6 +8,10 @@
{% else %} {% else %}
<h2>{{entries|length}} {{_('Results for:')}} {{searchterm}}</h2> <h2>{{entries|length}} {{_('Results for:')}} {{searchterm}}</h2>
{%endif%} {%endif%}
{% if g.user.is_authenticated %}
<!--a href="{{ url_for('read_books') }}" class="btn btn-primary">{{ _('Search result to shelf') }} </a-->
{% endif %}
<div class="row"> <div class="row">
......
...@@ -14,22 +14,21 @@ ...@@ -14,22 +14,21 @@
<label for="Publisher">{{_('Publisher')}}</label> <label for="Publisher">{{_('Publisher')}}</label>
<input type="text" class="form-control" name="publisher" id="publisher" value=""> <input type="text" class="form-control" name="publisher" id="publisher" value="">
</div> </div>
<!--div class="form-group"--> <div class="row">
<div class="row"> <div class="form-group col-sm-6">
<div class="form-group col-sm-6"> <label for="Publishstart">{{_('Publishing date from')}}</label>
<label for="Publishstart">{{_('Publishing date from')}}</label> <div style="position: relative">
<div style="position: relative"> <input type="date" class="form-control" name="Publishstart" id="Publishstart" value="">
<input type="date" class="form-control" name="Publishstart" id="Publishstart" value=""> <input type="text" class="form-control fake-input hidden" id="fake_Publishstart" value="">
<input type="text" class="form-control fake-input hidden" id="fake_Publishstart" value=""> </div>
</div> </div>
</div> <div class="form-group col-sm-6">
<div class="form-group col-sm-6"> <label for="Publishend">{{_('Publishing date to')}}</label>
<label for="Publishend">{{_('Publishing date to')}}</label> <div style="position: relative">
<div style="position: relative"> <input type="date" class="form-control" name="Publishend" id="Publishend" value="">
<input type="date" class="form-control" name="Publishend" id="Publishend" value=""> <input type="text" class="form-control fake-input hidden" id="fake_Publishend" value="">
<input type="text" class="form-control fake-input hidden" id="fake_Publishend" value=""> </div>
</div> </div>
</div>
</div> </div>
<label for="include_tag">{{_('Tags')}}</label> <label for="include_tag">{{_('Tags')}}</label>
<div class="form-group" id="test"> <div class="form-group" id="test">
...@@ -71,7 +70,7 @@ ...@@ -71,7 +70,7 @@
{% endfor %} {% endfor %}
</div> </div>
</div> </div>
{% if languages %} {% if languages %}
<label for="include_language">{{_('Languages')}}</label> <label for="include_language">{{_('Languages')}}</label>
<div class="form-group"> <div class="form-group">
<div class="btn-toolbar btn-toolbar-lg" data-toggle="buttons"> <div class="btn-toolbar btn-toolbar-lg" data-toggle="buttons">
...@@ -92,7 +91,65 @@ ...@@ -92,7 +91,65 @@
{% endfor %} {% endfor %}
</div> </div>
</div> </div>
{% endif%} {% endif%}
<div class="row">
<div class="form-group col-sm-6">
<label for="ratinghigh">{{_('Rating bigger than')}}</label>
<input type="number" name="ratinghigh" id="ratinghigh" class="rating input-lg" data-clearable="" >
</div>
<div class="form-group col-sm-6">
<label for="ratinglow">{{_('Rating less than')}}</label>
<input type="number" name="ratinglow" id="ratinglow" class="rating input-lg" data-clearable="" >
</div>
</div>
<div class="form-group">
<label for="comment">{{_('Description')}}</label>
<input type="text" class="form-control" name="comment" id="comment" value="">
</div>
{% if cc|length > 0 %}
{% for c in cc %}
<div class="form-group">
<label for="{{ 'custom_column_' ~ c.id }}">{{ c.name }}</label>
{% if c.datatype == 'bool' %}
<select name="{{ 'custom_column_' ~ c.id }}" id="{{ 'custom_column_' ~ c.id }}" class="form-control">
<option value="" selected></option>
<option value="True" >{{_('Yes')}}</option>
<option value="False" >{{_('No')}}</option>
</select>
{% endif %}
{% if c.datatype == 'int' %}
<input type="number" step="1" class="form-control" name="{{ 'custom_column_' ~ c.id }}" id="{{ 'custom_column_' ~ c.id }}" value="">
{% endif %}
{% if c.datatype in ['text', 'series'] and not c.is_multiple %}
<input type="text" class="form-control" name="{{ 'custom_column_' ~ c.id }}" id="{{ 'custom_column_' ~ c.id }}" value="">
{% endif %}
{% if c.datatype in ['text', 'series'] and c.is_multiple %}
<input type="text" class="form-control" name="{{ 'custom_column_' ~ c.id }}" id="{{ 'custom_column_' ~ c.id }}" value="">
{% endif %}
{% if c.datatype == 'enumeration' %}
<select class="form-control" name="{{ 'custom_column_' ~ c.id }}" id="{{ 'custom_column_' ~ c.id }}">
<option></option>
{% for opt in c.get_display_dict().enum_values %}
<option>{{ opt }}</option>
{% endfor %}
</select>
{% endif %}
{% if c.datatype == 'rating' %}
<input type="number" min="1" max="5" step="1" class="form-control" name="{{ 'custom_column_' ~ c.id }}" id="{{ 'custom_column_' ~ c.id }}"
{% if book['custom_column_' ~ c.id]|length > 0 %}
value="{{ '%d' % (book['custom_column_' ~ c.id][0].value / 2) }}"
{% endif %}>
{% endif %}
</div>
{% endfor %}
{% endif %}
<button type="submit" class="btn btn-default">{{_('Submit')}}</button> <button type="submit" class="btn btn-default">{{_('Submit')}}</button>
</form> </form>
</div> </div>
...@@ -107,6 +164,7 @@ ...@@ -107,6 +164,7 @@
{% if not g.user.locale == 'en' %} {% if not g.user.locale == 'en' %}
<script src="{{ url_for('static', filename='js/libs/bootstrap-datepicker/locales/bootstrap-datepicker.' + g.user.locale + '.min.js') }}" charset="UTF-8"></script> <script src="{{ url_for('static', filename='js/libs/bootstrap-datepicker/locales/bootstrap-datepicker.' + g.user.locale + '.min.js') }}" charset="UTF-8"></script>
{% endif %} {% endif %}
<script src="{{ url_for('static', filename='js/libs/bootstrap-rating-input.min.js') }}"></script>
<script src="{{ url_for('static', filename='js/libs/typeahead.bundle.js') }}"></script> <script src="{{ url_for('static', filename='js/libs/typeahead.bundle.js') }}"></script>
<script src="{{ url_for('static', filename='js/edit_books.js') }}"></script> <script src="{{ url_for('static', filename='js/edit_books.js') }}"></script>
<script> <script>
......
This diff is collapsed.
...@@ -360,7 +360,7 @@ class WorkerThread(threading.Thread): ...@@ -360,7 +360,7 @@ class WorkerThread(threading.Thread):
self.UIqueue[self.current]['message'] = error_message self.UIqueue[self.current]['message'] = error_message
return # error_message, RET_FAIL return # error_message, RET_FAIL
def add_convert(self, file_path, bookid, user_name, type, settings, kindle_mail): def add_convert(self, file_path, bookid, user_name, typ, settings, kindle_mail):
addLock = threading.Lock() addLock = threading.Lock()
addLock.acquire() addLock.acquire()
if self.last >= 20: if self.last >= 20:
...@@ -369,7 +369,7 @@ class WorkerThread(threading.Thread): ...@@ -369,7 +369,7 @@ class WorkerThread(threading.Thread):
self.id += 1 self.id += 1
self.queue.append({'file_path':file_path, 'bookid':bookid, 'starttime': 0, 'kindle':kindle_mail, self.queue.append({'file_path':file_path, 'bookid':bookid, 'starttime': 0, 'kindle':kindle_mail,
'status': STAT_WAITING, 'typ': TASK_CONVERT, 'settings':settings}) 'status': STAT_WAITING, 'typ': TASK_CONVERT, 'settings':settings})
self.UIqueue.append({'user': user_name, 'formStarttime': '', 'progress': " 0 %", 'type': type, self.UIqueue.append({'user': user_name, 'formStarttime': '', 'progress': " 0 %", 'type': typ,
'runtime': '0 s', 'status': _('Waiting'),'id': self.id } ) 'runtime': '0 s', 'status': _('Waiting'),'id': self.id } )
self.id += 1 self.id += 1
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment