diff --git a/cookbook/templates/property_editor.html b/cookbook/templates/property_editor.html new file mode 100644 index 000000000..f24a133e8 --- /dev/null +++ b/cookbook/templates/property_editor.html @@ -0,0 +1,31 @@ +{% extends "base.html" %} +{% load render_bundle from webpack_loader %} +{% load static %} +{% load i18n %} +{% load l10n %} + +{% block title %}{% trans 'Property Editor' %}{% endblock %} + +{% block content_fluid %} + +
+ +
+ + +{% endblock %} + + +{% block script %} + {% if debug %} + + {% else %} + + {% endif %} + + + + {% render_bundle 'property_editor_view' %} +{% endblock %} \ No newline at end of file diff --git a/cookbook/urls.py b/cookbook/urls.py index e8be51607..9db5d5de5 100644 --- a/cookbook/urls.py +++ b/cookbook/urls.py @@ -91,6 +91,7 @@ urlpatterns = [ path('history/', views.history, name='view_history'), path('supermarket/', views.supermarket, name='view_supermarket'), path('ingredient-editor/', views.ingredient_editor, name='view_ingredient_editor'), + path('property-editor/', views.property_editor, name='view_property_editor'), path('abuse/', views.report_share_abuse, name='view_report_share_abuse'), path('api/import/', api.import_files, name='view_import'), diff --git a/cookbook/views/views.py b/cookbook/views/views.py index 58a610a24..92c55789e 100644 --- a/cookbook/views/views.py +++ b/cookbook/views/views.py @@ -204,6 +204,11 @@ def ingredient_editor(request): return render(request, 'ingredient_editor.html', template_vars) +@group_required('user') +def property_editor(request, pk): + return render(request, 'property_editor.html', {'recipe_id': pk}) + + @group_required('guest') def shopping_settings(request): if request.space.demo: @@ -220,10 +225,10 @@ def shopping_settings(request): if not sp: sp = SearchPreferenceForm(user=request.user) fields_searched = ( - len(search_form.cleaned_data['icontains']) - + len(search_form.cleaned_data['istartswith']) - + len(search_form.cleaned_data['trigram']) - + len(search_form.cleaned_data['fulltext']) + len(search_form.cleaned_data['icontains']) + + len(search_form.cleaned_data['istartswith']) + + len(search_form.cleaned_data['trigram']) + + len(search_form.cleaned_data['fulltext']) ) if search_form.cleaned_data['preset'] == 'fuzzy': sp.search = SearchPreference.SIMPLE diff --git a/vue/src/apps/PropertyEditorView/PropertyEditorView.vue b/vue/src/apps/PropertyEditorView/PropertyEditorView.vue new file mode 100644 index 000000000..b785fa09f --- /dev/null +++ b/vue/src/apps/PropertyEditorView/PropertyEditorView.vue @@ -0,0 +1,209 @@ + + + + + + diff --git a/vue/src/apps/PropertyEditorView/main.js b/vue/src/apps/PropertyEditorView/main.js new file mode 100644 index 000000000..40e6a3092 --- /dev/null +++ b/vue/src/apps/PropertyEditorView/main.js @@ -0,0 +1,22 @@ +import Vue from 'vue' +import App from './PropertyEditorView.vue' +import i18n from '@/i18n' +import {createPinia, PiniaVuePlugin} from "pinia"; + +Vue.config.productionTip = false + +// TODO move this and other default stuff to centralized JS file (verify nothing breaks) +let publicPath = localStorage.STATIC_URL + 'vue/' +if (process.env.NODE_ENV === 'development') { + publicPath = 'http://localhost:8080/' +} +export default __webpack_public_path__ = publicPath // eslint-disable-line + +Vue.use(PiniaVuePlugin) +const pinia = createPinia() + +new Vue({ + pinia, + i18n, + render: h => h(App), +}).$mount('#app') diff --git a/vue/src/components/RecipeContextMenu.vue b/vue/src/components/RecipeContextMenu.vue index 72db67f42..dee82fda7 100644 --- a/vue/src/components/RecipeContextMenu.vue +++ b/vue/src/components/RecipeContextMenu.vue @@ -10,6 +10,9 @@ {{ $t("Edit") }} + + {{ $t("Property_Editor") }} + {{ $t("convert_internal") }} diff --git a/vue/src/locales/en.json b/vue/src/locales/en.json index ca8e7d421..0a4dfb09e 100644 --- a/vue/src/locales/en.json +++ b/vue/src/locales/en.json @@ -185,6 +185,7 @@ "move_title": "Move {type}", "Food": "Food", "Property": "Property", + "Property_Editor": "Property Editor", "Conversion": "Conversion", "Original_Text": "Original Text", "Recipe_Book": "Recipe Book", diff --git a/vue/vue.config.js b/vue/vue.config.js index cfdd6b383..5b9d42fbb 100644 --- a/vue/vue.config.js +++ b/vue/vue.config.js @@ -53,6 +53,10 @@ const pages = { entry: "./src/apps/IngredientEditorView/main.js", chunks: ["chunk-vendors","locales-chunk","api-chunk"], }, + property_editor_view: { + entry: "./src/apps/PropertyEditorView/main.js", + chunks: ["chunk-vendors","locales-chunk","api-chunk"], + }, shopping_list_view: { entry: "./src/apps/ShoppingListView/main.js", chunks: ["chunk-vendors","locales-chunk","api-chunk"], @@ -137,7 +141,7 @@ module.exports = { config.optimization.minimize(true) - //TODO somehow remov them as they are also added to the manifest config of the service worker + //TODO somehow remove them as they are also added to the manifest config of the service worker /* Object.keys(pages).forEach(page => { config.plugins.delete(`html-${page}`);