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
18a06e4a
Commit
18a06e4a
authored
Feb 05, 2017
by
OzzieIsaacs
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fixed typeahead with reverse proxy
fixed marking of tags in advanced search seperated js and html
parent
d5a64baf
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
203 additions
and
201 deletions
+203
-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
No files found.
cps/static/js/edit_books.js
View file @
18a06e4a
...
...
@@ -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 @
18a06e4a
...
...
@@ -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 @
18a06e4a
...
...
@@ -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 @
18a06e4a
...
...
@@ -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 @
18a06e4a
...
...
@@ -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 %}
...
...
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