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
a1cca00b
Commit
a1cca00b
authored
Feb 06, 2017
by
idalin
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of github.com:janeczku/calibre-web into janeczku-master
parents
9ef8aa79
63379fe5
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
204 additions
and
201 deletions
+204
-201
edit_books.js
cps/static/js/edit_books.js
+168
-147
main.js
cps/static/js/main.js
+33
-0
admin.html
cps/templates/admin.html
+0
-37
book_edit.html
cps/templates/book_edit.html
+1
-1
search_form.html
cps/templates/search_form.html
+1
-16
web.py
cps/web.py
+1
-0
No files found.
cps/static/js/edit_books.js
View file @
a1cca00b
...
...
@@ -2,178 +2,199 @@
* Created by SpeedProg on 05.04.2015.
*/
/*
Takes a prefix, query typeahead callback, Bloodhound typeahead adapter
and returns the completions it gets from the bloodhound engine prefixed.
*/
function
prefixed_source
(
prefix
,
query
,
cb
,
bh_adapter
)
{
bh_adapter
(
query
,
function
(
retArray
){
var
matches
=
[];
for
(
var
i
=
0
;
i
<
retArray
.
length
;
i
++
)
{
var
obj
=
{
name
:
prefix
+
retArray
[
i
].
name
};
matches
.
push
(
obj
);
}
cb
(
matches
);
});
}
var
authors
=
new
Bloodhound
({
name
:
'authors'
,
datumTokenizer
:
function
(
datum
)
{
return
[
datum
.
name
];
},
queryTokenizer
:
Bloodhound
.
tokenizers
.
whitespace
,
remote
:
{
url
:
'/get_authors_json?q=%QUERY'
/*
Takes a prefix, query typeahead callback, Bloodhound typeahead adapter
and returns the completions it gets from the bloodhound engine prefixed.
*/
function
prefixed_source
(
prefix
,
query
,
cb
,
bh_adapter
)
{
bh_adapter
(
query
,
function
(
retArray
){
var
matches
=
[];
for
(
var
i
=
0
;
i
<
retArray
.
length
;
i
++
)
{
var
obj
=
{
name
:
prefix
+
retArray
[
i
].
name
};
matches
.
push
(
obj
);
}
cb
(
matches
);
});
}
function
get_path
(){
var
jsFileLocation
=
$
(
'script[src*=edit_books]'
).
attr
(
'src'
);
// the js file path
jsFileLocation
=
jsFileLocation
.
replace
(
'/static/js/edit_books.js'
,
''
);
// the js folder path
return
jsFileLocation
;
}
var
authors
=
new
Bloodhound
({
name
:
'authors'
,
datumTokenizer
:
function
(
datum
)
{
return
[
datum
.
name
];
},
queryTokenizer
:
Bloodhound
.
tokenizers
.
whitespace
,
remote
:
{
url
:
get_path
()
+
'/get_authors_json?q=%QUERY'
}
});
function
authors_source
(
query
,
cb
)
{
var
bh_adapter
=
authors
.
ttAdapter
();
function
authors_source
(
query
,
cb
)
{
var
bh_adapter
=
authors
.
ttAdapter
();
var
tokens
=
query
.
split
(
"&"
);
var
current_author
=
tokens
[
tokens
.
length
-
1
].
trim
();
var
tokens
=
query
.
split
(
"&"
);
var
current_author
=
tokens
[
tokens
.
length
-
1
].
trim
();
tokens
.
splice
(
tokens
.
length
-
1
,
1
);
// remove last element
var
prefix
=
""
;
for
(
var
i
=
0
;
i
<
tokens
.
length
;
i
++
)
{
var
author
=
tokens
[
i
].
trim
();
prefix
+=
author
+
" & "
;
}
tokens
.
splice
(
tokens
.
length
-
1
,
1
);
// remove last element
var
prefix
=
""
;
for
(
var
i
=
0
;
i
<
tokens
.
length
;
i
++
)
{
var
author
=
tokens
[
i
].
trim
();
prefix
+=
author
+
" & "
;
}
prefixed_source
(
prefix
,
current_author
,
cb
,
bh_adapter
);
}
prefixed_source
(
prefix
,
current_author
,
cb
,
bh_adapter
);
}
var
promise
=
authors
.
initialize
();
var
promise
=
authors
.
initialize
();
promise
.
done
(
function
(){
$
(
"#bookAuthor"
).
typeahead
(
{
highlight
:
true
,
minLength
:
1
,
hint
:
true
},
{
name
:
'authors'
,
displayKey
:
'name'
,
source
:
authors_source
}
)
});
var
series
=
new
Bloodhound
({
name
:
'series'
,
datumTokenizer
:
function
(
datum
)
{
return
[
datum
.
name
];
},
queryTokenizer
:
function
(
query
)
{
return
[
query
];
},
remote
:
{
url
:
'/get_series_json?q='
,
replace
:
function
(
url
,
query
)
{
url_query
=
url
+
encodeURIComponent
(
query
);
return
url_query
;
$
(
"#bookAuthor"
).
typeahead
(
{
highlight
:
true
,
minLength
:
1
,
hint
:
true
},
{
name
:
'authors'
,
displayKey
:
'name'
,
source
:
authors_source
}
)
});
var
series
=
new
Bloodhound
({
name
:
'series'
,
datumTokenizer
:
function
(
datum
)
{
return
[
datum
.
name
];
},
queryTokenizer
:
function
(
query
)
{
return
[
query
];
},
remote
:
{
url
:
get_path
()
+
'/get_series_json?q='
,
replace
:
function
(
url
,
query
)
{
url_query
=
url
+
encodeURIComponent
(
query
);
return
url_query
;
}
});
var
promise
=
series
.
initialize
();
}
});
var
promise
=
series
.
initialize
();
promise
.
done
(
function
(){
$
(
"#series"
).
typeahead
(
{
highlight
:
true
,
minLength
:
0
,
hint
:
true
},
{
name
:
'series'
,
displayKey
:
'name'
,
source
:
series
.
ttAdapter
()
}
)
});
var
tags
=
new
Bloodhound
({
name
:
'tags'
,
datumTokenizer
:
function
(
datum
)
{
return
[
datum
.
name
];
},
queryTokenizer
:
function
(
query
)
{
tokens
=
query
.
split
(
","
);
tokens
=
[
tokens
[
tokens
.
length
-
1
].
trim
()];
return
tokens
},
remote
:
{
url
:
'/get_tags_json?q=%QUERY'
}
});
function
tag_source
(
query
,
cb
)
{
var
bh_adapter
=
tags
.
ttAdapter
();
$
(
"#series"
).
typeahead
(
{
highlight
:
true
,
minLength
:
0
,
hint
:
true
},
{
name
:
'series'
,
displayKey
:
'name'
,
source
:
series
.
ttAdapter
()
}
)
});
var
tags
=
new
Bloodhound
({
name
:
'tags'
,
datumTokenizer
:
function
(
datum
)
{
return
[
datum
.
name
];
},
queryTokenizer
:
function
(
query
)
{
tokens
=
query
.
split
(
","
);
tokens
=
[
tokens
[
tokens
.
length
-
1
].
trim
()];
return
tokens
},
remote
:
{
url
:
get_path
()
+
'/get_tags_json?q=%QUERY'
}
});
var
tokens
=
query
.
split
(
","
);
var
current_tag
=
tokens
[
tokens
.
length
-
1
].
trim
();
function
tag_source
(
query
,
cb
)
{
var
bh_adapter
=
tags
.
ttAdapter
();
tokens
.
splice
(
tokens
.
length
-
1
,
1
);
// remove last element
var
prefix
=
""
;
for
(
var
i
=
0
;
i
<
tokens
.
length
;
i
++
)
{
var
tag
=
tokens
[
i
].
trim
();
prefix
+=
tag
+
", "
;
}
var
tokens
=
query
.
split
(
","
);
var
current_tag
=
tokens
[
tokens
.
length
-
1
].
trim
();
prefixed_source
(
prefix
,
current_tag
,
cb
,
bh_adapter
);
tokens
.
splice
(
tokens
.
length
-
1
,
1
);
// remove last element
var
prefix
=
""
;
for
(
var
i
=
0
;
i
<
tokens
.
length
;
i
++
)
{
var
tag
=
tokens
[
i
].
trim
();
prefix
+=
tag
+
", "
;
}
var
promise
=
tags
.
initialize
();
promise
.
done
(
function
(){
$
(
"#tags"
).
typeahead
(
{
highlight
:
true
,
minLength
:
0
,
hint
:
true
},
{
name
:
'tags'
,
displayKey
:
'name'
,
source
:
tag_source
}
)
});
prefixed_source
(
prefix
,
current_tag
,
cb
,
bh_adapter
);
}
var
languages
=
new
Bloodhound
({
name
:
'languages'
,
datumTokenizer
:
function
(
datum
)
{
return
[
datum
.
name
];
},
queryTokenizer
:
function
(
query
)
{
return
[
query
];
},
remote
:
{
url
:
'/get_languages_json?q='
,
replace
:
function
(
url
,
query
)
{
url_query
=
url
+
encodeURIComponent
(
query
);
return
url_query
;
var
promise
=
tags
.
initialize
();
promise
.
done
(
function
(){
$
(
"#tags"
).
typeahead
(
{
highlight
:
true
,
minLength
:
0
,
hint
:
true
},
{
name
:
'tags'
,
displayKey
:
'name'
,
source
:
tag_source
}
)
});
var
languages
=
new
Bloodhound
({
name
:
'languages'
,
datumTokenizer
:
function
(
datum
)
{
return
[
datum
.
name
];
},
queryTokenizer
:
function
(
query
)
{
return
[
query
];
},
remote
:
{
url
:
get_path
()
+
'/get_languages_json?q='
,
replace
:
function
(
url
,
query
)
{
url_query
=
url
+
encodeURIComponent
(
query
);
return
url_query
;
}
});
function
language_source
(
query
,
cb
)
{
var
bh_adapter
=
languages
.
ttAdapter
();
}
});
var
tokens
=
query
.
split
(
","
);
var
current_language
=
tokens
[
tokens
.
length
-
1
].
trim
();
function
language_source
(
query
,
cb
)
{
var
bh_adapter
=
languages
.
ttAdapter
();
tokens
.
splice
(
tokens
.
length
-
1
,
1
);
// remove last element
var
prefix
=
""
;
for
(
var
i
=
0
;
i
<
tokens
.
length
;
i
++
)
{
var
tag
=
tokens
[
i
].
trim
();
prefix
+=
tag
+
", "
;
}
var
tokens
=
query
.
split
(
","
);
var
current_language
=
tokens
[
tokens
.
length
-
1
].
trim
();
prefixed_source
(
prefix
,
current_language
,
cb
,
bh_adapter
);
tokens
.
splice
(
tokens
.
length
-
1
,
1
);
// remove last element
var
prefix
=
""
;
for
(
var
i
=
0
;
i
<
tokens
.
length
;
i
++
)
{
var
tag
=
tokens
[
i
].
trim
();
prefix
+=
tag
+
", "
;
}
var
promise
=
languages
.
initialize
();
prefixed_source
(
prefix
,
current_language
,
cb
,
bh_adapter
);
}
var
promise
=
languages
.
initialize
();
promise
.
done
(
function
(){
$
(
"#languages"
).
typeahead
(
{
highlight
:
true
,
minLength
:
0
,
hint
:
true
},
{
name
:
'languages'
,
displayKey
:
'name'
,
source
:
language_source
}
)
$
(
"#languages"
).
typeahead
(
{
highlight
:
true
,
minLength
:
0
,
hint
:
true
},
{
name
:
'languages'
,
displayKey
:
'name'
,
source
:
language_source
}
)
});
$
(
'form'
).
on
(
'change input typeahead:selected'
,
function
(
data
){
form
=
$
(
'form'
).
serialize
();
$
.
getJSON
(
get_path
()
+
"/get_matching_tags"
,
form
,
function
(
data
)
{
$
(
'.tags_click'
).
each
(
function
()
{
if
(
$
.
inArray
(
parseInt
(
$
(
this
).
children
(
'input'
).
first
().
val
(),
10
),
data
.
tags
)
==
-
1
)
{
if
(
!
(
$
(
this
).
hasClass
(
'active'
)))
{
$
(
this
).
addClass
(
'disabled'
);
}
}
else
{
$
(
this
).
removeClass
(
'disabled'
);
}
});
});
});
cps/static/js/main.js
View file @
a1cca00b
...
...
@@ -25,6 +25,39 @@ $(function() {
$this
.
text
(
'Please wait...'
);
$this
.
addClass
(
'disabled'
);
});
$
(
"#restart"
).
click
(
function
()
{
$
.
ajax
({
dataType
:
'json'
,
url
:
window
.
location
.
pathname
+
"/../../shutdown"
,
data
:
{
"parameter"
:
0
},
success
:
function
(
data
)
{
return
alert
(
data
.
text
);}
});
});
$
(
"#shutdown"
).
click
(
function
()
{
$
.
ajax
({
dataType
:
'json'
,
url
:
window
.
location
.
pathname
+
"/../../shutdown"
,
data
:
{
"parameter"
:
1
},
success
:
function
(
data
)
{
return
alert
(
data
.
text
);}
});
});
$
(
"#check_for_update"
).
click
(
function
()
{
var
button_text
=
$
(
"#check_for_update"
).
html
();
$
(
"#check_for_update"
).
html
(
'Checking...'
);
$
.
ajax
({
dataType
:
'json'
,
url
:
window
.
location
.
pathname
+
"/../../get_update_status"
,
success
:
function
(
data
)
{
if
(
data
.
status
==
true
)
{
$
(
"#check_for_update"
).
addClass
(
'hidden'
);
$
(
"#perform_update"
).
removeClass
(
'hidden'
);
}
else
{
$
(
"#check_for_update"
).
html
(
button_text
);
};}
});
});
});
...
...
cps/templates/admin.html
View file @
a1cca00b
...
...
@@ -115,40 +115,3 @@
</div>
{% endblock %}
{% block js %}
<script
type=
"text/javascript"
>
$
(
"#restart"
).
click
(
function
()
{
$
.
ajax
({
dataType
:
'json'
,
url
:
"{{url_for('shutdown')}}"
,
data
:
{
"parameter"
:
0
},
//data: data,
success
:
function
(
data
)
{
return
alert
(
data
.
text
);}
});
});
$
(
"#shutdown"
).
click
(
function
()
{
$
.
ajax
({
dataType
:
'json'
,
url
:
"{{url_for('shutdown')}}"
,
data
:
{
"parameter"
:
1
},
success
:
function
(
data
)
{
return
alert
(
data
.
text
);}
});
});
$
(
"#check_for_update"
).
click
(
function
()
{
$
(
"#check_for_update"
).
html
(
'Checking...'
);
$
.
ajax
({
dataType
:
'json'
,
url
:
"{{url_for('get_update_status')}}"
,
success
:
function
(
data
)
{
if
(
data
.
status
==
true
)
{
$
(
"#check_for_update"
).
addClass
(
'hidden'
);
$
(
"#perform_update"
).
removeClass
(
'hidden'
);
}
else
{
$
(
"#check_for_update"
).
html
(
'{{_('
Check
for
update
')}}'
);
};}
});
});
</script>
{% endblock %}
cps/templates/book_edit.html
View file @
a1cca00b
...
...
@@ -4,7 +4,7 @@
<div
class=
"col-sm-3 col-lg-3 col-xs-12"
>
<div
class=
"cover"
>
{% if book.has_cover %}
<img
src=
"{{ url_for('get_cover', cover_path=book.path) }}"
/>
<img
src=
"{{ url_for('get_cover', cover_path=book.path
.replace('\\','/')
) }}"
/>
{% else %}
<img
src=
"{{ url_for('static', filename='generic_cover.jpg') }}"
/>
{% endif %}
...
...
cps/templates/search_form.html
View file @
a1cca00b
...
...
@@ -40,7 +40,7 @@
{% endfor %}
</div>
</div>
<label
for=
"
Tag
s"
>
{{_('Exclude Series')}}
</label>
<label
for=
"
Serie
s"
>
{{_('Exclude Series')}}
</label>
<div
class=
"form-group"
>
<div
class=
"btn-toolbar btn-toolbar-lg"
data-toggle=
"buttons"
>
{% for serie in series %}
...
...
@@ -81,21 +81,6 @@
<script
src=
"{{ url_for('static', filename='js/typeahead.bundle.js') }}"
></script>
<script
src=
"{{ url_for('static', filename='js/edit_books.js') }}"
></script>
<script>
$
(
'form'
)}}.
on
(
'change input typeahead:selected'
,
function
()
{
form
=
$
(
'form'
)}}.
serialize
();
$
.
getJSON
(
"{{ url_for('get_matching_tags') }}"
,
form
,
function
(
data
)
{
$
(
'.tags_click'
).
each
(
function
()
{
if
(
$
.
inArray
(
parseInt
(
$
(
this
).
children
(
'input'
).
first
().
val
(),
10
),
data
.
tags
)
==
-
1
)
{
if
(
!
(
$
(
this
).
hasClass
(
'active'
)))
{
$
(
this
).
addClass
(
'disabled'
);
}
}
else
{
$
(
this
).
removeClass
(
'disabled'
);
}
});
});
});
</script>
{% endblock %}
{% block header %}
...
...
cps/web.py
View file @
a1cca00b
...
...
@@ -421,6 +421,7 @@ def before_request():
g
.
user
=
current_user
g
.
allow_registration
=
config
.
config_public_reg
g
.
allow_upload
=
config
.
config_uploading
g
.
public_shelfes
=
ub
.
session
.
query
(
ub
.
Shelf
)
.
filter
(
ub
.
Shelf
.
is_public
==
1
)
.
all
()
if
not
config
.
db_configured
and
request
.
endpoint
not
in
(
'basic_configuration'
,
'login'
)
and
'/static/'
not
in
request
.
path
:
return
redirect
(
url_for
(
'basic_configuration'
))
...
...
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