recipe books working
This commit is contained in:
parent
d90b012601
commit
49f7afd8d2
@ -19,11 +19,18 @@
|
|||||||
|
|
||||||
{% for b in book_list %}
|
{% for b in book_list %}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col col-md-12">
|
<div class="col col-md-10">
|
||||||
<a data-toggle="collapse" href="#collapse_{{ b.book.pk }}" role="button" aria-expanded="false"
|
<a data-toggle="collapse" href="#collapse_{{ b.book.pk }}" role="button" aria-expanded="false"
|
||||||
aria-controls="collapse_{{ b.book.pk }}"><h4>{{ b.book.name }}</h4></a>
|
aria-controls="collapse_{{ b.book.pk }}"><h4>{{ b.book.name }}</h4></a>
|
||||||
<hr/>
|
|
||||||
</div>
|
</div>
|
||||||
|
<div class="col col-md-2" style="text-align: right">
|
||||||
|
<h4>
|
||||||
|
|
||||||
|
<a href="{% url 'edit_recipe_book' b.book.pk %}"> <i class="fas fa-pencil-alt"></i></a>
|
||||||
|
<a href="{% url 'delete_recipe_book' b.book.pk %}"><i class="fas fa-trash-alt"></i></a>
|
||||||
|
</h4>
|
||||||
|
</div>
|
||||||
|
<hr/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
@ -32,13 +39,18 @@
|
|||||||
{% if b.recipes %}
|
{% if b.recipes %}
|
||||||
<ul>
|
<ul>
|
||||||
{% for r in b.recipes %}
|
{% for r in b.recipes %}
|
||||||
<li><a href="#" onClick='openRecipe({{r.recipe.pk}})'>{{ r.recipe.name }}</a></li>
|
<div class="row">
|
||||||
|
<div class="col col-md-10">
|
||||||
|
<li><a href="#" onClick='openRecipe({{ r.recipe.pk }})'>{{ r.recipe.name }}</a></li>
|
||||||
|
</div>
|
||||||
|
<div class="col col-md-2" style="text-align: right">
|
||||||
|
<a href="{% url 'delete_recipe_book_entry' r.pk %}"><i class="fas fa-trash-alt"></i></a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
{% else %}
|
{% else %}
|
||||||
{% trans 'There are no recipes in this book yet.' %}
|
{% trans 'There are no recipes in this book yet.' %}
|
||||||
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -133,7 +133,8 @@
|
|||||||
<form method="POST" class="post-form">
|
<form method="POST" class="post-form">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<div class="input-group mb-3">
|
<div class="input-group mb-3">
|
||||||
<textarea name="comment-text" cols="15" rows="2" class="textarea form-control" required id="comment-id_text"></textarea>
|
<textarea name="comment-text" cols="15" rows="2" class="textarea form-control" required
|
||||||
|
id="comment-id_text"></textarea>
|
||||||
<div class="input-group-append">
|
<div class="input-group-append">
|
||||||
<input type="submit" value="{% trans 'Comment' %}" class="btn btn-success">
|
<input type="submit" value="{% trans 'Comment' %}" class="btn btn-success">
|
||||||
</div>
|
</div>
|
||||||
@ -166,17 +167,19 @@
|
|||||||
<span aria-hidden="true">×</span>
|
<span aria-hidden="true">×</span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
|
||||||
<form method="POST" class="post-form">
|
<form method="POST" class="post-form">
|
||||||
|
<div class="modal-body">
|
||||||
|
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
{{ bookmark_form|crispy }}
|
{{ bookmark_form|crispy }}
|
||||||
<input type="submit" value="{% trans 'Save' %}" class="btn btn-success">
|
|
||||||
</form>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
|
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
|
||||||
<button type="button" class="btn btn-primary">Save changes</button>
|
<input type="submit" value="{% trans 'Save' %}" class="btn btn-success">
|
||||||
</div>
|
</div>
|
||||||
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -33,6 +33,7 @@ urlpatterns = [
|
|||||||
path('edit/import/<int:pk>/', edit.ImportUpdate.as_view(), name='edit_import'),
|
path('edit/import/<int:pk>/', edit.ImportUpdate.as_view(), name='edit_import'),
|
||||||
path('edit/storage/<int:pk>/', edit.edit_storage, name='edit_storage'),
|
path('edit/storage/<int:pk>/', edit.edit_storage, name='edit_storage'),
|
||||||
path('edit/comment/<int:pk>/', edit.CommentUpdate.as_view(), name='edit_comment'),
|
path('edit/comment/<int:pk>/', edit.CommentUpdate.as_view(), name='edit_comment'),
|
||||||
|
path('edit/recipe-book/<int:pk>/', edit.RecipeBookUpdate.as_view(), name='edit_recipe_book'),
|
||||||
|
|
||||||
path('redirect/delete/<slug:name>/<int:pk>/', edit.delete_redirect, name='redirect_delete'),
|
path('redirect/delete/<slug:name>/<int:pk>/', edit.delete_redirect, name='redirect_delete'),
|
||||||
|
|
||||||
@ -42,6 +43,8 @@ urlpatterns = [
|
|||||||
path('delete/import/<int:pk>/', edit.ImportDelete.as_view(), name='delete_import'),
|
path('delete/import/<int:pk>/', edit.ImportDelete.as_view(), name='delete_import'),
|
||||||
path('delete/storage/<int:pk>/', edit.StorageDelete.as_view(), name='delete_storage'),
|
path('delete/storage/<int:pk>/', edit.StorageDelete.as_view(), name='delete_storage'),
|
||||||
path('delete/comment/<int:pk>/', edit.CommentDelete.as_view(), name='delete_comment'),
|
path('delete/comment/<int:pk>/', edit.CommentDelete.as_view(), name='delete_comment'),
|
||||||
|
path('delete/recipe-book/<int:pk>/', edit.RecipeBookDelete.as_view(), name='delete_recipe_book'),
|
||||||
|
path('delete/recipe-book-entry/<int:pk>/', edit.RecipeBookEntryDelete.as_view(), name='delete_recipe_book_entry'),
|
||||||
|
|
||||||
path('data/sync', data.sync, name='data_sync'), # TODO move to generic "new" view
|
path('data/sync', data.sync, name='data_sync'), # TODO move to generic "new" view
|
||||||
path('data/batch/edit', data.batch_edit, name='data_batch_edit'),
|
path('data/batch/edit', data.batch_edit, name='data_batch_edit'),
|
||||||
|
@ -11,7 +11,8 @@ from django.utils.translation import gettext as _
|
|||||||
from django.views.generic import UpdateView, DeleteView
|
from django.views.generic import UpdateView, DeleteView
|
||||||
|
|
||||||
from cookbook.forms import ExternalRecipeForm, KeywordForm, StorageForm, SyncForm, InternalRecipeForm, CommentForm
|
from cookbook.forms import ExternalRecipeForm, KeywordForm, StorageForm, SyncForm, InternalRecipeForm, CommentForm
|
||||||
from cookbook.models import Recipe, Sync, Keyword, RecipeImport, Storage, Comment, RecipeIngredients
|
from cookbook.models import Recipe, Sync, Keyword, RecipeImport, Storage, Comment, RecipeIngredients, RecipeBook, \
|
||||||
|
RecipeBookEntry
|
||||||
from cookbook.provider.dropbox import Dropbox
|
from cookbook.provider.dropbox import Dropbox
|
||||||
from cookbook.provider.nextcloud import Nextcloud
|
from cookbook.provider.nextcloud import Nextcloud
|
||||||
|
|
||||||
@ -188,6 +189,22 @@ class ImportUpdate(LoginRequiredMixin, UpdateView):
|
|||||||
return context
|
return context
|
||||||
|
|
||||||
|
|
||||||
|
class RecipeBookUpdate(LoginRequiredMixin, UpdateView):
|
||||||
|
template_name = "generic/edit_template.html"
|
||||||
|
model = RecipeBook
|
||||||
|
fields = ['name']
|
||||||
|
|
||||||
|
# TODO add msg box
|
||||||
|
|
||||||
|
def get_success_url(self):
|
||||||
|
return reverse('view_books')
|
||||||
|
|
||||||
|
def get_context_data(self, **kwargs):
|
||||||
|
context = super(RecipeBookUpdate, self).get_context_data(**kwargs)
|
||||||
|
context['title'] = _("Recipe Book")
|
||||||
|
return context
|
||||||
|
|
||||||
|
|
||||||
class RecipeUpdate(LoginRequiredMixin, UpdateView):
|
class RecipeUpdate(LoginRequiredMixin, UpdateView):
|
||||||
model = Recipe
|
model = Recipe
|
||||||
form_class = ExternalRecipeForm
|
form_class = ExternalRecipeForm
|
||||||
@ -198,11 +215,13 @@ class RecipeUpdate(LoginRequiredMixin, UpdateView):
|
|||||||
old_recipe = Recipe.objects.get(pk=self.object.pk)
|
old_recipe = Recipe.objects.get(pk=self.object.pk)
|
||||||
if not old_recipe.name == self.object.name:
|
if not old_recipe.name == self.object.name:
|
||||||
if self.object.storage.method == Storage.DROPBOX:
|
if self.object.storage.method == Storage.DROPBOX:
|
||||||
Dropbox.rename_file(old_recipe, self.object.name) # TODO central location to handle storage type switches
|
Dropbox.rename_file(old_recipe,
|
||||||
|
self.object.name) # TODO central location to handle storage type switches
|
||||||
if self.object.storage.method == Storage.NEXTCLOUD:
|
if self.object.storage.method == Storage.NEXTCLOUD:
|
||||||
Nextcloud.rename_file(old_recipe, self.object.name)
|
Nextcloud.rename_file(old_recipe, self.object.name)
|
||||||
|
|
||||||
self.object.file_path = os.path.dirname(self.object.file_path) + '/' + self.object.name + os.path.splitext(self.object.file_path)[1]
|
self.object.file_path = os.path.dirname(self.object.file_path) + '/' + self.object.name + \
|
||||||
|
os.path.splitext(self.object.file_path)[1]
|
||||||
|
|
||||||
messages.add_message(self.request, messages.SUCCESS, _('Changes saved!'))
|
messages.add_message(self.request, messages.SUCCESS, _('Changes saved!'))
|
||||||
return super(RecipeUpdate, self).form_valid(form)
|
return super(RecipeUpdate, self).form_valid(form)
|
||||||
@ -296,3 +315,25 @@ class CommentDelete(LoginRequiredMixin, DeleteView):
|
|||||||
context = super(CommentDelete, self).get_context_data(**kwargs)
|
context = super(CommentDelete, self).get_context_data(**kwargs)
|
||||||
context['title'] = _("Comment")
|
context['title'] = _("Comment")
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
|
||||||
|
class RecipeBookDelete(LoginRequiredMixin, DeleteView):
|
||||||
|
template_name = "generic/delete_template.html"
|
||||||
|
model = RecipeBook
|
||||||
|
success_url = reverse_lazy('view_books')
|
||||||
|
|
||||||
|
def get_context_data(self, **kwargs):
|
||||||
|
context = super(RecipeBookDelete, self).get_context_data(**kwargs)
|
||||||
|
context['title'] = _("Recipe Book")
|
||||||
|
return context
|
||||||
|
|
||||||
|
|
||||||
|
class RecipeBookEntryDelete(LoginRequiredMixin, DeleteView):
|
||||||
|
template_name = "generic/delete_template.html"
|
||||||
|
model = RecipeBookEntry
|
||||||
|
success_url = reverse_lazy('view_books')
|
||||||
|
|
||||||
|
def get_context_data(self, **kwargs):
|
||||||
|
context = super(RecipeBookEntryDelete, self).get_context_data(**kwargs)
|
||||||
|
context['title'] = _("Bookmarks")
|
||||||
|
return context
|
||||||
|
Loading…
Reference in New Issue
Block a user