WIP
This commit is contained in:
parent
738387ccf0
commit
d1556f69c2
@ -61,12 +61,12 @@ with scopes_disabled():
|
|||||||
model = Recipe
|
model = Recipe
|
||||||
fields = ['name', 'keywords', 'foods', 'internal']
|
fields = ['name', 'keywords', 'foods', 'internal']
|
||||||
|
|
||||||
class FoodFilter(django_filters.FilterSet):
|
# class FoodFilter(django_filters.FilterSet):
|
||||||
name = django_filters.CharFilter(lookup_expr='icontains')
|
# name = django_filters.CharFilter(lookup_expr='icontains')
|
||||||
|
|
||||||
class Meta:
|
# class Meta:
|
||||||
model = Food
|
# model = Food
|
||||||
fields = ['name']
|
# fields = ['name']
|
||||||
|
|
||||||
class ShoppingListFilter(django_filters.FilterSet):
|
class ShoppingListFilter(django_filters.FilterSet):
|
||||||
|
|
||||||
|
@ -6,12 +6,11 @@ from django.utils.translation import gettext_lazy as _
|
|||||||
from django_scopes import scopes_disabled
|
from django_scopes import scopes_disabled
|
||||||
from django_scopes.forms import SafeModelChoiceField, SafeModelMultipleChoiceField
|
from django_scopes.forms import SafeModelChoiceField, SafeModelMultipleChoiceField
|
||||||
from emoji_picker.widgets import EmojiPickerTextInput
|
from emoji_picker.widgets import EmojiPickerTextInput
|
||||||
from treebeard.forms import MoveNodeForm
|
|
||||||
from hcaptcha.fields import hCaptchaField
|
from hcaptcha.fields import hCaptchaField
|
||||||
|
|
||||||
from .models import (Comment, Food, InviteLink, Keyword, MealPlan, Recipe,
|
from .models import (Comment, Food, InviteLink, Keyword, MealPlan, Recipe,
|
||||||
RecipeBook, RecipeBookEntry, Storage, Sync, Unit, User,
|
RecipeBook, RecipeBookEntry, Storage, Sync, Unit, User,
|
||||||
UserPreference, SupermarketCategory, MealType, Space,
|
UserPreference, MealType, Space,
|
||||||
SearchPreference)
|
SearchPreference)
|
||||||
|
|
||||||
|
|
||||||
@ -219,31 +218,31 @@ class CommentForm(forms.ModelForm):
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
class KeywordForm(MoveNodeForm):
|
# class KeywordForm(MoveNodeForm):
|
||||||
class Meta:
|
# class Meta:
|
||||||
model = Keyword
|
# model = Keyword
|
||||||
fields = ('name', 'icon', 'description')
|
# fields = ('name', 'icon', 'description')
|
||||||
exclude = ('sib_order', 'parent', 'path', 'depth', 'numchild')
|
# exclude = ('sib_order', 'parent', 'path', 'depth', 'numchild')
|
||||||
widgets = {'icon': EmojiPickerTextInput}
|
# widgets = {'icon': EmojiPickerTextInput}
|
||||||
|
|
||||||
|
|
||||||
class FoodForm(forms.ModelForm):
|
# class FoodForm(forms.ModelForm):
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
# def __init__(self, *args, **kwargs):
|
||||||
space = kwargs.pop('space')
|
# space = kwargs.pop('space')
|
||||||
super().__init__(*args, **kwargs)
|
# super().__init__(*args, **kwargs)
|
||||||
self.fields['recipe'].queryset = Recipe.objects.filter(space=space).all()
|
# self.fields['recipe'].queryset = Recipe.objects.filter(space=space).all()
|
||||||
self.fields['supermarket_category'].queryset = SupermarketCategory.objects.filter(space=space).all()
|
# self.fields['supermarket_category'].queryset = SupermarketCategory.objects.filter(space=space).all()
|
||||||
|
|
||||||
class Meta:
|
# class Meta:
|
||||||
model = Food
|
# model = Food
|
||||||
fields = ('name', 'description', 'ignore_shopping', 'recipe', 'supermarket_category')
|
# fields = ('name', 'description', 'ignore_shopping', 'recipe', 'supermarket_category')
|
||||||
widgets = {'recipe': SelectWidget}
|
# widgets = {'recipe': SelectWidget}
|
||||||
|
|
||||||
field_classes = {
|
# field_classes = {
|
||||||
'recipe': SafeModelChoiceField,
|
# 'recipe': SafeModelChoiceField,
|
||||||
'supermarket_category': SafeModelChoiceField,
|
# 'supermarket_category': SafeModelChoiceField,
|
||||||
}
|
# }
|
||||||
|
|
||||||
|
|
||||||
class StorageForm(forms.ModelForm):
|
class StorageForm(forms.ModelForm):
|
||||||
|
@ -1 +0,0 @@
|
|||||||
<!DOCTYPE html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Vue App</title><link href="css/chunk-vendors.css" rel="preload" as="style"><link href="css/food_list_view.css" rel="preload" as="style"><link href="js/chunk-vendors.js" rel="preload" as="script"><link href="js/food_list_view.js" rel="preload" as="script"><link href="css/chunk-vendors.css" rel="stylesheet"><link rel="icon" type="image/png" sizes="32x32" href="img/icons/favicon-32x32.png"><link rel="icon" type="image/png" sizes="16x16" href="img/icons/favicon-16x16.png"><link rel="manifest" href="manifest.json"><meta name="theme-color" content="#4DBA87"><meta name="apple-mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-status-bar-style" content="black"><meta name="apple-mobile-web-app-title" content="Recipes"><link rel="apple-touch-icon" href="img/icons/apple-touch-icon-152x152.png"><link rel="mask-icon" href="img/icons/safari-pinned-tab.svg" color="#4DBA87"><meta name="msapplication-TileImage" content="img/icons/msapplication-icon-144x144.png"><meta name="msapplication-TileColor" content="#000000"></head><body><div id="app"></div><script src="js/chunk-vendors.js"></script></body></html>
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
cookbook/static/vue/js/model_list_view.js
Normal file
1
cookbook/static/vue/js/model_list_view.js
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
cookbook/static/vue/model_list_view.html
Normal file
1
cookbook/static/vue/model_list_view.html
Normal file
@ -0,0 +1 @@
|
|||||||
|
<!DOCTYPE html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Vue App</title><link href="css/chunk-vendors.css" rel="preload" as="style"><link href="css/model_list_view.css" rel="preload" as="style"><link href="js/chunk-vendors.js" rel="preload" as="script"><link href="js/model_list_view.js" rel="preload" as="script"><link href="css/chunk-vendors.css" rel="stylesheet"><link rel="icon" type="image/png" sizes="32x32" href="img/icons/favicon-32x32.png"><link rel="icon" type="image/png" sizes="16x16" href="img/icons/favicon-16x16.png"><link rel="manifest" href="manifest.json"><meta name="theme-color" content="#4DBA87"><meta name="apple-mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-status-bar-style" content="black"><meta name="apple-mobile-web-app-title" content="Recipes"><link rel="apple-touch-icon" href="img/icons/apple-touch-icon-152x152.png"><link rel="mask-icon" href="img/icons/safari-pinned-tab.svg" color="#4DBA87"><meta name="msapplication-TileImage" content="img/icons/msapplication-icon-144x144.png"><meta name="msapplication-TileColor" content="#000000"></head><body><div id="app"></div><script src="js/chunk-vendors.js"></script></body></html>
|
@ -52,13 +52,13 @@ class RecipeTable(tables.Table):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class IngredientTable(tables.Table):
|
# class IngredientTable(tables.Table):
|
||||||
id = tables.LinkColumn('edit_food', args=[A('id')])
|
# id = tables.LinkColumn('edit_food', args=[A('id')])
|
||||||
|
|
||||||
class Meta:
|
# class Meta:
|
||||||
model = Keyword
|
# model = Keyword
|
||||||
template_name = 'generic/table_template.html'
|
# template_name = 'generic/table_template.html'
|
||||||
fields = ('id', 'name')
|
# fields = ('id', 'name')
|
||||||
|
|
||||||
|
|
||||||
class StorageTable(tables.Table):
|
class StorageTable(tables.Table):
|
||||||
|
@ -2,9 +2,8 @@
|
|||||||
{% load render_bundle from webpack_loader %}
|
{% load render_bundle from webpack_loader %}
|
||||||
{% load static %}
|
{% load static %}
|
||||||
{% load i18n %}
|
{% load i18n %}
|
||||||
{% load l10n %}
|
{% comment %} {% load l10n %} {% endcomment %}
|
||||||
{% comment %} TODO Can this be combined with Keyword template? {% endcomment %}
|
{% block title %}{{ title }}{% endblock %}
|
||||||
{% block title %}{% trans 'Food' %}{% endblock %}
|
|
||||||
|
|
||||||
{% block content_fluid %}
|
{% block content_fluid %}
|
||||||
|
|
||||||
@ -17,15 +16,15 @@
|
|||||||
|
|
||||||
|
|
||||||
{% block script %}
|
{% block script %}
|
||||||
{% if debug %}
|
{% comment %} {% if debug %}
|
||||||
<script src="{% url 'js_reverse' %}"></script>
|
<script src="{% url 'js_reverse' %}"></script>
|
||||||
{% else %}
|
{% else %}
|
||||||
<script src="{% static 'django_js_reverse/reverse.js' %}"></script>
|
<script src="{% static 'django_js_reverse/reverse.js' %}"></script>
|
||||||
{% endif %}
|
{% endif %} {% endcomment %}
|
||||||
|
|
||||||
<script type="application/javascript">
|
<script type="application/javascript">
|
||||||
window.IMAGE_PLACEHOLDER = "{% static 'assets/recipe_no_image.svg' %}"
|
window.IMAGE_PLACEHOLDER = "{% static 'assets/recipe_no_image.svg' %}"
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
{% render_bundle 'food_list_view' %}
|
{% render_bundle 'model_list_view' %}
|
||||||
{% endblock %}
|
{% endblock %}
|
File diff suppressed because one or more lines are too long
@ -11,7 +11,7 @@ from cookbook.helper import dal
|
|||||||
from .models import (Comment, Food, InviteLink, Keyword, MealPlan, Recipe,
|
from .models import (Comment, Food, InviteLink, Keyword, MealPlan, Recipe,
|
||||||
RecipeBook, RecipeBookEntry, RecipeImport, ShoppingList,
|
RecipeBook, RecipeBookEntry, RecipeImport, ShoppingList,
|
||||||
Storage, Sync, SyncLog, get_model_name)
|
Storage, Sync, SyncLog, get_model_name)
|
||||||
from .views import api, data, delete, edit, import_export, lists, trees, new, views, telegram
|
from .views import api, data, delete, edit, import_export, lists, new, views, telegram
|
||||||
|
|
||||||
router = routers.DefaultRouter()
|
router = routers.DefaultRouter()
|
||||||
router.register(r'user-name', api.UserNameViewSet, basename='username')
|
router.register(r'user-name', api.UserNameViewSet, basename='username')
|
||||||
@ -87,7 +87,7 @@ urlpatterns = [
|
|||||||
path('edit/recipe/convert/<int:pk>/', edit.convert_recipe, name='edit_convert_recipe'),
|
path('edit/recipe/convert/<int:pk>/', edit.convert_recipe, name='edit_convert_recipe'),
|
||||||
|
|
||||||
path('edit/storage/<int:pk>/', edit.edit_storage, name='edit_storage'),
|
path('edit/storage/<int:pk>/', edit.edit_storage, name='edit_storage'),
|
||||||
path('edit/ingredient/', edit.edit_ingredients, name='edit_food'), # TODO is this still needed?
|
path('edit/ingredient/', edit.edit_ingredients, name='edit_food'), # TODO deprecate?
|
||||||
|
|
||||||
path('delete/recipe-source/<int:pk>/', delete.delete_recipe_source, name='delete_recipe_source'),
|
path('delete/recipe-source/<int:pk>/', delete.delete_recipe_source, name='delete_recipe_source'),
|
||||||
|
|
||||||
@ -176,12 +176,12 @@ for m in generic_models:
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
tree_models = [Keyword, Food]
|
vue_models = [Keyword, Food]
|
||||||
for m in tree_models:
|
for m in vue_models:
|
||||||
py_name = get_model_name(m)
|
py_name = get_model_name(m)
|
||||||
url_name = py_name.replace('_', '-')
|
url_name = py_name.replace('_', '-')
|
||||||
|
|
||||||
if c := getattr(trees, py_name, None):
|
if c := getattr(lists, py_name, None):
|
||||||
urlpatterns.append(
|
urlpatterns.append(
|
||||||
path(
|
path(
|
||||||
f'list/{url_name}/', c, name=f'list_{py_name}'
|
f'list/{url_name}/', c, name=f'list_{py_name}'
|
||||||
|
@ -9,7 +9,7 @@ from django.views.generic import DeleteView
|
|||||||
from cookbook.helper.permission_helper import (GroupRequiredMixin,
|
from cookbook.helper.permission_helper import (GroupRequiredMixin,
|
||||||
OwnerRequiredMixin,
|
OwnerRequiredMixin,
|
||||||
group_required)
|
group_required)
|
||||||
from cookbook.models import (Comment, InviteLink, Keyword, MealPlan, Recipe,
|
from cookbook.models import (Comment, InviteLink, MealPlan, Recipe,
|
||||||
RecipeBook, RecipeBookEntry, RecipeImport,
|
RecipeBook, RecipeBookEntry, RecipeImport,
|
||||||
Storage, Sync)
|
Storage, Sync)
|
||||||
from cookbook.provider.dropbox import Dropbox
|
from cookbook.provider.dropbox import Dropbox
|
||||||
@ -73,16 +73,16 @@ class SyncDelete(GroupRequiredMixin, DeleteView):
|
|||||||
return context
|
return context
|
||||||
|
|
||||||
|
|
||||||
class KeywordDelete(GroupRequiredMixin, DeleteView):
|
# class KeywordDelete(GroupRequiredMixin, DeleteView):
|
||||||
groups_required = ['user']
|
# groups_required = ['user']
|
||||||
template_name = "generic/delete_template.html"
|
# template_name = "generic/delete_template.html"
|
||||||
model = Keyword
|
# model = Keyword
|
||||||
success_url = reverse_lazy('list_keyword')
|
# success_url = reverse_lazy('list_keyword')
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
# def get_context_data(self, **kwargs):
|
||||||
context = super(KeywordDelete, self).get_context_data(**kwargs)
|
# context = super(KeywordDelete, self).get_context_data(**kwargs)
|
||||||
context['title'] = _("Keyword")
|
# context['title'] = _("Keyword")
|
||||||
return context
|
# return context
|
||||||
|
|
||||||
|
|
||||||
class StorageDelete(GroupRequiredMixin, DeleteView):
|
class StorageDelete(GroupRequiredMixin, DeleteView):
|
||||||
|
@ -10,14 +10,14 @@ from django.views.generic import UpdateView
|
|||||||
from django.views.generic.edit import FormMixin
|
from django.views.generic.edit import FormMixin
|
||||||
from django_scopes import scopes_disabled
|
from django_scopes import scopes_disabled
|
||||||
|
|
||||||
from cookbook.forms import (CommentForm, ExternalRecipeForm, FoodForm,
|
from cookbook.forms import (CommentForm, ExternalRecipeForm,
|
||||||
FoodMergeForm, KeywordForm, MealPlanForm,
|
FoodMergeForm, MealPlanForm,
|
||||||
RecipeBookForm, StorageForm, SyncForm,
|
RecipeBookForm, StorageForm, SyncForm,
|
||||||
UnitMergeForm)
|
UnitMergeForm)
|
||||||
from cookbook.helper.permission_helper import (GroupRequiredMixin,
|
from cookbook.helper.permission_helper import (GroupRequiredMixin,
|
||||||
OwnerRequiredMixin,
|
OwnerRequiredMixin,
|
||||||
group_required)
|
group_required)
|
||||||
from cookbook.models import (Comment, Food, Ingredient, Keyword, MealPlan,
|
from cookbook.models import (Comment, Ingredient, MealPlan,
|
||||||
MealType, Recipe, RecipeBook, RecipeImport,
|
MealType, Recipe, RecipeBook, RecipeImport,
|
||||||
Storage, Sync, UserPreference)
|
Storage, Sync, UserPreference)
|
||||||
from cookbook.provider.dropbox import Dropbox
|
from cookbook.provider.dropbox import Dropbox
|
||||||
@ -86,38 +86,38 @@ class SyncUpdate(GroupRequiredMixin, UpdateView, SpaceFormMixing):
|
|||||||
return context
|
return context
|
||||||
|
|
||||||
|
|
||||||
class KeywordUpdate(GroupRequiredMixin, UpdateView):
|
# class KeywordUpdate(GroupRequiredMixin, UpdateView):
|
||||||
groups_required = ['user']
|
# groups_required = ['user']
|
||||||
template_name = "generic/edit_template.html"
|
# template_name = "generic/edit_template.html"
|
||||||
model = Keyword
|
# model = Keyword
|
||||||
form_class = KeywordForm
|
# form_class = KeywordForm
|
||||||
|
|
||||||
# TODO add msg box
|
# # TODO add msg box
|
||||||
|
|
||||||
def get_success_url(self):
|
# def get_success_url(self):
|
||||||
return reverse('list_keyword')
|
# return reverse('list_keyword')
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
# def get_context_data(self, **kwargs):
|
||||||
context = super().get_context_data(**kwargs)
|
# context = super().get_context_data(**kwargs)
|
||||||
context['title'] = _("Keyword")
|
# context['title'] = _("Keyword")
|
||||||
return context
|
# return context
|
||||||
|
|
||||||
|
|
||||||
class FoodUpdate(GroupRequiredMixin, UpdateView, SpaceFormMixing):
|
# class FoodUpdate(GroupRequiredMixin, UpdateView, SpaceFormMixing):
|
||||||
groups_required = ['user']
|
# groups_required = ['user']
|
||||||
template_name = "generic/edit_template.html"
|
# template_name = "generic/edit_template.html"
|
||||||
model = Food
|
# model = Food
|
||||||
form_class = FoodForm
|
# form_class = FoodForm
|
||||||
|
|
||||||
# TODO add msg box
|
# # TODO add msg box
|
||||||
|
|
||||||
def get_success_url(self):
|
# def get_success_url(self):
|
||||||
return reverse('edit_food', kwargs={'pk': self.object.pk})
|
# return reverse('edit_food', kwargs={'pk': self.object.pk})
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
# def get_context_data(self, **kwargs):
|
||||||
context = super(FoodUpdate, self).get_context_data(**kwargs)
|
# context = super(FoodUpdate, self).get_context_data(**kwargs)
|
||||||
context['title'] = _("Food")
|
# context['title'] = _("Food")
|
||||||
return context
|
# return context
|
||||||
|
|
||||||
|
|
||||||
@group_required('admin')
|
@group_required('admin')
|
||||||
@ -279,6 +279,7 @@ class ExternalRecipeUpdate(GroupRequiredMixin, UpdateView, SpaceFormMixing):
|
|||||||
return context
|
return context
|
||||||
|
|
||||||
|
|
||||||
|
# TODO deprecate
|
||||||
@group_required('user')
|
@group_required('user')
|
||||||
def edit_ingredients(request):
|
def edit_ingredients(request):
|
||||||
if request.method == "POST":
|
if request.method == "POST":
|
||||||
|
@ -5,11 +5,11 @@ from django.shortcuts import render
|
|||||||
from django.utils.translation import gettext as _
|
from django.utils.translation import gettext as _
|
||||||
from django_tables2 import RequestConfig
|
from django_tables2 import RequestConfig
|
||||||
|
|
||||||
from cookbook.filters import FoodFilter, ShoppingListFilter
|
from cookbook.filters import ShoppingListFilter
|
||||||
from cookbook.helper.permission_helper import group_required
|
from cookbook.helper.permission_helper import group_required
|
||||||
from cookbook.models import (Food, InviteLink, RecipeImport,
|
from cookbook.models import (InviteLink, RecipeImport,
|
||||||
ShoppingList, Storage, SyncLog)
|
ShoppingList, Storage, SyncLog)
|
||||||
from cookbook.tables import (ImportLogTable, IngredientTable, InviteLinkTable,
|
from cookbook.tables import (ImportLogTable, InviteLinkTable,
|
||||||
RecipeImportTable, ShoppingListTable, StorageTable)
|
RecipeImportTable, ShoppingListTable, StorageTable)
|
||||||
|
|
||||||
|
|
||||||
@ -40,18 +40,18 @@ def recipe_import(request):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@group_required('user')
|
# @group_required('user')
|
||||||
def food(request):
|
# def food(request):
|
||||||
f = FoodFilter(request.GET, queryset=Food.objects.filter(space=request.space).all().order_by('pk'))
|
# f = FoodFilter(request.GET, queryset=Food.objects.filter(space=request.space).all().order_by('pk'))
|
||||||
|
|
||||||
table = IngredientTable(f.qs)
|
# table = IngredientTable(f.qs)
|
||||||
RequestConfig(request, paginate={'per_page': 25}).configure(table)
|
# RequestConfig(request, paginate={'per_page': 25}).configure(table)
|
||||||
|
|
||||||
return render(
|
# return render(
|
||||||
request,
|
# request,
|
||||||
'generic/list_template.html',
|
# 'generic/list_template.html',
|
||||||
{'title': _("Ingredients"), 'table': table, 'filter': f}
|
# {'title': _("Ingredients"), 'table': table, 'filter': f}
|
||||||
)
|
# )
|
||||||
|
|
||||||
|
|
||||||
@group_required('user')
|
@group_required('user')
|
||||||
@ -101,3 +101,13 @@ def invite_link(request):
|
|||||||
'table': table,
|
'table': table,
|
||||||
'create_url': 'new_invite_link'
|
'create_url': 'new_invite_link'
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
@group_required('user')
|
||||||
|
def keyword(request):
|
||||||
|
return render(request, 'model/keyword_template.html', {"title": _("Keywords")})
|
||||||
|
|
||||||
|
|
||||||
|
@group_required('user')
|
||||||
|
def food(request):
|
||||||
|
return render(request, 'generic/model_template.html', {"title": _("Foods")})
|
||||||
|
@ -12,11 +12,11 @@ from django.urls import reverse, reverse_lazy
|
|||||||
from django.utils.translation import gettext as _
|
from django.utils.translation import gettext as _
|
||||||
from django.views.generic import CreateView
|
from django.views.generic import CreateView
|
||||||
|
|
||||||
from cookbook.forms import (ImportRecipeForm, InviteLinkForm, KeywordForm,
|
from cookbook.forms import (ImportRecipeForm, InviteLinkForm,
|
||||||
MealPlanForm, RecipeBookForm, Storage, StorageForm)
|
MealPlanForm, RecipeBookForm, Storage, StorageForm)
|
||||||
from cookbook.helper.permission_helper import (GroupRequiredMixin,
|
from cookbook.helper.permission_helper import (GroupRequiredMixin,
|
||||||
group_required)
|
group_required)
|
||||||
from cookbook.models import (InviteLink, Keyword, MealPlan, MealType, Recipe,
|
from cookbook.models import (InviteLink, MealPlan, MealType, Recipe,
|
||||||
RecipeBook, RecipeImport, ShareLink, Step, UserPreference)
|
RecipeBook, RecipeImport, ShareLink, Step, UserPreference)
|
||||||
from cookbook.views.edit import SpaceFormMixing
|
from cookbook.views.edit import SpaceFormMixing
|
||||||
|
|
||||||
@ -60,22 +60,22 @@ def share_link(request, pk):
|
|||||||
return HttpResponseRedirect(reverse('view_recipe', kwargs={'pk': pk, 'share': link.uuid}))
|
return HttpResponseRedirect(reverse('view_recipe', kwargs={'pk': pk, 'share': link.uuid}))
|
||||||
|
|
||||||
|
|
||||||
class KeywordCreate(GroupRequiredMixin, CreateView):
|
# class KeywordCreate(GroupRequiredMixin, CreateView):
|
||||||
groups_required = ['user']
|
# groups_required = ['user']
|
||||||
template_name = "generic/new_template.html"
|
# template_name = "generic/new_template.html"
|
||||||
model = Keyword
|
# model = Keyword
|
||||||
form_class = KeywordForm
|
# form_class = KeywordForm
|
||||||
success_url = reverse_lazy('list_keyword')
|
# success_url = reverse_lazy('list_keyword')
|
||||||
|
|
||||||
def form_valid(self, form):
|
# def form_valid(self, form):
|
||||||
form.cleaned_data['space'] = self.request.space
|
# form.cleaned_data['space'] = self.request.space
|
||||||
form.save()
|
# form.save()
|
||||||
return HttpResponseRedirect(reverse('list_keyword'))
|
# return HttpResponseRedirect(reverse('list_keyword'))
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
# def get_context_data(self, **kwargs):
|
||||||
context = super(KeywordCreate, self).get_context_data(**kwargs)
|
# context = super(KeywordCreate, self).get_context_data(**kwargs)
|
||||||
context['title'] = _("Keyword")
|
# context['title'] = _("Keyword")
|
||||||
return context
|
# return context
|
||||||
|
|
||||||
|
|
||||||
class StorageCreate(GroupRequiredMixin, CreateView):
|
class StorageCreate(GroupRequiredMixin, CreateView):
|
||||||
|
@ -1,13 +0,0 @@
|
|||||||
from django.shortcuts import render
|
|
||||||
|
|
||||||
from cookbook.helper.permission_helper import group_required
|
|
||||||
|
|
||||||
|
|
||||||
@group_required('user')
|
|
||||||
def keyword(request):
|
|
||||||
return render(request, 'model/keyword_template.html', {})
|
|
||||||
|
|
||||||
|
|
||||||
@group_required('user')
|
|
||||||
def food(request):
|
|
||||||
return render(request, 'model/food_template.html', {})
|
|
@ -67,7 +67,7 @@ import GenericModalForm from "@/components/Modals/GenericModalForm";
|
|||||||
Vue.use(BootstrapVue)
|
Vue.use(BootstrapVue)
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'FoodListView', // TODO: make generic name
|
name: 'ModelListView', // TODO: make generic name
|
||||||
mixins: [CardMixin, ToastMixin, ApiMixin],
|
mixins: [CardMixin, ToastMixin, ApiMixin],
|
||||||
components: {GenericHorizontalCard, GenericSplitLists, GenericModalForm},
|
components: {GenericHorizontalCard, GenericSplitLists, GenericModalForm},
|
||||||
data() {
|
data() {
|
||||||
@ -85,7 +85,8 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
this.this_model = this.Models.FOOD //TODO: mounted method to calcuate
|
let path = (window.location.pathname).split('/')
|
||||||
|
this.this_model = this.Models[path[path.length - 2].toUpperCase()]
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
// this.genericAPI inherited from ApiMixin
|
// this.genericAPI inherited from ApiMixin
|
@ -1,5 +1,5 @@
|
|||||||
import Vue from 'vue'
|
import Vue from 'vue'
|
||||||
import App from './FoodListView'
|
import App from './ModelListView'
|
||||||
import i18n from '@/i18n'
|
import i18n from '@/i18n'
|
||||||
|
|
||||||
Vue.config.productionTip = false
|
Vue.config.productionTip = false
|
@ -96,7 +96,6 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import Vue from 'vue' // maybe not needed?
|
|
||||||
import 'bootstrap-vue/dist/bootstrap-vue.css'
|
import 'bootstrap-vue/dist/bootstrap-vue.css'
|
||||||
import _debounce from 'lodash/debounce'
|
import _debounce from 'lodash/debounce'
|
||||||
import InfiniteLoading from 'vue-infinite-loading';
|
import InfiniteLoading from 'vue-infinite-loading';
|
||||||
|
@ -29,8 +29,8 @@ const pages = {
|
|||||||
entry: './src/apps/KeywordListView/main.js',
|
entry: './src/apps/KeywordListView/main.js',
|
||||||
chunks: ['chunk-vendors']
|
chunks: ['chunk-vendors']
|
||||||
},
|
},
|
||||||
'food_list_view': {
|
'model_list_view': {
|
||||||
entry: './src/apps/FoodListView/main.js',
|
entry: './src/apps/ModelListView/main.js',
|
||||||
chunks: ['chunk-vendors']
|
chunks: ['chunk-vendors']
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
@ -1,2 +1 @@
|
|||||||
|
{"status":"done","chunks":{"recipe_search_view":["css/chunk-vendors.css","js/chunk-vendors.js","js/recipe_search_view.js"],"recipe_view":["css/chunk-vendors.css","js/chunk-vendors.js","js/recipe_view.js"],"offline_view":["css/chunk-vendors.css","js/chunk-vendors.js","js/offline_view.js"],"import_response_view":["css/chunk-vendors.css","js/chunk-vendors.js","js/import_response_view.js"],"supermarket_view":["css/chunk-vendors.css","js/chunk-vendors.js","js/supermarket_view.js"],"user_file_view":["css/chunk-vendors.css","js/chunk-vendors.js","js/user_file_view.js"],"keyword_list_view":["css/chunk-vendors.css","js/chunk-vendors.js","css/keyword_list_view.css","js/keyword_list_view.js"],"model_list_view":["css/chunk-vendors.css","js/chunk-vendors.js","css/model_list_view.css","js/model_list_view.js"]},"assets":{"../../templates/sw.js":{"name":"../../templates/sw.js","path":"../../templates/sw.js"},"css/chunk-vendors.css":{"name":"css/chunk-vendors.css","path":"css/chunk-vendors.css"},"js/chunk-vendors.js":{"name":"js/chunk-vendors.js","path":"js/chunk-vendors.js"},"js/import_response_view.js":{"name":"js/import_response_view.js","path":"js/import_response_view.js"},"css/keyword_list_view.css":{"name":"css/keyword_list_view.css","path":"css/keyword_list_view.css"},"js/keyword_list_view.js":{"name":"js/keyword_list_view.js","path":"js/keyword_list_view.js"},"css/model_list_view.css":{"name":"css/model_list_view.css","path":"css/model_list_view.css"},"js/model_list_view.js":{"name":"js/model_list_view.js","path":"js/model_list_view.js"},"js/offline_view.js":{"name":"js/offline_view.js","path":"js/offline_view.js"},"js/recipe_search_view.js":{"name":"js/recipe_search_view.js","path":"js/recipe_search_view.js"},"js/recipe_view.js":{"name":"js/recipe_view.js","path":"js/recipe_view.js"},"js/supermarket_view.js":{"name":"js/supermarket_view.js","path":"js/supermarket_view.js"},"js/user_file_view.js":{"name":"js/user_file_view.js","path":"js/user_file_view.js"},"recipe_search_view.html":{"name":"recipe_search_view.html","path":"recipe_search_view.html"},"recipe_view.html":{"name":"recipe_view.html","path":"recipe_view.html"},"offline_view.html":{"name":"offline_view.html","path":"offline_view.html"},"import_response_view.html":{"name":"import_response_view.html","path":"import_response_view.html"},"supermarket_view.html":{"name":"supermarket_view.html","path":"supermarket_view.html"},"user_file_view.html":{"name":"user_file_view.html","path":"user_file_view.html"},"keyword_list_view.html":{"name":"keyword_list_view.html","path":"keyword_list_view.html"},"model_list_view.html":{"name":"model_list_view.html","path":"model_list_view.html"},"manifest.json":{"name":"manifest.json","path":"manifest.json"}}}
|
||||||
{"status":"done","chunks":{"recipe_search_view":["css/chunk-vendors.css","js/chunk-vendors.js","js/recipe_search_view.js"],"recipe_view":["css/chunk-vendors.css","js/chunk-vendors.js","js/recipe_view.js"],"offline_view":["css/chunk-vendors.css","js/chunk-vendors.js","js/offline_view.js"],"import_response_view":["css/chunk-vendors.css","js/chunk-vendors.js","js/import_response_view.js"],"supermarket_view":["css/chunk-vendors.css","js/chunk-vendors.js","js/supermarket_view.js"],"user_file_view":["css/chunk-vendors.css","js/chunk-vendors.js","js/user_file_view.js"],"keyword_list_view":["css/chunk-vendors.css","js/chunk-vendors.js","css/keyword_list_view.css","js/keyword_list_view.js"]},"assets":{"../../templates/sw.js":{"name":"../../templates/sw.js","path":"../../templates/sw.js"},"css/chunk-vendors.css":{"name":"css/chunk-vendors.css","path":"css/chunk-vendors.css"},"js/chunk-vendors.js":{"name":"js/chunk-vendors.js","path":"js/chunk-vendors.js"},"js/import_response_view.js":{"name":"js/import_response_view.js","path":"js/import_response_view.js"},"css/keyword_list_view.css":{"name":"css/keyword_list_view.css","path":"css/keyword_list_view.css"},"js/keyword_list_view.js":{"name":"js/keyword_list_view.js","path":"js/keyword_list_view.js"},"js/offline_view.js":{"name":"js/offline_view.js","path":"js/offline_view.js"},"js/recipe_search_view.js":{"name":"js/recipe_search_view.js","path":"js/recipe_search_view.js"},"js/recipe_view.js":{"name":"js/recipe_view.js","path":"js/recipe_view.js"},"js/supermarket_view.js":{"name":"js/supermarket_view.js","path":"js/supermarket_view.js"},"js/user_file_view.js":{"name":"js/user_file_view.js","path":"js/user_file_view.js"},"recipe_search_view.html":{"name":"recipe_search_view.html","path":"recipe_search_view.html"},"recipe_view.html":{"name":"recipe_view.html","path":"recipe_view.html"},"offline_view.html":{"name":"offline_view.html","path":"offline_view.html"},"import_response_view.html":{"name":"import_response_view.html","path":"import_response_view.html"},"supermarket_view.html":{"name":"supermarket_view.html","path":"supermarket_view.html"},"user_file_view.html":{"name":"user_file_view.html","path":"user_file_view.html"},"keyword_list_view.html":{"name":"keyword_list_view.html","path":"keyword_list_view.html"},"manifest.json":{"name":"manifest.json","path":"manifest.json"}}}
|
|
Loading…
Reference in New Issue
Block a user