diff --git a/frontend/components/Domain/Recipe/RecipeIngredients.vue b/frontend/components/Domain/Recipe/RecipeIngredients.vue index f69d6ab2c73..8be0b433a3d 100644 --- a/frontend/components/Domain/Recipe/RecipeIngredients.vue +++ b/frontend/components/Domain/Recipe/RecipeIngredients.vue @@ -54,7 +54,7 @@ export default defineComponent({ const ingredientCopyText = computed(() => { return props.value .map((ingredient) => { - return `${parseIngredientText(ingredient, props.disableAmount, props.scale)}`; + return `${parseIngredientText(ingredient, props.disableAmount, props.scale, false)}`; }) .join("\n"); }); diff --git a/frontend/composables/recipes/use-recipe-ingredients.test.ts b/frontend/composables/recipes/use-recipe-ingredients.test.ts index 499e2b2db2f..c7e6900bea7 100644 --- a/frontend/composables/recipes/use-recipe-ingredients.test.ts +++ b/frontend/composables/recipes/use-recipe-ingredients.test.ts @@ -31,7 +31,16 @@ describe(parseIngredientText.name, () => { test("ingredient text with fraction", () => { const ingredient = createRecipeIngredient({ quantity: 1.5, unit: { fraction: true, id: "1", name: "cup" } }); - expect(parseIngredientText(ingredient, false)).contain("1 1").and.to.contain("2"); + expect(parseIngredientText(ingredient, false, 1, true)).contain("1 1").and.to.contain("2"); + }); + + test("ingredient text with fraction no formatting", () => { + const ingredient = createRecipeIngredient({ quantity: 1.5, unit: { fraction: true, id: "1", name: "cup" } }); + const result = parseIngredientText(ingredient, false, 1, false); + + expect(result).not.contain("<"); + expect(result).not.contain(">"); + expect(result).contain("1 1/2"); }); test("sanitizes html", () => { diff --git a/frontend/composables/recipes/use-recipe-ingredients.ts b/frontend/composables/recipes/use-recipe-ingredients.ts index 36b9bc9f082..d975adc4ddd 100644 --- a/frontend/composables/recipes/use-recipe-ingredients.ts +++ b/frontend/composables/recipes/use-recipe-ingredients.ts @@ -10,7 +10,7 @@ function sanitizeIngredientHTML(rawHtml: string) { }); } -export function useParsedIngredientText(ingredient: RecipeIngredient, disableAmount: boolean, scale = 1) { +export function useParsedIngredientText(ingredient: RecipeIngredient, disableAmount: boolean, scale = 1, includeFormating = true) { if (disableAmount) { return { name: ingredient.note ? sanitizeIngredientHTML(ingredient.note) : undefined, @@ -35,7 +35,9 @@ export function useParsedIngredientText(ingredient: RecipeIngredient, disableAmo } if (fraction[1] > 0) { - returnQty += ` ${fraction[1]}${fraction[2]}`; + returnQty += includeFormating ? + ` ${fraction[1]}${fraction[2]}` : + ` ${fraction[1]}/${fraction[2]}`; } } else { returnQty = (quantity * scale).toString(); @@ -54,8 +56,8 @@ export function useParsedIngredientText(ingredient: RecipeIngredient, disableAmo }; } -export function parseIngredientText(ingredient: RecipeIngredient, disableAmount: boolean, scale = 1): string { - const { quantity, unit, name, note } = useParsedIngredientText(ingredient, disableAmount, scale); +export function parseIngredientText(ingredient: RecipeIngredient, disableAmount: boolean, scale = 1, includeFormating = true): string { + const { quantity, unit, name, note } = useParsedIngredientText(ingredient, disableAmount, scale, includeFormating); const text = `${quantity || ""} ${unit || ""} ${name || ""} ${note || ""}`.replace(/ {2,}/g, " ").trim(); return sanitizeIngredientHTML(text);