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
e57229e6
Commit
e57229e6
authored
Apr 22, 2021
by
cbartondock
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of
https://github.com/janeczku/calibre-web
parents
1ef2a964
c0b2e886
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
220 additions
and
500 deletions
+220
-500
admin.py
cps/admin.py
+26
-11
db.py
cps/db.py
+4
-1
editbooks.py
cps/editbooks.py
+1
-1
main.js
cps/static/js/main.js
+13
-0
table.js
cps/static/js/table.js
+47
-37
web.py
cps/web.py
+1
-1
Calibre-Web TestSummary_Linux.html
test/Calibre-Web TestSummary_Linux.html
+125
-447
runner.js
test/js/runner.js
+3
-2
No files found.
cps/admin.py
View file @
e57229e6
...
@@ -289,15 +289,30 @@ def list_users():
...
@@ -289,15 +289,30 @@ def list_users():
@
login_required
@
login_required
@
admin_required
@
admin_required
def
delete_user
():
def
delete_user
():
user_id
=
request
.
values
.
get
(
'userid'
,
-
1
)
user_ids
=
request
.
form
.
to_dict
(
flat
=
False
)
content
=
ub
.
session
.
query
(
ub
.
User
)
.
filter
(
ub
.
User
.
id
==
int
(
user_id
))
.
one_or_none
()
if
"userid[]"
in
user_ids
:
users
=
ub
.
session
.
query
(
ub
.
User
)
.
filter
(
ub
.
User
.
id
.
in_
(
user_ids
[
'userid[]'
]))
.
all
()
elif
"userid"
in
user_ids
:
users
=
ub
.
session
.
query
(
ub
.
User
)
.
filter
(
ub
.
User
.
id
==
user_ids
[
'userid'
][
0
])
.
all
()
count
=
0
errors
=
list
()
success
=
list
()
if
not
users
:
log
.
error
(
"User not found"
)
return
Response
(
json
.
dumps
({
'type'
:
"danger"
,
'message'
:
_
(
"User not found"
)}),
mimetype
=
'application/json'
)
for
user
in
users
:
try
:
try
:
message
=
_delete_user
(
content
)
message
=
_delete_user
(
user
)
return
Response
(
json
.
dumps
({
'type'
:
"success"
,
'message'
:
message
}),
mimetype
=
'application/json'
)
count
+=
1
except
Exception
as
ex
:
except
Exception
as
ex
:
return
Response
(
json
.
dumps
({
'type'
:
"danger"
,
'message'
:
str
(
ex
)}),
mimetype
=
'application/json'
)
errors
.
append
({
'type'
:
"danger"
,
'message'
:
str
(
ex
)})
log
.
error
(
"User not found"
)
return
Response
(
json
.
dumps
({
'type'
:
"danger"
,
'message'
:
_
(
"User not found"
)}),
mimetype
=
'application/json'
)
if
count
==
1
:
success
=
[{
'type'
:
"success"
,
'message'
:
message
}]
elif
count
>
1
:
success
=
[{
'type'
:
"success"
,
'message'
:
_
(
"{} users deleted successfully"
)
.
format
(
count
)}]
success
.
extend
(
errors
)
return
Response
(
json
.
dumps
(
success
),
mimetype
=
'application/json'
)
@
admi
.
route
(
"/ajax/getlocale"
)
@
admi
.
route
(
"/ajax/getlocale"
)
@
login_required
@
login_required
...
@@ -367,9 +382,9 @@ def edit_list_user(param):
...
@@ -367,9 +382,9 @@ def edit_list_user(param):
if
not
ub
.
session
.
query
(
ub
.
User
)
.
\
if
not
ub
.
session
.
query
(
ub
.
User
)
.
\
filter
(
ub
.
User
.
role
.
op
(
'&'
)(
constants
.
ROLE_ADMIN
)
==
constants
.
ROLE_ADMIN
,
filter
(
ub
.
User
.
role
.
op
(
'&'
)(
constants
.
ROLE_ADMIN
)
==
constants
.
ROLE_ADMIN
,
ub
.
User
.
id
!=
user
.
id
)
.
count
():
ub
.
User
.
id
!=
user
.
id
)
.
count
():
return
Response
(
json
.
dumps
({
'type'
:
"danger"
,
return
Response
(
json
.
dumps
(
[
{
'type'
:
"danger"
,
'message'
:
_
(
u"No admin user remaining, can't remove admin role"
,
'message'
:
_
(
u"No admin user remaining, can't remove admin role"
,
nick
=
user
.
name
)}),
mimetype
=
'application/json'
)
nick
=
user
.
name
)}
]
),
mimetype
=
'application/json'
)
user
.
role
&=
~
int
(
vals
[
'field_index'
])
user
.
role
&=
~
int
(
vals
[
'field_index'
])
elif
param
.
startswith
(
'sidebar'
):
elif
param
.
startswith
(
'sidebar'
):
if
user
.
name
==
"Guest"
and
int
(
vals
[
'field_index'
])
==
constants
.
SIDEBAR_READ_AND_UNREAD
:
if
user
.
name
==
"Guest"
and
int
(
vals
[
'field_index'
])
==
constants
.
SIDEBAR_READ_AND_UNREAD
:
...
...
cps/db.py
View file @
e57229e6
...
@@ -625,7 +625,10 @@ class CalibreDB():
...
@@ -625,7 +625,10 @@ class CalibreDB():
outcome
=
list
()
outcome
=
list
()
elementlist
=
{
ele
.
id
:
ele
for
ele
in
inputlist
}
elementlist
=
{
ele
.
id
:
ele
for
ele
in
inputlist
}
for
entry
in
state
:
for
entry
in
state
:
try
:
outcome
.
append
(
elementlist
[
entry
])
outcome
.
append
(
elementlist
[
entry
])
except
KeyError
:
pass
del
elementlist
[
entry
]
del
elementlist
[
entry
]
for
entry
in
elementlist
:
for
entry
in
elementlist
:
outcome
.
append
(
elementlist
[
entry
])
outcome
.
append
(
elementlist
[
entry
])
...
...
cps/editbooks.py
View file @
e57229e6
...
@@ -1211,6 +1211,6 @@ def merge_list_book():
...
@@ -1211,6 +1211,6 @@ def merge_list_book():
element
.
format
,
element
.
format
,
element
.
uncompressed_size
,
element
.
uncompressed_size
,
to_name
))
to_name
))
delete_book
(
from_book
.
id
,
""
,
True
)
# json_resp =
delete_book
(
from_book
.
id
,
""
,
True
)
return
json
.
dumps
({
'success'
:
True
})
return
json
.
dumps
({
'success'
:
True
})
return
""
return
""
cps/static/js/main.js
View file @
e57229e6
...
@@ -178,6 +178,19 @@ $("#delete_confirm").click(function() {
...
@@ -178,6 +178,19 @@ $("#delete_confirm").click(function() {
}
}
});
});
$
(
"#books-table"
).
bootstrapTable
(
"refresh"
);
/*$.ajax({
method:"get",
url: window.location.pathname + "/../../ajax/listbooks",
async: true,
timeout: 900,
success:function(data) {
$("#book-table").bootstrapTable("load", data);
loadSuccess();
}
});*/
}
}
});
});
}
else
{
}
else
{
...
...
cps/static/js/table.js
View file @
e57229e6
...
@@ -511,22 +511,36 @@ $(function() {
...
@@ -511,22 +511,36 @@ $(function() {
var
data
=
$
(
this
).
data
(
"val"
);
var
data
=
$
(
this
).
data
(
"val"
);
checkboxHeader
(
val
,
name
,
data
);
checkboxHeader
(
val
,
name
,
data
);
});
});
function
user_handle
(
userId
)
{
$
(
".button_head"
).
on
(
"click"
,
function
()
{
var
result
=
$
(
'#user-table'
).
bootstrapTable
(
'getSelections'
).
map
(
a
=>
a
.
id
);
confirmDialog
(
"btndeluser"
,
"GeneralDeleteModal"
,
0
,
function
()
{
$
.
ajax
({
$
.
ajax
({
method
:
"post"
,
method
:
"post"
,
url
:
window
.
location
.
pathname
+
"/../../ajax/deleteuser"
,
url
:
window
.
location
.
pathname
+
"/../../ajax/deleteuser"
,
data
:
{
"userid"
:
userId
}
data
:
{
"userid"
:
result
},
success
:
function
(
data
)
{
selections
=
selections
.
filter
(
(
el
)
=>
!
result
.
includes
(
el
)
);
// selections = selections.filter(item => item !== userId);
handleListServerResponse
(
data
);
},
error
:
function
(
data
)
{
handleListServerResponse
({
type
:
"danger"
,
message
:
data
.
responseText
})
},
});
});
$
.
ajax
({
method
:
"get"
,
url
:
window
.
location
.
pathname
+
"/../../ajax/listusers"
,
async
:
true
,
timeout
:
900
,
success
:
function
(
data
)
{
$
(
"#user-table"
).
bootstrapTable
(
"load"
,
data
);
loadSuccess
();
}
}
);
});
});
function
user_handle
(
userId
)
{
$
.
ajax
({
method
:
"post"
,
url
:
window
.
location
.
pathname
+
"/../../ajax/deleteuser"
,
data
:
{
"userid"
:
userId
}
});
$
(
"#user-table"
).
bootstrapTable
(
"refresh"
);
}
}
$
(
"#user-table"
).
on
(
"click-cell.bs.table"
,
function
(
field
,
value
,
row
,
$element
)
{
$
(
"#user-table"
).
on
(
"click-cell.bs.table"
,
function
(
field
,
value
,
row
,
$element
)
{
...
@@ -642,23 +656,13 @@ function handleListServerResponse (data, disableButtons) {
...
@@ -642,23 +656,13 @@ function handleListServerResponse (data, disableButtons) {
$
(
"#flash_success"
).
remove
();
$
(
"#flash_success"
).
remove
();
$
(
"#flash_danger"
).
remove
();
$
(
"#flash_danger"
).
remove
();
if
(
!
jQuery
.
isEmptyObject
(
data
))
{
if
(
!
jQuery
.
isEmptyObject
(
data
))
{
$
(
".navbar"
).
after
(
'<div class="row-fluid text-center" style="margin-top: -20px;">'
+
data
.
forEach
(
function
(
item
)
{
'<div id="flash_'
+
data
.
type
+
'" class="alert alert-'
+
data
.
type
+
'">'
+
data
.
message
+
'</div>'
+
$
(
".navbar"
).
after
(
'<div class="row-fluid text-center" style="margin-top: -20px;">'
+
'<div id="flash_'
+
item
.
type
+
'" class="alert alert-'
+
item
.
type
+
'">'
+
item
.
message
+
'</div>'
+
'</div>'
);
'</div>'
);
}
$
.
ajax
({
method
:
"get"
,
url
:
window
.
location
.
pathname
+
"/../../ajax/listusers"
,
async
:
true
,
timeout
:
900
,
success
:
function
(
data
)
{
$
(
"#user-table"
).
bootstrapTable
(
"load"
,
data
);
if
(
disableButtons
)
{
deactivateHeaderButtons
();
}
loadSuccess
();
}
});
});
}
$
(
"#user-table"
).
bootstrapTable
(
"refresh"
);
}
}
...
@@ -675,6 +679,7 @@ function checkboxChange(checkbox, userId, field, field_index) {
...
@@ -675,6 +679,7 @@ function checkboxChange(checkbox, userId, field, field_index) {
}
}
function
deactivateHeaderButtons
()
{
function
deactivateHeaderButtons
()
{
if
(
selections
.
length
<
1
)
{
$
(
"#user_delete_selection"
).
addClass
(
"disabled"
);
$
(
"#user_delete_selection"
).
addClass
(
"disabled"
);
$
(
"#user_delete_selection"
).
attr
(
"aria-disabled"
,
true
);
$
(
"#user_delete_selection"
).
attr
(
"aria-disabled"
,
true
);
$
(
".check_head"
).
attr
(
"aria-disabled"
,
true
);
$
(
".check_head"
).
attr
(
"aria-disabled"
,
true
);
...
@@ -683,6 +688,7 @@ function deactivateHeaderButtons() {
...
@@ -683,6 +688,7 @@ function deactivateHeaderButtons() {
$
(
".button_head"
).
attr
(
"aria-disabled"
,
true
);
$
(
".button_head"
).
attr
(
"aria-disabled"
,
true
);
$
(
".button_head"
).
addClass
(
"disabled"
);
$
(
".button_head"
).
addClass
(
"disabled"
);
$
(
".header_select"
).
attr
(
"disabled"
,
true
);
$
(
".header_select"
).
attr
(
"disabled"
,
true
);
}
}
}
function
selectHeader
(
element
,
field
)
{
function
selectHeader
(
element
,
field
)
{
...
@@ -719,7 +725,7 @@ function checkboxHeader(CheckboxState, field, field_index) {
...
@@ -719,7 +725,7 @@ function checkboxHeader(CheckboxState, field, field_index) {
});
});
}
}
function
deleteUser
(
a
,
b
){
function
deleteUser
(
a
,
id
){
confirmDialog
(
confirmDialog
(
"btndeluser"
,
"btndeluser"
,
"GeneralDeleteModal"
,
"GeneralDeleteModal"
,
...
@@ -728,8 +734,12 @@ function deleteUser(a,b){
...
@@ -728,8 +734,12 @@ function deleteUser(a,b){
$
.
ajax
({
$
.
ajax
({
method
:
"post"
,
method
:
"post"
,
url
:
window
.
location
.
pathname
+
"/../../ajax/deleteuser"
,
url
:
window
.
location
.
pathname
+
"/../../ajax/deleteuser"
,
data
:
{
"userid"
:
b
},
data
:
{
"userid"
:
id
},
success
:
handleListServerResponse
,
success
:
function
(
data
)
{
userId
=
parseInt
(
id
,
10
);
selections
=
selections
.
filter
(
item
=>
item
!==
userId
);
handleListServerResponse
(
data
);
},
error
:
function
(
data
)
{
error
:
function
(
data
)
{
handleListServerResponse
({
type
:
"danger"
,
message
:
data
.
responseText
})
handleListServerResponse
({
type
:
"danger"
,
message
:
data
.
responseText
})
},
},
...
...
cps/web.py
View file @
e57229e6
...
@@ -788,7 +788,7 @@ def list_books():
...
@@ -788,7 +788,7 @@ def list_books():
if
state
:
if
state
:
if
search
:
if
search
:
books
=
calibre_db
.
search_query
(
search
)
books
=
calibre_db
.
search_query
(
search
)
.
all
()
filtered_count
=
len
(
books
)
filtered_count
=
len
(
books
)
else
:
else
:
books
=
calibre_db
.
session
.
query
(
db
.
Books
)
.
filter
(
calibre_db
.
common_filters
())
.
all
()
books
=
calibre_db
.
session
.
query
(
db
.
Books
)
.
filter
(
calibre_db
.
common_filters
())
.
all
()
...
...
test/Calibre-Web TestSummary_Linux.html
View file @
e57229e6
This diff is collapsed.
Click to expand it.
test/js/runner.js
View file @
e57229e6
output_list
=
Array
();
output_list
=
Array
();
/* Level - 0: Summary; 1: Failed; 2: All; 3: Skipped 4: Error*/
/* Level - 0: Summary; 1: Failed; 2: All; 3: Skipped 4: Error*/
...
@@ -24,9 +25,9 @@ function showCase(level) {
...
@@ -24,9 +25,9 @@ function showCase(level) {
row
.
classList
.
add
(
'hiddenRow'
);
row
.
classList
.
add
(
'hiddenRow'
);
}
}
}
}
// Show skipped if all or skipped
or summary problems
selected
// Show skipped if all or skipped selected
if
(
id
.
substr
(
0
,
2
)
==
'st'
)
{
if
(
id
.
substr
(
0
,
2
)
==
'st'
)
{
if
(
level
==
2
||
level
==
3
||
level
==
5
)
{
if
(
level
==
2
||
level
==
3
)
{
row
.
classList
.
remove
(
'hiddenRow'
);
row
.
classList
.
remove
(
'hiddenRow'
);
}
}
else
{
else
{
...
...
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