Merge branch 'master' of github.com:janeczku/calibre-web into janeczku-master

This commit is contained in:
idalin 2017-02-06 10:23:37 +08:00
commit a1cca00ba3
6 changed files with 207 additions and 204 deletions

View File

@ -2,178 +2,199 @@
* Created by SpeedProg on 05.04.2015. * Created by SpeedProg on 05.04.2015.
*/ */
/* /*
Takes a prefix, query typeahead callback, Bloodhound typeahead adapter Takes a prefix, query typeahead callback, Bloodhound typeahead adapter
and returns the completions it gets from the bloodhound engine prefixed. and returns the completions it gets from the bloodhound engine prefixed.
*/ */
function prefixed_source(prefix, query, cb, bh_adapter) { function prefixed_source(prefix, query, cb, bh_adapter) {
bh_adapter(query, function(retArray){ bh_adapter(query, function(retArray){
var matches = []; var matches = [];
for (var i = 0; i < retArray.length; i++) { for (var i = 0; i < retArray.length; i++) {
var obj = {name : prefix + retArray[i].name}; var obj = {name : prefix + retArray[i].name};
matches.push(obj); matches.push(obj);
} }
cb(matches); 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();
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 + " & ";
} }
var authors = new Bloodhound({ prefixed_source(prefix, current_author, cb, bh_adapter);
name: 'authors', }
datumTokenizer: function(datum) {
return [datum.name];
},
queryTokenizer: Bloodhound.tokenizers.whitespace,
remote: {
url: '/get_authors_json?q=%QUERY'
}
});
function authors_source(query, cb) {
var bh_adapter = authors.ttAdapter();
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 + " & ";
}
prefixed_source(prefix, current_author, cb, bh_adapter);
}
var promise = authors.initialize(); var promise = authors.initialize();
promise.done(function(){ promise.done(function(){
$("#bookAuthor").typeahead( $("#bookAuthor").typeahead(
{ {
highlight: true, minLength: 1, highlight: true, minLength: 1,
hint: true hint: true
}, { }, {
name: 'authors', displayKey: 'name', name: 'authors', displayKey: 'name',
source: authors_source 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;
} }
)
});
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(){ promise.done(function(){
$("#series").typeahead( $("#series").typeahead(
{ {
highlight: true, minLength: 0, highlight: true, minLength: 0,
hint: true hint: true
}, { }, {
name: 'series', displayKey: 'name', name: 'series', displayKey: 'name',
source: series.ttAdapter() source: series.ttAdapter()
} }
) )
}); });
var tags = new Bloodhound({ var tags = new Bloodhound({
name: 'tags', name: 'tags',
datumTokenizer: function(datum) { datumTokenizer: function(datum) {
return [datum.name]; return [datum.name];
}, },
queryTokenizer: function(query) { queryTokenizer: function(query) {
tokens = query.split(","); tokens = query.split(",");
tokens = [tokens[tokens.length-1].trim()]; tokens = [tokens[tokens.length-1].trim()];
return tokens return tokens
}, },
remote: { remote: {
url: '/get_tags_json?q=%QUERY' url: get_path()+'/get_tags_json?q=%QUERY'
} }
}); });
function tag_source(query, cb) { function tag_source(query, cb) {
var bh_adapter = tags.ttAdapter(); var bh_adapter = tags.ttAdapter();
var tokens = query.split(","); var tokens = query.split(",");
var current_tag = tokens[tokens.length-1].trim(); var current_tag = tokens[tokens.length-1].trim();
tokens.splice(tokens.length-1, 1); // remove last element tokens.splice(tokens.length-1, 1); // remove last element
var prefix = ""; var prefix = "";
for (var i = 0; i < tokens.length; i++) { for (var i = 0; i < tokens.length; i++) {
var tag = tokens[i].trim(); var tag = tokens[i].trim();
prefix += tag + ", "; prefix += tag + ", ";
}
prefixed_source(prefix, current_tag, cb, bh_adapter);
} }
var promise = tags.initialize(); prefixed_source(prefix, current_tag, cb, bh_adapter);
}
var promise = tags.initialize();
promise.done(function(){ promise.done(function(){
$("#tags").typeahead( $("#tags").typeahead(
{ {
highlight: true, minLength: 0, highlight: true, minLength: 0,
hint: true hint: true
}, { }, {
name: 'tags', displayKey: 'name', name: 'tags', displayKey: 'name',
source: tag_source source: tag_source
}
)
});
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 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) { function language_source(query, cb) {
var bh_adapter = languages.ttAdapter(); var bh_adapter = languages.ttAdapter();
var tokens = query.split(","); var tokens = query.split(",");
var current_language = tokens[tokens.length-1].trim(); var current_language = tokens[tokens.length-1].trim();
tokens.splice(tokens.length-1, 1); // remove last element tokens.splice(tokens.length-1, 1); // remove last element
var prefix = ""; var prefix = "";
for (var i = 0; i < tokens.length; i++) { for (var i = 0; i < tokens.length; i++) {
var tag = tokens[i].trim(); var tag = tokens[i].trim();
prefix += tag + ", "; prefix += tag + ", ";
}
prefixed_source(prefix, current_language, cb, bh_adapter);
} }
var promise = languages.initialize(); prefixed_source(prefix, current_language, cb, bh_adapter);
}
var promise = languages.initialize();
promise.done(function(){ promise.done(function(){
$("#languages").typeahead( $("#languages").typeahead(
{ {
highlight: true, minLength: 0, highlight: true, minLength: 0,
hint: true hint: true
}, { }, {
name: 'languages', displayKey: 'name', name: 'languages', displayKey: 'name',
source: language_source 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');
}
});
}); });
});

View File

@ -25,6 +25,39 @@ $(function() {
$this.text('Please wait...'); $this.text('Please wait...');
$this.addClass('disabled'); $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);
};}
});
});
}); });

View File

@ -115,40 +115,3 @@
</div> </div>
{% endblock %} {% 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 %}

View File

@ -4,7 +4,7 @@
<div class="col-sm-3 col-lg-3 col-xs-12"> <div class="col-sm-3 col-lg-3 col-xs-12">
<div class="cover"> <div class="cover">
{% if book.has_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 %} {% else %}
<img src="{{ url_for('static', filename='generic_cover.jpg') }}" /> <img src="{{ url_for('static', filename='generic_cover.jpg') }}" />
{% endif %} {% endif %}

View File

@ -40,7 +40,7 @@
{% endfor %} {% endfor %}
</div> </div>
</div> </div>
<label for="Tags">{{_('Exclude Series')}}</label> <label for="Series">{{_('Exclude Series')}}</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">
{% for serie in series %} {% 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/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>
$('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> </script>
{% endblock %} {% endblock %}
{% block header %} {% block header %}

View File

@ -421,6 +421,7 @@ def before_request():
g.user = current_user g.user = current_user
g.allow_registration = config.config_public_reg g.allow_registration = config.config_public_reg
g.allow_upload = config.config_uploading 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: 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')) return redirect(url_for('basic_configuration'))