can now remove just 1 sub book - TODO-25 -- DONE

This commit is contained in:
2021-01-07 18:58:07 +11:00
parent 9560381a87
commit 860a85e3ae
3 changed files with 61 additions and 20 deletions

1
README
View File

@@ -28,7 +28,6 @@ python3 main.py
#### TODOS (next 26): #### TODOS (next 26):
TODO-25: allow removing of just this sub-book from a series -- can cause a need by messing with UI, so should just add it as a possible in the dialog box
TODO-23: when moving a book in a series (which is part of 2 series), do we pop-up offer to move parent/child series orders as well to match (think Thomas Covenant) TODO-23: when moving a book in a series (which is part of 2 series), do we pop-up offer to move parent/child series orders as well to match (think Thomas Covenant)
TODO-24: get this into docker (as per TODO above) TODO-24: get this into docker (as per TODO above)
gunicorn and it seems easy enough: https://www.digitalocean.com/community/tutorials/how-to-serve-flask-applications-with-gunicorn-and-nginx-on-ubuntu-18-04 gunicorn and it seems easy enough: https://www.digitalocean.com/community/tutorials/how-to-serve-flask-applications-with-gunicorn-and-nginx-on-ubuntu-18-04

15
main.py
View File

@@ -508,21 +508,24 @@ def book(id):
if 'author-' in el: if 'author-' in el:
book.author.append( Author.query.get( request.form[el] ) ) book.author.append( Author.query.get( request.form[el] ) )
removing_series=[]
for field in request.form:
if 'removed-book_num' in field:
cnt=int(re.findall( '\d+', field )[0])
removing_series.append( { 'series_id' : request.form['removed-series_id-{}'.format(cnt)] } )
still_in_series=0 still_in_series=0
still_in_series_sid=99999
if book.IsParent(): if book.IsParent():
for field in request.form: for field in request.form:
if 'bsl-book_num-' in field and field != 'bsl-book_num-NUM' and request.form[field] == 'PARENT': if 'bsl-book_num-' in field and field != 'bsl-book_num-NUM' and request.form[field] == 'PARENT':
cnt=int(re.findall( '\d+', field )[0])
print("cnt={}".format(cnt))
still_in_series_sid=request.form['bsl-series_id-{}'.format(cnt)]
still_in_series=1 still_in_series=1
if book.IsChild() or (book.IsParent() and not still_in_series): if book.IsChild() or (book.IsParent() and not still_in_series):
print ("okay should raise DBox")
print ("{}".format( removing_series ))
if book.IsParent(): if book.IsParent():
CheckSeriesChange={'type':'parent', 'pid': book.id, 'bid': book.id} CheckSeriesChange={'type':'parent', 'pid': book.id, 'bid': book.id, 'removing_series': removing_series }
else: else:
CheckSeriesChange={'type':'child', 'pid': book.parent[0].id, 'bid': book.id } CheckSeriesChange={'type':'child', 'pid': book.parent[0].id, 'bid': book.id, 'removing_series': removing_series }
else: else:
# delete all bsls # delete all bsls
db.engine.execute("delete from book_series_link where book_id = {}".format( book.id ) ) db.engine.execute("delete from book_series_link where book_id = {}".format( book.id ) )

View File

