Merge remote-tracking branch 'origin/main' into main

This commit is contained in:
Hosted Weblate 2021-06-28 13:38:31 +02:00
commit 44cff11f33
No known key found for this signature in database
GPG key ID: A3FAAA06E6569B4C
57 changed files with 1106 additions and 475 deletions

View file

@ -241,7 +241,7 @@ button {
ActivityIndicator {
width: 24;
height: 24;
margin: 12;
margin: 14;
color: $orange;
}
@ -395,6 +395,9 @@ ActivityIndicator {
padding: 14 16;
line-height: 4;
}
.t {
padding: 14 0;
}
}
.done {
opacity: 0.5;
@ -406,6 +409,9 @@ ActivityIndicator {
padding: 16 24;
line-height: 4;
}
.t5 {
font-size: $t5;
}
// -----------------------------
// AppBar
@ -449,6 +455,12 @@ ActivityIndicator {
width: 100%;
padding: 0 16 16;
}
.ingActions {
orientation: horizontal;
button {
margin-right: 16;
}
}
// -----------------------------
// MealPlanner

View file

@ -38,8 +38,8 @@
:hidden="showUndo"
columns="auto, *, auto"
>
<Button class="ico rtl end" :text="icon.back" @tap="navigateBack" />
<Button class="ico fab end" :text="icon.plus" @tap="addTimer" col="2" />
<Button class="ico rtl" :text="icon.back" @tap="navigateBack" />
<Button class="ico fab" :text="icon.plus" @tap="addTimer" col="2" />
</RGridLayout>
<SnackBar
:hidden="!showUndo || toast"

View file

@ -34,7 +34,9 @@
<TextField
:hint="'recTitle' | L"
v-model="recipe.title"
@loaded="setInputTypeText($event, 'words')"
autocapitalizationType="words"
autocorrect="true"
@returnPress="showCuisine(1)"
/>
</StackLayout>
<RGridLayout :rtl="RTL" class="" columns="*, 8, *">
@ -44,7 +46,6 @@
@loaded="setGravity"
:text="recipe.cuisine | L"
editable="false"
@focus="!modalOpen && showCuisine(1)"
@tap="showCuisine(0)"
/>
</StackLayout>
@ -52,10 +53,8 @@
<Label class="fLabel" :text="'cat' | L" />
<TextField
@loaded="setGravity"
ref="category"
:text="recipe.category | L"
editable="false"
@focus="!modalOpen && showCategories(1)"
@tap="showCategories(0)"
/>
</StackLayout>
@ -63,13 +62,14 @@
<StackLayout class="inputC">
<Label class="fLabel" :text="'ts' | L" />
<TextField
@loaded="setGravity"
:hint="'tsInfo' | L"
autocapitalizationType="words"
ref="tags"
autocapitalizationType="words"
autocorrect="true"
:hint="'tsInfo' | L"
v-model="tags"
@textChange="splitTags"
returnKeyType="next"
@loaded="setGravity"
@returnPress="setTimeRequired(1, 'prepTime')"
/>
</StackLayout>
<RGridLayout :rtl="RTL" columns="*, 8, *">
@ -79,7 +79,6 @@
@loaded="setGravity"
:text="timeRequired('prepTime')"
editable="false"
@focus="!modalOpen && setTimeRequired(1, 'prepTime')"
@tap="setTimeRequired(0, 'prepTime')"
/>
</StackLayout>
@ -87,10 +86,8 @@
<Label class="fLabel" :text="'cookT' | L" />
<TextField
@loaded="setGravity"
ref="cookTime"
:text="timeRequired('cookTime')"
editable="false"
@focus="!modalOpen && setTimeRequired(1, 'cookTime')"
@tap="setTimeRequired(0, 'cookTime')"
/>
</StackLayout>
@ -100,11 +97,12 @@
<Label class="fLabel" :text="'yieldQ' | L" />
<TextField
@loaded="setGravity"
ref="yieldQuantity"
ref="yieldQ"
v-model="recipe.yieldQuantity"
hint="1"
keyboardType="number"
returnKeyType="next"
@returnPress="showYieldUnits(1)"
/>
</StackLayout>
<StackLayout class="inputC" col="2">
@ -113,7 +111,6 @@
@loaded="setGravity"
:text="`${recipe.yieldUnit}` | L"
editable="false"
@focus="!modalOpen && showYieldUnits(1)"
@tap="showYieldUnits(0)"
/>
</StackLayout>
@ -123,10 +120,8 @@
<Label class="fLabel" :text="'Difficulty level' | L" />
<TextField
@loaded="setGravity"
ref="difficultyLevel"
:text="`${recipe.difficulty}` | L"
editable="false"
@focus="!modalOpen && showDifficultyLevel(1)"
@tap="showDifficultyLevel(0)"
/>
</StackLayout>
@ -140,50 +135,58 @@
<RGridLayout
:rtl="RTL"
columns="auto,8,auto,8,*,auto"
v-for="(ingredient, index) in recipe.ingredients"
:key="'ing' + index"
v-for="(item, i) in recipe.ingredients"
:key="item.key"
>
<TextField
v-if="item.type"
:ref="'ing' + i"
width="52"
@loaded="!recipe.ingredients[index].item && focusField($event)"
v-model="recipe.ingredients[index].quantity"
hint="1.00"
@focus="setFocus(i)"
@blur="setFocus(-1)"
keyboardType="number"
returnKeyType="next"
hint="1.00"
v-model="recipe.ingredients[i].quantity"
/>
<TextField
v-if="item.type"
width="68"
col="2"
:text="`${recipe.ingredients[index].unit}` | L"
:text="`${recipe.ingredients[i].unit}` | L"
editable="false"
@focus="!modalOpen && showUnits($event, 1, index)"
@tap="showUnits($event, 0, index)"
@focus="showUnits(1, i)"
@tap="showUnits(0, i)"
/>
<TextField
ref="ingredient"
@loaded="setInputTypeText($event, 'sentence')"
col="4"
v-model="recipe.ingredients[index].item"
:hint="`${$options.filters.L('it')} ${index + 1}`"
@returnPress="
index + 1 == recipe.ingredients.length && addIngredient()
"
:ref="'ing' + i"
@focus="setFocus(i)"
@blur="setFocus(-1)"
autocapitalizationType="sentence"
autocorrect="true"
returnKeyType="done"
:col="item.type ? 4 : 0"
:colSpan="item.type ? 1 : 5"
v-model="recipe.ingredients[i].value"
:hint="getIngPos(i)"
@returnPress="addIng(1)"
/>
<Button col="5" class="ico si" :text="icon.x" @tap="rmIng(i)" />
</RGridLayout>
<RStackLayout :rtl="RTL" class="ingActions">
<Button
class="text tb big hal fb"
:class="{ r: RTL }"
:text="'aIngBtn' | L"
@tap="addIng(1)"
/>
<Button
col="5"
class="ico si"
:text="icon.x"
@tap="removeIngredient(index)"
class="text tb big hal fb"
:class="{ r: RTL }"
:text="'addSectBtn' | L"
@tap="addIng(0)"
/>
</RGridLayout>
<Button
class="text tb big hal fb"
:class="{ r: RTL }"
:text="'aIngBtn' | L"
@tap="addIngredient()"
/>
</RStackLayout>
<!-- INSTRUCTIONS -->
<Label
:text="getTitleCount('inss', 'instructions')"
@ -193,27 +196,48 @@
<RGridLayout
:rtl="RTL"
columns="*,auto"
v-for="(instruction, index) in recipe.instructions"
:key="'ins' + index"
v-for="(item, i) in recipe.instructions"
:key="item.key"
>
<TextField
:ref="'ins' + i"
v-if="!item.type"
@focus="setFocus(i)"
@blur="setFocus(-1)"
autocapitalizationType="sentence"
autocorrect="true"
:hint="getInsPos(i)"
v-model="recipe.instructions[i].value"
@returnPress="addIns(1)"
returnKeyType="done"
/>
<TextView
@loaded="focusField($event, 'multiLine')"
:hint="`${$options.filters.L('stp')} ${index + 1}`"
v-model="recipe.instructions[index]"
:ref="'ins' + i"
v-else
@focus="setFocus(i)"
@blur="setFocus(-1)"
autocapitalizationType="multiLine"
autocorrect="true"
:hint="getInsPos(i)"
v-model="recipe.instructions[i].value"
/>
<Button col="1" class="ico si" :text="icon.x" @tap="rmIns(i)" />
</RGridLayout>
<RStackLayout :rtl="RTL" class="ingActions">
<Button
class="text tb big hal fb"
:class="{ r: RTL }"
:text="'aStpBtn' | L"
@tap="addIns(1)"
/>
<Button
col="1"
class="ico si"
:text="icon.x"
@tap="removeInstruction(index)"
class="text tb big hal fb"
:class="{ r: RTL }"
:text="'addSectBtn' | L"
@tap="addIns(0)"
/>
</RGridLayout>
<Button
class="text tb big hal fb"
:class="{ r: RTL }"
:text="'aStpBtn' | L"
@tap="addInstruction"
/>
</RStackLayout>
<!-- COMBINATIONS -->
<Label
:text="getTitleCount('cmbs', 'combinations')"
@ -254,19 +278,23 @@
<RGridLayout
:rtl="RTL"
columns="*, auto"
v-for="(note, index) in recipe.notes"
:key="'nos' + index"
v-for="(item, i) in recipe.notes"
:key="item.key"
>
<TextView
@loaded="focusField($event, 'multiLine')"
:hint="`${$options.filters.L('no')} ${index + 1}`"
v-model="recipe.notes[index]"
:ref="'note' + i"
@focus="setFocus(i)"
@blur="setFocus(-1)"
autocapitalizationType="multiLine"
autocorrect="true"
:hint="`${$options.filters.L('no')} ${i + 1}`"
v-model="recipe.notes[i].value"
/>
<Button
col="1"
class="ico si"
:text="icon.x"
@tap="removeNote(index)"
@tap="removeNote(i)"
/>
</RGridLayout>
<Button
@ -288,19 +316,19 @@
columns="auto, *, auto"
>
<Button
class="ico end"
class="ico"
:class="{ f: RTL }"
:text="icon.back"
@tap="navigateBack(0)"
/>
<Button
v-if="hasChanges && !saving"
class="ico fab end"
class="ico fab"
:text="icon.save"
col="2"
@tap="saveOperation"
/>
<ActivityIndicator class="end" col="2" v-if="saving" :busy="saving" />
<ActivityIndicator col="2" v-if="saving" :busy="saving" />
</RGridLayout>
<SnackBar
:hidden="!showUndo"
@ -400,6 +428,7 @@ export default {
snackMsg: null,
showUndo: 0,
undo: 0,
fi: 0,
};
},
computed: {
@ -458,16 +487,13 @@ export default {
// PHOTO HANDLERS
imageHandler() {
this.clearEmptyFields(1);
if (this.recipe.image) {
this.modalOpen = 1;
this.$showModal(Action, {
props: {
title: "recPic",
list: ["aap", "rp"],
},
}).then((action) => {
this.modalOpen = 0;
switch (action) {
case "aap":
this.imagePicker();
@ -537,7 +563,6 @@ export default {
// DATA LIST
showCuisine(focus) {
this.modalOpen = 1;
this.$showModal(Action, {
props: {
title: "cui",
@ -553,21 +578,19 @@ export default {
action: "aBtn",
},
}).then((item) => {
this.modalOpen = 0;
if (item.length) {
this.recipe.cuisine = item;
this.addLI({
item,
listName: "cuisines",
});
if (focus) this.autoFocusField("category", 0);
if (focus) this.showCategories(1);
}
});
} else {
this.modalOpen = 0;
if (action) {
this.recipe.cuisine = action;
if (focus) this.autoFocusField("category", 0);
if (focus) this.showCategories(1);
} else
this.cuisines.includes(this.recipe.cuisine)
? null
@ -576,7 +599,6 @@ export default {
});
},
showCategories(focus) {
this.modalOpen = 1;
this.$showModal(Action, {
props: {
title: "cat",
@ -592,21 +614,19 @@ export default {
action: "aBtn",
},
}).then((item) => {
this.modalOpen = 0;
if (item.length) {
this.recipe.category = item;
this.addLI({
item,
listName: "categories",
});
if (focus) this.autoFocusField("tags", 1);
if (focus) this.focusRef("tags");
}
});
} else {
this.modalOpen = 0;
if (action) {
this.recipe.category = action;
if (focus) this.autoFocusField("tags", 1);
if (focus) this.focusRef("tags");
} else
this.categories.includes(this.recipe.category)
? null
@ -614,8 +634,33 @@ export default {
}
});
},
setTimeRequired(focus, time) {
let t = this.recipe[time].split(":");
let hr = t[0];
let min = t[1];
this.$showModal(TimePickerHM, {
props: {
title: `${time == "prepTime" ? "prepT" : "cookT"}`,
selectedHr: hr,
selectedMin: min,
},
}).then((result) => {
if (result) {
this.recipe[time] = result;
if (focus) {
switch (time) {
case "prepTime":
this.setTimeRequired(1, "cookTime");
break;
case "cookTime":
this.focusRef("yieldQ");
break;
}
}
}
});
},
showYieldUnits(focus) {
this.modalOpen = 1;
this.$showModal(Action, {
props: {
title: "yieldU",
@ -631,21 +676,19 @@ export default {
action: "aBtn",
},
}).then((item) => {
this.modalOpen = 0;
if (item.length) {
this.recipe.yieldUnit = item;
this.addLI({
item,
listName: "yieldUnits",
});
if (focus) this.autoFocusField("difficultyLevel", 0);
if (focus) this.showDifficultyLevel(1);
}
});
} else {
this.modalOpen = 0;
if (action) {
this.recipe.yieldUnit = action;
if (focus) this.autoFocusField("difficultyLevel", 0);
if (focus) this.showDifficultyLevel(1);
} else
this.yieldUnits.includes(this.recipe.yieldUnit)
? null
@ -654,7 +697,6 @@ export default {
});
},
showDifficultyLevel(focus) {
this.modalOpen = 1;
this.$showModal(Action, {
props: {
title: "Difficulty level",
@ -662,24 +704,22 @@ export default {
selected: this.recipe.difficulty,
},
}).then((action) => {
this.modalOpen = 0;
if (action) {
this.recipe.difficulty = action;
if (focus) this.addIngredient();
if (focus) this.addIng(1);
} else
this.difficultyLevels.includes(this.recipe.difficulty)
? null
: (this.recipe.difficulty = "Easy");
});
},
showUnits(e, focus, index) {
this.modalOpen = 1;
showUnits(focus, i) {
this.$showModal(Action, {
props: {
title: "Unit",
list: this.units,
action: "aNBtn",
selected: this.recipe.ingredients[index].unit,
selected: this.recipe.ingredients[i].unit,
},
}).then((action) => {
if (action == "aNBtn") {
@ -689,30 +729,25 @@ export default {
action: "aBtn",
},
}).then((item) => {
this.modalOpen = 0;
if (item.length) {
this.recipe.ingredients[index].unit = item;
this.recipe.ingredients[i].unit = item;
this.addLI({
item,
listName: "units",
});
if (focus && this.recipe.ingredients.length - 1 === index)
this.autoFocusRefField("ingredient", index);
if (focus) this.focusRefs("ing" + i, 1);
}
});
} else {
this.modalOpen = 0;
if (action) {
this.recipe.ingredients[index].unit = action;
if (focus && this.recipe.ingredients.length - 1 === index)
this.autoFocusRefField("ingredient", index);
this.recipe.ingredients[i].unit = action;
if (focus) this.focusRefs("ing" + i, 1);
}
}
});
},
showCombinations() {
Utils.ad.dismissSoftInput();
this.modalOpen = 1;
let existingCombinations = [...this.recipe.combinations, this.recipe.id];
let filteredRecipes = this.recipes.filter(
(e) => !existingCombinations.includes(e.id)
@ -723,56 +758,80 @@ export default {
recipes: filteredRecipes,
},
}).then((res) => {
this.modalOpen = 0;
if (res) this.recipe.combinations.push(res);
});
},
// INPUT FIELD HANDLERS
addIngredient() {
let ingredients = this.recipe.ingredients;
let unit = ingredients.length
? ingredients[ingredients.length - 1].unit
: "unit";
this.recipe.ingredients.push({
item: "",
quantity: null,
unit,
});
setFocus(i) {
this.fi = i;
},
removeIngredient(index) {
this.modalOpen = 1;
if (this.recipe.ingredients[index].item.length) {
let item = this.recipe.ingredients[index];
this.recipe.ingredients.splice(index, 1);
this.showUndoBar("rmIng").then(
(res) => res && this.recipe.ingredients.splice(index, 0, item)
addIng(type) {
let ing = {
key: utils.getRandomID(1),
type,
quantity: null,
unit: 0,
value: "",
};
let ings = this.recipe.ingredients;
if (type) {
ing.unit = ings.length
? ings[this.fi >= 0 ? this.fi : ings.length - 1].unit
? ings[this.fi >= 0 ? this.fi : ings.length - 1].unit
: "unit"
: "unit";
}
let i = this.fi >= 0 ? this.fi + 1 : ings.length;
this.recipe.ingredients.splice(i, 0, ing);
if (!ing.value || !type) this.delayFocus("ing", ings.length);
},
rmIng(i) {
if (this.recipe.ingredients[i].value.length) {
let item = this.recipe.ingredients[i];
this.recipe.ingredients.splice(i, 1);
this.showUndoBar(item.type ? "rmIng" : "sectRm").then(
(res) => res && this.recipe.ingredients.splice(i, 0, item)
);
} else {
this.recipe.ingredients.splice(index, 1);
this.recipe.ingredients.splice(i, 1);
}
setTimeout(() => (this.modalOpen = 0), 200);
},
addInstruction() {
this.recipe.instructions.push("");
addIns(type) {
let obj = {
key: utils.getRandomID(1),
type,
value: "",
};
let inss = this.recipe.instructions;
let i = this.fi >= 0 ? this.fi + 1 : inss.length;
this.recipe.instructions.splice(i, 0, obj);
this.delayFocus("ins", inss.length);
},
removeInstruction(index) {
if (this.recipe.instructions[index].length) {
let item = this.recipe.instructions[index];
this.recipe.instructions.splice(index, 1);
this.showUndoBar("rmIns").then(
(res) => res && this.recipe.instructions.splice(index, 0, item)
rmIns(i) {
if (this.recipe.instructions[i].value.length) {
let item = this.recipe.instructions[i];
this.recipe.instructions.splice(i, 1);
this.showUndoBar(item.type ? "rmIns" : "sectRm").then(
(res) => res && this.recipe.instructions.splice(i, 0, item)
);
} else this.recipe.instructions.splice(index, 1);
} else this.recipe.instructions.splice(i, 1);
},
addNote() {
this.recipe.notes.push("");
let obj = {
key: utils.getRandomID(1),
value: "",
};
let nos = this.recipe.notes;
let i = this.fi >= 0 ? this.fi + 1 : nos.length;
this.recipe.notes.splice(i, 0, obj);
this.delayFocus("note", nos.length);
},
removeNote(index) {
if (this.recipe.notes[index].length) {
if (this.recipe.notes[index].value.length) {
let item = this.recipe.notes[index];
this.recipe.notes.splice(index, 1);
this.showUndoBar("rmN").then((res) =>
this.showUndoBar("rmN").then(() =>
this.recipe.notes.splice(index, 0, item)
);
} else this.recipe.notes.splice(index, 1);
@ -788,22 +847,46 @@ export default {
this.recipe.combinations.splice(index, 0, id)
);
},
getIngPos(n) {
let a = 1;
let b = 1;
let ings = this.recipe.ingredients;
let group = ings.reduce((acc, e) => {
if (!e.type) {
a = 1;
acc.push(b++);
} else acc.push(e.type ? a++ : a - 1);
return acc;
}, []);
return localize(ings[n].type ? "it" : "sect", group[n]);
},
getInsPos(n) {
let a = 1;
let b = 1;
let ins = this.recipe.instructions;
let group = ins.reduce((acc, e) => {
if (!e.type) {
a = 1;
acc.push(b++);
} else acc.push(a++);
return acc;
}, []);
return localize(ins[n].type ? "stp" : "sect", group[n]);
},
// SAVE OPERATION
clearEmptyFields(bool) {
if (!this.recipe.title && !bool) this.recipe.title = localize("untRec");
clearEmptyFields() {
if (!this.recipe.title) this.recipe.title = localize("untRec");
if (!this.recipe.yieldQuantity) this.recipe.yieldQuantity = 1;
this.recipe.ingredients = this.recipe.ingredients.filter((e) => e.item);
let vm = this;
function clearEmpty(arr) {
vm.recipe[arr] = vm.recipe[arr].filter((e) => e);
}
const clearEmpty = (arr) => {
this.recipe[arr] = this.recipe[arr].filter((e) => e.value);
};
clearEmpty("ingredients");
clearEmpty("instructions");
clearEmpty("notes");
},
saveOperation() {
this.saving = this.modalOpen = 1;
this.saving = 1;
this.clearEmptyFields();
this.recipe.lastModified = new Date().getTime();
setString("previousCuisine", this.recipe.cuisine);
@ -884,20 +967,28 @@ export default {
},
// HELPERS
autoFocusField(ref, showSoftInput) {
this.$refs[ref].nativeView.focus();
if (showSoftInput) {
setTimeout(() => {
Utils.ad.showSoftInput(this.$refs[ref].nativeView.android);
}, 100);
}
},
autoFocusRefField(ref, index) {
this.$refs[ref][index].nativeView.focus();
focusRef(r) {
this.$refs[r].nativeView.focus();
setTimeout(() => {
Utils.ad.showSoftInput(this.$refs[ref][index].nativeView.android);
Utils.ad.showSoftInput(this.$refs[r].nativeView.android);
}, 100);
},
focusRefs(r, i) {
i = i != null ? i : 0;
this.$refs[r][i].nativeView.focus();
setTimeout(() => {
Utils.ad.showSoftInput(this.$refs[r][i].nativeView.android);
}, 100);
},
delayFocus(type, length) {
setTimeout(
() =>
this.focusRefs(
type + (length == 1 ? 0 : this.fi >= 0 ? this.fi + 1 : length - 1)
),
100
);
},
splitTags() {
let tags = [];
let string;
@ -925,70 +1016,17 @@ export default {
let min = localize("min");
return h ? (m ? `${h} ${hr} ${m} ${min}` : `${h} ${hr}`) : `${m} ${min}`;
},
focusField(args, type) {
if (type) this.setInputTypeText(args, type);
else this.setGravity(args);
if (!args.object.text) {
args.object.focus();
setTimeout(() => Utils.ad.showSoftInput(args.object.android), 100);
}
},
setInputTypeText({ object }, type) {
this.setGravity(object);
let common =
android.text.InputType.TYPE_CLASS_TEXT |
android.text.InputType.TYPE_TEXT_FLAG_AUTO_CORRECT;
switch (type) {
case "words":
object.android.setInputType(
android.text.InputType.TYPE_TEXT_FLAG_CAP_WORDS | common
);
break;
case "sentence":
object.android.setInputType(
android.text.InputType.TYPE_TEXT_FLAG_CAP_SENTENCES | common
);
break;
case "multiLine":
object.android.setInputType(
android.text.InputType.TYPE_TEXT_FLAG_MULTI_LINE |
android.text.InputType.TYPE_TEXT_FLAG_CAP_SENTENCES |
common
);
break;
}
},
setTimeRequired(focus, time) {
this.modalOpen = 1;
let t = this.recipe[time].split(":");
let hr = t[0];
let min = t[1];
this.$showModal(TimePickerHM, {
props: {
title: `${time == "prepTime" ? "prepT" : "cookT"}`,
selectedHr: hr,
selectedMin: min,
},
}).then((result) => {
this.modalOpen = 0;
if (result) {
this.recipe[time] = result;
if (focus) {
switch (time) {
case "prepTime":
this.autoFocusField("cookTime", 0);
break;
case "cookTime":
this.autoFocusField("yieldQuantity", 1);
break;
}
}
}
});
},
getTitleCount(title, type) {
let count = this.recipe[type].length;
let text = count ? ` (${count})` : "";
let c;
switch (title) {
case "ings" || "inss":
c = this.recipe[type].filter((e) => e.type).length;
break;
default:
c = this.recipe[type].length;
break;
}
let text = c ? ` (${c})` : "";
return localize(title) + text;
},

View file

@ -320,7 +320,7 @@
@touch="() => null"
>
<Button
class="ico rtl end"
class="ico rtl"
@tap="
showSearch
? closeSearch()
@ -377,14 +377,14 @@
</StackLayout>
<Button
:hidden="showSearch || selectMode"
class="ico fab end"
class="ico fab"
:text="icon.plus"
col="5"
@tap="addR"
/>
<Button
:hidden="!selectMode"
class="ico end"
class="ico"
:text="icon.del"
col="5"
@tap="deleteSelection"
@ -483,7 +483,7 @@ export default {
let vm = this;
function getIngredients(e) {
return e.ingredients
.map((f) => f.item.toLowerCase())
.map((f) => f.value.toLowerCase())
.join()
.includes(vm.searchQuery);
}

View file

@ -3,7 +3,7 @@
<GridLayout rows="*, auto, auto" columns="*">
<ScrollView
@loaded="svLoad"
@scroll="!edit && svScroll($event)"
@scroll="svScroll($event)"
rowSpan="3"
scrollBarIndicatorVisible="false"
>
@ -171,12 +171,7 @@
@tap="hasRecipes ? toggleEditMode() : randomMealPlan()"
col="3"
/> -->
<Button
class="ico fab end"
:text="icon.plus"
@tap="addMealPlan"
col="4"
/>
<Button class="ico fab" :text="icon.plus" @tap="addMealPlan" col="4" />
</RGridLayout>
<SnackBar
row="2"
@ -204,14 +199,7 @@
</template>
<script lang="ts">
import {
Application,
Device,
Frame,
Observable,
Screen,
Utils,
} from "@nativescript/core";
import { Device, Frame, Observable, Screen, Utils } from "@nativescript/core";
import { mapState, mapActions } from "vuex";
import ViewRecipe from "./ViewRecipe.vue";
import EditRecipe from "./EditRecipe.vue";
@ -278,7 +266,6 @@ export default {
let sbHeight = idSbH > 0 ? resources.getDimensionPixelSize(idSbH) : 0;
const metrics = new android.util.DisplayMetrics();
wm.getDefaultDisplay().getMetrics(metrics);
console.log(metrics.heightPixels - sbHeight);
return Math.floor(
Utils.layout.toDeviceIndependentPixels(
metrics.heightPixels - sbHeight
@ -291,7 +278,6 @@ export default {
.getInsetsIgnoringVisibility(
android.view.WindowInsets.Type.systemBars()
);
console.log(metrics.getBounds().height() - top - bottom, top, bottom);
return metrics.getBounds().height() - top - bottom;
}
},
@ -453,11 +439,13 @@ export default {
let scrollUp;
let y = scrollY;
if (y) {
scrollUp = y < this.scrollPos;
this.scrollPos = Math.abs(y);
let ab = this.appbar.translateY;
if (!scrollUp && ab == 0) this.animateBar(this.appbar, 0);
else if (scrollUp && ab == 64) this.animateBar(this.appbar, 1);
if (!this.edit) {
scrollUp = y < this.scrollPos;
this.scrollPos = Math.abs(y);
let ab = this.appbar.translateY;
if (!scrollUp && ab == 0) this.animateBar(this.appbar, 0);
else if (scrollUp && ab == 64) this.animateBar(this.appbar, 1);
}
this.listView.isScrollEnabled = y >= object.scrollableHeight;
}
},

View file

@ -107,13 +107,21 @@
<RStackLayout
:rtl="RTL"
orientation="horizontal"
v-for="(item, index) in recipe.ingredients"
:key="index + 'ing'"
v-for="(item, i) in recipe.ingredients"
:key="item.key"
class="check"
@touch="touchIngredient($event, index)"
@touch="item.type && touchIngredient($event, i)"
>
<Button class="ico si" :text="icon.uncheck" />
<RLabel class="v tw" :text="getIngredientItem(item)" />
<Button
:hidden="!item.type"
class="ico si"
:text="icon.uncheck"
/>
<RLabel
class="v tw"
:class="{ 'tb t t3': !item.type }"
:text="getIngredientItem(item)"
/>
</RStackLayout>
</StackLayout>
<StackLayout @loaded="onInsLoad">
@ -125,13 +133,21 @@
<RStackLayout
:rtl="RTL"
orientation="horizontal"
@touch="touchInstruction"
v-for="(instruction, index) in recipe.instructions"
:key="index + 'ins'"
@touch="item.type && touchInstruction($event)"
v-for="(item, i) in recipe.instructions"
:key="item.key"
class="check"
>
<Button class="tb t3 ico si" :text="localeN(index + 1)" />
<RLabel class="v tw" :text="instruction" />
<Button
:hidden="!item.type"
class="tb t3 ico si"
:text="getInsPos(i)"
/>
<RLabel
class="v tw"
:class="{ 'tb t t3': !item.type }"
:text="item.value"
/>
</RStackLayout>
</StackLayout>
<RLabel
@ -206,7 +222,7 @@
columns="auto, *, auto, auto, auto, auto"
@touch="() => null"
>
<Button class="ico rtl end" :text="icon.back" @tap="$navigateBack()" />
<Button class="ico rtl" :text="icon.back" @tap="$navigateBack()" />
<Button
col="2"
v-if="!filterTrylater"
@ -237,7 +253,7 @@
<ActivityIndicator col="4" :hidden="!busyEdit" :busy="busyEdit" />
<Button
col="5"
class="ico end"
class="ico"
:text="showTools ? icon.less : icon.more"
@tap="toggleTools"
/>
@ -475,31 +491,49 @@ export default {
this.showTools && this.toggleTools();
this.animateBar(this.appbar, 0);
},
getInsPos(n) {
let a = 1;
let b = 1;
let ins = this.recipe.instructions;
let group = ins.reduce((acc, e) => {
if (!e.type) {
a = 1;
acc.push(b++);
} else acc.push(a++);
return acc;
}, []);
return this.localeN(group[n]);
},
// Helpers
getTitleCount(title, type) {
let c = this.recipe[type].length;
getTitleCount(title, type, unsel) {
let c;
let s = null;
switch (title) {
case "ings":
s = this.checked;
c = this.recipe[type].filter((e) => e.type).length;
break;
case "inss":
s = this.stepsDid;
c = this.recipe[type].filter((e) => e.type).length;
break;
default:
c = this.recipe[type].length;
break;
}
c = this.localeN(c);
s = s && this.localeN(s);
let text = s ? ` (${s}/${c})` : ` (${c})`;
let text = s && !unsel ? ` (${s}/${c})` : ` (${c})`;
return localize(title) + text;
},
getIngredientItem(item) {
getIngredientItem(o) {
return `${
this.roundedQuantity(item.quantity)
? this.roundedQuantity(item.quantity) + " "
this.roundedQuantity(o.quantity)
? this.roundedQuantity(o.quantity) + " "
: ""
}${this.roundedQuantity(item.quantity) ? localize(item.unit) + " " : ""}${
item.item
}${this.roundedQuantity(o.quantity) ? localize(o.unit) + " " : ""}${
o.value
}`;
},
changeYield() {
@ -669,6 +703,7 @@ export default {
});
},
viewCombination(combination) {
this.hideBar();
this.scrollview.scrollToVerticalOffset(0, true);
this.recipe = this.recipes.filter((e) => e.id === combination)[0];
this.showTitleArr = new Array(4).fill(0);
@ -765,14 +800,14 @@ export default {
this.$options.filters.L(e.unit) +
" "
: ""
}${e.item}\n`;
}${e.value}\n`;
});
shareContent += ingredients;
}
if (this.recipe.instructions.length) {
let instructions = `\n\n${localize("inss")}:\n\n`;
this.recipe.instructions.forEach((e, i) => {
instructions += `${i + 1}. ${e}\n\n`;
instructions += `${i + 1}. ${e.value}\n\n`;
});
shareContent += instructions;
}
@ -786,7 +821,7 @@ export default {
if (this.recipe.notes.length) {
let notes = `\n${localize("nos")}:\n\n`;
this.recipe.notes.forEach((e, i) => {
notes += `${i + 1}. ${e}\n\n`;
notes += `${i + 1}. ${e.value}\n\n`;
});
shareContent += notes;
}
@ -849,7 +884,7 @@ export default {
const stack = this.notescon;
stack.removeChildren();
this.recipe.notes.forEach((note) =>
stack.addChild(this.createNote(note))
stack.addChild(this.createNote(note.value))
);
},
getTags(tags) {
@ -891,7 +926,6 @@ export default {
height: sw,
translate: { x: this.RTL ? -16 : 112 - sw, y: (sh - sw) / 3 },
duration: 200,
curve: CoreTypes.AnimationCurve.easeOut,
})
)
.then(() =>
@ -899,7 +933,6 @@ export default {
height: sh,
translate: { x: this.RTL ? -16 : 112 - sw, y: -((sh - sw) / 6) },
duration: 200,
curve: CoreTypes.AnimationCurve.easeOut,
})
);
},
@ -912,7 +945,6 @@ export default {
height: sw,
translate: { x: this.RTL ? -16 : 112 - sw, y: (sh - sw) / 3 },
duration: 200,
curve: CoreTypes.AnimationCurve.easeIn,
})
.then(() =>
pv.animate({
@ -920,7 +952,6 @@ export default {
height: 96,
translate: { x: 0, y: 0 },
duration: 200,
curve: CoreTypes.AnimationCurve.easeIn,
})
)
.then(() =>
@ -964,7 +995,7 @@ export default {
// Print
prepareHTML() {
let r = this.recipe;
const head = `<head><meta charset=UTF-8><meta content="IE=edge"http-equiv=X-UA-Compatible><meta content="width=device-width,initial-scale=1"name=viewport><title>EnRecipes - Recipe for Print</title><style>a,body,div,html,img,ol,p,span,ul{border:0;font-size:100%;font:inherit;margin:0;padding:0;vertical-align:baseline}@font-face{font-family:Inter-Medium;src:url(../app/fonts/Inter-Medium.otf)}@font-face{font-family:Inter-Bold;src:url(../app/fonts/Inter-Bold.otf)}body{font-family:Inter-Medium,sans-serif;line-height:1.5;max-width:45rem;padding:1.5rem}body>p{padding:.5rem 0}.attr>div>p:last-child,h1,h2{font-family:Inter-Bold,sans-serif}#header{display:grid;grid-column-gap:2rem;grid-template-columns:1fr auto;margin-bottom:2.5rem;width:100%}img{border-radius:1rem;height:8rem;object-fit:cover;width:8rem}h1{font-size:2.25rem;line-height:1.25;margin:0;padding-bottom:1rem}svg{width:2rem;height:2rem;padding:0 .5rem 0 0}h2{margin:2rem 0 1rem}.attr{display:grid;grid-column-gap:2rem;grid-template-columns:1fr 1fr;margin-top:1rem}.attr>div>p:first-child{font-size:.9rem;opacity:.5}ol,ul{padding:0 1.5rem}li{padding:.5rem}a{color:inherit}.sub{font-size:.9rem;margin-top:2rem;opacity:.5}</style></head>`;
const head = `<head><meta charset=UTF-8><meta content="IE=edge"http-equiv=X-UA-Compatible><meta content="width=device-width,initial-scale=1"name=viewport><title>EnRecipes - Recipe for Print</title><style>a,body,div,html,img,ol,p,span,ul{border:0;font-size:100%;font:inherit;margin:0;padding:0;vertical-align:baseline}@font-face{font-family:Inter-Medium;src:url(../app/fonts/Inter-Medium.otf)}@font-face{font-family:Inter-Bold;src:url(../app/fonts/Inter-Bold.otf)}body{font-family:Inter-Medium,sans-serif;line-height:1.5;max-width:45rem;padding:1.5rem}body>p{padding:.5rem 0}.attr>div>p:last-child,h1,h2,h3{font-family:Inter-Bold,sans-serif}#header{display:grid;grid-column-gap:2rem;grid-template-columns:1fr auto;margin-bottom:2.5rem;width:100%}img{border-radius:1rem;height:8rem;object-fit:cover;width:8rem}h1{font-size:2.25rem;line-height:1.25;margin:0;padding-bottom:1rem}svg{width:2rem;height:2rem;padding:0 .5rem 0 0}h2{margin:2rem 0 1rem}.attr{display:grid;grid-column-gap:2rem;grid-template-columns:1fr 1fr;margin-top:1rem}.attr>div>p:first-child{font-size:.9rem;opacity:.5}ol,ul{padding:0 1.5rem}li{padding:.5rem}a{color:inherit}.sub{font-size:.9rem;margin-top:2rem;opacity:.5}</style></head>`;
const getStarRating = () => {
let rate = `<svg width="100%" height="100%" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2"><path d="M10.756 2.826 8.419 7.98l-5.624.63c-.533.06-.982.425-1.147.935-.166.51-.018 1.07.378 1.431l4.179 3.816-1.138 5.543c-.108.525.101 1.065.535 1.38.434.315 1.012.348 1.478.083L12 19.002l4.92 2.796c.466.265 1.044.232 1.478-.083.434-.315.643-.855.535-1.38l-1.138-5.543 4.179-3.816c.396-.361.544-.921.378-1.431-.165-.51-.614-.875-1.147-.935l-5.624-.63-2.337-5.154c-.221-.489-.708-.802-1.244-.802s-1.023.313-1.244.802z"/></svg>`;
let unrate = `<svg width="100%" height="100%" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2"><path d="M10.756 2.826 8.419 7.98l-5.624.63c-.533.06-.982.425-1.147.935-.166.51-.018 1.07.378 1.431l4.179 3.816-1.138 5.543c-.108.525.101 1.065.535 1.38.434.315 1.012.348 1.478.083L12 19.002l4.92 2.796c.466.265 1.044.232 1.478-.083.434-.315.643-.855.535-1.38l-1.138-5.543 4.179-3.816c.396-.361.544-.921.378-1.431-.165-.51-.614-.875-1.147-.935l-5.624-.63-2.337-5.154c-.221-.489-.708-.802-1.244-.802s-1.023.313-1.244.802zM12 4.925l1.994 4.398c.146.321.45.542.8.581l4.799.538-3.567 3.256c-.26.237-.376.594-.305.94l.972 4.73-4.199-2.386c-.306-.174-.682-.174-.988.0l-4.199 2.386.972-4.73c.071-.346-.045-.703-.305-.94l-3.567-3.256 4.799-.538c.35-.039.654-.26.8-.581L12 4.925z"/></svg>`;
@ -972,18 +1003,34 @@ export default {
};
const img = r.image ? `<img src="${r.image}" alt="${r.title}" />` : "";
const getIngs = () => {
let ing = [];
r.ingredients.forEach((e) => {
ing.push(`<li>${this.getIngredientItem(e)}</li>`);
});
return ing.join("");
let ings = r.ingredients;
return ings
.map((e, i) => {
if (!e.type)
return `${i > 0 ? "</ul>" : ""}<h3>${e.value}</h3>${
i < ings.length - 1 ? "<ul>" : ""
}`;
else
return `${i < 1 ? "<ul>" : ""}<li>${this.getIngredientItem(
e
)}</li>${i == ings.length - 1 ? "</ul>" : ""}`;
})
.join("");
};
const getIns = () => {
let ins = [];
r.instructions.forEach((e) => {
ins.push(`<li>${e}</li>`);
});
return ins.join("");
let inss = r.instructions;
return r.instructions
.map((e, i) => {
if (!e.type)
return `${i > 0 ? "</ol>" : ""}<h3>${e.value}</h3>${
i < inss.length - 1 ? "<ol>" : ""
}`;
else
return `${i < 1 ? "<ol>" : ""}<li>${e.value}</li>${
i == inss.length - 1 ? "</ol>" : ""
}`;
})
.join("");
};
const getCmbs = () => {
let cmb = [];
@ -1001,7 +1048,7 @@ export default {
: val;
};
r.notes.forEach((e) => {
let arr = e.split(regex);
let arr = e.value.split(regex);
let single = [];
arr.forEach((f) => {
single.push(createSpan(f, regex.test(f)));
@ -1046,18 +1093,20 @@ export default {
"Difficulty level"
)}<p>${r.difficulty}</div></div>${
r.ingredients.length
? `<h2>${this.getTitleCount("ings", "ingredients")}</h2>`
? `<h2>${this.getTitleCount("ings", "ingredients", 1)}</h2>`
: ""
}<ul>${getIngs()}</ul>${
}${getIngs()}${
r.instructions.length
? `<h2>${this.getTitleCount("inss", "instructions")}</h2>`
? `<h2>${this.getTitleCount("inss", "instructions", 1)}</h2>`
: ""
}<ol>${getIns()}</ol>${
}${getIns()}${
r.combinations.length
? `<h2>${this.getTitleCount("cmbs", "combinations")}</h2>`
? `<h2>${this.getTitleCount("cmbs", "combinations", 1)}</h2>`
: ""
} ${getCmbs()} ${
r.notes.length ? `<h2>${this.getTitleCount("nos", "notes")}</h2>` : ""
r.notes.length
? `<h2>${this.getTitleCount("nos", "notes", 1)}</h2>`
: ""
} ${getNotes()}<div class=sub><p>${this.getDates().u}<p>${
this.getDates().c
}</div>

View file

@ -69,7 +69,7 @@ export default {
cuisine: e.cuisine,
category: e.category,
tags: e.tags.map((e) => e.toLowerCase()).join(),
ingredients: e.ingredients.map((e) => e.item.toLowerCase()).join(),
ingredients: e.ingredients.map((e) => e.value.toLowerCase()).join(),
};
})
.filter((e) => this.recipeFilter(e));

View file

@ -35,7 +35,7 @@
</v-template>
</ListView>
<GridLayout row="1" class="appbar rtl" rows="*" columns="auto, *">
<Button class="ico end" :text="icon.back" @tap="$navigateBack()" />
<Button class="ico" :text="icon.back" @tap="$navigateBack()" />
</GridLayout>
<Label rowSpan="2" class="edge hal rtl" @swipe="swipeBack" />
<Label

View file

@ -3,7 +3,7 @@
<RGridLayout :rtl="RTL" rows="*, auto" columns="auto, *">
<OptionsList title="Settings" :items="items" :action="navigateTo" />
<GridLayout row="1" class="appbar rtl" rows="*" columns="auto, *">
<Button class="ico end" :text="icon.back" @tap="$navigateBack()" />
<Button class="ico" :text="icon.back" @tap="$navigateBack()" />
</GridLayout>
<Label rowSpan="2" class="edge hal rtl" @swipe="swipeBack" />
<Label

View file

@ -3,7 +3,7 @@
<RGridLayout :rtl="RTL" rows="*, auto" columns="auto, *">
<OptionsList title="Settings" :items="items" />
<GridLayout row="1" class="appbar rtl" rows="*" columns="auto, *">
<Button class="ico end" :text="icon.back" @tap="$navigateBack()" />
<Button class="ico" :text="icon.back" @tap="$navigateBack()" />
</GridLayout>
<Label rowSpan="2" class="edge hal rtl" @swipe="swipeBack" />
<Label

View file

@ -10,7 +10,7 @@
rows="*"
columns="auto, *"
>
<Button class="ico end" :text="icon.back" @tap="$navigateBack()" />
<Button class="ico" :text="icon.back" @tap="$navigateBack()" />
</GridLayout>
<Toast :onload="tbLoad" :toast="toast" :action="hideBar" />
<RGridLayout
@ -22,7 +22,7 @@
columns="auto, *"
>
<ActivityIndicator :busy="!!progress" />
<RLabel margin="0 12" col="1" class="tb tw vc lh4" :text="progress" />
<RLabel margin="0 2" col="1" class="tb tw vc lh4" :text="progress" />
</RGridLayout>
<Label rowSpan="2" class="edge hal rtl" @swipe="swipeBack" />
<Label

View file

@ -3,7 +3,7 @@
<RGridLayout :rtl="RTL" rows="*, auto" columns="auto, *">
<OptionsList title="intf" :items="items" />
<GridLayout row="1" class="appbar rtl" rows="*" columns="auto, *">
<Button class="ico end" :text="icon.back" @tap="$navigateBack()" />
<Button class="ico" :text="icon.back" @tap="$navigateBack()" />
</GridLayout>
<Label rowSpan="2" class="edge hal rtl" @swipe="swipeBack" />
<Label

View file

@ -3,7 +3,7 @@
<RGridLayout :rtl="RTL" rows="*, auto" columns="auto, *">
<OptionsList title="Settings" :items="items" />
<GridLayout row="1" class="appbar rtl" rows="*" columns="auto, *">
<Button class="ico end" :text="icon.back" @tap="$navigateBack()" />
<Button class="ico" :text="icon.back" @tap="$navigateBack()" />
</GridLayout>
<Label rowSpan="2" class="edge hal rtl" @swipe="swipeBack" />
<Label

View file

@ -10,7 +10,7 @@
rows="*"
columns="auto, *"
>
<Button class="ico end" :text="icon.back" @tap="$navigateBack()" />
<Button class="ico" :text="icon.back" @tap="$navigateBack()" />
</GridLayout>
<Toast :onload="tbLoad" :toast="toast" :action="hideBar" />
<Label rowSpan="2" class="edge hal rtl" @swipe="swipeBack" />

View file

@ -9,7 +9,7 @@
@loaded="abLoad"
columns="auto, *"
>
<Button class="ico end" :text="icon.back" @tap="$navigateBack()" />
<Button class="ico" :text="icon.back" @tap="$navigateBack()" />
</GridLayout>
<Toast :onload="tbLoad" :toast="toast" :action="hideToast" />
<Label rowSpan="2" class="edge hal rtl" @swipe="swipeBack" />

View file

@ -10,8 +10,8 @@
<Button @tap="action" :text="count" class="ico t3 accent tb" />
<RLabel
@tap="action"
margin="0 4"
class="tb tw vc lh4"
margin="0 2"
class="tw vc lh4"
col="1"
:text="msg | L"
/>

View file

@ -103,7 +103,7 @@
"intf": "Benutzeroberfläche",
"invFile": "Ungültige Datei",
"Irish": "Irisch",
"it": "Element",
"it": "Element %s",
"Italian": "Italienisch",
"Jamaican": "Jamaikanisch",
"Japanese": "Japanisch",
@ -233,7 +233,7 @@
"sru": "Rezept teilen mit …",
"stars": "Bewertung in Sternen",
"stick": "Stange",
"stp": "Schritt",
"stp": "Schritt %s",
"strAdd": "Beginne deine Rezepte hinzuzufügen!",
"sVw": "Schütteln, um ein zufälliges Rezept anzuzeigen",
"sVwInfo": "Hilft dir, wenn du dich nicht entscheiden kannst, was gekocht werden soll",
@ -324,5 +324,8 @@
"ksavr": "Bildschirm während der Rezeptanzeige eingeschaltet halten",
"esgbInfo": "Deaktiviere diese Option, wenn du Probleme mit der Navigation hast",
"esgb": "Randwischen zum Zurückgehen",
"ksavrInfo": "Verhindert, dass sich der Bildschirm während der Anzeige eines Rezepts ausschaltet"
"ksavrInfo": "Verhindert, dass sich der Bildschirm während der Anzeige eines Rezepts ausschaltet",
"sectRm": "Abschnitt entfernt",
"addSectBtn": "ABSCHNITT HINZUFÜGEN",
"sect": "Abschnitt %s"
}

View file

@ -326,5 +326,6 @@
"esgb": "Edge swipe to go back",
"esgbInfo": "Disable this option if you have any navigation issues",
"sect": "Section %s",
"addSectBtn": "ADD SECTION"
"addSectBtn": "ADD SECTION",
"sectRm": "Section removed"
}

View file

@ -103,7 +103,7 @@
"intf": "Interface",
"invFile": "Invalid file",
"Irish": "Irish",
"it": "Item",
"it": "Item %s",
"Italian": "Italian",
"Jamaican": "Jamaican",
"Japanese": "Japanese",
@ -233,7 +233,7 @@
"sru": "Share recipe using...",
"stars": "Star rating",
"stick": "stick",
"stp": "Step",
"stp": "Step %s",
"strAdd": "Start adding your recipes!",
"sVw": "Shake to view random recipe",
"sVwInfo": "Helps you choose what to cook when you can't decide",
@ -324,5 +324,8 @@
"esgbInfo": "Disable this option if you have any navigation issues",
"esgb": "Edge swipe to go back",
"ksavrInfo": "Prevents the screen from turning off while viewing a recipe",
"ksavr": "Keep screen awake while viewing recipe"
"ksavr": "Keep screen awake while viewing recipe",
"sectRm": "Section removed",
"addSectBtn": "ADD SECTION",
"sect": "Section %s"
}

View file

@ -103,7 +103,7 @@
"intf": "Interface",
"invFile": "Invalid file",
"Irish": "Irish",
"it": "Item",
"it": "Item %s",
"Italian": "Italian",
"Jamaican": "Jamaican",
"Japanese": "Japanese",
@ -233,7 +233,7 @@
"sru": "Share recipe using...",
"stars": "Star rating",
"stick": "stick",
"stp": "Step",
"stp": "Step %s",
"strAdd": "Start adding your recipes!",
"sVw": "Shake to view random recipe",
"sVwInfo": "Helps you choose what to cook when you can't decide",
@ -324,5 +324,8 @@
"esgbInfo": "Disable this option if you have any navigation issues",
"esgb": "Edge swipe to go back",
"ksavrInfo": "Prevents the screen from turning off while viewing a recipe",
"ksavr": "Keep screen awake while viewing recipe"
"ksavr": "Keep screen awake while viewing recipe",
"sectRm": "Section removed",
"addSectBtn": "ADD SECTION",
"sect": "Section %s"
}

View file

@ -103,7 +103,7 @@
"intf": "Interface",
"invFile": "Fichier invalide",
"Irish": "irlandaise",
"it": "Élément",
"it": "Élément %s",
"Italian": "italienne",
"Jamaican": "jamaïcaine",
"Japanese": "japonaise",
@ -233,7 +233,7 @@
"sru": "Partager la recette en utilisant…",
"stars": "Évaluation étoilée",
"stick": "barre",
"stp": "Étape",
"stp": "Étape %s",
"strAdd": "Commencez à ajouter vos recettes !",
"sVw": "Secouez pour voir une recette au hasard",
"sVwInfo": "Vous aide à choisir quoi cuisiner quand vous ne pouvez pas vous décider",
@ -324,5 +324,8 @@
"ksavr": "Garder lécran allumé durant laffichage dune recette",
"esgbInfo": "Désactivez cette option si vous avez des problèmes de navigation",
"esgb": "Balayer le bord pour revenir en arrière",
"ksavrInfo": "Empêche lécran de séteindre durant la visualisation dune recette"
"ksavrInfo": "Empêche lécran de séteindre durant la visualisation dune recette",
"sectRm": "Section retiré",
"addSectBtn": "AJOUTER UNE SECTION",
"sect": "Section %s"
}

View file

@ -103,7 +103,7 @@
"intf": "इंटरफेस",
"invFile": "अवैध फाइल",
"Irish": "आयरिश",
"it": "मद",
"it": "मद %s",
"Italian": "इतालवी",
"Jamaican": "जमैका",
"Japanese": "जापानी",
@ -233,7 +233,7 @@
"sru": "शेयर रेसिपी...",
"stars": "स्टार रेटिंग",
"stick": "लाठी",
"stp": "कदम",
"stp": "कदम %s",
"strAdd": "अपने व्यंजनों को जोड़ना शुरू करें!",
"sVw": "यादृच्छिक नुस्खा देखने के लिए हिलाएं",
"sVwInfo": "जब आप तय नहीं कर सकते तो आपको क्या खाना बनाना है, यह चुनने में मदद करता है",
@ -324,5 +324,8 @@
"selMT": "भोजन का प्रकार चुनें",
"d": "दिन",
"wk": "सप्ताह",
"mnth": "महीना"
"mnth": "महीना",
"sectRm": "धारा हटा दिया गया",
"addSectBtn": "धारा जोड़ें",
"sect": "भाग %s"
}

View file

@ -103,7 +103,7 @@
"intf": "ഇന്റർഫേസ്",
"invFile": "അസാധുവായ ഫയൽ",
"Irish": "ഐറിഷ്",
"it": "ഇനം",
"it": "ഇനം %s",
"Italian": "ഇറ്റാലിയൻ",
"Jamaican": "ജമൈക്കൻ",
"Japanese": "ജാപ്പനീസ്",
@ -233,7 +233,7 @@
"sru": "പാചകക്കുറിപ്പ് പങ്കിടുക...",
"stars": "നക്ഷത്ര റേറ്റിംഗ്",
"stick": "വടി",
"stp": "ഘട്ടം",
"stp": "ഘട്ടം %s",
"strAdd": "നിങ്ങളുടെ പാചകക്കുറിപ്പുകൾ ചേർക്കാൻ ആരംഭിക്കുക!",
"sVw": "ക്രമരഹിതമായ പാചകക്കുറിപ്പ് കാണാൻ കുലുക്കുക",
"sVwInfo": "നിങ്ങൾക്ക് തീരുമാനിക്കാൻ കഴിയാത്തപ്പോൾ എന്താണ് പാചകം ചെയ്യേണ്ടതെന്ന് തിരഞ്ഞെടുക്കാൻ നിങ്ങളെ സഹായിക്കുന്നു",
@ -324,5 +324,8 @@
"strtBtn": "ആരംഭിക്കുക",
"ntmr": "പുതിയ ടൈമർ",
"timer": "പാചക ടൈമർ",
"sec": "സെക്കൻഡ്"
"sec": "സെക്കൻഡ്",
"addSectBtn": "വിഭാഗം ചേർക്കുക",
"sectRm": "വിഭാഗം നീക്കംചെയ്തു",
"sect": "ഭാഗം %s"
}

View file

@ -103,7 +103,7 @@
"intf": "Uiterlijk",
"invFile": "Ongeldig bestand",
"Irish": "Iers",
"it": "Item",
"it": "Item %s",
"Italian": "Italiaans",
"Jamaican": "Jamaicaans",
"Japanese": "Japans",
@ -233,7 +233,7 @@
"sru": "Recept delen via…",
"stars": "Waardering",
"stick": "stokje",
"stp": "Stap",
"stp": "Stap %s",
"strAdd": "Voeg je recepten toe!",
"sVw": "Schudden om willekeurig recept te tonen",
"sVwInfo": "Handig voor als je even niet weet wat je wilt maken",
@ -324,5 +324,8 @@
"esgbInfo": "Schakel deze optie uit als je problemen ervaart tijdens het navigeren",
"esgb": "Vegen vanaf schermrand om terug te gaan",
"ksavrInfo": "Voorkomt dat het scherm wordt uitgeschakeld tijdens het bekijken van een recept",
"ksavr": "Scherm niet uitschakelen tijdens bekijken van recept"
"ksavr": "Scherm niet uitschakelen tijdens bekijken van recept",
"addSectBtn": "SECTIE TOEVOEGEN",
"sect": "Sectie %s",
"sectRm": "De sectie is verwijderd"
}

View file

@ -320,5 +320,6 @@
"nvr": "Nunca",
"gtD": "Ir à data",
"rstBtn": "REINICIAR",
"add": "Adicionar"
"add": "Adicionar",
"ksavr": "Manter tela ligada ao ver receitas"
}

View file

@ -198,7 +198,7 @@
"rec": "Receita",
"sysDefB": "Padrão do sistema + preto",
"trySer": "PROCURAR EM TODAS AS RECEITAS?",
"stp": "Etapa",
"stp": "Etapa %s",
"stars": "Classificação por estrelas",
"sru": "Partilhar receita usando...",
"srt": "Ordenar",
@ -238,7 +238,7 @@
"lang": "Idioma",
"kEdit": "CONTINUAR A EDITAR",
"joinTG": "Junte-se ao grupo no Telegram",
"it": "Item",
"it": "Item %s",
"invFile": "Ficheiro inválido",
"intf": "Interface",
"inss": "Instruções",
@ -320,5 +320,11 @@
"calVM": "Modo de vista tipo calendário",
"oAP": "%1$s a decorrer, %2$s em pausa",
"rstBtn": "REINICIAR",
"add": "Adicionar"
"add": "Adicionar",
"esgb": "Deslizar para a borda para voltar",
"esgbInfo": "Desative esta opção se tiver problemas ao navegar",
"ksavrInfo": "Impede que o ecrã desligue ao ver uma receita",
"ksavr": "Manter ecrã ligado ao ver receitas",
"addSectBtn": "ADICIONAR SECÇÃO",
"sect": "Secção %s"
}

View file

@ -103,7 +103,7 @@
"intf": "இடைமுகம்",
"invFile": "தவறான கோப்பு",
"Irish": "ஐரிஷ்",
"it": "பொருள்",
"it": "பொருள் %s",
"Italian": "இத்தாலிய",
"Jamaican": "ஜமைக்கா",
"Japanese": "ஜப்பானிய",
@ -233,7 +233,7 @@
"sru": "சமையல் குறிப்பை பகிரவும்...",
"stars": "நட்சத்திர மதிப்பீடு",
"stick": "குச்சி",
"stp": "செய்முறை",
"stp": "செய்முறை %s",
"strAdd": "உங்கள் சமையல் குறிப்புகளைச் சேர்க்கத் தொடங்குங்கள்!",
"sVw": "சாதனத்தை அசைத்து சீரற்ற சமையல் குறிப்பை காண்க",
"sVwInfo": "நீங்கள் தீர்மானிக்க முடியாதபோது என்ன சமைக்கலாம் என்பதைத் தேர்வுசெய்ய உதவும்",
@ -272,7 +272,7 @@
"buto": "%s இல் காப்புப் பிரதி எடுக்கப்பட்டது",
"sysDefB": "அமைப்பு இயல்புநிலை + கருப்பு",
"notifSetg": "அறிவிப்பு அமைப்புகள்",
"tmrRm": "டைமர் அகற்றப்பட்டது",
"tmrRm": "டைமர் நீக்கப்பட்டது",
"seconds": "வினாடிகள்",
"hours": "மணி",
"hour": "மணி",
@ -324,5 +324,8 @@
"ksavrInfo": "சமையல் குறிப்பு பார்க்கும் போது திரையை உறக்கநிலைக்குச் செல்லாது தடுக்கும்",
"ksavr": "சமையல் குறிப்பு பார்க்கும் போது திரையை விழித்திரு",
"rstBtn": "மீட்டமை",
"add": "சேர்"
"add": "சேர்",
"sectRm": "பிரிவு நீக்கப்பட்டது",
"addSectBtn": "பிரிவைச் சேர்",
"sect": "பிரிவு %s"
}

View file

@ -103,7 +103,7 @@
"intf": "ఇంటర్ఫేస్",
"invFile": "చెల్లుబాటులోలేని ఫైలు",
"Irish": "ఐరిష్",
"it": "అంశం",
"it": "అంశం %s",
"Italian": "ఇటాలియన్",
"Jamaican": "జమైకా",
"Japanese": "జపనీస్",
@ -233,7 +233,7 @@
"sru": "రెసిపీని భాగస్వామ్యం చేయండి ...",
"stars": "స్టార్ రేటింగ్",
"stick": "కర్ర",
"stp": "దశ",
"stp": "దశ %s",
"strAdd": "మీ వంటకాలను జోడించడం ప్రారంభించండి!",
"sVw": "యాదృచ్ఛిక రెసిపీని చూడటానికి షేక్ చేయండి",
"sVwInfo": "మీరు నిర్ణయించలేనప్పుడు ఏమి ఉడికించాలో ఎంచుకోవడానికి మీకు సహాయపడుతుంది",
@ -324,5 +324,8 @@
"selMT": "భోజన రకాన్ని ఎంచుకోండి",
"d": "రోజు",
"wk": "వారం",
"mnth": "నెల"
"mnth": "నెల",
"sectRm": "విభాగం తొలగించబడింది",
"addSectBtn": "విభాగం జోడించండి",
"sect": "విభాగం %s"
}

View file

@ -15,8 +15,8 @@
android {
defaultConfig {
versionCode 1
versionName '2.0.0'
versionCode 2
versionName '2.1.0'
minSdkVersion 23
targetSdkVersion 30
compileSdkVersion 30

View file

@ -292,6 +292,9 @@
<string name="aBtn">"أضف"</string>
<string name="About">"حول"</string>
<string name="aap">"ألحق صورة"</string>
<string name="sectRm">"Section removed"</string>
<string name="addSectBtn">"ADD SECTION"</string>
<string name="sect">"Section %1$s"</string>
<string name="esgbInfo">"Disable this option if you have any navigation issues"</string>
<string name="esgb">"Edge swipe to go back"</string>
<string name="ksavrInfo">"Prevents the screen from turning off while viewing a recipe"</string>

View file

@ -296,6 +296,9 @@
<string name="American">"American"</string>
<string name="aD">"Fuldendt!"</string>
<string name="About">"Om"</string>
<string name="sectRm">"Section removed"</string>
<string name="addSectBtn">"ADD SECTION"</string>
<string name="sect">"Section %1$s"</string>
<string name="esgbInfo">"Disable this option if you have any navigation issues"</string>
<string name="esgb">"Edge swipe to go back"</string>
<string name="ksavrInfo">"Prevents the screen from turning off while viewing a recipe"</string>

View file

@ -1,5 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="sect">"Abschnitt %1$s"</string>
<string name="addSectBtn">"ABSCHNITT HINZUFÜGEN"</string>
<string name="sectRm">"Abschnitt entfernt"</string>
<string name="ksavrInfo">"Verhindert, dass sich der Bildschirm während der Anzeige eines Rezepts ausschaltet"</string>
<string name="esgb">"Randwischen zum Zurückgehen"</string>
<string name="esgbInfo">"Deaktiviere diese Option, wenn du Probleme mit der Navigation hast"</string>
@ -91,7 +94,7 @@
<string name="sVwInfo">"Hilft dir, wenn du dich nicht entscheiden kannst, was gekocht werden soll"</string>
<string name="sVw">"Schütteln, um ein zufälliges Rezept anzuzeigen"</string>
<string name="strAdd">"Beginne deine Rezepte hinzuzufügen!"</string>
<string name="stp">"Schritt"</string>
<string name="stp">"Schritt %1$s"</string>
<string name="stick">"Stange"</string>
<string name="stars">"Bewertung in Sternen"</string>
<string name="sru">"Rezept teilen mit …"</string>
@ -221,7 +224,7 @@
<string name="Japanese">"Japanisch"</string>
<string name="Jamaican">"Jamaikanisch"</string>
<string name="Italian">"Italienisch"</string>
<string name="it">"Element"</string>
<string name="it">"Element %1$s"</string>
<string name="Irish">"Irisch"</string>
<string name="invFile">"Ungültige Datei"</string>
<string name="intf">"Benutzeroberfläche"</string>

View file

@ -1,5 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="sect">"Section %1$s"</string>
<string name="addSectBtn">"ADD SECTION"</string>
<string name="sectRm">"Section removed"</string>
<string name="ksavr">"Keep screen awake while viewing recipe"</string>
<string name="ksavrInfo">"Prevents the screen from turning off while viewing a recipe"</string>
<string name="esgb">"Edge swipe to go back"</string>
@ -91,7 +94,7 @@
<string name="sVwInfo">"Helps you choose what to cook when you can\'t decide"</string>
<string name="sVw">"Shake to view random recipe"</string>
<string name="strAdd">"Start adding your recipes!"</string>
<string name="stp">"Step"</string>
<string name="stp">"Step %1$s"</string>
<string name="stick">"stick"</string>
<string name="stars">"Star rating"</string>
<string name="sru">"Share recipe using..."</string>
@ -221,7 +224,7 @@
<string name="Japanese">"Japanese"</string>
<string name="Jamaican">"Jamaican"</string>
<string name="Italian">"Italian"</string>
<string name="it">"Item"</string>
<string name="it">"Item %1$s"</string>
<string name="Irish">"Irish"</string>
<string name="invFile">"Invalid file"</string>
<string name="intf">"Interface"</string>

View file

@ -1,5 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="sect">"Section %1$s"</string>
<string name="addSectBtn">"ADD SECTION"</string>
<string name="sectRm">"Section removed"</string>
<string name="ksavr">"Keep screen awake while viewing recipe"</string>
<string name="ksavrInfo">"Prevents the screen from turning off while viewing a recipe"</string>
<string name="esgb">"Edge swipe to go back"</string>
@ -91,7 +94,7 @@
<string name="sVwInfo">"Helps you choose what to cook when you can\'t decide"</string>
<string name="sVw">"Shake to view random recipe"</string>
<string name="strAdd">"Start adding your recipes!"</string>
<string name="stp">"Step"</string>
<string name="stp">"Step %1$s"</string>
<string name="stick">"stick"</string>
<string name="stars">"Star rating"</string>
<string name="sru">"Share recipe using..."</string>
@ -221,7 +224,7 @@
<string name="Japanese">"Japanese"</string>
<string name="Jamaican">"Jamaican"</string>
<string name="Italian">"Italian"</string>
<string name="it">"Item"</string>
<string name="it">"Item %1$s"</string>
<string name="Irish">"Irish"</string>
<string name="invFile">"Invalid file"</string>
<string name="intf">"Interface"</string>

View file

@ -0,0 +1,334 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="aap">"Adjuntá una foto"</string>
<string name="About">"Acerca de"</string>
<string name="aBtn">"AGREGAR"</string>
<string name="aD">"¡Todo listo!"</string>
<string name="addCmbBtn">"AGREGAR COMBINACIÓN"</string>
<string name="aFBu">"Agregá recetas para hacer un backup"</string>
<string name="aIngBtn">"AGREGAR INGREDIENTE"</string>
<string name="allCats">"Todas las categorías"</string>
<string name="American">"Americana"</string>
<string name="aNBtn">"AGREGAR NUEVA"</string>
<string name="aNoBtn">"AGREGAR NOTA"</string>
<string name="appCrd">"Compartido vía EnRecipes. Conseguilo en F-Droid, IzzyOnDroid o en la Play Store."</string>
<string name="Appetizers">"Aperitivos"</string>
<string name="appInfo">"EnRecipes es un libro de cocina digital, privado y de código abierto, que te permite crear, administrar y compartir tus recetas"</string>
<string name="apply">"APLICAR"</string>
<string name="appRst">"Se requiere reiniciar la app"</string>
<string name="aStpBtn">"AGREGAR PASO"</string>
<string name="sec">"s"</string>
<string name="sectRm">"Section removed"</string>
<string name="addSectBtn">"ADD SECTION"</string>
<string name="sect">"Section %1$s"</string>
<string name="esgbInfo">"Disable this option if you have any navigation issues"</string>
<string name="esgb">"Edge swipe to go back"</string>
<string name="ksavrInfo">"Prevents the screen from turning off while viewing a recipe"</string>
<string name="ksavr">"Keep screen awake while viewing recipe"</string>
<string name="rstBtn">"RESET"</string>
<string name="add">"Add"</string>
<string name="nvr">"Never"</string>
<string name="otaw">"Older than a week"</string>
<string name="otam">"Older than a month"</string>
<string name="otay">"Older than a year"</string>
<string name="admp">"Auto-delete meal plans"</string>
<string name="plsCrt">"Use the + button to create one"</string>
<string name="ehwmp">"Eat healthy with meal plans!"</string>
<string name="selMT">"Select meal type"</string>
<string name="ystr">"Yesterday"</string>
<string name="tmrw">"Tomorrow"</string>
<string name="tdy">"Today"</string>
<string name="cpy">"copy"</string>
<string name="d">"Day"</string>
<string name="wk">"Week"</string>
<string name="mnth">"Month"</string>
<string name="calVM">"Calendar view mode"</string>
<string name="oAP">"%1$s ongoing, %2$s paused"</string>
<string name="ttv">"Tap to view"</string>
<string name="dismissAll">"Dismiss all timers"</string>
<string name="dismiss">"Dismiss"</string>
<string name="texp">"%1$s timers expired"</string>
<string name="wDBy">"%1$s was delayed by %2$s"</string>
<string name="prstTU">"Preset time updated"</string>
<string name="ccwt">"Cook confidently with timers!"</string>
<string name="gtD">"Go to date"</string>
<string name="random">"Random"</string>
<string name="notifSetg">"Notification settings"</string>
<string name="tmrRm">"Timer removed"</string>
<string name="seconds">"seconds"</string>
<string name="hours">"hours"</string>
<string name="hour">"hour"</string>
<string name="minutes">"minutes"</string>
<string name="minute">"minute"</string>
<string name="dlyDur">"Delay duration"</string>
<string name="tmrvbrt">"Timer vibrate"</string>
<string name="tmrSnd">"Timer sound"</string>
<string name="aTPrst">"Added to presets"</string>
<string name="fwr">"for which recipe?"</string>
<string name="delPrst">"You are about to delete %1$s from the presets"</string>
<string name="prsts">"Presets"</string>
<string name="prstBtn">"PRESETS"</string>
<string name="tmr">"Timer %1$s"</string>
<string name="delay">"Delay"</string>
<string name="stop">"Stop"</string>
<string name="strtBtn">"START"</string>
<string name="ntmr">"New timer"</string>
<string name="timer">"Cooking Timer"</string>
<string name="sysDefB">"System default + Black"</string>
<string name="buto">"Backed up to %1$s"</string>
<string name="yld">"Yield"</string>
<string name="yieldU">"Yield unit"</string>
<string name="yieldQ">"Yield quantity"</string>
<string name="yesterday">"yesterday"</string>
<string name="wAgo">"%1$s weeks ago"</string>
<string name="Vietnamese">"Vietnamese"</string>
<string name="Vegetarian">"Vegetarian"</string>
<string name="Vegan">"Vegan"</string>
<string name="untRec">"Untitled Recipe"</string>
<string name="unsaved">"Unsaved changes"</string>
<string name="Unit">"Unit"</string>
<string name="unit">"unit"</string>
<string name="Undefined">"Undefined"</string>
<string name="Turkish">"Turkish"</string>
<string name="tsp">"tsp"</string>
<string name="tsInfo">"separate with spaces"</string>
<string name="ts">"Tags"</string>
<string name="trySer">"SEARCH IN ALL THE RECIPES?"</string>
<string name="trylater">"Try Later"</string>
<string name="trnsl">"Translate"</string>
<string name="triedInfo">"You tried this recipe %1$s"</string>
<string name="today">"today"</string>
<string name="tLInfo">"Recipes you want to try later are listed here"</string>
<string name="title">"Title"</string>
<string name="Theme">"Theme"</string>
<string name="Thai">"Thai"</string>
<string name="Teaspoon">"Teaspoon"</string>
<string name="tbsp">"tbsp"</string>
<string name="Tablespoon">"Tablespoon"</string>
<string name="sysDef">"System default"</string>
<string name="swm">"Start week on Monday"</string>
<string name="Swedish">"Swedish"</string>
<string name="sVwInfo">"Helps you choose what to cook when you can\'t decide"</string>
<string name="sVw">"Shake to view random recipe"</string>
<string name="strAdd">"Start adding your recipes!"</string>
<string name="stp">"Step %1$s"</string>
<string name="stick">"stick"</string>
<string name="stars">"Star rating"</string>
<string name="sru">"Share recipe using..."</string>
<string name="srt">"Sort"</string>
<string name="srpu">"Share recipe photo using..."</string>
<string name="_Sri_Lankan_Z7GfBa">"Sri Lankan"</string>
<string name="Spanish">"Spanish"</string>
<string name="Soups">"Soups"</string>
<string name="snacks">"Snacks"</string>
<string name="small">"small"</string>
<string name="sltd">"selected"</string>
<string name="_Slowest_first_hHjY6">"Slowest first"</string>
<string name="simple">"Simple"</string>
<string name="_Side_dishes_Z1Et4Vg">"Side dishes"</string>
<string name="shr">"Share"</string>
<string name="Settings">"Settings"</string>
<string name="SET">"SET"</string>
<string name="Serving">"Serving"</string>
<string name="ser">"Search"</string>
<string name="selRec">"Select recipe"</string>
<string name="Seafood">"Seafood"</string>
<string name="Scottish">"Scottish"</string>
<string name="Sauces">"Sauces"</string>
<string name="Salads">"Salads"</string>
<string name="Russian">"Russian"</string>
<string name="rst">"RESTART"</string>
<string name="rp">"Remove photo"</string>
<string name="Roll">"Roll"</string>
<string name="rmYUInfo">"You are about to remove %1$s from the yield unit list"</string>
<string name="rmUInfo">"You are about to remove %1$s from the unit list"</string>
<string name="rmN">"Note removed"</string>
<string name="rmIns">"Instruction removed"</string>
<string name="rmIng">"Ingredient removed"</string>
<string name="rmCuiInfo">"You are about to remove %1$s from the cuisine list"</string>
<string name="rmCmb">"Combination removed"</string>
<string name="rmCatInfo">"You are about to remove %1$s from the category list"</string>
<string name="Rice">"Rice"</string>
<string name="restYUL">"Reset yield unit list"</string>
<string name="restUL">"Reset unit list"</string>
<string name="restInfo">"Resetting a list will delete user-created entries and restore default entries. Existing recipes will not be affected."</string>
<string name="restDone">"Reset done"</string>
<string name="restCuiL">"Reset cuisine list"</string>
<string name="restCatL">"Reset category list"</string>
<string name="rest">"Reset"</string>
<string name="resNF">"Recipe not found"</string>
<string name="req">"Required %1$s"</string>
<string name="recU">"Updated:"</string>
<string name="recTitle">"My Healthy Recipe"</string>
<string name="recs">"recipes"</string>
<string name="recRm">"Recipe removed"</string>
<string name="recPic">"Recipe photo"</string>
<string name="recListEmp">"Nothing here! Add some recipes and try again"</string>
<string name="recI">"Imported:"</string>
<string name="recF">"recipes found"</string>
<string name="recE">"Already exist:"</string>
<string name="rec">"Recipe"</string>
<string name="rBtn">"REMOVE"</string>
<string name="Rating">"Rating"</string>
<string name="_Quickest_first_Z1CpP7N">"Quickest first"</string>
<string name="qt">"qt"</string>
<string name="pt">"pt"</string>
<string name="priv">"Privacy policy"</string>
<string name="prepT">"Preparation time"</string>
<string name="Pound">"Pound"</string>
<string name="Poultry">"Poultry"</string>
<string name="Portuguese">"Portuguese"</string>
<string name="plsAdd">"Use the + button to add one"</string>
<string name="planner">"Meal Planner"</string>
<string name="pinch">"pinch"</string>
<string name="Piece">"Piece"</string>
<string name="piece">"piece"</string>
<string name="pht">"Recipe photo"</string>
<string name="photogrid">"Photo Grid"</string>
<string name="Patty">"Patty"</string>
<string name="Pasta">"Pasta"</string>
<string name="oz">"oz"</string>
<string name="Ounce">"Ounce"</string>
<string name="opts">"Options"</string>
<string name="_Oldest_first_Z6cq4h">"Oldest first"</string>
<string name="OK">"OK"</string>
<string name="nwYiU">"New yield unit"</string>
<string name="nwCat">"New category"</string>
<string name="nos">"Notes"</string>
<string name="noRecsInL">"None of the recipes here matches your search"</string>
<string name="noRecs">"No recipes match your search"</string>
<string name="Noodles">"Noodles"</string>
<string name="noFavs">"No favourites yet"</string>
<string name="noAccSensor">"Accelerometer sensor is either disabled or is not working"</string>
<string name="no">"Note"</string>
<string name="nNBtn">"NOT NOW"</string>
<string name="nLangInfo">"Restart EnRecipes to use the new language"</string>
<string name="Nigerian">"Nigerian"</string>
<string name="newUnit">"New unit"</string>
<string name="newRec">"New recipe"</string>
<string name="_Newest_first_2Sb3c">"Newest first"</string>
<string name="newCui">"New cuisine"</string>
<string name="Moderate">"Moderate"</string>
<string name="ml">"ml"</string>
<string name="minimal">"Minimal"</string>
<string name="min">"min"</string>
<string name="Millilitre">"Millilitre"</string>
<string name="mg">"mg"</string>
<string name="Mexican">"Mexican"</string>
<string name="medium">"medium"</string>
<string name="Meat">"Meat"</string>
<string name="_Main_dishes_u6RGQ">"Main dishes"</string>
<string name="mAgo">"%1$s months ago"</string>
<string name="lunch">"Lunch"</string>
<string name="ltAgo">"a long time ago"</string>
<string name="Loaf">"Loaf"</string>
<string name="Litre">"Litre"</string>
<string name="listVM">"List view mode"</string>
<string name="Light">"Light"</string>
<string name="leaf">"leaf"</string>
<string name="lb">"lb"</string>
<string name="_Last_updated_Z2gEbLD">"Last updated"</string>
<string name="large">"large"</string>
<string name="lang">"Language"</string>
<string name="l">"l"</string>
<string name="Korean">"Korean"</string>
<string name="Kilogram">"Kilogram"</string>
<string name="kg">"kg"</string>
<string name="Kenyan">"Kenyan"</string>
<string name="kEdit">"KEEP EDITING"</string>
<string name="joinTG">"Join the Telegram group"</string>
<string name="Jewish">"Jewish"</string>
<string name="Japanese">"Japanese"</string>
<string name="Jamaican">"Jamaican"</string>
<string name="Italian">"Italian"</string>
<string name="it">"Item %1$s"</string>
<string name="Irish">"Irish"</string>
<string name="invFile">"Invalid file"</string>
<string name="intf">"Interface"</string>
<string name="inss">"Instructions"</string>
<string name="ings">"Ingredients"</string>
<string name="Indian">"Indian"</string>
<string name="in">"in"</string>
<string name="impSuc">"Import success"</string>
<string name="impip">"Import in progress"</string>
<string name="impInfo">"Supports full backups exported by this app"</string>
<string name="impFail">"Import failed"</string>
<string name="impBu">"Import data"</string>
<string name="hr">"hr"</string>
<string name="Healthy">"Healthy"</string>
<string name="guide">"User guide"</string>
<string name="grocery">"Grocery List"</string>
<string name="grid">"Grid"</string>
<string name="Greek">"Greek"</string>
<string name="Gram">"Gram"</string>
<string name="gh">"View on GitHub"</string>
<string name="German">"German"</string>
<string name="Gallon">"Gallon"</string>
<string name="gal">"gal"</string>
<string name="g">"g"</string>
<string name="fsList">"Your favourite recipes are listed here"</string>
<string name="French">"French"</string>
<string name="_Fluid_Ounce_bd10L">"Fluid Ounce"</string>
<string name="fltr">"Filter"</string>
<string name="_fl_oz_72kqu">"fl oz"</string>
<string name="_Filtered_recipes_Z1alhhu">"Filtered recipes"</string>
<string name="Filipino">"Filipino"</string>
<string name="favourites">"Favourites"</string>
<string name="expSuc">"Export success"</string>
<string name="expip">"Export in progress"</string>
<string name="expBu">"Export full backup"</string>
<string name="EnRecipes">"EnRecipes"</string>
<string name="English">"English"</string>
<string name="Egyptian">"Egyptian"</string>
<string name="editRec">"Edit recipe"</string>
<string name="Easy">"Easy"</string>
<string name="dsp">"dstspn"</string>
<string name="drop">"drop"</string>
<string name="dozen">"dozen"</string>
<string name="donate">"Donate"</string>
<string name="disc">"This recipe has unsaved changes. What would you like to do?"</string>
<string name="disBtn">"DISCARD"</string>
<string name="dinner">"Dinner"</string>
<string name="_Difficulty_level_cSL5d">"Difficulty level"</string>
<string name="detailed">"Detailed"</string>
<string name="Desserts">"Desserts"</string>
<string name="delRecsInfo">"You are about to permanently delete %1$s"</string>
<string name="delRecInfo">"You are about to permanently delete the recipe %1$s"</string>
<string name="dBtn">"DELETE"</string>
<string name="db">"Database"</string>
<string name="Dark">"Dark"</string>
<string name="Danish">"Danish"</string>
<string name="dAgo">"%1$s days ago"</string>
<string name="Cup">"Cup"</string>
<string name="cup">"cup"</string>
<string name="cui">"Cuisine"</string>
<string name="Created">"Created"</string>
<string name="cPic">"Crop photo"</string>
<string name="cookT">"Cooking time"</string>
<string name="conf">"Confirm"</string>
<string name="conBtn">"CONTINUE"</string>
<string name="cmbs">"Combinations"</string>
<string name="cm">"cm"</string>
<string name="clove">"clove"</string>
<string name="Chinese">"Chinese"</string>
<string name="Challenging">"Challenging"</string>
<string name="cBtn">"CANCEL"</string>
<string name="cat">"Category"</string>
<string name="buMod">"The backup file was modified elsewhere"</string>
<string name="buInfo">"Generates a ZIP file containing all your data that can be imported back"</string>
<string name="buInc">"Malformed or corrupt backup file"</string>
<string name="buFol">"Backup folder"</string>
<string name="buEmp">"The backup file is empty"</string>
<string name="British">"British"</string>
<string name="breakfast">"Breakfast"</string>
<string name="Breads">"Breads"</string>
<string name="Brazilian">"Brazilian"</string>
<string name="Black">"Black"</string>
<string name="Beverages">"Beverages"</string>
<string name="Barbecue">"Barbecue"</string>
<string name="_app_name_1k3Sbz">"EnRecipes"</string>
<string name="app_name">"EnRecipes"</string>
<string name="title_activity_kimera">"EnRecipes"</string>
<string name="allTs">"All Tags"</string>
<string name="allCuis">"All Cuisines"</string>
</resources>

View file

@ -322,6 +322,9 @@
<string name="aBtn">"AÑADIR"</string>
<string name="About">"Acerca de"</string>
<string name="aap">"Adjuntar una foto"</string>
<string name="sectRm">"Section removed"</string>
<string name="addSectBtn">"ADD SECTION"</string>
<string name="sect">"Section %1$s"</string>
<string name="esgbInfo">"Disable this option if you have any navigation issues"</string>
<string name="esgb">"Edge swipe to go back"</string>
<string name="ksavrInfo">"Prevents the screen from turning off while viewing a recipe"</string>

View file

@ -328,4 +328,7 @@
<string name="aBtn">"AJOUTER"</string>
<string name="About">"À propos"</string>
<string name="aap">"Joindre une photo"</string>
<string name="sectRm">"Section removed"</string>
<string name="addSectBtn">"ADD SECTION"</string>
<string name="sect">"Section %1$s"</string>
</resources>

View file

@ -328,4 +328,7 @@
<string name="aBtn">"AJOUTER"</string>
<string name="About">"À propos"</string>
<string name="aap">"Joindre une photo"</string>
<string name="sectRm">"Section removed"</string>
<string name="addSectBtn">"ADD SECTION"</string>
<string name="sect">"Section %1$s"</string>
</resources>

View file

@ -328,4 +328,7 @@
<string name="aBtn">"AJOUTER"</string>
<string name="About">"À propos"</string>
<string name="aap">"Joindre une photo"</string>
<string name="sectRm">"Section removed"</string>
<string name="addSectBtn">"ADD SECTION"</string>
<string name="sect">"Section %1$s"</string>
</resources>

View file

@ -1,5 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="sect">"Section %1$s"</string>
<string name="addSectBtn">"AJOUTER UNE SECTION"</string>
<string name="sectRm">"Section retiré"</string>
<string name="ksavrInfo">"Empêche lécran de séteindre durant la visualisation dune recette"</string>
<string name="esgb">"Balayer le bord pour revenir en arrière"</string>
<string name="esgbInfo">"Désactivez cette option si vous avez des problèmes de navigation"</string>
@ -91,7 +94,7 @@
<string name="sVwInfo">"Vous aide à choisir quoi cuisiner quand vous ne pouvez pas vous décider"</string>
<string name="sVw">"Secouez pour voir une recette au hasard"</string>
<string name="strAdd">"Commencez à ajouter vos recettes !"</string>
<string name="stp">"Étape"</string>
<string name="stp">"Étape %1$s"</string>
<string name="stick">"barre"</string>
<string name="stars">"Évaluation étoilée"</string>
<string name="sru">"Partager la recette en utilisant…"</string>
@ -221,7 +224,7 @@
<string name="Japanese">"japonaise"</string>
<string name="Jamaican">"jamaïcaine"</string>
<string name="Italian">"italienne"</string>
<string name="it">"Élément"</string>
<string name="it">"Élément %1$s"</string>
<string name="Irish">"irlandaise"</string>
<string name="invFile">"Fichier invalide"</string>
<string name="intf">"Interface"</string>

View file

@ -1,5 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="sect">"भाग %1$s"</string>
<string name="addSectBtn">"धारा जोड़ें"</string>
<string name="sectRm">"धारा हटा दिया गया"</string>
<string name="mnth">"महीना"</string>
<string name="wk">"सप्ताह"</string>
<string name="d">"दिन"</string>
@ -91,7 +94,7 @@
<string name="sVwInfo">"जब आप तय नहीं कर सकते तो आपको क्या खाना बनाना है, यह चुनने में मदद करता है"</string>
<string name="sVw">"यादृच्छिक नुस्खा देखने के लिए हिलाएं"</string>
<string name="strAdd">"अपने व्यंजनों को जोड़ना शुरू करें!"</string>
<string name="stp">"कदम"</string>
<string name="stp">"कदम %1$s"</string>
<string name="stick">"लाठी"</string>
<string name="stars">"स्टार रेटिंग"</string>
<string name="sru">"शेयर रेसिपी..."</string>
@ -221,7 +224,7 @@
<string name="Japanese">"जापानी"</string>
<string name="Jamaican">"जमैका"</string>
<string name="Italian">"इतालवी"</string>
<string name="it">"मद"</string>
<string name="it">"मद %1$s"</string>
<string name="Irish">"आयरिश"</string>
<string name="invFile">"अवैध फाइल"</string>
<string name="intf">"इंटरफेस"</string>

View file

@ -296,6 +296,9 @@
<string name="aBtn">"Tambah"</string>
<string name="About">"Tentang"</string>
<string name="aap">"Lampirkan foto"</string>
<string name="sectRm">"Section removed"</string>
<string name="addSectBtn">"ADD SECTION"</string>
<string name="sect">"Section %1$s"</string>
<string name="esgbInfo">"Disable this option if you have any navigation issues"</string>
<string name="esgb">"Edge swipe to go back"</string>
<string name="ksavrInfo">"Prevents the screen from turning off while viewing a recipe"</string>

View file

@ -328,4 +328,7 @@
<string name="aBtn">"AGGIUNGI"</string>
<string name="About">"Informazioni"</string>
<string name="aap">"Allega una foto"</string>
<string name="sectRm">"Section removed"</string>
<string name="addSectBtn">"ADD SECTION"</string>
<string name="sect">"Section %1$s"</string>
</resources>

View file

@ -275,6 +275,9 @@
<string name="aBtn">"追加"</string>
<string name="About">"アプリについて"</string>
<string name="aap">"写真を添付"</string>
<string name="sectRm">"Section removed"</string>
<string name="addSectBtn">"ADD SECTION"</string>
<string name="sect">"Section %1$s"</string>
<string name="esgbInfo">"Disable this option if you have any navigation issues"</string>
<string name="esgb">"Edge swipe to go back"</string>
<string name="ksavrInfo">"Prevents the screen from turning off while viewing a recipe"</string>

View file

@ -1,5 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="sect">"ഭാഗം %1$s"</string>
<string name="sectRm">"വിഭാഗം നീക്കംചെയ്തു"</string>
<string name="addSectBtn">"വിഭാഗം ചേർക്കുക"</string>
<string name="sec">"സെക്കൻഡ്"</string>
<string name="timer">"പാചക ടൈമർ"</string>
<string name="ntmr">"പുതിയ ടൈമർ"</string>
@ -91,7 +94,7 @@
<string name="sVwInfo">"നിങ്ങൾക്ക് തീരുമാനിക്കാൻ കഴിയാത്തപ്പോൾ എന്താണ് പാചകം ചെയ്യേണ്ടതെന്ന് തിരഞ്ഞെടുക്കാൻ നിങ്ങളെ സഹായിക്കുന്നു"</string>
<string name="sVw">"ക്രമരഹിതമായ പാചകക്കുറിപ്പ് കാണാൻ കുലുക്കുക"</string>
<string name="strAdd">"നിങ്ങളുടെ പാചകക്കുറിപ്പുകൾ ചേർക്കാൻ ആരംഭിക്കുക!"</string>
<string name="stp">"ഘട്ടം"</string>
<string name="stp">"ഘട്ടം %1$s"</string>
<string name="stick">"വടി"</string>
<string name="stars">"നക്ഷത്ര റേറ്റിംഗ്"</string>
<string name="sru">"പാചകക്കുറിപ്പ് പങ്കിടുക..."</string>
@ -221,7 +224,7 @@
<string name="Japanese">"ജാപ്പനീസ്"</string>
<string name="Jamaican">"ജമൈക്കൻ"</string>
<string name="Italian">"ഇറ്റാലിയൻ"</string>
<string name="it">"ഇനം"</string>
<string name="it">"ഇനം %1$s"</string>
<string name="Irish">"ഐറിഷ്"</string>
<string name="invFile">"അസാധുവായ ഫയൽ"</string>
<string name="intf">"ഇന്റർഫേസ്"</string>

View file

@ -288,6 +288,9 @@
<string name="aBtn">"Legg til"</string>
<string name="About">"Om"</string>
<string name="aap">"Legg ved et bilde"</string>
<string name="sectRm">"Section removed"</string>
<string name="addSectBtn">"ADD SECTION"</string>
<string name="sect">"Section %1$s"</string>
<string name="esgbInfo">"Disable this option if you have any navigation issues"</string>
<string name="esgb">"Edge swipe to go back"</string>
<string name="ksavrInfo">"Prevents the screen from turning off while viewing a recipe"</string>

View file

@ -1,5 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="sectRm">"De sectie is verwijderd"</string>
<string name="sect">"Sectie %1$s"</string>
<string name="addSectBtn">"SECTIE TOEVOEGEN"</string>
<string name="ksavr">"Scherm niet uitschakelen tijdens bekijken van recept"</string>
<string name="ksavrInfo">"Voorkomt dat het scherm wordt uitgeschakeld tijdens het bekijken van een recept"</string>
<string name="esgb">"Vegen vanaf schermrand om terug te gaan"</string>
@ -91,7 +94,7 @@
<string name="sVwInfo">"Handig voor als je even niet weet wat je wilt maken"</string>
<string name="sVw">"Schudden om willekeurig recept te tonen"</string>
<string name="strAdd">"Voeg je recepten toe!"</string>
<string name="stp">"Stap"</string>
<string name="stp">"Stap %1$s"</string>
<string name="stick">"stokje"</string>
<string name="stars">"Waardering"</string>
<string name="sru">"Recept delen via…"</string>
@ -221,7 +224,7 @@
<string name="Japanese">"Japans"</string>
<string name="Jamaican">"Jamaicaans"</string>
<string name="Italian">"Italiaans"</string>
<string name="it">"Item"</string>
<string name="it">"Item %1$s"</string>
<string name="Irish">"Iers"</string>
<string name="invFile">"Ongeldig bestand"</string>
<string name="intf">"Uiterlijk"</string>

View file

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="ksavr">"Manter tela ligada ao ver receitas"</string>
<string name="add">"Adicionar"</string>
<string name="rstBtn">"REINICIAR"</string>
<string name="gtD">"Ir à data"</string>
@ -324,8 +325,10 @@
<string name="aD">"Tudo feito!"</string>
<string name="aBtn">"ADICIONAR"</string>
<string name="About">"Sobre"</string>
<string name="sectRm">"Section removed"</string>
<string name="addSectBtn">"ADD SECTION"</string>
<string name="sect">"Section %1$s"</string>
<string name="esgbInfo">"Disable this option if you have any navigation issues"</string>
<string name="esgb">"Edge swipe to go back"</string>
<string name="ksavrInfo">"Prevents the screen from turning off while viewing a recipe"</string>
<string name="ksavr">"Keep screen awake while viewing recipe"</string>
</resources>

View file

@ -1,5 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="sect">"Secção %1$s"</string>
<string name="addSectBtn">"ADICIONAR SECÇÃO"</string>
<string name="ksavr">"Manter ecrã ligado ao ver receitas"</string>
<string name="ksavrInfo">"Impede que o ecrã desligue ao ver uma receita"</string>
<string name="esgbInfo">"Desative esta opção se tiver problemas ao navegar"</string>
<string name="esgb">"Deslizar para a borda para voltar"</string>
<string name="add">"Adicionar"</string>
<string name="rstBtn">"REINICIAR"</string>
<string name="oAP">"%1$s a decorrer, %2$s em pausa"</string>
@ -82,7 +88,7 @@
<string name="inss">"Instruções"</string>
<string name="intf">"Interface"</string>
<string name="invFile">"Ficheiro inválido"</string>
<string name="it">"Item"</string>
<string name="it">"Item %1$s"</string>
<string name="joinTG">"Junte-se ao grupo no Telegram"</string>
<string name="kEdit">"CONTINUAR A EDITAR"</string>
<string name="lang">"Idioma"</string>
@ -122,7 +128,7 @@
<string name="srt">"Ordenar"</string>
<string name="sru">"Partilhar receita usando..."</string>
<string name="stars">"Classificação por estrelas"</string>
<string name="stp">"Etapa"</string>
<string name="stp">"Etapa %1$s"</string>
<string name="trySer">"PROCURAR EM TODAS AS RECEITAS?"</string>
<string name="sysDefB">"Padrão do sistema + preto"</string>
<string name="rec">"Receita"</string>
@ -324,8 +330,5 @@
<string name="American">"Americana"</string>
<string name="About">"Sobre"</string>
<string name="aap">"Anexar uma fotografia"</string>
<string name="esgbInfo">"Disable this option if you have any navigation issues"</string>
<string name="esgb">"Edge swipe to go back"</string>
<string name="ksavrInfo">"Prevents the screen from turning off while viewing a recipe"</string>
<string name="ksavr">"Keep screen awake while viewing recipe"</string>
<string name="sectRm">"Section removed"</string>
</resources>

View file

@ -296,6 +296,9 @@
<string name="aBtn">"ДОБАВИТЬ"</string>
<string name="About">"О приложении"</string>
<string name="aap">"Прикрепить фото"</string>
<string name="sectRm">"Section removed"</string>
<string name="addSectBtn">"ADD SECTION"</string>
<string name="sect">"Section %1$s"</string>
<string name="esgbInfo">"Disable this option if you have any navigation issues"</string>
<string name="esgb">"Edge swipe to go back"</string>
<string name="ksavrInfo">"Prevents the screen from turning off while viewing a recipe"</string>

View file

@ -1,5 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="sect">"பிரிவு %1$s"</string>
<string name="addSectBtn">"பிரிவைச் சேர்"</string>
<string name="sectRm">"பிரிவு நீக்கப்பட்டது"</string>
<string name="add">"சேர்"</string>
<string name="rstBtn">"மீட்டமை"</string>
<string name="ksavr">"சமையல் குறிப்பு பார்க்கும் போது திரையை விழித்திரு"</string>
@ -52,7 +55,7 @@
<string name="hour">"மணி"</string>
<string name="hours">"மணி"</string>
<string name="seconds">"வினாடிகள்"</string>
<string name="tmrRm">"டைமர் அகற்றப்பட்டது"</string>
<string name="tmrRm">"டைமர் நீக்கப்பட்டது"</string>
<string name="notifSetg">"அறிவிப்பு அமைப்புகள்"</string>
<string name="sysDefB">"அமைப்பு இயல்புநிலை + கருப்பு"</string>
<string name="buto">"%1$s இல் காப்புப் பிரதி எடுக்கப்பட்டது"</string>
@ -91,7 +94,7 @@
<string name="sVwInfo">"நீங்கள் தீர்மானிக்க முடியாதபோது என்ன சமைக்கலாம் என்பதைத் தேர்வுசெய்ய உதவும்"</string>
<string name="sVw">"சாதனத்தை அசைத்து சீரற்ற சமையல் குறிப்பை காண்க"</string>
<string name="strAdd">"உங்கள் சமையல் குறிப்புகளைச் சேர்க்கத் தொடங்குங்கள்!"</string>
<string name="stp">"செய்முறை"</string>
<string name="stp">"செய்முறை %1$s"</string>
<string name="stick">"குச்சி"</string>
<string name="stars">"நட்சத்திர மதிப்பீடு"</string>
<string name="sru">"சமையல் குறிப்பை பகிரவும்..."</string>
@ -221,7 +224,7 @@
<string name="Japanese">"ஜப்பானிய"</string>
<string name="Jamaican">"ஜமைக்கா"</string>
<string name="Italian">"இத்தாலிய"</string>
<string name="it">"பொருள்"</string>
<string name="it">"பொருள் %1$s"</string>
<string name="Irish">"ஐரிஷ்"</string>
<string name="invFile">"தவறான கோப்பு"</string>
<string name="intf">"இடைமுகம்"</string>

View file

@ -1,5 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="sect">"విభాగం %1$s"</string>
<string name="addSectBtn">"విభాగం జోడించండి"</string>
<string name="sectRm">"విభాగం తొలగించబడింది"</string>
<string name="mnth">"నెల"</string>
<string name="wk">"వారం"</string>
<string name="d">"రోజు"</string>
@ -91,7 +94,7 @@
<string name="sVwInfo">"మీరు నిర్ణయించలేనప్పుడు ఏమి ఉడికించాలో ఎంచుకోవడానికి మీకు సహాయపడుతుంది"</string>
<string name="sVw">"యాదృచ్ఛిక రెసిపీని చూడటానికి షేక్ చేయండి"</string>
<string name="strAdd">"మీ వంటకాలను జోడించడం ప్రారంభించండి!"</string>
<string name="stp">"దశ"</string>
<string name="stp">"దశ %1$s"</string>
<string name="stick">"కర్ర"</string>
<string name="stars">"స్టార్ రేటింగ్"</string>
<string name="sru">"రెసిపీని భాగస్వామ్యం చేయండి ..."</string>
@ -221,7 +224,7 @@
<string name="Japanese">"జపనీస్"</string>
<string name="Jamaican">"జమైకా"</string>
<string name="Italian">"ఇటాలియన్"</string>
<string name="it">"అంశం"</string>
<string name="it">"అంశం %1$s"</string>
<string name="Irish">"ఐరిష్"</string>
<string name="invFile">"చెల్లుబాటులోలేని ఫైలు"</string>
<string name="intf">"ఇంటర్ఫేస్"</string>

View file

@ -1,5 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="sectRm">"Section removed"</string>
<string name="addSectBtn">"ADD SECTION"</string>
<string name="sect">"Section %1$s"</string>
<string name="esgbInfo">"Disable this option if you have any navigation issues"</string>
<string name="esgb">"Edge swipe to go back"</string>
<string name="ksavrInfo">"Prevents the screen from turning off while viewing a recipe"</string>
@ -90,7 +93,7 @@
<string name="sVwInfo">"Helps you choose what to cook when you can\'t decide"</string>
<string name="sVw">"Shake to view random recipe"</string>
<string name="strAdd">"Start adding your recipes!"</string>
<string name="stp">"Step"</string>
<string name="stp">"Step %1$s"</string>
<string name="stick">"stick"</string>
<string name="stars">"Star rating"</string>
<string name="sru">"Share recipe using..."</string>
@ -221,7 +224,7 @@
<string name="Japanese">"Japanese"</string>
<string name="Jamaican">"Jamaican"</string>
<string name="Italian">"Italian"</string>
<string name="it">"Item"</string>
<string name="it">"Item %1$s"</string>
<string name="Irish">"Irish"</string>
<string name="invFile">"Invalid file"</string>
<string name="intf">"Interface"</string>

View file

@ -79,8 +79,6 @@ export function getRecipePhoto() {
export function copyPhotoToCache(src: string, dest: string) {
const ContentResolver = Application.android.nativeApp.getContentResolver()
const isURI = src.includes('content://')
console.log(src, dest, isURI)
return new Promise((resolve) => {
if (isURI) {
const uri = new android.net.Uri.parse(src)

View file

@ -575,6 +575,40 @@ export default new Vuex.Store({
f.match(/tags|ingredients|instructions|combinations|notes/) &&
(e[f] = JSON.parse(e[f]))
)
if (
e.ingredients.length &&
!e.ingredients[0].hasOwnProperty('type')
) {
e.ingredients = e.ingredients.map((e) => {
return {
id: utils.getRandomID(1),
type: 1,
quantity: e.quantity,
unit: e.unit,
value: e.item,
}
})
}
if (
e.instructions.length &&
!e.instructions[0].hasOwnProperty('type')
) {
e.instructions = e.instructions.map((e) => {
return {
id: utils.getRandomID(1),
type: 1,
value: e,
}
})
}
if (e.notes.length && !e.notes[0].hasOwnProperty('value')) {
e.notes = e.notes.map((e) => {
return {
id: utils.getRandomID(1),
value: e,
}
})
}
state.recipes.push(e)
})
})
@ -610,6 +644,40 @@ export default new Vuex.Store({
function getTime(d) {
return new Date(d).getTime()
}
if (
r.ingredients.length &&
!r.ingredients[0].hasOwnProperty('type')
) {
r.ingredients = r.ingredients.map((e) => {
return {
id: utils.getRandomID(1),
type: 1,
quantity: e.quantity,
unit: e.unit,
value: e.item,
}
})
}
if (
r.instructions.length &&
!r.instructions[0].hasOwnProperty('type')
) {
r.instructions = r.instructions.map((e) => {
return {
id: utils.getRandomID(1),
type: 1,
value: e,
}
})
}
if (r.notes.length && !r.notes[0].hasOwnProperty('type')) {
r.notes = r.notes.map((e) => {
return {
id: utils.getRandomID(1),
value: e,
}
})
}
r.lastTried = getTime(r.lastTried)
r.lastModified = getTime(r.lastModified)
r.created = getTime(r.created)
@ -718,7 +786,48 @@ export default new Vuex.Store({
let localRecipesIDs: string[], partition: any[]
let imported = 0
let updated = 0
function getUpdatedData(data: any[]) {
return data.map((recipe) => {
let r = Object.assign({}, recipe)
if (
r.ingredients.length &&
!r.ingredients[0].hasOwnProperty('type')
) {
r.ingredients = r.ingredients.map((e) => {
return {
id: utils.getRandomID(1),
type: 1,
quantity: e.quantity,
unit: e.unit,
value: e.item,
}
})
}
if (
r.instructions.length &&
!r.instructions[0].hasOwnProperty('type')
) {
r.instructions = r.instructions.map((e) => {
return {
id: utils.getRandomID(1),
type: 1,
value: e,
}
})
}
if (r.notes.length && !r.notes[0].hasOwnProperty('value')) {
r.notes = r.notes.map((e) => {
return {
id: utils.getRandomID(1),
value: e,
}
})
}
return r
})
}
function createDocuments(data: any[]) {
data = getUpdatedData(data)
data.forEach((r) => {
const cols = Object.keys(r).join(', ')
const placeholder = Object.keys(r)
@ -738,6 +847,7 @@ export default new Vuex.Store({
})
}
function updateDocuments(data: any[]) {
data = getUpdatedData(data)
data.forEach((r) => {
let recipeIndex = state.recipes
.map((e, i) => {

210
package-lock.json generated
View file

@ -55,9 +55,9 @@
}
},
"node_modules/@babel/compat-data": {
"version": "7.14.5",
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.5.tgz",
"integrity": "sha512-kixrYn4JwfAVPa0f2yfzc2AWti6WRRyO3XjWW5PJAvtE11qhSayrrcrEnee05KAtNaPC+EwehE8Qt1UedEVB8w==",
"version": "7.14.7",
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.7.tgz",
"integrity": "sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw==",
"dev": true,
"engines": {
"node": ">=6.9.0"
@ -182,9 +182,9 @@
}
},
"node_modules/@babel/helper-member-expression-to-functions": {
"version": "7.14.5",
"resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.5.tgz",
"integrity": "sha512-UxUeEYPrqH1Q/k0yRku1JE7dyfyehNwT6SVkMHvYvPDv4+uu627VXBckVj891BO8ruKBkiDoGnZf4qPDD8abDQ==",
"version": "7.14.7",
"resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz",
"integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==",
"dev": true,
"dependencies": {
"@babel/types": "^7.14.5"
@ -384,9 +384,9 @@
}
},
"node_modules/@babel/parser": {
"version": "7.14.6",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.6.tgz",
"integrity": "sha512-oG0ej7efjEXxb4UgE+klVx+3j4MVo+A2vCzm7OUN4CLo6WhQ+vSOD2yJ8m7B+DghObxtLxt3EfgMWpq+AsWehQ==",
"version": "7.14.7",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz",
"integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==",
"dev": true,
"bin": {
"parser": "bin/babel-parser.js"
@ -410,9 +410,9 @@
}
},
"node_modules/@babel/traverse": {
"version": "7.14.5",
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.5.tgz",
"integrity": "sha512-G3BiS15vevepdmFqmUc9X+64y0viZYygubAMO8SvBmKARuF6CPSZtH4Ng9vi/lrWlZFGe3FWdXNy835akH8Glg==",
"version": "7.14.7",
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz",
"integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==",
"dev": true,
"dependencies": {
"@babel/code-frame": "^7.14.5",
@ -420,7 +420,7 @@
"@babel/helper-function-name": "^7.14.5",
"@babel/helper-hoist-variables": "^7.14.5",
"@babel/helper-split-export-declaration": "^7.14.5",
"@babel/parser": "^7.14.5",
"@babel/parser": "^7.14.7",
"@babel/types": "^7.14.5",
"debug": "^4.1.0",
"globals": "^11.1.0"
@ -697,9 +697,9 @@
"dev": true
},
"node_modules/@types/node": {
"version": "15.12.4",
"resolved": "https://registry.npmjs.org/@types/node/-/node-15.12.4.tgz",
"integrity": "sha512-zrNj1+yqYF4WskCMOHwN+w9iuD12+dGm0rQ35HLl9/Ouuq52cEtd0CH9qMgrdNmi5ejC1/V7vKEXYubB+65DkA==",
"version": "15.12.5",
"resolved": "https://registry.npmjs.org/@types/node/-/node-15.12.5.tgz",
"integrity": "sha512-se3yX7UHv5Bscf8f1ERKvQOD6sTyycH3hdaoozvaLxgUiY5lIGEeH37AD0G0Qi9kPqihPn0HOfd2yaIEN9VwEg==",
"dev": true
},
"node_modules/@types/parse-json": {
@ -1023,9 +1023,9 @@
"dev": true
},
"node_modules/acorn": {
"version": "8.4.0",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.0.tgz",
"integrity": "sha512-ULr0LDaEqQrMFGyQ3bhJkLsbtrQ8QibAseGZeaSUiT/6zb9IvIkomWHJIvgvwad+hinRAgsI51JcWk2yvwyL+w==",
"version": "8.4.1",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz",
"integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==",
"dev": true,
"bin": {
"acorn": "bin/acorn"
@ -1411,9 +1411,9 @@
}
},
"node_modules/caniuse-lite": {
"version": "1.0.30001239",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001239.tgz",
"integrity": "sha512-cyBkXJDMeI4wthy8xJ2FvDU6+0dtcZSJW3voUF8+e9f1bBeuvyZfc3PNbkOETyhbR+dGCPzn9E7MA3iwzusOhQ==",
"version": "1.0.30001240",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001240.tgz",
"integrity": "sha512-nb8mDzfMdxBDN7ZKx8chWafAdBp5DAAlpWvNyUGe5tcDWd838zpzDN3Rah9cjCqhfOKkrvx40G2SDtP0qiWX/w==",
"dev": true,
"funding": {
"type": "opencollective",
@ -1590,9 +1590,9 @@
}
},
"node_modules/copy-webpack-plugin": {
"version": "9.0.0",
"resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-9.0.0.tgz",
"integrity": "sha512-k8UB2jLIb1Jip2nZbCz83T/XfhfjX6mB1yLJNYKrpYi7FQimfOoFv/0//iT6HV1K8FwUB5yUbCcnpLebJXJTug==",
"version": "9.0.1",
"resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-9.0.1.tgz",
"integrity": "sha512-14gHKKdYIxF84jCEgPgYXCPpldbwpxxLbCmA7LReY7gvbaT555DgeBWBgBZM116tv/fO6RRJrsivBqRyRlukhw==",
"dev": true,
"dependencies": {
"fast-glob": "^3.2.5",
@ -1601,7 +1601,7 @@
"normalize-path": "^3.0.0",
"p-limit": "^3.1.0",
"schema-utils": "^3.0.0",
"serialize-javascript": "^5.0.1"
"serialize-javascript": "^6.0.0"
},
"engines": {
"node": ">= 12.13.0"
@ -1904,9 +1904,9 @@
"dev": true
},
"node_modules/electron-to-chromium": {
"version": "1.3.752",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.752.tgz",
"integrity": "sha512-2Tg+7jSl3oPxgsBsWKh5H83QazTkmWG/cnNwJplmyZc7KcN61+I10oUgaXSVk/NwfvN3BdkKDR4FYuRBQQ2v0A==",
"version": "1.3.759",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.759.tgz",
"integrity": "sha512-nM76xH0t2FBH5iMEZDVc3S/qbdKjGH7TThezxC8k1Q7w7WHvIAyJh8lAe2UamGfdRqBTjHfPDn82LJ0ksCiB9g==",
"dev": true
},
"node_modules/emoji-regex": {
@ -1977,9 +1977,9 @@
}
},
"node_modules/es-module-lexer": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.4.1.tgz",
"integrity": "sha512-ooYciCUtfw6/d2w56UVeqHPcoCFAiJdz5XOkYpv/Txl1HMUozpXjz/2RIQgqwKdXNDPSF1W7mJCFse3G+HDyAA==",
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.6.0.tgz",
"integrity": "sha512-f8kcHX1ArhllUtb/wVSyvygoKCznIjnxhLxy7TCvIiMdT7fL4ZDTIKaadMe6eLvOXg6Wk02UeoFgUoZ2EKZZUA==",
"dev": true
},
"node_modules/escalade": {
@ -2082,17 +2082,16 @@
"dev": true
},
"node_modules/fast-glob": {
"version": "3.2.5",
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz",
"integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==",
"version": "3.2.6",
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.6.tgz",
"integrity": "sha512-GnLuqj/pvQ7pX8/L4J84nijv6sAnlwvSDpMkJi9i7nPmPxGtRPkBSStfvDW5l6nMdX9VWe+pkKWFTgD+vF2QSQ==",
"dev": true,
"dependencies": {
"@nodelib/fs.stat": "^2.0.2",
"@nodelib/fs.walk": "^1.2.3",
"glob-parent": "^5.1.0",
"glob-parent": "^5.1.2",
"merge2": "^1.3.0",
"micromatch": "^4.0.2",
"picomatch": "^2.2.1"
"micromatch": "^4.0.4"
},
"engines": {
"node": ">=8"
@ -3832,9 +3831,9 @@
}
},
"node_modules/serialize-javascript": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz",
"integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==",
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz",
"integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==",
"dev": true,
"dependencies": {
"randombytes": "^2.1.0"
@ -4064,15 +4063,15 @@
}
},
"node_modules/terser-webpack-plugin": {
"version": "5.1.3",
"resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.3.tgz",
"integrity": "sha512-cxGbMqr6+A2hrIB5ehFIF+F/iST5ZOxvOmy9zih9ySbP1C2oEWQSOUS+2SNBTjzx5xLKO4xnod9eywdfq1Nb9A==",
"version": "5.1.4",
"resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.4.tgz",
"integrity": "sha512-C2WkFwstHDhVEmsmlCxrXUtVklS+Ir1A7twrYzrDrQQOIMOaVAYykaoo/Aq1K0QRkMoY2hhvDQY1cm4jnIMFwA==",
"dev": true,
"dependencies": {
"jest-worker": "^27.0.2",
"p-limit": "^3.1.0",
"schema-utils": "^3.0.0",
"serialize-javascript": "^5.0.1",
"serialize-javascript": "^6.0.0",
"source-map": "^0.6.1",
"terser": "^5.7.0"
},
@ -4432,9 +4431,9 @@
}
},
"node_modules/webpack": {
"version": "5.39.1",
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.39.1.tgz",
"integrity": "sha512-ulOvoNCh2PvTUa+zbpRuEb1VPeQnhxpnHleMPVVCq3QqnaFogjsLyps+o42OviQFoaGtTQYrUqDXu1QNkvUPzw==",
"version": "5.40.0",
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.40.0.tgz",
"integrity": "sha512-c7f5e/WWrxXWUzQqTBg54vBs5RgcAgpvKE4F4VegVgfo4x660ZxYUF2/hpMkZUnLjgytVTitjeXaN4IPlXCGIw==",
"dev": true,
"dependencies": {
"@types/eslint-scope": "^3.7.0",
@ -4446,7 +4445,7 @@
"browserslist": "^4.14.5",
"chrome-trace-event": "^1.0.2",
"enhanced-resolve": "^5.8.0",
"es-module-lexer": "^0.4.0",
"es-module-lexer": "^0.6.0",
"eslint-scope": "5.1.1",
"events": "^3.2.0",
"glob-to-regexp": "^0.4.1",
@ -4457,7 +4456,7 @@
"neo-async": "^2.6.2",
"schema-utils": "^3.0.0",
"tapable": "^2.1.1",
"terser-webpack-plugin": "^5.1.1",
"terser-webpack-plugin": "^5.1.3",
"watchpack": "^2.2.0",
"webpack-sources": "^2.3.0"
},
@ -4766,9 +4765,9 @@
}
},
"node_modules/yargs-parser": {
"version": "20.2.7",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.7.tgz",
"integrity": "sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw==",
"version": "20.2.9",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
"integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
"dev": true,
"engines": {
"node": ">=10"
@ -4814,9 +4813,9 @@
}
},
"@babel/compat-data": {
"version": "7.14.5",
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.5.tgz",
"integrity": "sha512-kixrYn4JwfAVPa0f2yfzc2AWti6WRRyO3XjWW5PJAvtE11qhSayrrcrEnee05KAtNaPC+EwehE8Qt1UedEVB8w==",
"version": "7.14.7",
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.7.tgz",
"integrity": "sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw==",
"dev": true
},
"@babel/core": {
@ -4911,9 +4910,9 @@
}
},
"@babel/helper-member-expression-to-functions": {
"version": "7.14.5",
"resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.5.tgz",
"integrity": "sha512-UxUeEYPrqH1Q/k0yRku1JE7dyfyehNwT6SVkMHvYvPDv4+uu627VXBckVj891BO8ruKBkiDoGnZf4qPDD8abDQ==",
"version": "7.14.7",
"resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz",
"integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==",
"dev": true,
"requires": {
"@babel/types": "^7.14.5"
@ -5070,9 +5069,9 @@
}
},
"@babel/parser": {
"version": "7.14.6",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.6.tgz",
"integrity": "sha512-oG0ej7efjEXxb4UgE+klVx+3j4MVo+A2vCzm7OUN4CLo6WhQ+vSOD2yJ8m7B+DghObxtLxt3EfgMWpq+AsWehQ==",
"version": "7.14.7",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz",
"integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==",
"dev": true
},
"@babel/template": {
@ -5087,9 +5086,9 @@
}
},
"@babel/traverse": {
"version": "7.14.5",
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.5.tgz",
"integrity": "sha512-G3BiS15vevepdmFqmUc9X+64y0viZYygubAMO8SvBmKARuF6CPSZtH4Ng9vi/lrWlZFGe3FWdXNy835akH8Glg==",
"version": "7.14.7",
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz",
"integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.14.5",
@ -5097,7 +5096,7 @@
"@babel/helper-function-name": "^7.14.5",
"@babel/helper-hoist-variables": "^7.14.5",
"@babel/helper-split-export-declaration": "^7.14.5",
"@babel/parser": "^7.14.5",
"@babel/parser": "^7.14.7",
"@babel/types": "^7.14.5",
"debug": "^4.1.0",
"globals": "^11.1.0"
@ -5310,9 +5309,9 @@
"dev": true
},
"@types/node": {
"version": "15.12.4",
"resolved": "https://registry.npmjs.org/@types/node/-/node-15.12.4.tgz",
"integrity": "sha512-zrNj1+yqYF4WskCMOHwN+w9iuD12+dGm0rQ35HLl9/Ouuq52cEtd0CH9qMgrdNmi5ejC1/V7vKEXYubB+65DkA==",
"version": "15.12.5",
"resolved": "https://registry.npmjs.org/@types/node/-/node-15.12.5.tgz",
"integrity": "sha512-se3yX7UHv5Bscf8f1ERKvQOD6sTyycH3hdaoozvaLxgUiY5lIGEeH37AD0G0Qi9kPqihPn0HOfd2yaIEN9VwEg==",
"dev": true
},
"@types/parse-json": {
@ -5598,9 +5597,9 @@
"dev": true
},
"acorn": {
"version": "8.4.0",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.0.tgz",
"integrity": "sha512-ULr0LDaEqQrMFGyQ3bhJkLsbtrQ8QibAseGZeaSUiT/6zb9IvIkomWHJIvgvwad+hinRAgsI51JcWk2yvwyL+w==",
"version": "8.4.1",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz",
"integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==",
"dev": true
},
"acorn-class-fields": {
@ -5857,9 +5856,9 @@
"dev": true
},
"caniuse-lite": {
"version": "1.0.30001239",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001239.tgz",
"integrity": "sha512-cyBkXJDMeI4wthy8xJ2FvDU6+0dtcZSJW3voUF8+e9f1bBeuvyZfc3PNbkOETyhbR+dGCPzn9E7MA3iwzusOhQ==",
"version": "1.0.30001240",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001240.tgz",
"integrity": "sha512-nb8mDzfMdxBDN7ZKx8chWafAdBp5DAAlpWvNyUGe5tcDWd838zpzDN3Rah9cjCqhfOKkrvx40G2SDtP0qiWX/w==",
"dev": true
},
"chalk": {
@ -5998,9 +5997,9 @@
}
},
"copy-webpack-plugin": {
"version": "9.0.0",
"resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-9.0.0.tgz",
"integrity": "sha512-k8UB2jLIb1Jip2nZbCz83T/XfhfjX6mB1yLJNYKrpYi7FQimfOoFv/0//iT6HV1K8FwUB5yUbCcnpLebJXJTug==",
"version": "9.0.1",
"resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-9.0.1.tgz",
"integrity": "sha512-14gHKKdYIxF84jCEgPgYXCPpldbwpxxLbCmA7LReY7gvbaT555DgeBWBgBZM116tv/fO6RRJrsivBqRyRlukhw==",
"dev": true,
"requires": {
"fast-glob": "^3.2.5",
@ -6009,7 +6008,7 @@
"normalize-path": "^3.0.0",
"p-limit": "^3.1.0",
"schema-utils": "^3.0.0",
"serialize-javascript": "^5.0.1"
"serialize-javascript": "^6.0.0"
},
"dependencies": {
"schema-utils": {
@ -6227,9 +6226,9 @@
"dev": true
},
"electron-to-chromium": {
"version": "1.3.752",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.752.tgz",
"integrity": "sha512-2Tg+7jSl3oPxgsBsWKh5H83QazTkmWG/cnNwJplmyZc7KcN61+I10oUgaXSVk/NwfvN3BdkKDR4FYuRBQQ2v0A==",
"version": "1.3.759",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.759.tgz",
"integrity": "sha512-nM76xH0t2FBH5iMEZDVc3S/qbdKjGH7TThezxC8k1Q7w7WHvIAyJh8lAe2UamGfdRqBTjHfPDn82LJ0ksCiB9g==",
"dev": true
},
"emoji-regex": {
@ -6287,9 +6286,9 @@
}
},
"es-module-lexer": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.4.1.tgz",
"integrity": "sha512-ooYciCUtfw6/d2w56UVeqHPcoCFAiJdz5XOkYpv/Txl1HMUozpXjz/2RIQgqwKdXNDPSF1W7mJCFse3G+HDyAA==",
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.6.0.tgz",
"integrity": "sha512-f8kcHX1ArhllUtb/wVSyvygoKCznIjnxhLxy7TCvIiMdT7fL4ZDTIKaadMe6eLvOXg6Wk02UeoFgUoZ2EKZZUA==",
"dev": true
},
"escalade": {
@ -6367,17 +6366,16 @@
"dev": true
},
"fast-glob": {
"version": "3.2.5",
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz",
"integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==",
"version": "3.2.6",
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.6.tgz",
"integrity": "sha512-GnLuqj/pvQ7pX8/L4J84nijv6sAnlwvSDpMkJi9i7nPmPxGtRPkBSStfvDW5l6nMdX9VWe+pkKWFTgD+vF2QSQ==",
"dev": true,
"requires": {
"@nodelib/fs.stat": "^2.0.2",
"@nodelib/fs.walk": "^1.2.3",
"glob-parent": "^5.1.0",
"glob-parent": "^5.1.2",
"merge2": "^1.3.0",
"micromatch": "^4.0.2",
"picomatch": "^2.2.1"
"micromatch": "^4.0.4"
},
"dependencies": {
"glob-parent": {
@ -7641,9 +7639,9 @@
"dev": true
},
"serialize-javascript": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz",
"integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==",
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz",
"integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==",
"dev": true,
"requires": {
"randombytes": "^2.1.0"
@ -7832,15 +7830,15 @@
}
},
"terser-webpack-plugin": {
"version": "5.1.3",
"resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.3.tgz",
"integrity": "sha512-cxGbMqr6+A2hrIB5ehFIF+F/iST5ZOxvOmy9zih9ySbP1C2oEWQSOUS+2SNBTjzx5xLKO4xnod9eywdfq1Nb9A==",
"version": "5.1.4",
"resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.4.tgz",
"integrity": "sha512-C2WkFwstHDhVEmsmlCxrXUtVklS+Ir1A7twrYzrDrQQOIMOaVAYykaoo/Aq1K0QRkMoY2hhvDQY1cm4jnIMFwA==",
"dev": true,
"requires": {
"jest-worker": "^27.0.2",
"p-limit": "^3.1.0",
"schema-utils": "^3.0.0",
"serialize-javascript": "^5.0.1",
"serialize-javascript": "^6.0.0",
"source-map": "^0.6.1",
"terser": "^5.7.0"
},
@ -8099,9 +8097,9 @@
}
},
"webpack": {
"version": "5.39.1",
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.39.1.tgz",
"integrity": "sha512-ulOvoNCh2PvTUa+zbpRuEb1VPeQnhxpnHleMPVVCq3QqnaFogjsLyps+o42OviQFoaGtTQYrUqDXu1QNkvUPzw==",
"version": "5.40.0",
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.40.0.tgz",
"integrity": "sha512-c7f5e/WWrxXWUzQqTBg54vBs5RgcAgpvKE4F4VegVgfo4x660ZxYUF2/hpMkZUnLjgytVTitjeXaN4IPlXCGIw==",
"dev": true,
"requires": {
"@types/eslint-scope": "^3.7.0",
@ -8113,7 +8111,7 @@
"browserslist": "^4.14.5",
"chrome-trace-event": "^1.0.2",
"enhanced-resolve": "^5.8.0",
"es-module-lexer": "^0.4.0",
"es-module-lexer": "^0.6.0",
"eslint-scope": "5.1.1",
"events": "^3.2.0",
"glob-to-regexp": "^0.4.1",
@ -8124,7 +8122,7 @@
"neo-async": "^2.6.2",
"schema-utils": "^3.0.0",
"tapable": "^2.1.1",
"terser-webpack-plugin": "^5.1.1",
"terser-webpack-plugin": "^5.1.3",
"watchpack": "^2.2.0",
"webpack-sources": "^2.3.0"
},
@ -8327,9 +8325,9 @@
}
},
"yargs-parser": {
"version": "20.2.7",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.7.tgz",
"integrity": "sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw==",
"version": "20.2.9",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
"integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
"dev": true
},
"yn": {