diff --git a/app/components/EnRecipes.vue b/app/components/EnRecipes.vue
index b44e1d34..6065279e 100644
--- a/app/components/EnRecipes.vue
+++ b/app/components/EnRecipes.vue
@@ -537,9 +537,8 @@ export default {
return [{}, {}].concat(this.filteredRecipes);
},
noResultFor() {
- if (this.filterFavourites) return "noRecsInFavs";
- if (this.filterTrylater) return "noRecsInTL";
- if (this.selectedCuisine) return "noRecsInFtr";
+ if (this.filterFavourites || this.filterTrylater || this.selectedCuisine)
+ return "noRecsInL";
return "noRecs";
},
imgWidth() {
@@ -737,12 +736,11 @@ export default {
deleteRecipe(id) {
this.deletionDialogActive = true;
let index = this.recipes.findIndex((e) => e.id === id);
+ let recipeTitle = `"${this.recipes[index].title}"`;
this.$showModal(ConfirmDialog, {
props: {
title: localize("conf"),
- description: `${localize("delRecInfo")} "${
- this.recipes[index].title
- }"`,
+ description: `${localize("delRecInfo", recipeTitle)}`,
cancelButtonText: "cBtn",
okButtonText: "dBtn",
},
@@ -760,12 +758,11 @@ export default {
},
deleteRecipes(idsArr) {
this.deletionDialogActive = true;
+ let selectionCount = `${this.selection.length} ${localize("recs")}`;
this.$showModal(ConfirmDialog, {
props: {
title: localize("conf"),
- description: `${localize("delRecsInfo")} ${
- this.selection.length
- } ${localize("recs")}`,
+ description: `${localize("delRecsInfo", selectionCount)}`,
cancelButtonText: "cBtn",
okButtonText: "dBtn",
},
diff --git a/app/components/ViewRecipe.vue b/app/components/ViewRecipe.vue
index 8e2f0fad..a501fbc6 100644
--- a/app/components/ViewRecipe.vue
+++ b/app/components/ViewRecipe.vue
@@ -452,21 +452,21 @@ export default {
let dayDiff = Math.ceil(diff / 86400);
if (isNaN(dayDiff) || dayDiff < 0) return "";
- function duration(value) {
- return localize(value);
+ function duration(value, number) {
+ return number ? localize(value, number) : localize(value);
}
return (
(diff < 86400 && lastTried > midnight && duration("today")) ||
(dayDiff == 1 && "yesterday") ||
- (dayDiff < 7 && dayDiff + " " + duration("dAgo")) ||
- (dayDiff < 31 && Math.round(dayDiff / 7) + " " + duration("wAgo")) ||
- (dayDiff < 366 && Math.round(dayDiff / 30) + " " + duration("mAgo")) ||
+ (dayDiff < 7 && duration("dAgo", dayDiff)) ||
+ (dayDiff < 31 && duration("wAgo", Math.round(dayDiff / 7))) ||
+ (dayDiff < 366 && duration("mAgo", Math.round(dayDiff / 30))) ||
(dayDiff > 365 && duration("ltAgo"))
);
},
showLastTried() {
this.toast = localize("triedInfo", this.niceDate(this.recipe.lastTried));
- utils.timer(5, (val) => {
+ utils.timer(10, (val) => {
if (!val) this.toast = val;
});
},
diff --git a/app/i18n/en-GB.default.json b/app/i18n/en-GB.default.json
index 058494f0..90f89dd6 100644
--- a/app/i18n/en-GB.default.json
+++ b/app/i18n/en-GB.default.json
@@ -78,9 +78,7 @@
"noFavs": "No favourites yet",
"fsList": "Your favourite recipes are listed here",
"noRecs": "No recipes match your search",
- "noRecsInTL": "No recipes match your search in the Try Later list",
- "noRecsInFavs": "No recipes match your search in the Favourites list",
- "noRecsInFtr": "No recipes match your search in the Filtered recipes",
+ "noRecsInL": "None of the recipes here matches your search",
"intf": "Interface",
"lang": "Language",
"sysDef": "System default",
diff --git a/app/store.ts b/app/store.ts
index d424aeca..a7b0773a 100644
--- a/app/store.ts
+++ b/app/store.ts
@@ -214,10 +214,10 @@ export default new Vuex.Store({
currentComponent: 'EnRecipes',
sortType: 'Oldest first',
language: [
- {
- locale: 'da',
- title: 'Dansk',
- },
+ // {
+ // locale: 'da',
+ // title: 'Dansk',
+ // },
{
locale: 'de',
title: 'Deutsch',
@@ -246,6 +246,18 @@ export default new Vuex.Store({
locale: 'fr-CH',
title: 'Français (CH)',
},
+ {
+ locale: 'hi',
+ title: 'हिंदी',
+ },
+ {
+ locale: 'ml',
+ title: 'മലയാളം',
+ },
+ {
+ locale: 'id',
+ title: 'Indonesia',
+ },
{
locale: 'it',
title: 'Italiano',
@@ -258,10 +270,10 @@ export default new Vuex.Store({
locale: 'nl',
title: 'Nederlands',
},
- {
- locale: 'pt',
- title: 'Português',
- },
+ // {
+ // locale: 'pt',
+ // title: 'Português',
+ // },
{
locale: 'ru',
title: 'Русский',
@@ -270,6 +282,10 @@ export default new Vuex.Store({
locale: 'ta',
title: 'தமிழ்',
},
+ {
+ locale: 'te',
+ title: 'తెలుగు',
+ },
],
shakeEnabled: true,
importSummary: {
diff --git a/fastlane/metadata/android/en-US/changelogs/7.txt b/fastlane/metadata/android/en-US/changelogs/7.txt
index 3892e294..b78d0d44 100644
--- a/fastlane/metadata/android/en-US/changelogs/7.txt
+++ b/fastlane/metadata/android/en-US/changelogs/7.txt
@@ -1,14 +1,14 @@
- [New] Redesigned user interface
- [New] Recipe list view modes
- [New] Black theme
-- [New] Dedicated filters panel
+- [New] Dedicated filter panel
+- [New] Set Backup folder location
+- [New] Set Meal Planner's first day of the week to Monday
- [Fixed] Crash on app start with blocked sensors #30
- [Fixed] No app name in launcher #29
+- [Improvement] Change theme without restarting the app
- [Removed] Storage permission
-- Change theme without restarting the app
-- Set Backup folder location
-- Set Meal Planner's first day of the week to Monday
-- Added app languages: French, Italian, Norwegian Bokmål
-- Updated translations
-- Several bug fixes
+- [Added App Languages] Hindi, Indonedian, Italian, Malayalam, Spanish and Telugu
+- [Updated] Translations
- Dropped support for Android Lollipop
+- Several bug fixes
diff --git a/fastlane/metadata/android/en-US/full_description.txt b/fastlane/metadata/android/en-US/full_description.txt
index 8d9b0cfa..68bac117 100644
--- a/fastlane/metadata/android/en-US/full_description.txt
+++ b/fastlane/metadata/android/en-US/full_description.txt
@@ -3,9 +3,9 @@ EnRecipes is an open source, privacy-friendly digital cookbook that lets you cre
Features:
* Create recipes quickly
-* Add photo, notes and combinations to your recipes
+* Add photo, combinations and notes to your recipes
* Organise your recipes by cuisine, category and tags
-* Mark recipes as favourites and add them to your Try Later list
+* Add recipes to your Try Later list and mark them as favourites
* Quickly search for recipes by title or ingredient
* Scale your recipe ingredients to serve more or less people
* Get notified of the last time you tried a recipe
@@ -19,7 +19,7 @@ EnRecipes is an open source, privacy-friendly digital cookbook that lets you cre
* 100% free and open-source
* Private by Design
* No annoying ads or pop-ups
-* No internet access is required and never asks for any unwanted permissions
+* No permissions required
Credits:
diff --git a/package-lock.json b/package-lock.json
index 12837e75..83458ab3 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -419,9 +419,9 @@
"dev": true
},
"node_modules/@nativescript/webpack": {
- "version": "5.0.0-beta.7",
- "resolved": "https://registry.npmjs.org/@nativescript/webpack/-/webpack-5.0.0-beta.7.tgz",
- "integrity": "sha512-2LqrP7rSP8iaqyHezAdDasalaNNKpAAQJEuZb4Uu3kPM1tFRSYKs4SMbAEWR11JcQ+p9azfeHXlsHbTt6sm7Sw==",
+ "version": "5.0.0-beta.9",
+ "resolved": "https://registry.npmjs.org/@nativescript/webpack/-/webpack-5.0.0-beta.9.tgz",
+ "integrity": "sha512-DbsPLX7IYxeq6wtzOKNdLBVWakQCYF16UuFKTnQWfmPqRAHANn+Cpn48qhVmrLXp3u/BxHHdoPmDx5080j+Kvg==",
"dev": true,
"dependencies": {
"@babel/core": "7.13.15",
@@ -608,9 +608,9 @@
"dev": true
},
"node_modules/@types/node": {
- "version": "14.14.40",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.40.tgz",
- "integrity": "sha512-2HoZZGylcnz19ZSbvWhgWHqvprw1ZGHanxIrDWYykPD4CauLW4gcyLzCVfUN2kv/1t1F3CurQIdi+s1l9+XgEA==",
+ "version": "14.14.41",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.41.tgz",
+ "integrity": "sha512-dueRKfaJL4RTtSa7bWeTK1M+VH+Gns73oCgzvYfHZywRCoPSd8EkXBL0mZ9unPTveBn+D9phZBaxuzpwjWkW0g==",
"dev": true
},
"node_modules/@types/parse-json": {
@@ -1343,9 +1343,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001208",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001208.tgz",
- "integrity": "sha512-OE5UE4+nBOro8Dyvv0lfx+SRtfVIOM9uhKqFmJeUbGriqhhStgp1A0OyBpgy3OUF8AhYCT+PVwPC1gMl2ZcQMA==",
+ "version": "1.0.30001209",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001209.tgz",
+ "integrity": "sha512-2Ktt4OeRM7EM/JaOZjuLzPYAIqmbwQMNnYbgooT+icoRGrKOyAxA1xhlnotBD1KArRSPsuJp3TdYcZYrL7qNxA==",
"dev": true
},
"node_modules/chalk": {
@@ -5147,9 +5147,9 @@
"dev": true
},
"@nativescript/webpack": {
- "version": "5.0.0-beta.7",
- "resolved": "https://registry.npmjs.org/@nativescript/webpack/-/webpack-5.0.0-beta.7.tgz",
- "integrity": "sha512-2LqrP7rSP8iaqyHezAdDasalaNNKpAAQJEuZb4Uu3kPM1tFRSYKs4SMbAEWR11JcQ+p9azfeHXlsHbTt6sm7Sw==",
+ "version": "5.0.0-beta.9",
+ "resolved": "https://registry.npmjs.org/@nativescript/webpack/-/webpack-5.0.0-beta.9.tgz",
+ "integrity": "sha512-DbsPLX7IYxeq6wtzOKNdLBVWakQCYF16UuFKTnQWfmPqRAHANn+Cpn48qhVmrLXp3u/BxHHdoPmDx5080j+Kvg==",
"dev": true,
"requires": {
"@babel/core": "7.13.15",
@@ -5283,9 +5283,9 @@
"dev": true
},
"@types/node": {
- "version": "14.14.40",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.40.tgz",
- "integrity": "sha512-2HoZZGylcnz19ZSbvWhgWHqvprw1ZGHanxIrDWYykPD4CauLW4gcyLzCVfUN2kv/1t1F3CurQIdi+s1l9+XgEA==",
+ "version": "14.14.41",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.41.tgz",
+ "integrity": "sha512-dueRKfaJL4RTtSa7bWeTK1M+VH+Gns73oCgzvYfHZywRCoPSd8EkXBL0mZ9unPTveBn+D9phZBaxuzpwjWkW0g==",
"dev": true
},
"@types/parse-json": {
@@ -5842,9 +5842,9 @@
"dev": true
},
"caniuse-lite": {
- "version": "1.0.30001208",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001208.tgz",
- "integrity": "sha512-OE5UE4+nBOro8Dyvv0lfx+SRtfVIOM9uhKqFmJeUbGriqhhStgp1A0OyBpgy3OUF8AhYCT+PVwPC1gMl2ZcQMA==",
+ "version": "1.0.30001209",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001209.tgz",
+ "integrity": "sha512-2Ktt4OeRM7EM/JaOZjuLzPYAIqmbwQMNnYbgooT+icoRGrKOyAxA1xhlnotBD1KArRSPsuJp3TdYcZYrL7qNxA==",
"dev": true
},
"chalk": {