@@ -22,13 +22,21 @@
<script> <script>
function ConfirmRemoveParentAndSubsFromSeries(pid,bid) function ConfirmRemoveParentAndSubsFromSeries(pid,bid,rem)
{ {
$('#dbox-title').html('Confirm: Removing Parent Book from Series') $('#dbox-title').html('Confirm: Removing Parent Book from Series')
if( rem.length > 1 )
all='<span style="background:red" class="text-white"><em>ALL</em></span>'
else
all='this '
div=` div=`
<div class="row col-lg-12"> <div class="row col-lg-12">
<p class="lead">You have chosen to remove this (parent) book from a series. <p class="lead">You have chosen to remove this (parent) book from a series.
What should we do with the sub-books for <span style="background:red" class="text-white"><em>ALL</em></span> series?</p> What should we do with the sub-books for
`
div += all
div += `
series?</p>
</div class="row"> </div class="row">
<div class="row col-lg-12"> <div class="row col-lg-12">
<button id="RPS" class="btn btn-primary col-lg-2">Remove all children</button> <button id="RPS" class="btn btn-primary col-lg-2">Remove all children</button>
@@ -42,24 +50,43 @@ function ConfirmRemoveParentAndSubsFromSeries(pid,bid)
$('#RPS').attr( 'onClick', "$('#dbox').modal('hide') ; $.post( '/rem_parent_books_from_series/" +pid + "' ) ; window.location='/book/"+ bid + "'" ) $('#RPS').attr( 'onClick', "$('#dbox').modal('hide') ; $.post( '/rem_parent_books_from_series/" +pid + "' ) ; window.location='/book/"+ bid + "'" )
} }
function ConfirmRemoveThisSubs_ParentAndSubsFromSeries(pid,bid) function ConfirmRemoveThisSubs_ParentAndSubsFromSeries(pid,bid,rem)
{ {
$('#dbox-title').html('Confirm: Removing Sub Book from Series') $('#dbox-title').html('Confirm: Removing Sub Book from Series')
div=` div=`
<div class="row col-lg-12"> <div class="row col-lg-12">
<p>You have chosen to remove this (sub) book from a series. <p class="lead">You have chosen to remove this (sub) book from a series.
What should we do with the parent and all its sub-books for <span style="background:red" class="text-white"><em>ALL</em></span>series?</p> What should we do with the sub-books <span id="RPS-text"></span>
</p>
</div class="row"> </div class="row">
<div class="row col-lg-12"> <div class="row col-lg-12">
<button id="RPS" class="btn btn-primary col-lg-2">Remove parent and all children too</button> <button id="RPS" class="btn btn-primary col"></button>
<button onClick="$('#dbox').modal('hide')" class="btn btn-outline-danger offset-lg-8 col-lg-2"> <button id="RPS-one" onClick="alert('not yet')" class="btn btn-outline-primary col"></button>
<button onClick="$('#dbox').modal('hide')" class="btn btn-outline-danger col">
Cancel Series change</button> Cancel Series change</button>
</div class="row"> </div class="row">
` `
console.log(rem.length)
if( rem.length > 1 )
{
all='for <span style="background:red" class="text-white"><em>ALL</em></span> series'
b_RPS="Remove parent and all children too " + all
b_RPS_one="Remove just this (sub) book " + all
}
else
{
all='for this series '
b_RPS="Remove parent and all children too"
b_RPS_one="Remove just this (sub) book"
}
$('#dbox-content').html(div) $('#dbox-content').html(div)
$('#dbox').modal('show') $('#dbox').modal('show')
// have to do this AFTER modal show otherwise it doesnt exist... (grrr) // have to do this AFTER modal show otherwise it doesnt exist... (grrr)
$('#RPS-text').html(all)
$('#RPS').html(b_RPS)
$('#RPS').attr( 'onClick', "$('#dbox').modal('hide') ; $.post( '/rem_parent_books_from_series/" +pid + "' ) ; window.location='/book/"+ bid + "'" ) $('#RPS').attr( 'onClick', "$('#dbox').modal('hide') ; $.post( '/rem_parent_books_from_series/" +pid + "' ) ; window.location='/book/"+ bid + "'" )
$('#RPS-one').html(b_RPS_one)
$('#RPS-one').attr( 'onClick', "$('#dbox').modal('hide') ; $.post( '/rem_parent_books_from_series/" +bid + "' ) ; window.location='/book/"+ bid + "'" )
} }
function SeriesButPlus(num) { function SeriesButPlus(num) {
@@ -117,10 +144,19 @@ function RemoveBookFromSeries(sid) {
$('#'+sid).remove() $('#'+sid).remove()
var num = parseInt( sid.match(/\d+/g), 10 ); var num = parseInt( sid.match(/\d+/g), 10 );
// remove the bsl data (its appended outside of div to avoid bootstrap issues // move real DB data or delete 'new' bsl data (its appended outside of div to avoid bootstrap issues)
$('[name=bsl-book_id-'+num+']').remove() if( $('input:hidden[name=bsl-series_id-'+num+']').length )
$('[name=bsl-series_id-'+num+']').remove() {
$('[name=bsl-book_num-'+num+']').remove() $('[name=bsl-book_id-'+num+']').attr('name', 'removed-book_id-'+num)
$('[name=bsl-series_id-'+num+']').attr('name', 'removed-series_id-'+num)
$('[name=bsl-book_num-'+num+']').attr('name', 'removed-book_num-'+num)
}
else
{
$('[name=bsl-book_id-'+num+']').remove()
$('[name=bsl-series_id-'+num+']').remove()
$('[name=bsl-book_num-'+num+']').remove()
}
if( sid == 'series-div-1' ) { if( sid == 'series-div-1' ) {
console.log("remove Book: and it was the only series, so hide series-div-1 and put 'plus / empty' div back" ) console.log("remove Book: and it was the only series, so hide series-div-1 and put 'plus / empty' div back" )
@@ -377,11 +413,14 @@ function AddAuthorToBook(num) {
<script> <script>
$(document).ready( function() { $(document).ready( function() {
$("#sub_book_content").load("/subbooks_for_book/{{books.id}}") $("#sub_book_content").load("/subbooks_for_book/{{books.id}}")
console.log( {{CheckSeriesChange.removing_series|safe}} )
{% if CheckSeriesChange is defined and CheckSeriesChange != None %} {% if CheckSeriesChange is defined and CheckSeriesChange != None %}
{% if CheckSeriesChange.type == 'parent' %} {% if CheckSeriesChange.type == 'parent' %}
ConfirmRemoveParentAndSubsFromSeries( {{CheckSeriesChange.pid}}, {{CheckSeriesChange.bid}} ) ConfirmRemoveParentAndSubsFromSeries( {{CheckSeriesChange.pid}}, {{CheckSeriesChange.bid}},
{{CheckSeriesChange.removing_series|safe}} )
{% else %} {% else %}
ConfirmRemoveThisSubs_ParentAndSubsFromSeries( {{CheckSeriesChange.pid}}, {{CheckSeriesChange.bid}} ) ConfirmRemoveThisSubs_ParentAndSubsFromSeries( {{CheckSeriesChange.pid}}, {{CheckSeriesChange.bid}},
{{CheckSeriesChange.removing_series|safe}} )
{% endif %} {% endif %}
{% endif %} {% endif %}
} ) } )