Merge branch 'master' of github.com:janeczku/calibre-web into janeczku-master
This commit is contained in:
commit
a1cca00ba3
|
@ -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');
|
||||||
|
}
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
});
|
||||||
|
|
|
@ -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);
|
||||||
|
};}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -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 %}
|
|
||||||
|
|
|
@ -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 %}
|
||||||
|
|
|
@ -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 %}
|
||||||
|
|
|
@ -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'))
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user