mirror of
				https://github.com/janeczku/calibre-web
				synced 2025-10-31 07:13:02 +00:00 
			
		
		
		
	Add bulk delete button
This commit is contained in:
		| @@ -488,6 +488,28 @@ def simulate_merge_list_book(): | |||||||
|             return json.dumps({'to': to_book, 'from': from_book}) |             return json.dumps({'to': to_book, 'from': from_book}) | ||||||
|     return "" |     return "" | ||||||
|  |  | ||||||
|  | @editbook.route("/ajax/simulatedeleteselectedbooks", methods=['POST']) | ||||||
|  | @user_login_required | ||||||
|  | @edit_required | ||||||
|  | def simulate_delete_selected_books(): | ||||||
|  |     vals = request.get_json().get('selections') | ||||||
|  |     books = [] | ||||||
|  |     if vals: | ||||||
|  |         for book_id in vals: | ||||||
|  |             books.append(calibre_db.get_book(book_id).title) | ||||||
|  |         return json.dumps({'books': books}) | ||||||
|  |     return "" | ||||||
|  |  | ||||||
|  | @editbook.route("/ajax/deleteselectedbooks", methods=['POST']) | ||||||
|  | @user_login_required | ||||||
|  | @edit_required | ||||||
|  | def delete_selected_books(): | ||||||
|  |     vals = request.get_json().get('selections') | ||||||
|  |     if vals: | ||||||
|  |         for book_id in vals: | ||||||
|  |             delete_book_from_table(book_id, "", True) | ||||||
|  |         return json.dumps({'success': True}) | ||||||
|  |     return "" | ||||||
|  |  | ||||||
| @editbook.route("/ajax/mergebooks", methods=['POST']) | @editbook.route("/ajax/mergebooks", methods=['POST']) | ||||||
| @user_login_required | @user_login_required | ||||||
|   | |||||||
| @@ -81,6 +81,14 @@ $(function() { | |||||||
|                 $("#merge_books").addClass("disabled"); |                 $("#merge_books").addClass("disabled"); | ||||||
|                 $("#merge_books").attr("aria-disabled", true); |                 $("#merge_books").attr("aria-disabled", true); | ||||||
|             } |             } | ||||||
|  |             if (selections.length >= 1) { | ||||||
|  |                 $("#delete_selected_books").removeClass("disabled"); | ||||||
|  |                 $("#delete_selected_books").attr("aria-disabled", false); | ||||||
|  |             } else { | ||||||
|  |                 $("#delete_selected_books").addClass("disabled"); | ||||||
|  |                 $("#delete_selected_books").attr("aria-disabled", true); | ||||||
|  |  | ||||||
|  |             } | ||||||
|             if (selections.length < 1) { |             if (selections.length < 1) { | ||||||
|                 $("#delete_selection").addClass("disabled"); |                 $("#delete_selection").addClass("disabled"); | ||||||
|                 $("#delete_selection").attr("aria-disabled", true); |                 $("#delete_selection").attr("aria-disabled", true); | ||||||
| @@ -135,6 +143,42 @@ $(function() { | |||||||
|         }); |         }); | ||||||
|     }); |     }); | ||||||
|  |  | ||||||
|  |     $("#delete_selected_books").click(function(event) { | ||||||
|  |         if ($(this).hasClass("disabled")) { | ||||||
|  |             event.stopPropagation() | ||||||
|  |         } else { | ||||||
|  |             $('#delete_selected_modal').modal("show"); | ||||||
|  |         } | ||||||
|  |         $.ajax({ | ||||||
|  |             method:"post", | ||||||
|  |             contentType: "application/json; charset=utf-8", | ||||||
|  |             dataType: "json", | ||||||
|  |             url: window.location.pathname + "/../ajax/simulatedeleteselectedbooks", | ||||||
|  |             data: JSON.stringify({"selections":selections}), | ||||||
|  |             success: function success(booTitles) { | ||||||
|  |                 $('#selected-books').empty(); | ||||||
|  |                 $.each(booTitles.books, function(i, item) { | ||||||
|  |                     $("<span>- " + item + "</span><p></p>").appendTo("#selected-books"); | ||||||
|  |                 }); | ||||||
|  |  | ||||||
|  |             } | ||||||
|  |         }); | ||||||
|  |     }); | ||||||
|  |  | ||||||
|  |     $("#delete_selected_confirm").click(function(event) { | ||||||
|  |         $.ajax({ | ||||||
|  |             method:"post", | ||||||
|  |             contentType: "application/json; charset=utf-8", | ||||||
|  |             dataType: "json", | ||||||
|  |             url: window.location.pathname + "/../ajax/deleteselectedbooks", | ||||||
|  |             data: JSON.stringify({"selections":selections}), | ||||||
|  |             success: function success(booTitles) { | ||||||
|  |                 $("#books-table").bootstrapTable("refresh"); | ||||||
|  |                 $("#books-table").bootstrapTable("uncheckAll"); | ||||||
|  |             } | ||||||
|  |         }); | ||||||
|  |     }); | ||||||
|  |  | ||||||
|     $("#table_xchange").click(function() { |     $("#table_xchange").click(function() { | ||||||
|         $.ajax({ |         $.ajax({ | ||||||
|             method:"post", |             method:"post", | ||||||
|   | |||||||
| @@ -35,6 +35,7 @@ | |||||||
|       <div class="col-xs-12 col-sm-6"> |       <div class="col-xs-12 col-sm-6"> | ||||||
|         <div class="row form-group"> |         <div class="row form-group"> | ||||||
|           <div class="btn btn-default disabled" id="merge_books" aria-disabled="true">{{_('Merge selected books')}}</div> |           <div class="btn btn-default disabled" id="merge_books" aria-disabled="true">{{_('Merge selected books')}}</div> | ||||||
|  |           <div class="btn btn-default disabled" id="delete_selected_books" aria-disabled="true">{{_('Delete selected books')}}</div> | ||||||
|           <div class="btn btn-default disabled" id="delete_selection" aria-disabled="true">{{_('Remove Selections')}}</div> |           <div class="btn btn-default disabled" id="delete_selection" aria-disabled="true">{{_('Remove Selections')}}</div> | ||||||
|         </div> |         </div> | ||||||
|         <div class="row form-group"> |         <div class="row form-group"> | ||||||
| @@ -129,6 +130,25 @@ | |||||||
|     </div> |     </div> | ||||||
|   </div> |   </div> | ||||||
| </div> | </div> | ||||||
|  |  | ||||||
|  | <div class="modal fade" id="delete_selected_modal" role="dialog" aria-labelledby="metaDeleteSelectedLabel"> | ||||||
|  |   <div class="modal-dialog"> | ||||||
|  |     <div class="modal-content"> | ||||||
|  |       <div class="modal-header bg-danger text-center"> | ||||||
|  |           <span>{{_('Are you really sure?')}}</span> | ||||||
|  |       </div> | ||||||
|  |       <div class="modal-body"> | ||||||
|  |         <p></p> | ||||||
|  |             <div class="text-left">{{_('The following books will be deleted:')}}</div> | ||||||
|  |         <p></p> | ||||||
|  |             <div class="text-left" id="selected-books"></div> | ||||||
|  |       <div class="modal-footer"> | ||||||
|  |         <input id="delete_selected_confirm" type="button" class="btn btn-danger" value="{{_('Delete')}}" name="delete_selected_confirm" id="delete_selected_confirm" data-dismiss="modal"> | ||||||
|  |         <button id="delete_selected_abort" type="button" class="btn btn-default" data-dismiss="modal">{{_('Cancel')}}</button> | ||||||
|  |       </div> | ||||||
|  |     </div> | ||||||
|  |   </div> | ||||||
|  | </div> | ||||||
| {% endif %} | {% endif %} | ||||||
|  |  | ||||||
| {% endblock %} | {% endblock %} | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 James Armstong
					James Armstong