recipe share link in modal

This commit is contained in:
vabene1111
2021-06-15 20:57:25 +02:00
parent 0edc9f48c9
commit cdf4476345
11 changed files with 65 additions and 14 deletions

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

File diff suppressed because one or more lines are too long

View File

@ -106,6 +106,7 @@ urlpatterns = [
path('api/recipe-from-source/', api.recipe_from_source, name='api_recipe_from_source'),
path('api/backup/', api.get_backup, name='api_backup'),
path('api/ingredient-from-string/', api.ingredient_from_string, name='api_ingredient_from_string'),
path('api/share-link/<int:pk>', api.share_link, name='api_share_link'),
path('dal/keyword/', dal.KeywordAutocomplete.as_view(), name='dal_keyword'),
path('dal/food/', dal.IngredientsAutocomplete.as_view(), name='dal_food'),

View File

@ -14,6 +14,7 @@ from django.core.files import File
from django.db.models import Q
from django.http import FileResponse, HttpResponse, JsonResponse
from django.shortcuts import redirect, get_object_or_404
from django.urls import reverse
from django.utils.translation import gettext as _
from icalendar import Calendar, Event
from recipe_scrapers import scrape_me, WebsiteNotImplementedError, NoSchemaFoundInWildMode
@ -40,7 +41,7 @@ from cookbook.models import (CookLog, Food, Ingredient, Keyword, MealPlan,
MealType, Recipe, RecipeBook, ShoppingList,
ShoppingListEntry, ShoppingListRecipe, Step,
Storage, Sync, SyncLog, Unit, UserPreference,
ViewLog, RecipeBookEntry, Supermarket, ImportLog, BookmarkletImport, SupermarketCategory, UserFile)
ViewLog, RecipeBookEntry, Supermarket, ImportLog, BookmarkletImport, SupermarketCategory, UserFile, ShareLink)
from cookbook.provider.dropbox import Dropbox
from cookbook.provider.local import Local
from cookbook.provider.nextcloud import Nextcloud
@ -576,6 +577,13 @@ def sync_all(request):
return redirect('list_recipe_import')
@group_required('user')
def share_link(request, pk):
recipe = get_object_or_404(Recipe, pk=pk, space=request.space)
link = ShareLink.objects.create(recipe=recipe, created_by=request.user, space=request.space)
return JsonResponse({'pk': pk, 'share': link.uuid, 'link': request.build_absolute_uri(reverse('view_recipe', args=[pk, link.uuid]))})
@group_required('user')
@ajax_request
def log_cooking(request, recipe_id):

View File

@ -41,21 +41,44 @@
<a class="dropdown-item" :href="resolveDjangoUrl('view_export') + '?r=' + recipe.id" target="_blank"
rel="noopener noreferrer"><i class="fas fa-file-export fa-fw"></i> {{ $t('Export') }}</a>
<a class="dropdown-item" :href="resolveDjangoUrl('new_share_link', recipe.id)" target="_blank"
rel="noopener noreferrer" v-if="recipe.internal"><i class="fas fa-share-alt fa-fw"></i> {{ $t('Share') }}</a>
<button class="dropdown-item" @click="createShareLink()" v-if="recipe.internal"><i
class="fas fa-share-alt fa-fw"></i> {{ $t('Share') }}</button>
</div>
</div>
<cook-log :recipe="recipe"></cook-log>
<b-modal id="modal-share-link" v-bind:title="$t('Share')" hide-footer>
<div class="row">
<div class="col col-md-12">
<label v-if="recipe_share_link !== undefined">
{{ $t('Link') }}
<input ref="share_link_ref" class="form-control" v-model="recipe_share_link"/>
</label>
<br/>
<br/>
<b-button variant="success" @click="copyShareLink()" style="margin-right: 1vh; ">{{$t('Copy')}}</b-button>
<b-button @click="$bvModal.hide('modal-share-link')">{{$t('Close')}}</b-button>
<br/>
<br/>
</div>
</div>
</b-modal>
</div>
</template>
<script>
import {ResolveUrlMixin} from "@/utils/utils";
import {resolveDjangoUrl, ResolveUrlMixin} from "@/utils/utils";
import CookLog from "@/components/CookLog";
import axios from "axios";
export default {
name: 'RecipeContextMenu',
@ -67,7 +90,8 @@ export default {
},
data() {
return {
servings_value: 0
servings_value: 0,
recipe_share_link: undefined
}
},
props: {
@ -79,6 +103,22 @@ export default {
},
mounted() {
this.servings_value = ((this.servings === -1) ? this.recipe.servings : this.servings)
},
methods: {
createShareLink: function () {
this.$bvModal.show('modal-share-link')
axios.get(resolveDjangoUrl('api_share_link', this.recipe.id)).then(result => {
this.recipe_share_link = result.data.link
console.log('GET', result)
})
},
copyShareLink: function (){
let share_input = this.$refs.share_link_ref;
share_input.select();
document.execCommand("copy");
}
}
}
</script>

View File

@ -44,8 +44,10 @@
"Date": "Date",
"Share": "Share",
"Export": "Export",
"Copy": "Copy",
"Rating": "Rating",
"Close": "Close",
"Link": "Link",
"Add": "Add",
"New": "New",
"Success": "Success",