improved import process and messages

This commit is contained in:
vishnuraghavb 2020-12-29 16:05:19 +05:30
commit ac1456e72b
1065 changed files with 116006 additions and 43438 deletions

4
.gitignore vendored
View file

@ -5,4 +5,6 @@
# NPM
node_modules
# NativeScript application
# NativeScript application
platforms
hooks

View file

@ -12,7 +12,7 @@ Here are some important resources:
1. Fork this repository and head to the `app/i18n` folder.
2. Create a new JSON file or duplicate any existing file and start translating its values.
3. The filenames should be based on this [gist](https://gist.github.com/vishnuraghavb/bf27b068acc35e331adfba66d18e2094).
3. The filename should be based on this [gist](https://gist.github.com/vishnuraghavb/bf27b068acc35e331adfba66d18e2094).
4. Once done, create a new pull request.
#### Don't know what fork means? No issues.

View file

@ -7,19 +7,20 @@
<a href="https://github.com/vishnuraghavb/EnRecipes/releases" alt="Release version"><img src="https://img.shields.io/github/v/release/vishnuraghavb/EnRecipes?label=Release"></a> <a href="https://github.com/vishnuraghavb/EnRecipes/releases" alt="Release date"><img src="https://img.shields.io/github/release-date/vishnuraghavb/EnRecipes?color=blue&label=Release%20date"></a> <a href="https://www.gnu.org/licenses/gpl-3.0" alt="License: GPLv3"><img src="https://img.shields.io/badge/License-GPL%20v3-blue"></a> <a href="https://github.com/vishnuraghavb/EnRecipes/issues" alt="GitHub issues"><img src="https://img.shields.io/github/issues/vishnuraghavb/EnRecipes?label=Issues"></a> <a href="https://liberapay.com/vishnuraghavb/donate" alt="Translation Status"><img src="https://img.shields.io/liberapay/patrons/vishnuraghavb?label=Patrons"></a>
<hr>
<p align="center"><a href="#features">Features</a> - <a href="#downloads">Downloads</a> - <a href="#screenshots">Screenshots</a> - <a href="#future">Future</a> - <a href="#contributors">Contribution</a> - <a href="#credits">Credits</a> - <a href="#license">License</a> - <a href="https://enrecipes.vercel.app/">Website</a> - <a href="https://enrecipes.vercel.app/">Telegram group</a></p>
<p align="center"><a href="#features">Features</a> - <a href="#downloads">Downloads</a> - <a href="#screenshots">Screenshots</a> - <a href="https://github.com/vishnuraghavb/EnRecipes/wiki/User-Guide">User guide</a> - <a href="#future">Future</a> - <a href="#contributors">Contribution</a> - <a href="#credits">Credits</a> - <a href="#license">License</a> - <a href="https://enrecipes.vercel.app/">Website</a> - <a href="https://enrecipes.vercel.app/">Telegram group</a></p>
<hr>
## Features
- Create recipes quickly
- Add photo, notes and combinations to your recipes
- Organise your recipes by category
- Quickly search for your recipes either by name or ingredient
- Mark recipes as favourites and add them to your Try Later list
- Organise your recipes by cuisine, category and tags
- Quickly search for your recipes by name, ingredient or tag
- Mark recipes as Favourites and add them to your Try Later list
- Scale your recipe ingredients to serve more or less people
- Get notified of the last time you tried a recipe
- Share your recipe to anyone by any means as a nicely formatted message. You can share the recipe photo too.
- Share your recipe to anyone by any means as a nicely formatted message. You can share the recipe photo too
- Shake to view random recipe
- Create meal plans
- Import/Export recipes
- Light & Dark theme
@ -27,7 +28,7 @@
- No internet access is required and never asks for any unwanted permissions
- 100% free and open-source
**Languages supported**: English, German, Tamil
**Languages supported**: Danish, Dutch, English, German, Portuguese, Russian, Spanish and Tamil
Check the [Roadmap](https://github.com/vishnuraghavb/EnRecipes/projects/1) for upcoming features.
@ -49,16 +50,14 @@ You can [create an issue here](https://github.com/vishnuraghavb/EnRecipes/issues
## Future
- [Roadmap](https://github.com/vishnuraghavb/EnRecipes/projects/1)
- [Translations](https://github.com/vishnuraghavb/EnRecipes/projects/2) - Contributors are welcome!
- [Translations](https://github.com/vishnuraghavb/EnRecipes/projects/2) - Want to contribute? Please read the [CONTRIBUTING.md](https://github.com/vishnuraghavb/EnRecipes/blob/main/CONTRIBUTING.md)
## Contributors
- [mondstern](https://codeberg.org/mondstern) (Translator)
- [epicalxyz](https://github.com/epicalxyz) (Translator)
### Want to contribute?
Please read the [CONTRIBUTING.md](https://github.com/vishnuraghavb/EnRecipes/blob/main/CONTRIBUTING.md)
- [mondstern](https://codeberg.org/mondstern) (Translations: Danish, Dutch and German)
- [EpicalXYZ](https://github.com/epicalxyz) (Translations: Portuguese)
- [dm9pZCAq](https://github.com/dm9pZCAq) (Translations: Russian)
- [AHaro88](https://github.com/taraletti) (Translations: Spanish)
## Credits

View file

@ -11,12 +11,12 @@ $gray7: #495057;
$gray8: #343a40;
$gray9: #212529;
$orange: #ff5200;
$fabRipple: #ff864d;
$fabRipple: #ff922b;
$red: #c92a2a;
$breakfast: #ffb180;
$lunch: #ceff80;
$dinner: #80ceff;
$snacks: #b180ff; // Global SCSS styling
$breakfast: #ff922b;
$lunch: #94d82d;
$dinner: #339af0;
$snacks: #845ef7; // Global SCSS styling
// @see https://docs.nativescript.org/ui/styling
.ns-modal,
Page {
@ -55,10 +55,11 @@ Page {
.sd {
background: $gray1;
}
.combination,
.group-info,
.overviewItem,
.recipeItem,
.textCard,
.urlCard {
.textCard {
background: white;
}
TextField.combinationToken {
@ -66,6 +67,7 @@ Page {
}
.sd-group-header,
.sd-item,
.tag,
.time .bx {
color: $gray8;
}
@ -78,7 +80,8 @@ Page {
background: $gray3;
}
.count,
.marker {
.marker,
.noteCount {
color: $gray1;
background: $gray9;
}
@ -121,15 +124,19 @@ Page {
.sd {
background: $gray9;
}
.combination,
.overviewItem,
.recipeItem,
.textCard,
.urlCard,
TextField.combinationToken {
background: $gray8;
}
.group-info {
background: #111;
}
.sd-group-header,
.sd-item,
.tag,
.time .bx {
color: $gray3;
}
@ -142,7 +149,8 @@ Page {
background: #111;
}
.count,
.marker {
.marker,
.noteCount {
color: $gray9;
background: $gray1;
}
@ -168,7 +176,7 @@ TimePickerField {
width: 100%;
border-width: 1;
font-size: 14;
padding: 14 14 13;
padding: 13 12;
margin: 8 0 0;
border-radius: 4;
border-color: $gray6;
@ -182,25 +190,25 @@ ListPicker {
}
SearchBar {
font-family: 'Orkney-Regular';
font-size: 16;
font-size: 14;
text-field-hint-color: $gray6;
}
TabView {
tab-text-color: $gray6;
}
.inputField {
margin-bottom: 4;
margin-bottom: 8;
}
.fieldLabel {
font-size: 12;
margin-left: 12;
margin-left: 8;
padding: 0 4;
}
.progressContainer {
width: 100%;
}
.category,
.group-header,
// .category,
// .group-header,
.text-btn,
MDActivityIndicator {
color: $orange;
@ -208,12 +216,16 @@ MDActivityIndicator {
MDProgress {
progress-color: $orange;
}
Switch {
background-color: $orange;
off-background-color: $gray6;
}
// -----------------------------
// ActionBar
ActionBar {
height: 64;
margin: 0;
padding: 6 8;
// height: 64;
padding: 0 8;
GridLayout {
padding: 0;
margin: 0;
@ -242,6 +254,7 @@ ActionBar {
vertical-alignment: center;
.bx {
font-size: 24;
margin: 0 24 0 0;
}
&.selected-sd-item {
color: $orange;
@ -253,7 +266,7 @@ ActionBar {
// prettier-ignore
Label {
padding: 2 16 0 0;
font-size: 16;
font-size: 14;
vertical-alignment: center;
&.bx {
padding: 0 0 0 16;
@ -265,10 +278,27 @@ ActionBar {
MDButton.bx {
margin: 0;
}
.recipeCount {
padding: 4;
font-size: 14;
margin: 0 8 0 0;
vertical-alignment: center;
}
}
.sd-group-header {
width: 100%;
padding: 0 0 8 8;
MDButton.bx {
margin: 0;
}
.filterPath {
line-height: 6;
}
}
.noTags {
font-size: 14;
text-align: center;
margin: 8;
}
MDRipple {
border-radius: 4;
@ -295,7 +325,7 @@ MDButton {
line-height: 8;
padding: 0 32;
text-align: center;
font-size: 16;
font-size: 14;
horizontal-alignment: center;
.icon {
font-size: 64;
@ -308,10 +338,9 @@ MDButton {
margin-bottom: 16;
}
.title {
font-size: 20;
font-size: 18;
text-align: center;
padding: 0;
margin: 0 0 8;
horizontal-alignment: center;
.bx {
font-size: 24;
@ -323,31 +352,48 @@ MDButton {
// Recipe Items
RadListView {
margin: 0 0 128;
font-size: 16;
font-size: 14;
}
.recipeItem {
margin: 8 16;
margin: 4 8;
border-radius: 4;
.recipeInfo {
margin: 4;
.category,
.time {
font-size: 12;
margin: 0;
padding: 8;
.attr,
.category {
font-size: 10;
padding: 0;
margin: 0;
}
.title {
margin: 0;
padding: 4 0;
padding: 2 0;
}
.timeContainer {
.attrContainer {
padding: 0;
.time {
padding: 0 0 0 4;
.attr {
padding: 1 8 0 2;
}
}
}
}
.tagsContainer {
padding: 2 0 0;
.collapsedTagsCount {
font-size: 10;
padding: 1 0 0 2;
}
.tag {
font-size: 10;
padding: 0 4;
margin: 0 4 0 0;
line-height: 0;
border-radius: 4;
border-width: 1;
border-color: $gray6;
}
}
.imageHolder {
vertical-alignment: center;
&.card {
@ -362,25 +408,33 @@ RadListView {
margin: 0 8;
background: $red;
color: #fff;
height: 128;
height: 104;
border-radius: 4;
}
// -----------------------------
// SETTINGS
.group-header {
text-transform: uppercase;
// text-transform: uppercase;
padding: 8;
}
.group-info {
text-align: center;
padding: 16;
line-height: 6;
margin-top: 8;
border-radius: 4;
}
.main-container {
padding: 8 8 88;
.option {
font-size: 16;
font-size: 14;
line-height: 6;
.bx {
margin: 11 24 11 16;
}
.info {
font-size: 12;
line-height: 4;
padding-top: 0;
}
StackLayout {
margin: 9 24 9 0;
@ -395,51 +449,69 @@ RadListView {
width: 100%;
border-radius: 4;
.appIcon {
height: 128;
height: 96;
}
}
// -----------------------------
// VIEW RECIPE
.viewRecipe {
.attr,
.category,
.ingredient,
.time {
font-size: 16;
.tag,
.tagsTitle {
font-size: 14;
}
.attr,
.category {
margin: 0 8;
margin: 0 12;
}
.time {
margin: 0 8;
.small {
font-size: 10;
}
.title {
font-size: 22;
font-size: 18;
line-height: 6;
padding: 0 12;
}
.ratingContainer {
margin: 14 8 6;
.rating {
margin-right: 8;
color: $orange;
}
}
.subTitle {
font-size: 18;
line-height: 4;
font-size: 14;
line-height: 6;
}
.tagsContainer {
padding: 18 12 0;
.tag {
padding: 1 6;
margin: 0 8 8 0;
}
}
.overviewContainer {
margin-top: 12;
margin: 12 0 24;
.overviewItem {
border-radius: 4;
margin: 8;
margin: 4;
android-elevation: 1;
.bx {
padding: 12 0 0 12;
padding: 16 0 0 16;
color: $gray6;
horizontal-alignment: left;
}
.itemCount {
font-size: 16;
padding: 8 12 12;
font-size: 14;
padding: 8 16 16;
}
}
}
.ingredient {
line-height: 6;
padding-bottom: 0;
font-family: 'Orkney-Regular';
margin: 0 0 0 4;
}
.count {
width: 24;
@ -447,40 +519,49 @@ RadListView {
padding-top: 4%;
margin: 0 0 0 8;
text-align: center;
vertical-alignment: top;
horizontal-alignment: center;
border-radius: 99;
}
.instruction {
font-size: 16;
font-size: 14;
line-height: 6;
padding: 1 0 24 36;
padding: 2 0 24 35;
margin: 0 0 0 19;
border-width: 0 0 0 2;
}
.instruction.noBorder {
border-color: transparent;
}
.urlCard {
margin: 8 16;
.combination {
margin: 8 8 0;
border-radius: 4;
font-size: 16;
font-size: 14;
.bx {
font-size: 24;
padding: 0 0 0 16;
}
.link {
padding: 13 16 13 11;
.combinationTitle {
padding: 14 24;
margin: 0;
line-height: 6;
}
.linkIcon {
padding: 0 0 0 12;
}
}
.textCard {
font-size: 16;
.noteCount {
width: 24;
height: 24;
padding-top: 4%;
margin: 0 0 0 8;
text-align: center;
vertical-alignment: top;
horizontal-alignment: center;
clip-path: polygon(4% 12%, 12% 4%, 75% 4%, 96% 25%, 96% 88%, 88% 96%, 12% 96%, 4% 88%,);
}
.note {
font-size: 14;
line-height: 6;
padding: 13 16;
margin: 8 16;
border-radius: 4;
padding: 2 0 24 37;
margin: 0 0 0 19;
}
}
// -----------------------------
@ -500,7 +581,7 @@ MDFloatingActionButton {
// -----------------------------
// EDIT RECIPE
.sectionTitle {
font-size: 20;
font-size: 18;
}
.text-btn {
font-size: 14;
@ -522,38 +603,42 @@ MDButton.closeBtn {
padding: 0 0 88;
width: 100%;
.plansContainer {
padding: 8 4;
color: $gray9;
margin: 16 8 0 16;
padding: 0;
border-left-width: 8;
&.breakfast {
background: $breakfast;
border-left-color: $breakfast;
}
&.lunch {
background: $lunch;
border-left-color: $lunch;
}
&.dinner {
background: $dinner;
border-left-color: $dinner;
}
&.snacks {
background: $snacks;
border-left-color: $snacks;
}
.periodLabel {
text-transform: uppercase;
text-transform: capitalize;
vertical-alignment: center;
font-size: 14;
padding: 0 0 0 16;
}
MDRipple {
background: white;
}
.recipes {
margin: 4 8;
margin: 0 8 8 16;
.recipeTitle {
font-size: 14;
padding: 6 8;
line-height: 4;
}
.closeBtn {
margin: 0 8;
vertical-alignment: top;
padding: 14 16;
line-height: 6;
}
}
// .closeBtn {
// margin: 0 16 0 4;
// vertical-alignment: top;
// }
MDButton,
MDRipple {
ripple-color: rgba($gray6, 0.2);
@ -567,7 +652,7 @@ MDButton.closeBtn {
width: 100%;
color: $gray9;
background: $gray1;
font-size: 16;
font-size: 14;
&.dark {
color: $gray1;
background: $gray9;
@ -575,7 +660,7 @@ MDButton.closeBtn {
.dialogTitle {
line-height: 6;
padding: 24 24 16;
font-size: 20;
font-size: 18;
}
.dialogInput {
padding: 0 24 16;
@ -590,6 +675,11 @@ MDButton.closeBtn {
line-height: 6;
padding: 13 24;
margin: 0;
border-radius: 1;
background: transparent;
}
.actionToggle {
background: $orange;
}
.actionsContainer {
padding: 8;
@ -598,9 +688,10 @@ MDButton.closeBtn {
font-size: 12;
padding: 12;
min-width: 0;
color: #ff7043;
color: $orange;
}
MDButton.actionIcon {
font-size: 14;
width: auto;
height: auto;
min-width: 0;

View file

@ -21,8 +21,23 @@
</GridLayout>
<GridLayout columns="auto, *" class="option">
<MDRipple colSpan="2" @tap="openURL('https://github.com/vishnuraghavb/enrecipes')" />
<Label col="0" class="bx" :text="icon.link" />
<Label verticalAlignment="center" col="1" :text="'View project on GitHub' | L" textWrap="true" />
<Label col="0" class="bx" :text="icon.github" />
<Label verticalAlignment="center" col="1" :text="'View on GitHub' | L" textWrap="true" />
</GridLayout>
<GridLayout columns="auto, *" class="option">
<MDRipple colSpan="2" @tap="openURL('https://github.com/vishnuraghavb/EnRecipes/blob/main/PRIVACY.md')" />
<Label col="0" class="bx" :text="icon.lock" />
<Label verticalAlignment="center" col="1" :text="'Privacy policy' | L" textWrap="true" />
</GridLayout>
<GridLayout columns="auto, *" class="option">
<MDRipple colSpan="2" @tap="openURL('https://github.com/vishnuraghavb/EnRecipes/wiki/User-Guide')" />
<Label col="0" class="bx" :text="icon.compass" />
<Label verticalAlignment="center" col="1" :text="'User guide' | L" textWrap="true" />
</GridLayout>
<GridLayout columns="auto, *" class="option">
<MDRipple colSpan="2" @tap="openURL('https://www.vishnuraghav.com/donate')" />
<Label col="0" class="bx" :text="icon.donate" />
<Label verticalAlignment="center" col="1" :text="'Donate' | L" textWrap="true" />
</GridLayout>
<GridLayout columns="auto, *" class="option">
<MDRipple colSpan="2" @tap="openURL('https://t.me/enrecipes')" />
@ -39,24 +54,46 @@
<Label col="0" class="bx" :text="icon.user" />
<Label verticalAlignment="center" col="1" :text="'Vishnu Raghav B' | L" textWrap="true" />
</GridLayout>
<GridLayout columns="auto, *" class="option">
<MDRipple colSpan="2" @tap="openURL('https://github.com/vishnuraghavb')" />
<Label col="0" class="bx" :text="icon.link" />
<Label verticalAlignment="center" col="1" :text="'Follow on GitHub' | L" textWrap="true" />
</GridLayout>
<GridLayout columns="auto, *" class="option">
<MDRipple colSpan="2" @tap="openURL('https://mastodon.social/@vishnuraghavb')" />
<Label col="0" class="bx" :text="icon.link" />
<Label verticalAlignment="center" col="1" :text="'Follow on Mastodon' | L" textWrap="true" />
</GridLayout>
<StackLayout class="hr m-10"></StackLayout>
<Label :text="'Contributors' | L" class="group-header orkm" />
<GridLayout columns="auto, *" class="option">
<MDRipple colSpan="2" @tap="openURL('https://github.com/mondlicht-und-sterne')" />
<Label col="0" class="bx" :text="icon.user" />
<MDRipple colSpan="2" @tap="openURL('https://codeberg.org/mondstern')" />
<Label col="0" class="bx" :text="icon.link" />
<StackLayout col="1">
<Label text="mondstern" textWrap="true" />
<Label :text="`${$options.filters.L('Translations:')} Deutsch`" class="info" textWrap="true" />
<Label :text="'Translator' | L" class="info" textWrap="true" />
</StackLayout>
</GridLayout>
<GridLayout columns="auto, *" class="option">
<MDRipple colSpan="2" @tap="openURL('https://github.com/epicalxyz')" />
<Label col="0" class="bx" :text="icon.github" />
<StackLayout col="1">
<Label text="EpicalXYZ" textWrap="true" />
<Label :text="'Translator' | L" class="info" textWrap="true" />
</StackLayout>
</GridLayout>
<GridLayout columns="auto, *" class="option">
<MDRipple colSpan="2" @tap="openURL('https://github.com/dm9pZCAq')" />
<Label col="0" class="bx" :text="icon.github" />
<StackLayout col="1">
<Label text="dm9pZCAq" textWrap="true" />
<Label :text="'Translator' | L" class="info" textWrap="true" />
</StackLayout>
</GridLayout>
<GridLayout columns="auto, *" class="option">
<MDRipple colSpan="2" @tap="openURL('https://github.com/taraletti')" />
<Label col="0" class="bx" :text="icon.github" />
<StackLayout col="1">
<Label text="AHaro88" textWrap="true" />
<Label :text="'Translator' | L" class="info" textWrap="true" />
</StackLayout>
</GridLayout>
<GridLayout columns="auto, *" class="option">
<MDRipple colSpan="2" @tap="openURL('https://github.com/RAPXT')" />
<Label col="0" class="bx" :text="icon.github" />
<StackLayout col="1">
<Label text="RAPXT" textWrap="true" />
<Label :text="'Translator' | L" class="info" textWrap="true" />
</StackLayout>
</GridLayout>
</StackLayout>

View file

@ -1,57 +1,65 @@
<template>
<Page @loaded="onPageLoad" actionBarHidden="true" :androidStatusBarBackground="appTheme == 'Light' ? '#f1f3f5' : '#212529'">
<RadSideDrawer allowEdgeSwipe="true" showOverNavigation="true" ref="drawer" id="sideDrawer" drawerContentSize="270" gesturesEnabled="true" drawerTransition="SlideInOnTopTransition">
<RadSideDrawer allowEdgeSwipe="true" showOverNavigation="true" ref="drawer" id="sideDrawer" drawerContentSize="280" gesturesEnabled="true" drawerTransition="SlideInOnTopTransition">
<GridLayout rows="*, auto" columns="*" ~drawerContent class="sd">
<StackLayout row="0">
<GridLayout rows="48" columns="auto, *, auto" v-for="(item, index) in topmenu" :key="index" class="sd-item orkm" :class="{
'selected-sd-item': currentComponent === item.component,
}">
<MDRipple row="0" colSpan="3" @tap="navigateTo(item.component, item.component, false, false)" />
<MDRipple row="0" colSpan="3" @tap="navigateTo(item.component, item.component, false)" />
<Label col="0" row="0" class="bx" :text="icon[item.icon]" />
<Label col="1" row="0" :text="`${item.title}` | L" />
<Label class="recipeCount" v-if="getRecipeCount(item.title)" :text="getRecipeCount(item.title)" col="2" />
</GridLayout>
<StackLayout class="hr" margin="8"></StackLayout>
<GridLayout rows="48" columns="auto, *" class="sd-item orkm" :class="{
'selected-sd-item': currentComponent === 'MealPlanner',
}">
<MDRipple row="0" colSpan="3" @tap="navigateTo(MealPlanner, 'MealPlanner', true, false)" />
<Label col="0" row="0" class="bx" :text="icon.calendar" />
<Label col="2" row="0" :text="'Meal Planner' | L" />
</GridLayout>
<StackLayout class="hr" margin="8"></StackLayout>
<GridLayout class="sd-group-header orkm" rows="auto" columns="*, auto" v-if="categoriesWithRecipes.length">
<Label verticalAlignment="center" col="0" :text="'Categories' | L" />
<MDButton variant="text" @tap="toggleCatEdit" col="2" :text="`${editCategory ? 'DONE' : 'RENAME'}` | L" />
<GridLayout class="sd-group-header orkm" rows="auto" columns="*, auto" v-if="cuisinesWithRecipes.length">
<Label class="filterPath" verticalAlignment="center" col="0" :text="getCurrentPath | L" textWrap='true' />
<MDButton :visibility="selectedCuisine?'visible':'hidden'" variant="text" @tap="previousRecipeFilter" class="bx" col="2" :text="icon.back" />
</GridLayout>
<ScrollView height="100%">
<StackLayout>
<GridLayout v-for="(item, index) in categoriesWithRecipes" :key="index" class="sd-item orkm" :class="{
'selected-sd-item': currentComponent == item,
<GridLayout v-for="(item, index) in getRecipeList" :key="index" class="sd-item orkm" :class="{
'selected-sd-item': selectedTag == item,
}" columns="auto, *, auto">
<MDRipple row="0" colSpan="3" @tap="navigateTo(item, item, false, true)" />
<Label col="0" class="bx" :text="icon.label" />
<MDRipple row="0" colSpan="3" @tap="setRecipeFilter(item)" />
<Label col="0" class="bx" :text="icon[selectedFilterType]" />
<Label col="1" :text="`${item}` | L" />
<MDButton variant="text" v-if="editCategory" @tap="renameCategory(item)" col="2" class="bx" :text="icon.edit" />
<Label class="recipeCount" v-else :text="getRecipeCount(item)" col="2" />
<Label class="recipeCount" :text="getRecipeCount(item)" col="2" />
</GridLayout>
<GridLayout v-if="selectedFilterType=='tag' && !tagsWithRecipes.length" columns="*" rows="*">
<Label class="noTags" :text="'No tags available' | L" textWrap="true" />
</GridLayout>
</StackLayout>
</ScrollView>
</StackLayout>
<StackLayout row="1">
<StackLayout class="hr" margin="0 8 8"></StackLayout>
<GridLayout rows="48" columns="auto, *" class="sd-item orkm" :class="{
'selected-sd-item': currentComponent === 'MealPlanner',
}">
<MDRipple row="0" colSpan="3" @tap="navigateTo(MealPlanner, 'MealPlanner', true)" />
<Label col="0" row="0" class="bx" :text="icon.calendar" />
<Label col="2" row="0" :text="'Meal Planner' | L" />
</GridLayout>
<!-- <GridLayout rows="48" columns="auto, *" class="sd-item orkm" :class="{
'selected-sd-item': currentComponent === 'MealPlanner',
}">
<MDRipple row="0" colSpan="3" @tap="navigateTo(MealPlanner, 'MealPlanner', true)" />
<Label col="0" row="0" class="bx" :text="icon.cart" />
<Label col="2" row="0" :text="'Shopping List' | L" />
</GridLayout> -->
<StackLayout class="hr" margin="8"></StackLayout>
<GridLayout class="sd-item orkm" :class="{
'selected-sd-item': currentComponent == item.title,
}" v-for="(item, index) in bottommenu" :key="index" rows="48" columns="auto, *">
<MDRipple colSpan="3" @tap="navigateTo(item.component, 'item.title', true, false)" />
<MDRipple colSpan="3" @tap="navigateTo(item.component, 'item.title', true)" />
<Label class="bx" col="0" :text="icon[item.icon]" />
<Label col="2" :text="`${item.title}` | L" />
</GridLayout>
</StackLayout>
</GridLayout>
<Frame ~mainContent id="main-frame">
<EnRecipes ref="enrecipes" :filterFavourites="filterFavourites" :filterTrylater="filterTrylater" :selectedCategory="selectedCategory" :closeDrawer="closeDrawer" :hijackGlobalBackEvent="hijackGlobalBackEvent"
:releaseGlobalBackEvent="releaseGlobalBackEvent" />
<EnRecipes ref="enrecipes" :filterFavourites="filterFavourites" :filterTrylater="filterTrylater" :selectedCuisine="selectedCuisine" :selectedCategory="selectedCategory" :selectedTag="selectedTag" :closeDrawer="closeDrawer"
:hijackGlobalBackEvent="hijackGlobalBackEvent" :releaseGlobalBackEvent="releaseGlobalBackEvent" />
</Frame>
</RadSideDrawer>
</Page>
@ -68,6 +76,10 @@ from "@nativescript/core"
import Theme from "@nativescript/theme"
import * as Toast from "nativescript-toast"
import * as application from "tns-core-modules/application"
import {
localize
}
from "@nativescript/localize"
import {
mapActions,
mapState
@ -81,7 +93,10 @@ import PromptDialog from "./modal/PromptDialog"
export default {
data() {
return {
selectedCuisine: null,
selectedCategory: null,
selectedTag: null,
selectedFilterType: 'cuisine',
filterFavourites: false,
filterTrylater: false,
MealPlanner: MealPlanner,
@ -107,7 +122,6 @@ export default {
component: About,
icon: "info",
}, ],
editCategory: false,
appTheme: "Light",
}
},
@ -116,16 +130,49 @@ export default {
MealPlanner,
},
computed: {
...mapState( [ "icon", "recipes", "categories", "yieldUnits", "mealPlans", "currentComponent", ] ),
...mapState( [ "icon", "recipes", "cuisines", "categories", "yieldUnits", "mealPlans", "currentComponent" ] ),
getCurrentPath() {
let path = "/"
if ( this.selectedCuisine ) path += localize( this.selectedCuisine )
else path = "Cuisines"
if ( this.selectedCategory ) path += "/" + localize( this.selectedCategory )
if ( this.selectedTag ) path += "/" + localize( this.selectedTag )
return path;
},
getRecipeList() {
switch ( this.selectedFilterType ) {
case 'cuisine':
return this.cuisinesWithRecipes
break;
case 'category':
return this.categoriesWithRecipes
break;
case 'tag':
return this.tagsWithRecipes
break;
}
},
cuisinesWithRecipes() {
let arr = this.recipes.map( ( e ) => e.cuisine )
return arr.length ? [ "All Cuisines", ...new Set( arr ) ] : []
},
categoriesWithRecipes() {
let arr = this.recipes.map( ( e ) => {
return e.category
} )
return [ ...new Set( arr ) ]
let arr = this.recipes.map( e => ( this.selectedCuisine === "All Cuisines" || e.cuisine === this.selectedCuisine ) && e.category ).filter( e => e )
return arr.length ? [ "All Categories", ...new Set( arr ) ] : []
},
tagsWithRecipes() {
let arr = this.recipes.map( e => {
if ( this.selectedCuisine === "All Cuisines" && this.selectedCategory === "All Categories" && e.tags.length ) return e.tags;
else if ( this.selectedCuisine === "All Cuisines" && e.category === this.selectedCategory && e.tags.length ) return e.tags;
else if ( this.selectedCategory === "All Categories" && e.cuisine === this.selectedCuisine && e.tags.length ) return e.tags;
else if ( e.category === this.selectedCategory && e.cuisine === this.selectedCuisine && e.tags.length ) return e.tags;
} ).flat().filter( e => e )
let showAllTags = this.selectedCuisine === "All Cuisines" && this.selectedCategory === "All Categories"
return arr.length ? [ !showAllTags && "All Tags", ...new Set( arr ) ].filter( e => e ) : []
},
},
methods: {
...mapActions( [ "setCurrentComponentAction", "initializeRecipes", "initializeCategories", "initializeYieldUnits", "initializeMealPlans", "renameCategoryAction", ] ),
...mapActions( [ "setCurrentComponentAction", "initializeListItems", "initializeRecipes", "initializeMealPlans", "setShakeAction" ] ),
onPageLoad() {
if ( this.appTheme === "Light" ) {
const View = android.view.View
@ -135,43 +182,44 @@ export default {
}
},
// HELPERS
toggleCatEdit() {
this.editCategory = !this.editCategory
if ( this.selectedCategory ) this.setCurrentComponentAction( "EnRecipes" )
setRecipeFilter( item ) {
this.$navigateBack( {
frame: "main-frame",
backstackVisible: false
} )
this.filterFavourites = this.filterTrylater = false
this.selectedCategory = null
if ( this.selectedCuisine == null ) {
this.selectedFilterType = 'category'
this.selectedCuisine = item
} else if ( this.selectedCategory == null ) {
this.selectedFilterType = 'tag'
this.selectedCategory = item
if ( !this.tagsWithRecipes.length ) this.closeDrawer()
} else {
this.selectedTag = item;
this.closeDrawer()
}
this.setCurrentComponentAction( "Filtered result" )
this.$refs.enrecipes.updateFilter()
},
renameCategory( category ) {
this.releaseGlobalBackEvent()
this.$showModal( PromptDialog, {
props: {
title: `Rename category`,
text: category,
action: "RENAME",
},
} ).then( ( newCategory ) => {
this.hijackGlobalBackEvent()
if ( newCategory.length ) {
this.renameCategoryAction( {
current: category,
updated: newCategory
} )
this.editCategory = false
this.navigateTo( newCategory, newCategory, false, true )
}
} )
},
setSelectedCategory( e ) {
this.selectedCategory = e.item
this.closeDrawer()
previousRecipeFilter() {
if ( this.selectedCategory ) {
this.selectedFilterType = 'category'
this.selectedTag = this.selectedCategory = null
this.setCurrentComponentAction( "Filtered result" )
} else {
this.selectedFilterType = 'cuisine'
this.selectedCuisine = null
this.setCurrentComponentAction( "EnRecipes" )
}
this.$refs.enrecipes.updateFilter()
},
closeDrawer() {
this.$refs.drawer.nativeView.closeDrawer()
},
getRecipeCount( category ) {
getRecipeCount( arg ) {
let count = ''
switch ( category ) {
switch ( arg ) {
case 'EnRecipes':
count = this.recipes.length
break;
@ -181,8 +229,30 @@ export default {
case 'Favourites':
count = this.recipes.filter( e => e.isFavorite ).length
break;
default:
count = this.recipes.filter( e => e.category === category ).length
default: {
switch ( this.selectedFilterType ) {
case 'cuisine':
count = this.recipes.filter( e => arg === "All Cuisines" ? e.cuisine : e.cuisine === arg ).length
break;
case 'category':
count = this.recipes.filter( e => this.selectedCuisine === "All Cuisines" ? arg === "All Categories" ? e.category : e.category === arg : arg === "All Categories" ? e.cuisine === this.selectedCuisine && e.category : e.cuisine === this
.selectedCuisine && e.category === arg ).length
break;
case 'tag':
count = this.recipes.filter( e => {
if ( this.selectedCuisine === "All Cuisines" && this.selectedCategory === "All Categories" ) {
return e.tags.includes( arg ) || arg === "All Tags"
} else if ( this.selectedCuisine === "All Cuisines" && e.category === this.selectedCategory ) {
return e.tags.includes( arg ) || arg === "All Tags"
} else if ( this.selectedCategory === "All Categories" && e.cuisine === this.selectedCuisine ) {
return e.tags.includes( arg ) || arg === "All Tags"
} else if ( e.category === this.selectedCategory && e.cuisine === this.selectedCuisine ) {
return e.tags.includes( arg ) || arg === "All Tags"
}
} ).length
break;
}
}
}
return count
},
@ -200,18 +270,18 @@ export default {
if ( this.$refs.drawer && this.$refs.drawer.nativeView.getIsOpen() ) {
preventDefault()
this.closeDrawer()
this.editCategory = false
} else if (
[ "Favourites", "Try Later", this.selectedCategory ].includes( this.currentComponent ) ) {
[ "Favourites", "Try Later", "Filtered result" ].includes( this.currentComponent ) ) {
preventDefault()
this.setCurrentComponentAction( "EnRecipes" )
this.filterFavourites = this.filterTrylater = false
this.selectedCategory = null
this.selectedTag = this.selectedCategory = this.selectedCuisine = null
this.selectedFilterType = "cuisine"
this.$refs.enrecipes.updateFilter()
this.releaseGlobalBackEvent()
}
},
navigateTo( to, title, isTrueComponent, isCategory ) {
navigateTo( to, title, isTrueComponent ) {
if ( title !== this.currentComponent ) {
if ( isTrueComponent ) {
this.$navigateTo( to, {
@ -219,7 +289,7 @@ export default {
backstackVisible: false
} )
this.closeDrawer()
} else if ( !this.editCategory || !isCategory ) {
} else {
this.releaseGlobalBackEvent()
this.hijackGlobalBackEvent()
this.setCurrentComponentAction( to )
@ -229,14 +299,14 @@ export default {
} )
this.filterFavourites = to === "Favourites" ? true : false
this.filterTrylater = to === "Try Later" ? true : false
this.selectedCategory = isCategory ? to : null
this.$refs.enrecipes.updateFilter()
this.closeDrawer()
}
this.editCategory = false
} else {
this.closeDrawer()
}
this.selectedTag = this.selectedCategory = this.selectedCuisine = null
this.selectedFilterType = "cuisine"
},
},
created() {
@ -245,10 +315,9 @@ export default {
Theme.setMode( Theme[ this.appTheme ] )
}, 10 )
if ( !this.recipes.length ) this.initializeRecipes()
if ( !this.categories.length ) this.initializeCategories()
if ( !this.yieldUnits.length ) this.initializeYieldUnits()
this.initializeListItems()
if ( !this.mealPlans.length ) this.initializeMealPlans()
console.log( Device.language );
this.setShakeAction( ApplicationSettings.getBoolean( "shakeEnabled", true ) )
},
}
</script>

View file

@ -24,13 +24,23 @@
<TextField :hint="'My Healthy Recipe' | L" v-model="recipeContent.title" @loaded="setInputTypeText($event, 'words')" />
<Label top="0" class="fieldLabel" :text="'Title' | L" />
</AbsoluteLayout>
<GridLayout columns="*, 8, *">
<AbsoluteLayout class="inputField" col="0">
<TextField :text="`${recipeContent.cuisine}` | L" editable="false" @focus="modalOpen === false && showCuisine(true)" @tap="showCuisine(false)" />
<Label top="0" class="fieldLabel" :text="'Cuisine' | L" />
</AbsoluteLayout>
<AbsoluteLayout class="inputField" col="2">
<TextField ref='category' :text="`${recipeContent.category}` | L" editable="false" @focus="modalOpen === false && showCategories(true)" @tap="showCategories(false)" />
<Label top="0" class="fieldLabel" :text="'Category' | L" />
</AbsoluteLayout>
</GridLayout>
<AbsoluteLayout class="inputField">
<TextField :text="`${recipeContent.category}` | L" editable="false" @focus="modalOpen === false && showCategories(true)" @tap="showCategories(false)" />
<Label top="0" class="fieldLabel" :text="'Category' | L" />
<TextField autocapitalizationType="words" ref='tags' :hint="`${$options.filters.L('separate with spaces')}`" v-model="tags" @textChange="splitTags" returnKeyType="next" />
<Label top="0" class="fieldLabel" :text="`${$options.filters.L('Tags')} (${$options.filters.L('separate with spaces')})`" />
</AbsoluteLayout>
<GridLayout columns="*, 8, *">
<AbsoluteLayout class="inputField" col="0">
<TextField ref="prepTime" :text="timeRequired('prepTime')" editable="false" @focus="
<TextField :text="timeRequired('prepTime')" editable="false" @focus="
modalOpen === false && setTimeRequired(true, 'prepTime')
" @tap="setTimeRequired(false, 'prepTime')" />
<Label top="0" class="fieldLabel" :text="'Preparation time' | L" />
@ -52,14 +62,25 @@
<Label top="0" class="fieldLabel" :text="'Yield measured in' | L" />
</AbsoluteLayout>
</GridLayout>
<GridLayout columns="*, 8, *">
<AbsoluteLayout class="inputField" col="0">
<TextField ref="difficultyLevel" :text="`${recipeContent.difficulty}` | L" editable="false" @focus="modalOpen === false && showDifficultyLevel(true)" @tap="showDifficultyLevel(false)" />
<Label top="0" class="fieldLabel" :text="'Difficulty level' | L" />
</AbsoluteLayout>
</GridLayout>
<StackLayout class="hr" margin="24 16"></StackLayout>
</StackLayout>
<StackLayout margin="0 16">
<Label :text="'Ingredients' | L" class="sectionTitle" />
<GridLayout columns="*,8,auto,8,auto,8,auto" v-for="(ingredient, index) in recipeContent.ingredients" :key="index">
<TextField ref="ingredient" @loaded="focusField($event, 'sentence')" col="0" v-model="recipeContent.ingredients[index].item" :hint="`${$options.filters.L('Item')} ${index + 1}`" returnKeyType="next" />
<TextField width="60" col="2" v-model="recipeContent.ingredients[index].quantity" hint="1.00" keyboardType="number" returnKeyType="next" />
<TextField width="76" col="4" :text="`${recipeContent.ingredients[index].unit}` | L" editable="false" @focus="modalOpen === false && showUnits($event, true, index)" @tap="showUnits($event, false, index)" />
<GridLayout columns="auto,8,auto,8,*,8,auto" v-for="(ingredient, index) in recipeContent.ingredients" :key="index">
<TextField width="60" col="0" @loaded="!recipeContent.ingredients[index].item && focusField($event)" v-model="recipeContent.ingredients[index].quantity" hint="1.00" keyboardType="number" returnKeyType="next" />
<TextField width="76" col="2" :text="`${recipeContent.ingredients[index].unit}` | L" editable="false" @focus="modalOpen === false && showUnits($event, true, index)" @tap="showUnits($event, false, index)" />
<TextField ref="ingredient" @loaded="setInputTypeText($event, 'sentence')" col="4" v-model="recipeContent.ingredients[index].item" :hint="`${$options.filters.L('Item')} ${index + 1}`"
@returnPress="index+1 == recipeContent.ingredients.length && addIngredient()" />
<MDButton variant="text" col="6" class="bx closeBtn" :text="icon.close" @tap="removeIngredient(index)" />
</GridLayout>
<MDButton variant="text" class="text-btn orkm" :text="`+ ${$options.filters.L('ADD INGREDIENT')}`" @tap="addIngredient()" />
@ -74,15 +95,6 @@
<MDButton variant="text" class="text-btn orkm" :text="`+ ${$options.filters.L('ADD STEP')}`" @tap="addInstruction" />
<StackLayout class="hr" margin="24 16"></StackLayout>
</StackLayout>
<StackLayout margin="0 16">
<Label :text="'Combinations' | L" class="sectionTitle" />
<GridLayout columns="*,8,auto" v-for="(combination, index) in recipeContent.combinations" :key="index">
<TextField class="combinationToken" col="0" :text="getCombinationTitle(combination)" editable="false" />
<MDButton variant="text" col="2" class="bx closeBtn" :text="icon.close" @tap="removeCombination(combination)" />
</GridLayout>
<MDButton variant="text" class="text-btn orkm" :text="`+ ${$options.filters.L('ADD COMBINATION')}`" @tap="showCombinations" />
<StackLayout class="hr" margin="24 16"></StackLayout>
</StackLayout>
<StackLayout margin="0 16">
<Label :text="'Notes' | L" class="sectionTitle" />
<GridLayout columns="*,8,auto" v-for="(note, index) in recipeContent.notes" :key="index">
@ -90,6 +102,15 @@
<MDButton variant="text" col="2" class="bx closeBtn" :text="icon.close" @tap="removeNote(index)" />
</GridLayout>
<MDButton variant="text" class="text-btn orkm" :text="`+ ${$options.filters.L('ADD NOTE')}`" @tap="addNote" />
<StackLayout class="hr" margin="24 16"></StackLayout>
</StackLayout>
<StackLayout margin="0 16">
<Label :text="'Combinations' | L" class="sectionTitle" />
<GridLayout columns="*,8,auto" v-for="(combination, index) in recipeContent.combinations" :key="index">
<TextField class="combinationToken" col="0" :text="getCombinationTitle(combination)" editable="false" />
<MDButton variant="text" col="2" class="bx closeBtn" :text="icon.close" @tap="removeCombination(combination)" />
</GridLayout>
<MDButton variant="text" class="text-btn orkm" :text="`+ ${$options.filters.L('ADD COMBINATION')}`" @tap="showCombinations" />
</StackLayout>
</StackLayout>
</ScrollView>
@ -135,7 +156,7 @@ import PromptDialog from "./modal/PromptDialog.vue"
import ListPicker from "./modal/ListPicker.vue"
import * as utils from "~/shared/utils"
export default {
props: [ "recipeID", "selectedCategory", "filterFavourites", "filterTrylater", "navigationFromView", ],
props: [ "recipeID", "selectedCuisine", "selectedCategory", "selectedTag", "filterFavourites", "filterTrylater", "navigationFromView", ],
data() {
return {
title: "New recipe",
@ -143,13 +164,17 @@ export default {
recipeContent: {
imageSrc: null,
title: undefined,
cuisine: "Undefined",
category: "Undefined",
tags: [],
prepTime: "00:00",
cookTime: "00:00",
yield: {
quantity: undefined,
unit: "Serving",
},
difficulty: "Easy",
rating: 0,
ingredients: [],
instructions: [],
combinations: [],
@ -158,8 +183,10 @@ export default {
tried: true,
lastTried: null,
lastModified: null,
created: null,
},
tempRecipeContent: {},
tags: undefined,
blockModal: false,
modalOpen: false,
newRecipeID: null,
@ -167,10 +194,15 @@ export default {
saving: false,
cacheImagePath: null,
unSyncCombinations: [],
difficultyLevels: [
"Easy",
"Moderate",
"Challenging",
],
}
},
computed: {
...mapState( [ "icon", "units", "yieldUnits", "recipes", "categories", "currentComponent", ] ),
...mapState( [ "icon", "units", "yieldUnits", "recipes", "cuisines", "categories", "currentComponent", ] ),
screenWidth() {
return Screen.mainScreen.widthDIPs
},
@ -182,7 +214,7 @@ export default {
},
},
methods: {
...mapActions( [ "setCurrentComponentAction", "addRecipeAction", "overwriteRecipeAction", "addCategoryAction", "addYieldUnitAction", "unSyncCombinationsAction", ] ),
...mapActions( [ "setCurrentComponentAction", "addRecipeAction", "overwriteRecipeAction", "addListItemAction", "unSyncCombinationsAction", ] ),
onPageLoad( args ) {
const page = args.object;
page.bindingContext = new Observable();
@ -201,20 +233,21 @@ export default {
if ( type ) this.setInputTypeText( args, type )
if ( !args.object.text ) {
args.object.focus()
setTimeout( ( e ) => Utils.ad.showSoftInput( args.object.android ), 10 )
setTimeout( ( e ) => Utils.ad.showSoftInput( args.object.android ), 100 )
}
},
setInputTypeText( args, type ) {
let field = args.object
let common = android.text.InputType.TYPE_CLASS_TEXT | android.text.InputType.TYPE_TEXT_FLAG_AUTO_CORRECT
switch ( type ) {
case "words":
field.android.setInputType( android.text.InputType.TYPE_CLASS_TEXT | android.text.InputType.TYPE_TEXT_FLAG_CAP_WORDS | android.text.InputType.TYPE_TEXT_FLAG_AUTO_CORRECT )
field.android.setInputType( android.text.InputType.TYPE_TEXT_FLAG_CAP_WORDS | common )
break
case "sentence":
field.android.setInputType( android.text.InputType.TYPE_CLASS_TEXT | android.text.InputType.TYPE_TEXT_FLAG_CAP_SENTENCES | android.text.InputType.TYPE_TEXT_FLAG_AUTO_CORRECT )
field.android.setInputType( android.text.InputType.TYPE_TEXT_FLAG_CAP_SENTENCES | common )
break
case "multiLine":
field.android.setInputType( android.text.InputType.TYPE_CLASS_TEXT | android.text.InputType.TYPE_TEXT_FLAG_MULTI_LINE | android.text.InputType.TYPE_TEXT_FLAG_CAP_SENTENCES | android.text.InputType.TYPE_TEXT_FLAG_AUTO_CORRECT )
field.android.setInputType( android.text.InputType.TYPE_TEXT_FLAG_MULTI_LINE | android.text.InputType.TYPE_TEXT_FLAG_CAP_SENTENCES | common )
break
default:
break
@ -223,7 +256,7 @@ export default {
getRandomID() {
let res = ""
let chars = "abcdefghijklmnopqrstuvwxyz0123456789"
for ( let i = 0; i < 10; i++ ) {
for ( let i = 0; i < 20; i++ ) {
res += chars.charAt( Math.floor( Math.random() * chars.length ) )
}
return res
@ -263,13 +296,56 @@ export default {
this.viewIsScrolled = args.scrollY ? true : false
},
// DATA LIST
showCuisine( focus ) {
this.modalOpen = true
this.releaseBackEvent()
this.$showModal( ActionDialog, {
props: {
title: "Cuisine",
list: this.cuisines,
stretch: true,
action: "ADD NEW",
},
} ).then( ( action ) => {
if ( action == "ADD NEW" ) {
this.$showModal( PromptDialog, {
props: {
title: "New cuisine",
action: "ADD",
},
} ).then( ( item ) => {
this.hijackBackEvent()
if ( item.length ) {
this.recipeContent.cuisine = item
ApplicationSettings.setString( "previousCuisine", item )
this.addListItemAction( {
item,
listName: 'cuisines'
} )
this.modalOpen = false
if ( focus ) this.autoFocusField( "category", false )
}
} )
} else if ( action ) {
this.recipeContent.cuisine = action
ApplicationSettings.setString( "previousCuisine", action )
this.hijackBackEvent()
this.modalOpen = false
if ( focus ) this.autoFocusField( "category", false )
} else {
this.cuisines.includes( this.recipeContent.cuisine ) ? mull : this.recipeContent.cuisine = 'Undefined'
this.hijackBackEvent()
}
} )
},
showCategories( focus ) {
this.modalOpen = true
this.releaseBackEvent()
this.$showModal( ActionDialog, {
props: {
title: "Category",
list: [ ...this.categories ],
list: this.categories,
stretch: true,
action: "ADD NEW",
},
} ).then( ( action ) => {
@ -279,41 +355,39 @@ export default {
title: "New category",
action: "ADD",
},
} ).then( ( category ) => {
} ).then( ( item ) => {
this.hijackBackEvent()
if ( category.length ) {
this.recipeContent.category = category
this.addCategoryAction( category )
if ( item.length ) {
this.recipeContent.category = item
ApplicationSettings.setString( "previousCategory", item )
this.addListItemAction( {
item,
listName: 'categories'
} )
this.modalOpen = false
if ( focus ) this.autoFocusField( "prepTime", false )
if ( focus ) this.autoFocusField( "tags", true )
}
} )
} else if ( action ) {
this.recipeContent.category = action
ApplicationSettings.setString( "previousCategory", action )
this.hijackBackEvent()
this.modalOpen = false
if ( focus ) this.autoFocusField( "prepTime", false )
if ( focus ) this.autoFocusField( "tags", true )
} else {
this.categories.includes( this.recipeContent.category ) ? mull : this.recipeContent.category = 'Undefined'
this.hijackBackEvent()
}
} )
},
autoFocusField( ref, showSoftInput ) {
this.$refs[ ref ].nativeView.focus()
if ( showSoftInput ) {
setTimeout( () => {
Utils.ad.showSoftInput( this.$refs[ ref ].nativeView.android )
}, 1 )
}
},
showYieldUnits( focus ) {
this.modalOpen = true
this.releaseBackEvent()
this.$showModal( ActionDialog, {
props: {
title: "Yield measured in",
list: [ ...this.yieldUnits ],
// height: "420",
list: this.yieldUnits,
stretch: true,
action: "ADD NEW",
},
} ).then( ( action ) => {
@ -323,21 +397,48 @@ export default {
title: "New yield unit",
action: "ADD",
},
} ).then( ( yieldUnit ) => {
} ).then( ( item ) => {
this.hijackBackEvent()
if ( yieldUnit.length ) {
this.recipeContent.yield.unit = yieldUnit
this.addYieldUnitAction( yieldUnit )
if ( item.length ) {
this.recipeContent.yield.unit = item
ApplicationSettings.setString( "previousYieldUnit", item )
this.addListItemAction( {
item,
listName: 'yieldUnits'
} )
this.modalOpen = false
if ( focus ) this.addIngredient()
if ( focus ) this.autoFocusField( "difficultyLevel", false )
}
} )
} else if ( action ) {
this.recipeContent.yield.unit = action
ApplicationSettings.setString( "previousYieldUnit", action )
this.hijackBackEvent()
this.modalOpen = false
if ( focus ) this.autoFocusField( "difficultyLevel", false )
} else {
this.yieldUnits.includes( this.recipeContent.yield.unit ) ? mull : this.recipeContent.yield.unit = 'Serving'
this.hijackBackEvent()
}
} )
},
showDifficultyLevel( focus ) {
this.modalOpen = true
this.releaseBackEvent()
this.$showModal( ActionDialog, {
props: {
title: "Difficulty level",
list: this.difficultyLevels,
stretch: false,
},
} ).then( ( action ) => {
if ( action ) {
this.recipeContent.difficulty = action
this.hijackBackEvent()
this.modalOpen = false
if ( focus ) this.addIngredient()
} else {
this.difficultyLevels.includes( this.recipeContent.difficulty ) ? mull : this.recipeContent.difficulty = 'Easy'
this.hijackBackEvent()
}
} )
@ -347,26 +448,55 @@ export default {
this.releaseBackEvent()
this.$showModal( ActionDialog, {
props: {
title: localize( "Unit" ),
list: [ ...this.units ],
title: "Units",
list: this.units,
stretch: true,
action: "ADD NEW",
},
} ).then( ( action ) => {
this.hijackBackEvent()
if ( action ) {
this.recipeContent.ingredients[ index ].unit = e.object.text = action
this.modalOpen = false
if ( focus ) {
if ( this.recipeContent.ingredients.length - 1 === index ) {
this.addIngredient()
} else {
this.$refs.ingredient[ index + 1 ].nativeView.focus()
setTimeout(
( e ) => Utils.ad.showSoftInput( this.$refs.ingredient[ index + 1 ].nativeView.android ), 10 )
if ( action == "ADD NEW" ) {
this.$showModal( PromptDialog, {
props: {
title: "New unit",
action: "ADD",
},
} ).then( ( item ) => {
this.hijackBackEvent()
if ( item.length ) {
this.recipeContent.ingredients[ index ].unit = item
this.addListItemAction( {
item,
listName: 'units'
} )
this.modalOpen = false
if ( focus && this.recipeContent.ingredients.length - 1 === index )
this.autoFocusRefField( 'ingredient', index )
}
}
} )
} else if ( action ) {
this.recipeContent.ingredients[ index ].unit = action
this.modalOpen = false
if ( focus && this.recipeContent.ingredients.length - 1 === index ) this.autoFocusRefField( 'ingredient', index )
}
} )
},
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()
setTimeout( () => {
Utils.ad.showSoftInput( this.$refs[ ref ][ index ].nativeView.android )
}, 100 )
},
// NAVIGATION HANDLERS
navigateBackController() {
if ( this.navigationFromView ) {
@ -415,6 +545,7 @@ export default {
},
// DATA HANDLERS
imageHandler() {
this.clearEmptyFields()
if ( this.recipeContent.imageSrc ) {
this.blockModal = true
this.$showModal( ConfirmDialog, {
@ -500,6 +631,21 @@ export default {
} )
},
// INPUT FIELD HANDLERS
splitTags() {
let string
if ( this.tags ) {
let tags = this.tags.split( " " ).map( e => {
string = e.replace( /^[^\w\s]+/, '' )
if ( /^[A-Za-z]+/.test( string ) ) {
return string.charAt( 0 ).toUpperCase() + string.slice( 1 )
}
} ).filter( e => e )
this.recipeContent.tags = tags
}
},
joinTags() {
this.tags = this.recipeContent.tags.join( " " )
},
fieldDeletionConfirm( title ) {
return this.$showModal( ConfirmDialog, {
props: {
@ -510,20 +656,26 @@ export default {
} )
},
addIngredient() {
let ingredients = this.recipeContent.ingredients
let unit = ingredients.length ? ingredients[ ingredients.length - 1 ].unit : "unit"
this.recipeContent.ingredients.push( {
item: "",
quantity: null,
unit: "unit",
unit,
} )
},
removeIngredient( index ) {
this.modalOpen = true
if ( this.recipeContent.ingredients[ index ].item.length ) {
this.fieldDeletionConfirm( "Remove ingredient?" ).then( ( res ) => {
if ( res ) {
this.recipeContent.ingredients.splice( index, 1 )
}
} )
} else this.recipeContent.ingredients.splice( index, 1 )
} else {
this.recipeContent.ingredients.splice( index, 1 )
}
setTimeout( e => this.modalOpen = false, 200 )
},
addInstruction() {
this.recipeContent.instructions.push( "" )
@ -576,7 +728,7 @@ export default {
},
// SAVE OPERATION
clearEmptyFields() {
if ( !this.recipeContent.title ) this.recipeContent.title = "Untitled Recipe"
if ( !this.recipeContent.title ) this.recipeContent.title = localize( "Untitled Recipe" )
if ( !this.recipeContent.yield.quantity ) this.recipeContent.yield.quantity = 1
this.recipeContent.ingredients = this.recipeContent.ingredients.filter(
( e ) => e.item )
@ -613,7 +765,6 @@ export default {
this.saveRecipe()
},
saveRecipe() {
console.log( this.recipeContent.ingredients );
if ( this.recipeID ) {
this.overwriteRecipeAction( {
id: this.recipeID,
@ -641,9 +792,18 @@ export default {
let recipe = this.recipes.filter( ( e ) => e.id === this.recipeID )[ 0 ]
Object.assign( this.recipeContent, JSON.parse( JSON.stringify( recipe ) ) )
Object.assign( this.tempRecipeContent, JSON.parse( JSON.stringify( this.recipeContent ) ) )
if ( this.recipeContent.tags.length ) this.joinTags()
} else {
if ( this.selectedCategory ) this.recipeContent.category = this.selectedCategory
this.recipeContent.cuisine = this.selectedCuisine ? /All/.test( this.selectedCuisine ) ? "Undefined" : this.selectedCuisine : ApplicationSettings.getString( "previousCuisine", "Undefined" )
this.recipeContent.category = this.selectedCategory ? /All/.test( this.selectedCategory ) ? "Undefined" : this.selectedCategory : ApplicationSettings.getString( "previousCategory", "Undefined" )
if ( this.selectedTag && !/All/.test( this.selectedTag ) ) {
this.tags = this.selectedTag
this.splitTags()
}
this.recipeContent.yield.unit = ApplicationSettings.getString( "previousYieldUnit", "Serving" )
if ( this.filterFavourites ) this.recipeContent.isFavorite = true
if ( this.filterTrylater ) this.recipeContent.tried = false
this.recipeContent.created = new Date()
Object.assign( this.tempRecipeContent, JSON.parse( JSON.stringify( this.recipeContent ) ) )
this.newRecipeID = this.getRandomID()
}

View file

@ -3,7 +3,7 @@
<ActionBar :androidElevation="viewIsScrolled ? 4 : 0">
<GridLayout v-if="showSearch" columns="auto, *" verticalAlignment="center">
<MDButton class="bx" :text="icon.back" variant="text" automationText="Back" col="0" @tap="closeSearch" />
<SearchBar col="1" :hint="'Search by name or ingredient' | L" v-model="searchQuery" @textChange="updateFilter" @clear="clearSearch" />
<SearchBar col="1" :hint="'Search' | L" v-model="searchQuery" @textChange="updateFilter" @clear="clearSearch" />
</GridLayout>
<GridLayout v-else columns="auto, *, auto, auto">
<MDButton class="bx" col="0" variant="text" @tap="showDrawer" :text="icon.menu" automationText="Back" />
@ -13,46 +13,58 @@
</GridLayout>
</ActionBar>
<AbsoluteLayout>
<RadListView ref="listView" itemHeight="112" for="recipe in recipes" swipeActions="true" @itemSwipeProgressChanged="onSwiping" @itemSwipeProgressEnded="onSwipeEnded" @scrolled="onScroll" :filteringFunction="filterFunction"
<RadListView ref="listView" itemHeight="104" for="recipe in recipes" swipeActions="true" @itemSwipeProgressChanged="onSwiping" @itemSwipeProgressEnded="onSwipeEnded" @scrolled="onScroll" :filteringFunction="filterFunction"
:sortingFunction="sortFunction">
<v-template name="header">
<StackLayout height="4"></StackLayout>
</v-template>
<v-template>
<GridLayout class="recipeItem" rows="112" columns="112, *" androidElevation="1">
<GridLayout class="recipeItem" rows="104" columns="104, *" androidElevation="1">
<MDRipple colSpan="2" @tap="viewRecipe(recipe.id)" />
<GridLayout class="imageHolder card" rows="112" columns="112">
<Image row="0" col="0" v-if="recipe.imageSrc" :src="recipe.imageSrc" stretch="aspectFill" decodeWidth="112" decodeHeight="112" loadMode="async" />
<GridLayout class="imageHolder card" rows="104" columns="104">
<Image row="0" col="0" v-if="recipe.imageSrc" :src="recipe.imageSrc" stretch="aspectFill" decodeWidth="104" decodeHeight="104" loadMode="async" />
<Label v-else row="0" col="0" horizontalAlignment="center" class="bx" fontSize="56" :text="icon.image" />
</GridLayout>
<StackLayout class="recipeInfo" col="1">
<Label :text="`${recipe.category}` | L" class="orkm category" />
<Label :text="`${$options.filters.L(recipe.cuisine)} • ${$options.filters.L(recipe.category)}`" class="category" />
<Label :text="recipe.title" class="orkm title" />
<StackLayout class="timeContainer" orientation="horizontal">
<Label class="bx small" :text="icon.time" />
<Label class="time" :text="
`${
formattedTotalTime(recipe.prepTime, recipe.cookTime).time
}`
" />
</StackLayout>
<GridLayout columns="*" rows="auto, *, auto">
<StackLayout class="attrContainer" orientation="horizontal" row="0">
<Label class="bx small" :text="icon.starLine" />
<Label class="attr" :text="recipe.rating" />
<Label class="bx small" :text="icon.meter" />
<Label class="attr" :text="`${recipe.difficulty}` | L" />
<Label class="bx small" :text="icon.time" />
<Label class="attr" :text="
`${
formattedTotalTime(recipe.prepTime, recipe.cookTime).time
}`
" />
</StackLayout>
<FlexboxLayout class="tagsContainer" flexWrap="wrap" row="2">
<Label v-for="(tag, index) in recipe.tags" :key="index" v-if="tag && index < 2" class="tag" :text="tag" />
<Label class="collapsedTagsCount" v-if="recipe.tags.length > 2" :text="recipe.tags.length - 2 +'+'" />
</FlexboxLayout>
</GridLayout>
</StackLayout>
</GridLayout>
</v-template>
<v-template name="itemswipe">
<GridLayout columns="*, auto">
<GridLayout columns="*, auto" padding="0">
<StackLayout id="delete-action" col="1" class="swipe-item right">
<Label class="bx" padding="8 0 0 6" :text="icon.trash" />
<Label class="bx" padding="8" :text="icon.trash" />
</StackLayout>
</GridLayout>
</v-template>
<v-template name="footer">
<StackLayout height="80"></StackLayout>
<StackLayout height="84"></StackLayout>
</v-template>
</RadListView>
<GridLayout rows="*, auto, *, 88" columns="*" class="emptyStateContainer">
<StackLayout row="1" class="emptyState" v-if="
!recipes.length &&
!filterFavourites &&
!filterTrylater &&
!selectedCategory
!filterTrylater
" @tap="addRecipe">
<Label class="bx icon" :text="icon.plusCircle" />
<Label class="title orkm" :text="'Start adding your recipes!' | L" textWrap="true" />
@ -61,17 +73,17 @@
</StackLayout>
</StackLayout>
<StackLayout row="1" class="emptyState" v-if="!filteredRecipes.length && filterTrylater && !searchQuery">
<Label class="bx icon" :text="icon.trylaterOutline" textWrap="true" />
<Label class="bx icon" :text="icon.trylaterLine" textWrap="true" />
<Label class="title orkm" :text="'All done!' | L" textWrap="true" />
<Label :text="'Recipes you mark as try later will be listed here' | L" textWrap="true" />
</StackLayout>
<StackLayout row="1" class="emptyState" v-if="!filteredRecipes.length && filterFavourites && !searchQuery">
<Label class="bx icon" :text="icon.heartOutline" textWrap="true" />
<Label class="bx icon" :text="icon.heartLine" textWrap="true" />
<Label class="title orkm" :text="'No favourites yet' | L" textWrap="true" />
<Label :text="'Recipes you mark as favourite will be listed here' | L" textWrap="true" />
</StackLayout>
<StackLayout row="1" class="emptyState" v-if="!filteredRecipes.length && !searchQuery && selectedCategory">
<Label class="bx icon" :text="icon.labelOutline" textWrap="true" />
<StackLayout row="1" class="emptyState" v-if="selectedCuisine && !filteredRecipes.length && !searchQuery">
<Label class="bx icon" :text="icon.categoryLine" textWrap="true" />
<Label class="title orkm" :text="'Category looks empty' | L" textWrap="true" />
<StackLayout orientation="horizontal" horizontalAlignment="center">
<Label :text="'Use the plus button to add one' | L" textWrap="true" />
@ -94,15 +106,28 @@
<script>
import {
ApplicationSettings,
AndroidApplication,
Utils,
Observable
Observable,
Device,
}
from "@nativescript/core";
import {
localize
}
from "@nativescript/localize"
import {
time
} from "tns-core-modules/profiling"
import {
startAccelerometerUpdates,
stopAccelerometerUpdates,
} from "nativescript-accelerometer"
import {
Vibrate
} from 'nativescript-vibrate';
let vibrator = new Vibrate();
import {
mapActions,
mapState
@ -113,8 +138,12 @@ import ViewRecipe from "./ViewRecipe.vue";
import ActionDialog from "./modal/ActionDialog.vue";
import ConfirmDialog from "./modal/ConfirmDialog.vue";
import * as utils from "~/shared/utils";
let lastTime = 0;
let lastShake = 0;
let lastForce = 0;
let shakeCount = 0;
export default {
props: [ "filterFavourites", "filterTrylater", "closeDrawer", "selectedCategory", "hijackGlobalBackEvent", "releaseGlobalBackEvent" ],
props: [ "filterFavourites", "filterTrylater", "closeDrawer", "selectedCategory", "selectedCuisine", "selectedTag", "hijackGlobalBackEvent", "releaseGlobalBackEvent" ],
components: {
EditRecipe,
ViewRecipe
@ -125,41 +154,46 @@ export default {
viewIsScrolled: false,
showSearch: false,
rightAction: false,
sortType: "Natural order",
deletionDialogActive: false,
showFAB: false
};
},
computed: {
...mapState( [ "icon", "recipes", "currentComponent" ] ),
...mapState( [ "sortType", "icon", "recipes", "currentComponent", "shakeEnabled" ] ),
filteredRecipes() {
let ingredients = this.recipes.map( e => e.ingredients.map( f => f.item.toLowerCase() ).join() ).join()
let tags = this.recipes.map( e => e.tags.map( f => f.toLowerCase() ).join() ).join()
if ( this.filterFavourites ) {
return this.recipes.filter( e => e.isFavorite && e.title.toLowerCase().includes( this.searchQuery ) || ingredients.includes( this.searchQuery ) );
return this.recipes.filter( e => e.isFavorite && ( tags.includes( this.searchQuery ) || e.title.toLowerCase().includes( this.searchQuery ) || ingredients.includes( this.searchQuery ) ) )
} else if ( this.filterTrylater ) {
return this.recipes.filter( e => !e.tried && e.title.toLowerCase().includes( this.searchQuery ) || ingredients.includes( this.searchQuery ) );
} else if ( this.selectedCategory ) {
return this.recipes.filter( e => e.category === this.selectedCategory && e.title.toLowerCase().includes( this.searchQuery ) || ingredients.includes( this.searchQuery ) );
return this.recipes.filter( e => !e.tried && ( tags.includes( this.searchQuery ) || e.title.toLowerCase().includes( this.searchQuery ) || ingredients.includes( this.searchQuery ) ) )
} else if ( this.selectedCuisine ) {
return this.recipes.filter( e => {
return this.recipeFilter( e ) && ( tags.includes( this.searchQuery ) || e.title.toLowerCase().includes( this.searchQuery ) || ingredients.includes( this.searchQuery ) )
} )
} else {
return this.recipes.filter( e => e.title.toLowerCase().includes( this.searchQuery ) || ingredients.includes( this.searchQuery ) );
return this.recipes.filter( e => tags.includes( this.searchQuery ) || e.title.toLowerCase().includes( this.searchQuery ) || ingredients.includes( this.searchQuery ) )
}
},
noResultFor() {
if ( this.selectedCategory ) return "Your search did not match any recipes in this category";
if ( this.selectedCuisine ) return "Your search did not match any recipes in the filtered result";
if ( this.filterFavourites ) return "Your search did not match any recipes in your favourites";
if ( this.filterTrylater ) return "Your search did not match any recipes in your try later list";
return "Your search did not match any recipes";
}
},
},
methods: {
...mapActions( [ "setCurrentComponentAction", "deleteRecipeAction" ] ),
...mapActions( [ "setCurrentComponentAction", "setSortTypeAction", "deleteRecipeAction" ] ),
onPageLoad( args ) {
const page = args.object;
page.bindingContext = new Observable();
this.filterFavourites ? this.setComponent( "Favourites" ) : this.filterTrylater ? this.setComponent( "Try Later" ) : this.selectedCategory ? this.setComponent( this.selectedCategory ) : this.setComponent( "EnRecipes" );
this.filterFavourites ? this.setComponent( "Favourites" ) : this.filterTrylater ? this.setComponent( "Try Later" ) : this.selectedCuisine ? this.setComponent( "Filtered result" ) : this.setComponent( "EnRecipes" );
this.showFAB = true;
if ( this.shakeEnabled ) startAccelerometerUpdates( data => this.onSensorData( data ) )
},
onPageUnload() {
if ( this.shakeEnabled ) stopAccelerometerUpdates();
this.releaseGlobalBackEvent();
},
// HELPERS
@ -191,8 +225,9 @@ export default {
formattedTotalTime( prepTime, cookTime ) {
let t1 = prepTime.split( ":" );
let t2 = cookTime.split( ":" );
let h = parseInt( t1[ 0 ] ) + parseInt( t2[ 0 ] );
let m = parseInt( t1[ 1 ] ) + parseInt( t2[ 1 ] );
let minutes = parseInt( t1[ 1 ] ) + parseInt( t2[ 1 ] )
let m = minutes % 60
let h = parseInt( t1[ 0 ] ) + parseInt( t2[ 0 ] ) + Math.floor( minutes / 60 );
let hr = localize( 'hr' )
let min = localize( 'min' )
return {
@ -203,6 +238,23 @@ export default {
onScroll( args ) {
this.viewIsScrolled = args.scrollOffset ? true : false;
},
randomRecipeID() { // TODO: show only from selected filter
let min = 0
let max = this.filteredRecipes.length - 1
let randomIndex = Math.round( Math.random() * ( max - min ) )
return this.filteredRecipes[ randomIndex ].id
},
recipeFilter( e ) {
let cuisineMatched = e.cuisine === this.selectedCuisine
let allCuisines = /All/.test( this.selectedCuisine )
let categoryMatched = e.category === this.selectedCategory
let allCategories = /All/.test( this.selectedCategory )
let tagMatched = e.tags.includes( this.selectedTag )
let allTags = /All/.test( this.selectedTag )
let cuisine = cuisineMatched || allCuisines
return this.selectedTag && !allTags ? ( categoryMatched || allCategories ) && cuisine && tagMatched : this.selectedCategory && !allCategories ? cuisine && categoryMatched : cuisine
},
// NAVIGATION HANDLERS
hijackLocalBackEvent() {
this.releaseGlobalBackEvent();
@ -222,8 +274,11 @@ export default {
this.releaseGlobalBackEvent();
this.$navigateTo( EditRecipe, {
props: {
selectedCuisine: this.selectedCuisine,
selectedCategory: this.selectedCategory,
filterFavourites: this.filterFavourites
selectedTag: this.selectedTag,
filterFavourites: this.filterFavourites,
filterTrylater: this.filterTrylater,
}
} );
},
@ -237,18 +292,29 @@ export default {
backstackVisible: false
} );
},
viewRandomRecipe() {
this.showFAB = false;
this.$navigateTo( ViewRecipe, {
props: {
filterTrylater: false,
recipeID: this.randomRecipeID()
},
backstackVisible: false
} );
},
// LIST HANDLERS
sortDialog() {
this.releaseGlobalBackEvent();
this.$showModal( ActionDialog, {
props: {
title: "Sort by",
list: [ "Natural order", "Title", "Duration", "Last modified" ],
height: "192"
list: [ "Title", "Quickest first", "Slowest first", "Rating", "Difficulty level", "Last updated", "Newest first", "Oldest first" ],
stretch: false
}
} ).then( action => {
if ( action && action !== "Cancel" && this.sortType !== action ) {
this.sortType = action;
this.setSortTypeAction( action )
ApplicationSettings.setString( "sortType", action )
this.updateSort();
}
this.hijackGlobalBackEvent();
@ -260,25 +326,54 @@ export default {
listView.sortingFunction = this.sortFunction;
},
sortFunction( item, otherItem ) {
const titleOrder = item.title.toLowerCase().localeCompare( otherItem.title.toLowerCase(), "en", {
const titleOrder = item.title.toLowerCase().localeCompare( otherItem.title.toLowerCase(), Device.language, {
ignorePunctuation: true
} );
let d1 = this.formattedTotalTime( item.prepTime, item.cookTime ).duration;
let d2 = this.formattedTotalTime( otherItem.prepTime, otherItem.cookTime ).duration;
let ld1 = new Date( item.lastModified );
let ld2 = new Date( otherItem.lastModified );
let cd1 = new Date( item.created );
let cd2 = new Date( otherItem.created );
let r1 = item.rating
let r2 = otherItem.rating
function difficultyLevel( level ) {
switch ( level ) {
case "Easy":
return 1;
case "Moderate":
return 2;
case "Challenging":
return 3;
}
}
let dl1 = difficultyLevel( item.difficulty )
let dl2 = difficultyLevel( otherItem.difficulty )
switch ( this.sortType ) {
case "Title":
return titleOrder > 0 ? -1 : titleOrder < 0 ? 1 : 0;
break;
case "Duration":
case "Quickest first":
return d1 > d2 ? -1 : d1 < d2 ? 1 : 0;
break;
case "Last modified":
case "Slowest first":
return d1 > d2 ? 1 : d1 < d2 ? -1 : 0;
break;
case "Rating":
return r1 > r2 ? 1 : r1 < r2 ? -1 : 0;
break;
case "Difficulty level":
return dl1 > dl2 ? -1 : dl1 < dl2 ? 1 : 0;
break;
case "Last updated":
return ld1 < ld2 ? -1 : ld1 > ld2 ? 1 : 0;
break;
default:
return 0;
case "Newest first":
return cd1 < cd2 ? -1 : cd1 > cd2 ? 1 : 0;
break;
case "Oldest first":
return cd1 < cd2 ? 1 : cd1 > cd2 ? -1 : 0;
break;
}
},
@ -289,16 +384,17 @@ export default {
listView.filteringFunction = this.filterFunction;
}, 1 );
},
filterFunction( item ) {
let ingredients = item.ingredients.map( e => e.item.toLowerCase() ).join()
filterFunction( e ) {
let ingredients = e.ingredients.map( e => e.item.toLowerCase() ).join()
let tags = e.tags.map( e => e.toLowerCase() ).join()
if ( this.filterFavourites ) {
return item.isFavorite ? item.title.toLowerCase().includes( this.searchQuery ) || ingredients.includes( this.searchQuery ) : false;
return e.isFavorite ? tags.includes( this.searchQuery ) || e.title.toLowerCase().includes( this.searchQuery ) || ingredients.includes( this.searchQuery ) : false;
} else if ( this.filterTrylater ) {
return item.tried ? false : item.title.toLowerCase().includes( this.searchQuery ) || ingredients.includes( this.searchQuery );
} else if ( this.selectedCategory ) {
return item.category === this.selectedCategory ? item.title.toLowerCase().includes( this.searchQuery ) || ingredients.includes( this.searchQuery ) : false;
return e.tried ? false : tags.includes( this.searchQuery ) || e.title.toLowerCase().includes( this.searchQuery ) || ingredients.includes( this.searchQuery );
} else if ( this.selectedCuisine ) {
return this.recipeFilter( e ) ? tags.includes( this.searchQuery ) || e.title.toLowerCase().includes( this.searchQuery ) || ingredients.includes( this.searchQuery ) : false;
} else {
return item.title.toLowerCase().includes( this.searchQuery ) || ingredients.includes( this.searchQuery );
return tags.includes( this.searchQuery ) || e.title.toLowerCase().includes( this.searchQuery ) || ingredients.includes( this.searchQuery );
}
},
onSwiping( {
@ -308,8 +404,8 @@ export default {
const swipeLimits = data.swipeLimits;
const swipeView = object;
const rightItem = swipeView.getViewById( "delete-action" );
swipeLimits.right = rightItem.getMeasuredWidth() - 12;
swipeLimits.threshold = swipeLimits.right - 6;
swipeLimits.right = rightItem.getMeasuredWidth() - 8;
swipeLimits.threshold = swipeLimits.right - 4;
if ( data.x < -swipeLimits.threshold ) {
this.rightAction = true;
swipeView.notifySwipeToExecuteFinished();
@ -341,7 +437,43 @@ export default {
}
this.deletionDialogActive = false;
} );
}
},
// SHAKE DETECTOR
onSensorData( {
x,
y,
z
} ) {
x = x.toFixed( 2 )
y = y.toFixed( 2 )
z = z.toFixed( 2 )
const FORCE_THRESHOLD = 1;
const TIME_THRESHOLD = 150;
const SHAKE_TIMEOUT = 600;
const SHAKE_THROTTLE = 600;
const SHAKE_COUNT = 3;
const now = time()
if ( ( now - lastForce ) > SHAKE_TIMEOUT ) {
shakeCount = 0;
}
let timeDelta = now - lastTime;
if ( timeDelta > TIME_THRESHOLD ) {
let forceVector = Math.abs( Math.sqrt( Math.pow( x, 2 ) + Math.pow( y, 2 ) + Math.pow( z, 2 ) ) - 1 );
if ( forceVector > FORCE_THRESHOLD ) {
shakeCount++;
if ( ( shakeCount >= SHAKE_COUNT ) && ( now - lastShake > SHAKE_THROTTLE ) ) {
lastShake = now;
shakeCount = 0;
if ( this.filteredRecipes.length ) {
vibrator.vibrate( 100 )
this.viewRandomRecipe()
}
}
lastForce = now;
}
lastTime = now;
}
},
},
mounted() {
this.showFAB = true;

View file

@ -15,12 +15,11 @@
<StackLayout v-for="(mealType, index) in mealTimes" :key="'mealType' + index" class="plansContainer" :class="mealType">
<GridLayout columns="*, auto" class="header">
<Label col="0" class="periodLabel orkm" :text="mealType | L" />
<MDButton col="1" variant="text" class="bx addMeal" :text="icon.plus" @tap="addRecipe(mealType)" />
<MDButton col="1" variant="text" class="bx" :text="icon.plus" @tap="addRecipe(mealType)" />
</GridLayout>
<GridLayout class="recipes" columns="*, auto" v-for="(recipeID, index) in getRecipes[mealType]" :key="mealType + index">
<MDRipple @tap="viewRecipe(recipeID)" />
<GridLayout class="recipes" :paddingTop="index == 0?8:0" columns="*" v-for="(recipeID, index) in getRecipes[mealType]" :key="mealType + index">
<MDRipple @tap="viewRecipe(recipeID)" @longPress="removeRecipe(mealType, recipeID)" />
<Label verticalAlignment="center" class="recipeTitle" col="0" :text="getRecipeTitle(recipeID)" textWrap="true" />
<MDButton variant="text" col="1" class="bx closeBtn" :text="icon.close" @tap="removeRecipe(mealType, recipeID)" />
</GridLayout>
</StackLayout>
</StackLayout>
@ -57,14 +56,10 @@ import {
mapActions
}
from "vuex"
import ViewRecipe from "./ViewRecipe.vue"
import ActionDialogWithSearch from "./modal/ActionDialogWithSearch.vue"
import ConfirmDialog from "./modal/ConfirmDialog.vue"
import * as utils from "~/shared/utils"
export default {
data() {
return {
@ -90,10 +85,10 @@ export default {
gray9: new Color( "#212529" ),
black: new Color( "#111111" ),
orange: new Color( "#ff5200" ),
breakfast: "#ffb180",
lunch: "#ceff80",
dinner: "#80ceff",
snacks: "#b180ff",
breakfast: "#ff922b",
lunch: "#94d82d",
dinner: "#339af0",
snacks: "#845ef7",
},
appFontRegular: "Orkney-Regular",
appFontMedium: "Orkney-Medium",
@ -107,44 +102,27 @@ export default {
},
monthViewStyle() {
const monthViewStyle = new CalendarMonthViewStyle()
monthViewStyle.backgroundColor = this.isLightMode ?
this.color.gray1 :
this.color.gray9
monthViewStyle.backgroundColor = this.isLightMode ? this.color.gray1 : this.color.gray9
monthViewStyle.showTitle = true
monthViewStyle.showWeekNumbers = false
monthViewStyle.showDayNames = true
const titleCellStyle = new DayCellStyle()
titleCellStyle.cellBackgroundColor = this.isLightMode ?
this.color.gray2 :
this.color.black
titleCellStyle.cellBackgroundColor = this.isLightMode ? this.color.gray2 : this.color.black
titleCellStyle.cellBorderWidth = 1
titleCellStyle.cellBorderColor = this.isLightMode ?
this.color.gray2 :
this.color.black
titleCellStyle.cellBorderColor = this.isLightMode ? this.color.gray2 : this.color.black
titleCellStyle.cellTextSize = 16
titleCellStyle.cellTextColor = this.isLightMode ?
this.color.gray9 :
this.color.gray1
titleCellStyle.cellTextColor = this.isLightMode ? this.color.gray9 : this.color.gray1
titleCellStyle.cellTextFontName = this.appFontMedium
monthViewStyle.titleCellStyle = titleCellStyle
const dayNameCellStyle = new CellStyle()
dayNameCellStyle.cellBackgroundColor = this.isLightMode ?
this.color.gray2 :
this.color.black
dayNameCellStyle.cellTextColor = this.isLightMode ?
this.color.gray9 :
this.color.gray1
dayNameCellStyle.cellBackgroundColor = this.isLightMode ? this.color.gray2 : this.color.black
dayNameCellStyle.cellTextColor = this.isLightMode ? this.color.gray9 : this.color.gray1
dayNameCellStyle.cellBorderWidth = 1
dayNameCellStyle.cellBorderColor = this.isLightMode ?
this.color.gray2 :
this.color.black
dayNameCellStyle.cellBorderColor = this.isLightMode ? this.color.gray2 : this.color.black
dayNameCellStyle.cellTextSize = 10
dayNameCellStyle.cellAlignment = CalendarCellAlignment.Center
dayNameCellStyle.cellTextFontName = this.appFontMedium
monthViewStyle.dayNameCellStyle = dayNameCellStyle
const dayCellStyle = new DayCellStyle()
dayCellStyle.showEventsText = false
dayCellStyle.eventTextColor = this.color.orange
@ -152,51 +130,34 @@ export default {
dayCellStyle.eventFontStyle = CalendarFontStyle.Bold
dayCellStyle.eventTextSize = 8
dayCellStyle.cellTextSize = 16
dayCellStyle.cellTextColor = this.isLightMode ?
this.color.gray9 :
this.color.gray1
dayCellStyle.cellTextColor = this.isLightMode ? this.color.gray9 : this.color.gray1
dayCellStyle.cellAlignment = CalendarCellAlignment.Bottom
dayCellStyle.cellBackgroundColor = this.isLightMode ?
this.color.gray1 :
this.color.gray9
dayCellStyle.cellBackgroundColor = this.isLightMode ? this.color.gray1 : this.color.gray9
dayCellStyle.cellTextFontName = this.appFontRegular
dayCellStyle.cellBorderWidth = 1
dayCellStyle.cellBorderColor = this.isLightMode ?
this.color.gray2 :
this.color.black
dayCellStyle.cellBorderColor = this.isLightMode ? this.color.gray2 : this.color.black
monthViewStyle.dayCellStyle = dayCellStyle
const todayCellStyle = new DayCellStyle()
todayCellStyle.cellBackgroundColor = this.isLightMode ?
this.color.gray1 :
this.color.gray9
todayCellStyle.cellBackgroundColor = this.isLightMode ? this.color.gray1 : this.color.gray9
todayCellStyle.cellTextColor = this.color.orange
todayCellStyle.cellBorderWidth = 1
todayCellStyle.cellTextFontName = this.appFontMedium
todayCellStyle.cellTextFontStyle = CalendarFontStyle.Bold
todayCellStyle.cellTextSize = 16
todayCellStyle.cellAlignment = CalendarCellAlignment.Bottom
todayCellStyle.cellBorderColor = this.isLightMode ?
this.color.gray2 :
this.color.black
todayCellStyle.cellBorderColor = this.isLightMode ? this.color.gray2 : this.color.black
monthViewStyle.todayCellStyle = todayCellStyle
const selectedCellStyle = new DayCellStyle()
selectedCellStyle.eventTextSize = 1
selectedCellStyle.cellAlignment = CalendarCellAlignment.Bottom
selectedCellStyle.cellBackgroundColor = this.isLightMode ?
this.color.white :
this.color.gray8
selectedCellStyle.cellBackgroundColor = this.isLightMode ? this.color.white : this.color.gray8
selectedCellStyle.cellBorderWidth = 1
selectedCellStyle.cellBorderColor = this.color.orange
selectedCellStyle.cellTextColor = this.isLightMode ?
this.color.gray9 :
this.color.gray1
selectedCellStyle.cellTextColor = this.isLightMode ? this.color.gray9 : this.color.gray1
selectedCellStyle.cellTextFontName = this.appFontMedium
selectedCellStyle.cellTextFontStyle = CalendarFontStyle.Bold
selectedCellStyle.cellTextSize = 16
monthViewStyle.selectedDayCellStyle = selectedCellStyle
return monthViewStyle
},
getRecipes() {
@ -220,41 +181,24 @@ export default {
}
return acc
}, {} )
}
else return 0
} else return 0
},
getMealPlans() {
const getDate = ( date ) => {
let d = new Date( date )
let result = new Date(
d.getFullYear(),
d.getMonth(),
d.getDate(),
d.getHours()
)
let result = new Date( d.getFullYear(), d.getMonth(), d.getDate(), d.getHours() )
return result
}
let events = []
this.mealPlans.forEach( ( plan ) => {
let e = new CalendarEvent(
plan.title,
getDate( plan.startDate ),
getDate( plan.endDate ),
false,
new Color( plan.eventColor )
)
let e = new CalendarEvent( plan.title, getDate( plan.startDate ), getDate( plan.endDate ), false, new Color( plan.eventColor ) )
events = [ ...events, e ]
} )
return events
},
},
methods: {
...mapActions( [
"setCurrentComponentAction",
"initializeMealPlans",
"addMealPlanAction",
"deleteMealPlanAction",
] ),
...mapActions( [ "setCurrentComponentAction", "initializeMealPlans", "addMealPlanAction", "deleteMealPlanAction", ] ),
onPageLoad( args ) {
const page = args.object;
page.bindingContext = new Observable();
@ -263,24 +207,13 @@ export default {
onCalendarLoad( args ) {
args.object.locale = `${Device.language}-${Device.language.toUpperCase()}`
args.object.monthViewStyle = this.monthViewStyle
args.object.android
.getGestureManager()
.setDoubleTapToChangeDisplayMode( false )
args.object.android
.getGestureManager()
.setPinchCloseToChangeDisplayMode( false )
if ( args.object.selectedDate == null )
args.object.selectedDate = new Date()
args.object.android.getGestureManager().setDoubleTapToChangeDisplayMode( false )
args.object.android.getGestureManager().setPinchCloseToChangeDisplayMode( false )
if ( args.object.selectedDate == null ) args.object.selectedDate = new Date()
if ( args.object.nativeView.getEventAdapter() ) {
args.object.nativeView
.getEventAdapter()
.getRenderer()
.setEventRenderMode(
com.telerik.widget.calendar.events.EventRenderMode.Shape
)
args.object.nativeView.getEventAdapter().getRenderer().setEventRenderMode( com.telerik.widget.calendar.events.EventRenderMode.Shape )
}
},
// HELPERS
showDrawer() {
utils.showDrawer()
@ -300,9 +233,8 @@ export default {
},
getRecipeTitle( id ) {
let recipe = this.recipes.filter( ( e ) => e.id === id )[ 0 ]
return recipe ? recipe.title : "[Deleted Recipe]"
return recipe ? recipe.title : `[ ${this.$options.filters.L('Recipe not found')} ]`
},
// NAVIGATION HANDLERS
viewRecipe( recipeID ) {
let recipe = this.recipes.filter( ( e ) => e.id === recipeID )[ 0 ]
@ -316,14 +248,9 @@ export default {
} )
}
},
// DATA HANDLERS
addRecipe( mealType ) {
let filteredRecipes = this.recipes.filter( ( e ) =>
this.getRecipes[ mealType ] ?
!this.getRecipes[ mealType ].includes( e.id ) :
true
)
let filteredRecipes = this.recipes.filter( ( e ) => this.getRecipes[ mealType ] ? !this.getRecipes[ mealType ].includes( e.id ) : true )
this.$showModal( ActionDialogWithSearch, {
props: {
title: "Select a recipe",
@ -336,7 +263,7 @@ export default {
removeRecipeConfirm( mealType ) {
return this.$showModal( ConfirmDialog, {
props: {
title: `Remove recipe from ${mealType}`,
title: `Remove recipe from ${mealType}?`,
cancelButtonText: "CANCEL",
okButtonText: "REMOVE",
},
@ -352,10 +279,7 @@ export default {
this.removeRecipeConfirm( mealType ).then( ( res ) => {
if ( res ) {
let actualMealPlan = this.selectedDayMealPlans.filter(
( e ) =>
e.startDate.getHours() === startHour[ mealType ] &&
e.title === recipeID
)[ 0 ]
( e ) => e.startDate.getHours() === startHour[ mealType ] && e.title === recipeID )[ 0 ]
let mealPlan = {
title: actualMealPlan.title,
startDate: actualMealPlan.startDate,
@ -365,14 +289,11 @@ export default {
}
} )
},
// CALENDAR
updateSelectedDatePlans() {
let date = new Date( this.selectedDate )
setTimeout( () => {
this.selectedDayMealPlans = this.$refs.calendar.nativeView.getEventsForDate(
date
)
this.selectedDayMealPlans = this.$refs.calendar.nativeView.getEventsForDate( date )
}, 100 )
},
onDateSelected( args ) {
@ -411,13 +332,7 @@ export default {
end: new Date( y, m, d, 19 ),
},
}
let event = new CalendarEvent(
recipeID,
mealTime[ mealType ].start,
mealTime[ mealType ].end,
false,
new Color( this.color[ mealType ] )
)
let event = new CalendarEvent( recipeID, mealTime[ mealType ].start, mealTime[ mealType ].end, false, new Color( this.color[ mealType ] ) )
this.addMealPlanAction( {
event,
eventColor: this.color[ mealType ]

View file

@ -26,6 +26,21 @@
</StackLayout>
</GridLayout>
<StackLayout class="hr m-10"></StackLayout>
<Label :text="'Options' | L" class="group-header orkm" />
<!-- <GridLayout columns="auto, *, auto" class="option">
<Label col="0" verticalAlignment="center" class="bx" :text="icon.show" />
<Label col="1" verticalAlignment="center" :text="'Keep display on while viewing a recipe' | L" textWrap="true" />
<Switch :color="shakeEnabled ? '#ff5200' : appTheme==='Light' ? '#495057' : '#adb5bd'" verticalAlignment="center" col="2" :checked="shakeEnabled" @checkedChange="toggleShake" />
</GridLayout> -->
<GridLayout columns="auto, *, auto" class="option">
<Label col="0" verticalAlignment="center" class="bx" :text="icon.shuffle" />
<StackLayout col="1">
<Label :text="'Shake to view random recipe' | L" textWrap="true" />
<Label :text="`Helps you choose what to cook when you can't decide` | L" class="info" textWrap="true" />
</StackLayout>
<Switch :color="shakeEnabled ? '#ff5200' : appTheme==='Light' ? '#495057' : '#adb5bd'" verticalAlignment="center" col="2" :checked="shakeEnabled" @checkedChange="toggleShake" />
</GridLayout>
<StackLayout class="hr m-10"></StackLayout>
<Label :text="'Database' | L" class="group-header orkm" />
<GridLayout columns="auto, *" class="option">
<MDRipple colSpan="2" @tap="exportCheck" />
@ -47,6 +62,29 @@
<Label :text="'Supports full backups exported by this app' | L" class="info" textWrap="true" />
</StackLayout>
</GridLayout>
<StackLayout class="hr m-10"></StackLayout>
<Label :text="'Reset' | L" class="group-header orkm" />
<GridLayout columns="auto, *" class="option">
<MDRipple colSpan="2" @tap="resetListItems('cuisines')" />
<Label col="0" class="bx" :text="icon.reset" />
<Label col="1" verticalAlignment="center" :text="'Reset cuisines list' | L" textWrap="true" />
</GridLayout>
<GridLayout columns="auto, *" class="option">
<MDRipple colSpan="2" @tap="resetListItems('categories')" />
<Label col="0" class="bx" :text="icon.reset" />
<Label col="1" verticalAlignment="center" :text="'Reset categories list' | L" textWrap="true" />
</GridLayout>
<GridLayout columns="auto, *" class="option">
<MDRipple colSpan="2" @tap="resetListItems('yieldUnits')" />
<Label col="0" class="bx" :text="icon.reset" />
<Label col="1" verticalAlignment="center" :text="'Reset yield units list' | L" textWrap="true" />
</GridLayout>
<GridLayout columns="auto, *" class="option">
<MDRipple colSpan="2" @tap="resetListItems('units')" />
<Label col="0" class="bx" :text="icon.reset" />
<Label col="1" verticalAlignment="center" :text="'Reset units list' | L" textWrap="true" />
</GridLayout>
<Label class="group-info" :text="'Resetting a list will NOT delete your existing entries but only restores the deleted default entries.' | L" textWrap="true" />
</StackLayout>
</ScrollView>
</Page>
@ -81,12 +119,9 @@ import {
mapActions
}
from "vuex"
import ActionDialog from "./modal/ActionDialog.vue"
import ConfirmDialog from "./modal/ConfirmDialog.vue"
import * as utils from "~/shared/utils"
export default {
data() {
return {
@ -98,24 +133,10 @@ export default {
}
},
computed: {
...mapState( [
"icon",
"recipes",
"userCategories",
"userYieldUnits",
"mealPlans",
"currentComponent",
"language",
] ),
...mapState( [ "icon", "recipes", "cuisines", "categories", "yieldUnits", "units", "mealPlans", "currentComponent", "language", "shakeEnabled", "importSummary" ] ),
},
methods: {
...mapActions( [
"setCurrentComponentAction",
"importCategoriesAction",
"importYieldUnitsAction",
"importRecipesAction",
"importMealPlansAction",
] ),
...mapActions( [ "setCurrentComponentAction", "importListItemsAction", "importRecipesAction", "importMealPlansAction", "resetListItemsAction", "setShakeAction", "unlinkBrokenImages" ] ),
onPageLoad( args ) {
const page = args.object;
page.bindingContext = new Observable();
@ -128,7 +149,6 @@ export default {
onScroll( args ) {
this.viewIsScrolled = args.scrollY ? true : false
},
// LANGUAGE SELECTION
selectAppLanguage() {
let languages = this.language.map( e => e.title )
@ -136,6 +156,7 @@ export default {
props: {
title: "App language",
list: [ ...languages ],
stretch: true,
},
} ).then( ( action ) => {
if ( action && action !== "Cancel" && this.appLanguage !== action ) {
@ -153,7 +174,6 @@ export default {
if ( result ) {
this.appLanguage = action
ApplicationSettings.setString( "appLanguage", action )
overrideLocale( locale )
setTimeout( ( e ) => utils.restartApp(), 250 )
}
@ -168,7 +188,7 @@ export default {
props: {
title: "Theme",
list: [ "Light", "Dark" ],
height: "96",
stretch: false
},
} ).then( ( action ) => {
if ( action && action !== "Cancel" && this.appTheme !== action ) {
@ -189,44 +209,29 @@ export default {
}
} )
},
// SHAKE VIEW RANDOM RECIPE
toggleShake( args ) {
let checked = args.object.checked
// let checked = !this.shakeEnabled
ApplicationSettings.setBoolean( 'shakeEnabled', checked )
this.setShakeAction( checked )
},
// EXPORT HANDLERS
exportCheck() {
if ( !this.recipes.length ) {
Toast.makeText(
localize( "Add at least one recipe to perform a backup" ),
"long"
).show()
}
else {
this.permissionCheck(
this.permissionConfirmation,
localize( "EnRecipes requires storage permission in order to backup your data to this device." ),
this.exportBackup
)
Toast.makeText( localize( "Add at least one recipe to perform a backup" ), "long" ).show()
} else {
this.permissionCheck( this.permissionConfirmation, localize( "EnRecipes requires storage permission in order to backup your data to this device." ), this.exportBackup )
}
},
exportBackup() {
this.exportFiles( "create" )
let date = new Date()
let formattedDate =
date.getFullYear() +
"-" +
( "0" + ( date.getMonth() + 1 ) ).slice( -2 ) +
"-" +
( "0" + date.getDate() ).slice( -2 ) +
"_" +
( "0" + date.getHours() ).slice( -2 ) +
( "0" + date.getMinutes() ).slice( -2 ) +
( "0" + date.getSeconds() ).slice( -2 )
const sdDownloadPath = Folder.fromPath(
android.os.Environment.getExternalStorageDirectory().getAbsolutePath()
).getFolder( "Download" ).path
let formattedDate = date.getFullYear() + "-" + ( "0" + ( date.getMonth() + 1 ) ).slice( -2 ) + "-" + ( "0" + date.getDate() ).slice( -2 ) + "_" + ( "0" + date.getHours() ).slice( -2 ) + ( "0" + date.getMinutes() ).slice( -2 ) + ( "0" + date
.getSeconds() ).slice( -2 )
const sdDownloadPath = Folder.fromPath( android.os.Environment.getExternalStorageDirectory().getAbsolutePath() ).getFolder( "Download" ).path
let fromPath = path.join( knownFolders.documents().path, "EnRecipes" )
let destPath = path.join(
sdDownloadPath,
`EnRecipes-Backup_${formattedDate}.zip`
)
let destPath = path.join( sdDownloadPath, `EnRecipes-Backup_${formattedDate}.zip` )
this.backupInProgress = true
Zip.zip( {
directory: fromPath,
@ -235,44 +240,34 @@ export default {
this.backupProgress = progress
},
} ).then( ( success ) => {
Toast.makeText(
"Backup file successfully saved to Download folder",
"long"
).show()
Toast.makeText( "Backup file successfully saved to Download folder", "long" ).show()
this.exportFiles( "delete" )
} )
},
exportFiles( option ) {
const folder = path.join( knownFolders.documents().path, "EnRecipes" )
const EnRecipesFile = File.fromPath( path.join( folder, "recipes.json" ) )
let userCategoriesFile, userYieldUnitsFile, mealPlansFile
if ( this.userCategories.length ) {
userCategoriesFile = File.fromPath(
path.join( folder, "userCategories.json" )
)
}
if ( this.userYieldUnits.length ) {
userYieldUnitsFile = File.fromPath(
path.join( folder, "userYieldUnits.json" )
)
}
if ( this.mealPlans.length ) {
mealPlansFile = File.fromPath( path.join( folder, "mealPlans.json" ) )
}
let userCuisinesFile, userCategoriesFile, userYieldUnitsFile, userUnitsFile, mealPlansFile
if ( this.cuisines.length ) userCuisinesFile = File.fromPath( path.join( folder, "userCuisines.json" ) )
if ( this.categories.length ) userCategoriesFile = File.fromPath( path.join( folder, "userCategories.json" ) )
if ( this.yieldUnits.length ) userYieldUnitsFile = File.fromPath( path.join( folder, "userYieldUnits.json" ) )
if ( this.units.length ) userUnitsFile = File.fromPath( path.join( folder, "userUnits.json" ) )
if ( this.mealPlans.length ) mealPlansFile = File.fromPath( path.join( folder, "mealPlans.json" ) )
switch ( option ) {
case "create":
this.writeDataToFile( EnRecipesFile, this.recipes )
this.userCategories.length &&
this.writeDataToFile( userCategoriesFile, this.userCategories )
this.userYieldUnits.length &&
this.writeDataToFile( userYieldUnitsFile, this.userYieldUnits )
this.mealPlans.length &&
this.writeDataToFile( mealPlansFile, this.mealPlans )
this.cuisines.length && this.writeDataToFile( userCuisinesFile, this.cuisines )
this.categories.length && this.writeDataToFile( userCategoriesFile, this.categories )
this.yieldUnits.length && this.writeDataToFile( userYieldUnitsFile, this.yieldUnits )
this.units.length && this.writeDataToFile( userUnitsFile, this.units )
this.mealPlans.length && this.writeDataToFile( mealPlansFile, this.mealPlans )
break
case "delete":
EnRecipesFile.remove()
this.userCategories.length && userCategoriesFile.remove()
this.userYieldUnits.length && userYieldUnitsFile.remove()
this.cuisines.length && userCuisinesFile.remove()
this.categories.length && userCategoriesFile.remove()
this.yieldUnits.length && userYieldUnitsFile.remove()
this.units.length && userUnitsFile.remove()
this.mealPlans.length && mealPlansFile.remove()
break
default:
@ -282,26 +277,19 @@ export default {
writeDataToFile( file, data ) {
file.writeText( JSON.stringify( data ) )
},
// IMPORT HANDLERS
importCheck() {
this.permissionCheck(
this.permissionConfirmation,
localize( "EnRecipes requires storage permission in order to import your data from a previous backup." ),
this.openFilePicker
)
this.permissionCheck( this.permissionConfirmation, localize( "EnRecipes requires storage permission in order to import your data from a previous backup." ), this.openFilePicker )
},
openFilePicker() {
Filepicker.create( {
mode: "single",
extensions: [ "zip" ],
} )
.present()
.then( ( selection ) => {
Toast.makeText( localize( "Verifying..." ) ).show()
let zipPath = selection[ 0 ]
this.validateZipContent( zipPath )
} )
mode: "single",
extensions: [ "zip" ],
} ).present().then( ( selection ) => {
Toast.makeText( localize( "Verifying..." ) ).show()
let zipPath = selection[ 0 ]
this.validateZipContent( zipPath )
} )
},
importDataToDB( data, db, zipPath ) {
switch ( db ) {
@ -309,11 +297,29 @@ export default {
this.importImages( zipPath )
this.importRecipesAction( data )
break
case "userCuisinesDB":
this.importListItemsAction( {
data,
listName: "cuisines",
} )
break
case "userCategoriesDB":
this.importCategoriesAction( data )
this.importListItemsAction( {
data,
listName: "categories",
} )
break
case "userYieldUnitsDB":
this.importYieldUnitsAction( data )
this.importListItemsAction( {
data,
listName: "yieldUnits",
} )
break
case "userUnitsDB":
this.importListItemsAction( {
data,
listName: "units",
} )
break
case "mealPlansDB":
this.importMealPlansAction( data )
@ -322,16 +328,45 @@ export default {
break
}
},
hasValidJSON( data ) {
try {
JSON.parse( data ) && Array.isArray( JSON.parse( data ) )
} catch ( e ) {
return false;
}
return true;
},
isFileDataValid( file ) {
file.forEach( ( file, i ) => {
if ( File.exists( file.path ) ) {
File.fromPath( file.path )
.readText()
.then( ( data ) => {
Array.isArray( JSON.parse( data ) ) &&
this.importDataToDB( JSON.parse( data ), file.db, file.zipPath )
} )
}
const files = file.filter( e => File.exists( e.path ) )
if ( files.length ) {
let isValid = files.map( e => false )
files.forEach( ( file, i ) => {
File.fromPath( file.path ).readText().then( ( data ) => {
isValid[ i ] = this.hasValidJSON( data )
if ( !isValid[ i ] ) {
this.failedImport( `${localize("Backup file has been modified externally.")}\n\n${localize("Invalid file:")} ${file.file}` )
return 0;
}
if ( isValid.every( e => e === true ) ) {
files.forEach( ( file, i ) => {
File.fromPath( file.path ).readText().then( ( data ) => {
this.importDataToDB( JSON.parse( data ), file.db, file.zipPath )
} )
} )
}
} )
} )
} else {
this.failedImport( localize( "Backup file seems empty." ) )
}
},
failedImport( description ) {
this.$showModal( ConfirmDialog, {
props: {
title: "Import failed",
description,
okButtonText: "OK",
},
} )
},
validateZipContent( zipPath ) {
@ -341,38 +376,46 @@ export default {
} ).then( ( extractedFolderPath ) => {
let cacheFolderPath = extractedFolderPath + "/EnRecipes"
const EnRecipesFilePath = cacheFolderPath + "/recipes.json"
const userCuisinesFilePath = cacheFolderPath + "/userCuisines.json"
const userCategoriesFilePath = cacheFolderPath + "/userCategories.json"
const userYieldUnitsFilePath = cacheFolderPath + "/userYieldUnits.json"
const userUnitsFilePath = cacheFolderPath + "/userUnits.json"
const mealPlansFilePath = cacheFolderPath + "/mealPlans.json"
if ( Folder.exists( cacheFolderPath ) ) {
this.isFileDataValid( [ {
zipPath,
path: EnRecipesFilePath,
db: "EnRecipesDB",
},
{
zipPath,
path: userCategoriesFilePath,
db: "userCategoriesDB"
},
{
zipPath,
path: userYieldUnitsFilePath,
db: "userYieldUnitsDB"
},
{
zipPath,
path: mealPlansFilePath,
db: "mealPlansDB"
},
] )
}
else {
zipPath,
path: EnRecipesFilePath,
db: "EnRecipesDB",
file: "recipes.json"
}, {
zipPath,
path: userCuisinesFilePath,
db: "userCuisinesDB",
file: "userCuisines.json"
}, {
zipPath,
path: userCategoriesFilePath,
db: "userCategoriesDB",
file: "userCategories.json"
}, {
zipPath,
path: userYieldUnitsFilePath,
db: "userYieldUnitsDB",
file: "userYieldUnits.json"
}, {
zipPath,
path: userUnitsFilePath,
db: "userUnitsDB",
file: "userUnits.json"
}, {
zipPath,
path: mealPlansFilePath,
db: "mealPlansDB",
file: "mealPlans.json"
}, ] )
} else {
Folder.fromPath( extractedFolderPath ).remove()
Toast.makeText(
"Import failed. Backup file is incorrect or corrupt",
"long"
).show()
this.failedImport( localize( "Backup file is incorrect or corrupt." ) )
}
if ( Folder.exists( cacheFolderPath + "/Images" ) ) {
this.importImages( cacheFolderPath + "/Images" )
@ -386,11 +429,29 @@ export default {
directory: dest,
overwrite: true,
} ).then( ( res ) => {
Toast.makeText( localize( "Import successful" ), "long" ).show()
this.$navigateBack()
Toast.makeText( localize( "Import successful" ) ).show()
this.showImportSummary()
this.unlinkBrokenImages()
} )
},
showImportSummary() {
let {
found,
imported,
updated
} = this.importSummary
let exists = found - imported + updated
let importedNote = `\n${imported} ${localize('recipes imported')}`
let existsNote = `\n${exists} ${localize('recipes already exists')}`
let updatedNote = `\n${updated} ${localize('recipes updated')}`
this.$showModal( ConfirmDialog, {
props: {
title: "Import summary",
description: `${found} ${localize('recipes found')}${ importedNote}${existsNote}${updatedNote}`,
okButtonText: "OK",
},
} )
},
// PERMISSIONS HANDLER
permissionCheck( confirmation, description, action ) {
if ( !ApplicationSettings.getBoolean( "storagePermissionAsked", false ) ) {
@ -399,22 +460,19 @@ export default {
Permissions.request( "photo" ).then( ( res ) => {
let status = res[ Object.keys( res )[ 0 ] ]
if ( status === "authorized" ) action()
if ( status !== "denied" )
ApplicationSettings.setBoolean( "storagePermissionAsked", true )
if ( status !== "denied" ) ApplicationSettings.setBoolean( "storagePermissionAsked", true )
else Toast.makeText( localize( "Permission denied" ) ).show()
} )
}
} )
}
else {
} else {
Permissions.check( "photo" ).then( ( res ) => {
let status = res[ Object.keys( res )[ 0 ] ]
if ( status !== "authorized" ) {
confirmation( description ).then( ( e ) => {
e && utils.openAppSettingsPage()
} )
}
else action()
} else action()
} )
}
},
@ -428,6 +486,11 @@ export default {
},
} )
},
// RESET
resetListItems( listName ) {
this.resetListItemsAction( listName )
Toast.makeText( localize( "Reset successful" ) ).show()
}
},
mounted() {
this.appTheme = ApplicationSettings.getString( "appTheme", "Light" )

View file

@ -4,9 +4,10 @@
<GridLayout rows="48" columns="auto, *, auto">
<MDButton variant="text" row="0" col="0" class="bx" :text="icon.back" automationText="Back" @tap="$navigateBack()" />
<FlexboxLayout row="0" col="2" alignItems="center">
<MDButton v-if="!filterTrylater" variant="text" class="bx" :text="recipe.tried ? icon.trylaterOutline : icon.trylater" @tap="toggleTrylater" />
<MDButton v-if="!filterTrylater" variant="text" class="bx" :text="recipe.tried ? icon.trylaterLine : icon.trylater" @tap="toggleTrylater" />
<MDButton v-else variant="text" class="bx" :text="icon.check" @tap="recipeTried" />
<MDButton variant="text" class="bx" :text="recipe.isFavorite ? icon.heart : icon.heartOutline" @tap="toggleFavourite" />
<MDButton variant="text" class="bx" :text="recipe.isFavorite ? icon.heart : icon.heartLine" @tap="toggleFavourite" />
<!-- <MDButton variant="text" class="bx" :text="icon.emptyCart" /> -->
<MDButton variant="text" v-if="!busy" class="bx" :text="icon.edit" @tap="editRecipe" />
<MDActivityIndicator v-else :busy="busy" />
</FlexboxLayout>
@ -25,10 +26,10 @@
<Label :text="'Instructions' | L"></Label>
</TabStripItem>
<TabStripItem>
<Label :text="'Combinations' | L"></Label>
<Label :text="'Notes' | L"></Label>
</TabStripItem>
<TabStripItem>
<Label :text="'Notes' | L"></Label>
<Label :text="'Combinations' | L"></Label>
</TabStripItem>
</TabStrip>
<TabContentItem>
@ -38,11 +39,19 @@
<Image v-if="recipe.imageSrc" :src="recipe.imageSrc" stretch="aspectFill" width="100%" :height="screenWidth" />
<Label v-else horizontalAlignment="center" class="bx" fontSize="160" :text="icon.image" />
</StackLayout>
<StackLayout margin="16 8 80">
<Label class="category orkm" :text="`${recipe.category}` | L" />
<Label margin="0 8" class="title orkm" :text="recipe.title" textWrap="true" />
<Label class="time" :text="`${$options.filters.L('Preparation time')}: ${formattedTime(recipe.prepTime)}`" textWrap="true" />
<Label class="time" :text="`${$options.filters.L('Cooking time')}: ${formattedTime(recipe.cookTime)}`" textWrap="true" />
<StackLayout margin="16 4 80">
<Label class="category" :text="`${$options.filters.L(recipe.cuisine)} • ${$options.filters.L(recipe.category)}`" />
<Label class="title orkm" :text="recipe.title" textWrap="true" />
<FlexboxLayout class="ratingContainer">
<Label class="rating bx" v-for="n in 5" :key="n" :text="recipe.rating < n ?icon.starLine:icon.star" @tap="setRating(n)" @longPress="setRating(n)" />
</FlexboxLayout>
<Label class="attr" :text="`${$options.filters.L('Difficulty level')}: ${$options.filters.L(recipe.difficulty)}`" textWrap="true" />
<Label class="attr" :text="`${$options.filters.L('Preparation time')}: ${formattedTime(recipe.prepTime)}`" textWrap="true" />
<Label class="attr" :text="`${$options.filters.L('Cooking time')}: ${formattedTime(recipe.cookTime)}`" textWrap="true" />
<FlexboxLayout v-if="recipe.tags.length" class="tagsContainer" flexWrap="wrap">
<Label class="tagsTitle" :text="`${$options.filters.L('Tags')}: `" />
<Label v-for="(tag, index) in recipe.tags" :key="index" v-if="tag" :text="tag" class="tag" textWrap="false" />
</FlexboxLayout>
<GridLayout rows="auto, auto" columns="*, *" class="overviewContainer">
<GridLayout class="overviewItem" row="0" col="0" rows="auto, auto" columns="*">
<MDRipple rowSpan="2" @tap="selectedTabIndex = 1" />
@ -68,17 +77,6 @@
</GridLayout>
<GridLayout class="overviewItem" row="1" col="0" rows="auto, auto" columns="*">
<MDRipple rowSpan="2" @tap="selectedTabIndex = 3" />
<Label row="0" class="bx" :text="icon.outline" />
<Label row="1" class="itemCount" :text="
`${recipe.combinations.length} ${
recipe.combinations.length == 1
? $options.filters.L('Combination')
: $options.filters.L('Combinations')
}`
" textWrap="true" />
</GridLayout>
<GridLayout class="overviewItem" row="1" col="1" rows="auto, auto" columns="*">
<MDRipple rowSpan="2" @tap="selectedTabIndex = 4" />
<Label row="0" class="bx" :text="icon.note" />
<Label row="1" class="itemCount" :text="
`${recipe.notes.length} ${
@ -88,7 +86,20 @@
}`
" textWrap="true" />
</GridLayout>
<GridLayout class="overviewItem" row="1" col="1" rows="auto, auto" columns="*">
<MDRipple rowSpan="2" @tap="selectedTabIndex = 4" />
<Label row="0" class="bx" :text="icon.outline" />
<Label row="1" class="itemCount" :text="
`${recipe.combinations.length} ${
recipe.combinations.length == 1
? $options.filters.L('Combination')
: $options.filters.L('Combinations')
}`
" textWrap="true" />
</GridLayout>
</GridLayout>
<Label class="attr small" :text="`${$options.filters.L('Last updated')}: ${formattedDate(recipe.lastModified)}`" textWrap="true" />
<Label class="attr small" :text="`${$options.filters.L('Created')}: ${formattedDate(recipe.created)}`" textWrap="true" />
</StackLayout>
</StackLayout>
</ScrollView>
@ -98,15 +109,15 @@
<GridLayout v-if="!recipe.ingredients.length" rows="*, auto, *, 88" columns="*" class="emptyStateContainer">
<StackLayout col="0" row="1" class="emptyState">
<Label class="bx icon" :text="icon.item" textWrap="true" />
<Label class="subTitle orkm" :text="'Use the pencil button to add some ingredients' | L" textWrap="true" />
<Label class="title orkm" :text="'Use the pencil button to add some ingredients' | L" textWrap="true" />
</StackLayout>
</GridLayout>
<StackLayout v-else padding="24 16 72">
<StackLayout v-else padding="16 16 72">
<AbsoluteLayout class="inputField">
<TextField width="50%" v-model="yieldMultiplier" keyboardType="number" />
<Label top="0" class="fieldLabel" :text="`${$options.filters.L('Required')} ${$options.filters.L(recipe.yield.unit)}`" />
</AbsoluteLayout>
<Label margin="16 0" class="subTitle orkm" :text="
<Label padding="16 0 8" class="title orkm" :text="
`${$options.filters.L('Ingredients')} (${positiveYieldMultiplier} ${$options.filters.L(recipe.yield.unit)})`
" textWrap="true" />
<StackLayout v-for="(item, index) in recipe.ingredients" :key="index">
@ -128,32 +139,15 @@
<GridLayout v-if="!recipe.instructions.length" rows="*, auto, *, 88" columns="*" class="emptyStateContainer">
<StackLayout col="0" row="1" class="emptyState">
<Label class="bx icon" :text="icon.step" textWrap="true" />
<Label class="subTitle orkm" :text="'Use the pencil button to add some instructions' | L" textWrap="true" />
<Label class="title orkm" :text="'Use the pencil button to add some instructions' | L" textWrap="true" />
</StackLayout>
</GridLayout>
<StackLayout v-else padding="28 16 62">
<StackLayout v-else padding="20 16 62">
<GridLayout columns="auto ,*" v-for="(instruction, index) in recipe.instructions" :key="index">
<Label col="0" colSpan="2" class="instruction" :class="{
noBorder: index === recipe.instructions.length - 1,
}" :text="instruction" textWrap="true" />
<Label verticalAlignment="top" horizontalAlignment="center" class="count orkm" col="0" :text="index + 1" />
</GridLayout>
</StackLayout>
</ScrollView>
</TabContentItem>
<TabContentItem>
<ScrollView @scroll="onScroll">
<GridLayout v-if="!recipe.combinations.length" rows="*, auto, *, 88" columns="*" class="emptyStateContainer">
<StackLayout col="0" row="1" class="emptyState">
<Label class="bx icon" :text="icon.outline" textWrap="true" />
<Label class="subTitle orkm" :text="'Use the pencil button to add some combinations' | L" textWrap="true" />
</StackLayout>
</GridLayout>
<StackLayout v-else padding="8 0 80">
<GridLayout columns="auto, *" v-for="(combination, index) in recipe.combinations" :key="index" androidElevation="1" class="urlCard">
<MDRipple colSpan="2" @tap="viewCombination(combination)" />
<Label col="0" class="bx linkIcon" :text="icon.food" />
<Label col="1" verticalAlignment="center" class="link" :text="getCombinationTitle(combination)" textWrap="true" />
<Label class="count orkm" col="0" :text="index + 1" />
</GridLayout>
</StackLayout>
</ScrollView>
@ -163,14 +157,31 @@
<GridLayout v-if="!recipe.notes.length" rows="*, auto, *, 88" columns="*" class="emptyStateContainer">
<StackLayout col="0" row="1" class="emptyState">
<Label class="bx icon" :text="icon.note" textWrap="true" />
<Label class="subTitle orkm" :text="'Use the pencil button to add some notes' | L" textWrap="true" />
<Label class="title orkm" :text="'Use the pencil button to add some notes' | L" textWrap="true" />
</StackLayout>
</GridLayout>
<StackLayout v-else padding="8 0 80">
<StackLayout @loaded="createNotes"></StackLayout>
<StackLayout v-else padding="20 16 62" @loaded="createNotes">
</StackLayout>
</ScrollView>
</TabContentItem>
<TabContentItem>
<ScrollView @scroll="onScroll">
<GridLayout v-if="!recipe.combinations.length" rows="*, auto, *, 88" columns="*" class="emptyStateContainer">
<StackLayout col="0" row="1" class="emptyState">
<Label class="bx icon" :text="icon.outline" textWrap="true" />
<Label class="title orkm" :text="'Use the pencil button to add some combinations' | L" textWrap="true" />
</StackLayout>
</GridLayout>
<StackLayout v-else padding="0 0 80">
<GridLayout columns="auto, *" v-for="(combination, index) in recipe.combinations" :key="index" androidElevation="1" class="combination">
<MDRipple colSpan="2" @tap="viewCombination(combination)" />
<Label col="0" class="bx" :text="icon.food" />
<Label col="1" verticalAlignment="center" class="combinationTitle" :text="getCombinationTitle(combination)" textWrap="true" />
</GridLayout>
</StackLayout>
</ScrollView>
</TabContentItem>
</Tabs>
<GridLayout id="btnFabContainer" rows="*, auto" columns="*, auto">
<transition name="dolly" appear>
@ -191,7 +202,9 @@ import {
Span,
FormattedString,
Label,
Observable
GridLayout,
ItemSpec,
Observable,
}
from "@nativescript/core"
import {
@ -206,6 +219,7 @@ import {
localize
}
from "@nativescript/localize"
const intl = require( "nativescript-intl" );
import {
mapActions,
mapState
@ -243,7 +257,7 @@ export default {
},
},
methods: {
...mapActions( [ "toggleStateAction", "setCurrentComponentAction", "overwriteRecipeAction", "setRecipeAsTriedAction", ] ),
...mapActions( [ "toggleStateAction", "setCurrentComponentAction", "overwriteRecipeAction", "setRecipeAsTriedAction", "setRatingAction" ] ),
onPageLoad( args ) {
const page = args.object;
page.bindingContext = new Observable();
@ -274,10 +288,7 @@ export default {
}
return (
( diff < 86400 && lastTried > midnight && duration( "today" ) ) || ( dayDiff == 1 && "yesterday" ) || ( dayDiff < 7 && dayDiff + " " + duration( "days ago" ) ) || ( dayDiff < 31 && Math.round( dayDiff / 7 ) + " " + duration(
"weeks ago" ) ) || ( dayDiff <
366 && Math.round(
dayDiff /
30 ) + " " + duration( "months ago" ) ) || ( dayDiff > 365 && duration( "long time ago" ) ) )
"weeks ago" ) ) || ( dayDiff < 366 && Math.round( dayDiff / 30 ) + " " + duration( "months ago" ) ) || ( dayDiff > 365 && duration( "long time ago" ) ) )
},
selectedIndexChange( args ) {
this.selectedTabIndex = args.object.selectedIndex
@ -310,6 +321,17 @@ export default {
let min = localize( 'min' )
return h ? ( m ? `${h} ${hr} ${m} ${min}` : `${h} ${hr}` ) : `${m} ${min}`
},
formattedDate( date ) {
let d = new Date( date )
var dateFormat = new intl.DateTimeFormat( null, {
'year': 'numeric',
'month': 'long',
'day': 'numeric',
'hour': 'numeric',
'minute': 'numeric',
} ).format( d );
return `${dateFormat}`
},
isValidURL( string ) {
let pattern = new RegExp( "^https?|^www", "ig" )
return pattern.test( string )
@ -371,26 +393,25 @@ export default {
break
}
} )
}
else {
} else {
this.shareRecipe()
}
},
shareRecipe() {
let overview = `${
this.recipe.title
}\n\n${localize("Preparation time")}: ${this.formattedTime(
}\n\n${localize( "Cuisine" )}: ${localize( this.recipe.cuisine)}\n${localize( "Category" )}: ${localize( this.recipe.category)}\n${localize( "Tags" )}: ${this.recipe.tags.join(", ")}\n${localize( "Star rating" )}: ${this.recipe.rating}\n${localize( "Difficulty level" )}: ${localize( this.recipe.difficulty)}\n${localize("Preparation time")}: ${this.formattedTime(
this.recipe.prepTime
)}\n${localize( "Cooking time" )}: ${this.formattedTime(this.recipe.cookTime)}\n`
let shareContent = overview
if ( this.recipe.ingredients.length ) {
let ingredients = `\n\n${localize( "Ingredients" )} (${
this.yieldMultiplier
} ${localize( this.recipe.yield.unit )})\n\n`
} ${localize( this.recipe.yield.unit )}):\n\n`
this.recipe.ingredients.forEach( ( e ) => {
ingredients += `- ${
e.quantity
? this.roundedQuantity(e.quantity) + " " + e.unit + " "
? this.roundedQuantity(e.quantity) + " " + this.$options.filters.L(e.unit) + " "
: ""
}${e.item}\n`
} )
@ -403,13 +424,6 @@ export default {
} )
shareContent += instructions
}
if ( this.recipe.combinations.length ) {
let combinations = `\n${localize( "Combinations" )}:\n\n`
this.recipe.combinations.forEach( ( e, i ) => {
combinations += `${i + 1}. ${this.getCombinationTitle(e)}\n\n`
} )
shareContent += combinations
}
if ( this.recipe.notes.length ) {
let notes = `\n${localize( "Notes" )}:\n\n`
this.recipe.notes.forEach( ( e, i ) => {
@ -417,6 +431,13 @@ export default {
} )
shareContent += notes
}
if ( this.recipe.combinations.length ) {
let combinations = `\n${localize( "Combinations" )}:\n\n`
this.recipe.combinations.forEach( ( e, i ) => {
combinations += `${i + 1}. ${this.getCombinationTitle(e)}\n\n`
} )
shareContent += combinations
}
let sharenote = '\n' + localize( "Shared via EnRecipes. Get it on Play Store or F-Droid." )
shareContent += sharenote
SocialShare.shareText( shareContent, "Share recipe using" )
@ -435,8 +456,7 @@ export default {
this.toggle( "isFavorite" )
},
toggleTrylater() {
this.recipe.tried ? Toast.makeText( localize( "Added to Try Later" ) ).show() : Toast.makeText(
localize( "Removed from Try Later" ) ).show()
this.recipe.tried ? Toast.makeText( localize( "Added to Try Later" ) ).show() : Toast.makeText( localize( "Removed from Try Later" ) ).show()
this.toggle( "tried" )
},
recipeTried() {
@ -446,20 +466,36 @@ export default {
} )
this.$navigateBack()
},
setRating( rating ) {
if ( rating !== this.recipe.rating ) {
this.setRatingAction( {
id: this.currentRecipeID,
recipe: this.recipe,
rating,
} )
}
},
// NOTES
createNote( note ) {
createNote( note, i ) {
const vm = this
let regex = /(https?:\/\/[^\s]+)/g
let label = new Label()
label.class = "textCard"
label.textWrap = true
const grid = new GridLayout()
const firstCol = new ItemSpec( 1, "auto" )
const secondCol = new ItemSpec( 1, "star" )
const label1 = new Label()
const label2 = new Label()
label1.class = "note"
label1.textWrap = true
label2.class = "noteCount orkm"
label2.text = i + 1
let formattedString = new FormattedString()
let textArray = note.split( regex )
function createSpan( text, isUrl ) {
let span = new Span()
span.text = text
span.fontSize = 16
span.fontSize = 14
if ( isUrl ) {
span.textDecoration = "underline"
span.color = "#ff5200"
@ -470,14 +506,21 @@ export default {
textArray.forEach( ( text ) => {
createSpan( text, regex.test( text ) )
} )
label.formattedText = formattedString
return label
label1.formattedText = formattedString
grid.addChild( label1 )
grid.addChild( label2 )
GridLayout.setColumn( label1, 0 )
GridLayout.setColumn( label2, 0 )
GridLayout.setColumnSpan( label1, 2 )
grid.addColumn( firstCol )
grid.addColumn( secondCol )
return grid
},
createNotes( args ) {
const stack = args.object
if ( !stack.getChildrenCount() ) {
this.recipe.notes.forEach( ( note ) => {
stack.addChild( this.createNote( note ) )
this.recipe.notes.forEach( ( note, i ) => {
stack.addChild( this.createNote( note, i ) )
} )
}
},

View file

@ -1,17 +1,18 @@
<template>
<Page>
<StackLayout class="dialogContainer" :class="appTheme">
<Label class="dialogTitle orkm" :text="`${title}` | L" />
<ScrollView width="100%" :height="height ? height : screenHeight - 256">
<GridLayout columns="*" :rows="`auto, ${stretch? '*':'auto'}, auto`" class="dialogContainer" :class="appTheme">
<Label row="0" class="dialogTitle orkm" :text="`${title}` | L" />
<ScrollView row="1" width="100%">
<StackLayout>
<MDButton v-for="(item, index) in list" :key="index" class="actionItem" variant="text" :rippleColor="rippleColor" :text="`${item}` | L" @loaded="onLabelLoaded" @tap="tapAction(item)" />
<MDButton v-for="(item, index) in newList" :key="index" class="actionItem" variant="text" :rippleColor="rippleColor" :text="`${title==='Sort by' && sortType=== item ? '→ ':''}${localized(item)}`" @loaded="onLabelLoaded" @tap="tapAction(item)"
@longPress="removeItem(index)" />
</StackLayout>
</ScrollView>
<GridLayout rows="auto" columns="auto, *, auto" class="actionsContainer">
<GridLayout row="2" rows="auto" columns="auto, *, auto" class="actionsContainer">
<MDButton :rippleColor="rippleColor" variant="text" v-if="action" col="0" class="action orkm pull-left" :text="`${action}` | L" @tap="$modal.close(action)" />
<MDButton :rippleColor="rippleColor" variant="text" col="2" class="action orkm pull-right" :text="'CANCEL' | L" @tap="$modal.close(false)" />
</GridLayout>
</StackLayout>
</GridLayout>
</Page>
</template>
@ -20,9 +21,26 @@ import {
Application,
Screen
} from "@nativescript/core"
import * as Toast from "nativescript-toast"
import {
localize
}
from "@nativescript/localize"
import {
mapState,
mapActions
}
from "vuex"
import ConfirmDialog from "./ConfirmDialog.vue"
export default {
props: [ "title", "list", "height", "action" ],
props: [ "title", "list", "stretch", "action" ],
data() {
return {
newList: this.list,
}
},
computed: {
...mapState( [ "sortType" ] ),
appTheme() {
return Application.systemAppearance()
},
@ -34,12 +52,60 @@ export default {
},
},
methods: {
...mapActions( [ "removeListItemAction" ] ),
localized( item ) {
if ( this.title !== 'App language' )
return localize( item )
else
return item
},
tapAction( item ) {
this.$modal.close( item )
},
onLabelLoaded( args ) {
args.object.android.setGravity( 16 )
},
deletionConfirmation( type, description ) {
return this.$showModal( ConfirmDialog, {
props: {
title: `Remove ${type}?`,
description,
cancelButtonText: "CANCEL",
okButtonText: "REMOVE",
},
} )
},
removeItem( index ) {
let item = this.newList[ index ]
let vm = this
function removeListItem( type, listName ) {
vm.deletionConfirmation( type, `${vm.$options.filters.L('Are you sure you want to remove')} "${vm.$options.filters.L(item)}"?` ).then( action => {
if ( action != null && action ) {
vm.newList.splice( index, 1 )
vm.removeListItemAction( {
item,
listName
} )
}
} )
}
switch ( this.title ) {
case "Cuisine":
removeListItem( 'cuisine', "cuisines" )
break;
case "Category":
removeListItem( "category", "categories" )
break;
case "Yield measured in":
removeListItem( "yield unit", "yieldUnits" )
break;
case "Units":
removeListItem( "unit", "units" )
break;
default:
}
}
},
}
</script>

View file

@ -1,21 +1,21 @@
<template>
<Page>
<StackLayout class="dialogContainer" :class="appTheme">
<Label class="dialogTitle orkm" :text="`${title}` | L" textWrap='true' />
<StackLayout v-if="filteredRecipes.length || searchTerm" padding="0 24 24">
<TextField :hint="'Search' | L" v-model="searchTerm" />
<GridLayout columns="*" rows="auto, auto, *, auto" class="dialogContainer" :class="appTheme">
<Label row="0" class="dialogTitle orkm" :text="`${title}` | L" textWrap='true' />
<StackLayout row="1" v-if="filteredRecipes.length || searchQuery" padding="0 24 24">
<TextField :hint="'Search' | L" v-model="searchQuery" />
</StackLayout>
<ScrollView width="100%" :height="height ? height : screenHeight - 320">
<ScrollView row="2" width="100%" :height="height ? height : ''">
<StackLayout>
<MDButton v-for="(recipe, index) in filteredRecipes" :key="index" class="actionItem" variant="text" :rippleColor="rippleColor" :text="recipe.title" @loaded="onLabelLoaded" @tap="tapAction(recipe)" />
<Label padding="24" lineHeight="6" v-if="!filteredRecipes.length" :text="'Nothing here! Add some recipes and try again.' | L" textAlignment="center" textWrap="true" />
</StackLayout>
</ScrollView>
<GridLayout rows="auto" columns="auto, *, auto" class="actionsContainer">
<GridLayout row="3" rows="auto" columns="auto, *, auto" class="actionsContainer">
<MDButton :rippleColor="rippleColor" variant="text" v-if="action" col="0" class="action orkm pull-left" :text="`${action}` | L" @tap="$modal.close(action)" />
<MDButton :rippleColor="rippleColor" variant="text" col="2" class="action orkm pull-right" :text="'CANCEL' | L" @tap="$modal.close(false)" />
</GridLayout>
</StackLayout>
</GridLayout>
</Page>
</template>
@ -29,7 +29,7 @@ export default {
props: [ "title", "recipes", "height", "action" ],
data() {
return {
searchTerm: "",
searchQuery: "",
}
},
computed: {
@ -47,9 +47,14 @@ export default {
return {
id: e.id,
title: e.title,
cuisine: e.cuisine,
category: e.category,
tags: e.tags.map( e => e.toLowerCase() ).join(),
ingredients: e.ingredients.map( e => e.item.toLowerCase() ).join(),
}
} ).filter( ( e ) => e.title.includes( this.searchTerm ) )
} ).filter( ( e ) => this.recipeFilter( e ) )
},
},
methods: {
tapAction( recipe ) {
@ -58,6 +63,10 @@ export default {
onLabelLoaded( args ) {
args.object.android.setGravity( 16 )
},
recipeFilter( e ) {
let searchQuery = this.searchQuery.toLowerCase()
return e.title.includes( searchQuery ) || e.cuisine.includes( searchQuery ) || e.category.includes( searchQuery ) || e.tags.includes( searchQuery ) || e.ingredients.includes( searchQuery )
},
},
}
</script>

View file

@ -4,7 +4,7 @@
<Label class="dialogTitle orkm" :text="`${title}` | L" textWrap="true" />
<Label v-if="description" class="dialogDescription" :text="description" textWrap="true" />
<GridLayout rows="auto" columns="*, auto, auto" class="actionsContainer">
<MDButton :rippleColor="rippleColor" variant="text" col="1" class="action orkm" :text="`${cancelButtonText}` | L" @tap="$modal.close(false)" />
<MDButton v-if="cancelButtonText" :rippleColor="rippleColor" variant="text" col="1" class="action orkm" :text="`${cancelButtonText}` | L" @tap="$modal.close(false)" />
<MDButton :rippleColor="rippleColor" variant="text" col="2" class="action orkm" :text="`${okButtonText}` | L" @tap="$modal.close(true)" />
</GridLayout>
</StackLayout>
@ -23,9 +23,7 @@ export default {
return Application.systemAppearance()
},
rippleColor() {
return this.appTheme == "light" ?
"rgba(134,142,150,0.2)" :
"rgba(206,212,218,0.1)"
return this.appTheme == "light" ? "rgba(134,142,150,0.2)" : "rgba(206,212,218,0.1)"
},
},
}

View file

@ -3,7 +3,7 @@
<StackLayout class="dialogContainer" :class="appTheme">
<Label class="dialogTitle orkm" :text="`${title}` | L" textWrap='true' />
<StackLayout class="dialogInput">
<TextField @loaded="focusField" :hint="hint ? hint : ''" v-model="category" autocapitalizationType="words" />
<TextField @loaded="focusField" :hint="hint ? hint : ''" v-model="category" autocapitalizationType="words" @returnPress="$modal.close(category)" />
</StackLayout>
<GridLayout rows="auto" columns="*, auto, auto" class="actionsContainer">
<MDButton :rippleColor="rippleColor" variant="text" col="1" class="action orkm" :text="'CANCEL' | L" @tap="$modal.close(false)" />

View file

@ -15,15 +15,15 @@
android {
defaultConfig {
versionCode 4
versionName '1.1.3'
versionCode 5
versionName '1.2.5'
applicationId 'com.vishnuraghav.enrecipes'
minSdkVersion 21
generatedDensities = []
ndk {
abiFilters.clear()
abiFilters.addAll(['x86','armeabi-v7a','arm64-v8a'])
}
// ndk {
// abiFilters.clear()
// abiFilters.addAll(['x86','armeabi-v7a','arm64-v8a'])
// }
}
aaptOptions {
additionalParameters "--no-version-vectors"

View file

@ -2,10 +2,10 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="__PACKAGE__" android:versionCode="10000" android:versionName="1.0">
<supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:xlargeScreens="true" />
<uses-permission android:name="android.permission.CAMERA" tools:node="remove" />
<!-- <uses-feature android:name="android.hardware.camera" /> -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" tools:node="remove" />
<uses-permission android:name="android.permission.INTERNET" tools:node="remove" />
<uses-permission android:name="android.permission.RECORD_AUDIO" tools:node="remove" />

View file

@ -0,0 +1,291 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="_Invalid_file__Z2bRAst">"Invalid file:"</string>
<string name="_Backup_file_has_been_modified_externally__Wjiqq">"Backup file has been modified externally."</string>
<string name="_Backup_file_seems_empty__Zd7qfR">"Backup file seems empty."</string>
<string name="_Backup_file_is_incorrect_or_corrupt__1jXb8N">"Backup file is incorrect or corrupt."</string>
<string name="_Remove_recipe_from_snacks__MNnCU">"Remove recipe from snacks?"</string>
<string name="_Remove_recipe_from_dinner__8sWfY">"Remove recipe from dinner?"</string>
<string name="_Remove_recipe_from_lunch__Zwpsg2">"Remove recipe from lunch?"</string>
<string name="_Remove_recipe_from_breakfast__ZvYyFG">"Remove recipe from breakfast?"</string>
<string name="_Untitled_Recipe_Zv0UxP">"Untitled Recipe"</string>
<string name="_Star_rating_Z11p4Kw">"Star rating"</string>
<string name="Created">"Created"</string>
<string name="_Filtered_result_1AMEXe">"Filtered result"</string>
<string name="OK">"OK"</string>
<string name="_recipes_updated_Z2arFrR">"recipes updated"</string>
<string name="_recipes_already_exists_2jqW2s">"recipes already exists"</string>
<string name="_recipes_imported_1NGeRw">"recipes imported"</string>
<string name="_recipes_found_ZDdUgV">"recipes found"</string>
<string name="_Import_summary_244SkL">"Import summary"</string>
<string name="_separate_with_spaces_ZHKOfw">"separate with spaces"</string>
<string name="Tags">"Tags"</string>
<string name="_No_tags_available_Z1C5GqD">"No tags available"</string>
<string name="_All_Tags_28gMyY">"All Tags"</string>
<string name="_All_Categories_Z23JSTS">"All Categories"</string>
<string name="Vietnamese">"Vietnamese"</string>
<string name="Turkish">"Turkish"</string>
<string name="Thai">"Thai"</string>
<string name="Swedish">"Swedish"</string>
<string name="_Sri_Lankan_Z7GfBa">"Sri Lankan"</string>
<string name="Spanish">"Spanish"</string>
<string name="Scottish">"Scottish"</string>
<string name="Russian">"Russian"</string>
<string name="Portuguese">"Portuguese"</string>
<string name="Nigerian">"Nigerian"</string>
<string name="Mexican">"Mexican"</string>
<string name="Korean">"Korean"</string>
<string name="Kenyan">"Kenyan"</string>
<string name="Jewish">"Jewish"</string>
<string name="Japanese">"Japanese"</string>
<string name="Jamaican">"Jamaican"</string>
<string name="Italian">"Italian"</string>
<string name="Irish">"Irish"</string>
<string name="Indian">"Indian"</string>
<string name="Greek">"Greek"</string>
<string name="German">"German"</string>
<string name="French">"French"</string>
<string name="Filipino">"Filipino"</string>
<string name="English">"English"</string>
<string name="Egyptian">"Egyptian"</string>
<string name="Danish">"Danish"</string>
<string name="Chinese">"Chinese"</string>
<string name="British">"British"</string>
<string name="Brazilian">"Brazilian"</string>
<string name="American">"American"</string>
<string name="_All_Cuisines_2hjCp9">"All Cuisines"</string>
<string name="Cuisines">"Cuisines"</string>
<string name="Cuisine">"Cuisine"</string>
<string name="_Are_you_sure_you_want_to_remove_ZOnf22">"Are you sure you want to remove"</string>
<string name="Units">"Units"</string>
<string name="_Remove_unit__2x26yq">"Remove unit?"</string>
<string name="_Remove_yield_unit__Z1duBWR">"Remove yield unit?"</string>
<string name="_Remove_category__2reaxz">"Remove category?"</string>
<string name="_Remove_cuisine__22ftcL">"Remove cuisine?"</string>
<string name="_New_unit_1CVEEA">"New unit"</string>
<string name="_New_cuisine_Zrvs3z">"New cuisine"</string>
<string name="Challenging">"Challenging"</string>
<string name="Moderate">"Moderate"</string>
<string name="Easy">"Easy"</string>
<string name="_Oldest_first_Z6cq4h">"Oldest first"</string>
<string name="_Newest_first_2Sb3c">"Newest first"</string>
<string name="_Last_updated_Z2gEbLD">"Last updated"</string>
<string name="_Difficulty_level_cSL5d">"Difficulty level"</string>
<string name="Rating">"Rating"</string>
<string name="_Slowest_first_hHjY6">"Slowest first"</string>
<string name="_Quickest_first_Z1CpP7N">"Quickest first"</string>
<string name="_Your_search_did_not_match_any_recipes_in_the_filtered_result_1TV6QQ">"Your search did not match any recipes in the filtered result"</string>
<string name="_Recipe_not_found_2qGveM">"Recipe not found"</string>
<string name="_Reset_successful_YxqWK">"Reset successful"</string>
<string name="_Reset_units_list_msRS3">"Reset units list"</string>
<string name="_Reset_yield_units_list_ZjouMk">"Reset yield units list"</string>
<string name="_Reset_categories_list_Z1JmKra">"Reset categories list"</string>
<string name="_Reset_cuisines_list_1kWL8I">"Reset cuisines list"</string>
<string name="_Resetting_a_list_will_NOT_delete_your_existing_entries_but_only_restores_the_deleted_default_entries__Z28mk0h">"Resetting a list will NOT delete your existing entries but only restores the deleted default entries."</string>
<string name="Reset">"Reset"</string>
<string name="_Helps_you_choose_what_to_cook_when_you_can_t_decide_muiMv">"Helps you choose what to cook when you can\'t decide"</string>
<string name="_Shake_to_view_random_recipe_ZTK9F2">"Shake to view random recipe"</string>
<string name="Options">"Options"</string>
<string name="_User_guide_2uDJCF">"User guide"</string>
<string name="_Privacy_policy_Zb4ht5">"Privacy policy"</string>
<string name="_View_on_GitHub_Z2qOqmx">"View on GitHub"</string>
<string name="Translator">"Translator"</string>
<string name="Contributors">"Bidragyder"</string>
<string name="_Shared_via_EnRecipes__Get_it_on_Play_Store_or_F_Droid__Z2oTOK1">"Deles via EnRecipes. Få det på Play Butik eller fra F-Droid."</string>
<string name="_Permission_denied_Z7wlWK">"Tilladelse nægtet"</string>
<string name="_Import_successful_2bLM3e">"Import vellykket"</string>
<string name="_Verifying____cS102">"Check..."</string>
<string name="_long_time_ago_1nwlFA">"lang tid siden"</string>
<string name="_months_ago_Z1TsskA">"Måneder før"</string>
<string name="_weeks_ago_Z2sT1GA">"Uger før"</string>
<string name="_days_ago_2iCYkm">"Dage før"</string>
<string name="yesterday">"i går"</string>
<string name="today">"dag"</string>
<string name="_You_tried_this_recipe__ZUJOl3">"Du har prøvet denne opskrift:"</string>
<string name="snacks">"Snackbar"</string>
<string name="dinner">"Aftensmad"</string>
<string name="lunch">"Frokost"</string>
<string name="breakfast">"Morgenmad"</string>
<string name="_Crop_photo_1VL04J">"Beskæring af et foto"</string>
<string name="_REPLACE_PHOTO_ZLHhwH">"UDSKIFT FOTO"</string>
<string name="_Recipe_photo_eqm9B">"Opskrift Foto"</string>
<string name="_EnRecipes_requires_storage_permission_in_order_to_set_recipe_photo__23OnNT">"EnRecipes kræver opbevaring tilladelse til at sætte opskriften fotos."</string>
<string name="Required">"Nødvendig"</string>
<string name="_New_category_Weg73">"Neue-kategori"</string>
<string name="_New_yield_unit_1Oevd2">"Nyt Udbytte Enhed"</string>
<string name="_Remove_note__2wyMVE">"Bemærk fjerne?"</string>
<string name="_Remove_combination__1dr2LS">"Kombination fjerne?"</string>
<string name="_Remove_instruction__vkJfi">"Forberedelse fjerne?"</string>
<string name="_Remove_ingredient__2puvMO">"Ingredienser fjerne?"</string>
<string name="_KEEP_EDITING_1o9uy3">"KASSERE"</string>
<string name="DISCARD">"KASSERE"</string>
<string name="_Are_you_sure_you_want_to_discard_unsaved_changes_to_this_recipe__Z1G7sVC">"Vil du kassere ikke-gemte ændringer i denne opskrift?"</string>
<string name="_Unsaved_changes_9fqb4">"Ikke-Gemte Ændringer"</string>
<string name="Search">"Søge"</string>
<string name="_Are_you_sure_you_want_to_delete_the_recipe_29DH9w">"Vil du virkelig slette opskriften"</string>
<string name="DELETE">"SLETTE"</string>
<string name="_Delete_recipe__Z2tMYtE">"Slet opskrift?"</string>
<string name="_Removed_from_Try_Later_1h5Bkp">"Fjernet fra senere prøve"</string>
<string name="_Added_to_Try_Later_Z1gaF37">"Tilføjet i prøve senere"</string>
<string name="_Removed_from_Favourites_Z5k7LR">"Fjernet fra favoritter"</string>
<string name="_Added_to_Favourites_2mzllO">"Tilføjet Til Favoritter"</string>
<string name="_Add_at_least_one_recipe_to_perform_a_backup_17xYaH">"Tilføj mindst en opskrift for at udføre en sikkerhedskopi"</string>
<string name="_EnRecipes_requires_storage_permission_in_order_to_backup_your_data_to_this_device__2cbvIq">"EnRecipes kræver tilladelse til opbevaring for at sikkerhedskopiere dine data på denne enhed."</string>
<string name="CONTINUE">"FORTSÆTTE"</string>
<string name="_NOT_NOW_Z1HD7qX">"IKKE NU"</string>
<string name="_EnRecipes_requires_storage_permission_in_order_to_import_your_data_from_a_previous_backup__1CKjb7">"EnRecipes hukommelse krævede tilladelse til at importere dine data fra en tidligere sikkerhedskopi."</string>
<string name="_Grant_permission_Z1UQBuh">"Give tilladelse"</string>
<string name="_EnRecipes_needs_to_be_restarted_for_the_app_language_to_take_effect__ZWGUtY">"EnRecipes skal genstartes, for at det nyligt indstillede sprog ændres"</string>
<string name="_EnRecipes_needs_to_be_restarted_for_the_theme_change_to_take_effect__2kU319">"EnRecipes skal genstartes for at emneændringen kan træde i kraft."</string>
<string name="RESTART">"GENSTARTE"</string>
<string name="_Restart_required_Z22YINL">"En genstart er påkrævet"</string>
<string name="SET">"INDSTILLE"</string>
<string name="_ADD_NEW_Zv8FjM">"OPRET NYE"</string>
<string name="Share">"Dele"</string>
<string name="Overview">"Oversigt"</string>
<string name="Recipe">"Opskrift"</string>
<string name="Photo">"Foto"</string>
<string name="min">"min"</string>
<string name="hr">"h"</string>
<string name="_My_Healthy_Recipe_Z1EqB8f">"Min Sunde Opskrift"</string>
<string name="_Nothing_here__Add_some_recipes_and_try_again__Z25A7Q">"Der er intet her! Tilføj nogle opskrifter og prøv igen."</string>
<string name="_Select_a_recipe_2lL8x2">"Opskrift vælg"</string>
<string name="ADD">"TILFØJE"</string>
<string name="REMOVE">"FJERNE"</string>
<string name="CANCEL">"ANNULLERE"</string>
<string name="_Sort_by_Zq01TF">"Sorter efter"</string>
<string name="Step">"Trin"</string>
<string name="Item">"Element"</string>
<string name="_ADD_NOTE_ZyNw1r">"TILFØJ NOTER"</string>
<string name="Notes">"Noter"</string>
<string name="Note">"Note"</string>
<string name="_ADD_COMBINATION_2q9HWq">"TILFØJE KOMBINATION"</string>
<string name="Combinations">"Kombinationer"</string>
<string name="_ADD_STEP_ZyMPOe">"TILFØJ TRIN"</string>
<string name="Instructions">"Forberedelser"</string>
<string name="Instruction">"Forberedelse"</string>
<string name="_ADD_INGREDIENT_29sSLU">"TILFØJE INGREDIENS"</string>
<string name="Ingredients">"Ingredienser"</string>
<string name="Ingredient">"Ingrediens"</string>
<string name="_Yield_measured_in_2OoRT">"Udbytte målt i"</string>
<string name="_Yield_quantity_ZHx3jw">"Udbyttebeløb"</string>
<string name="_Cooking_time_2w2fEw">"Tilberedningstid"</string>
<string name="_Preparation_time_15BfxT">"Forberedelsestid"</string>
<string name="Category">"kategori"</string>
<string name="Title">"Titel"</string>
<string name="_Edit_recipe_ZPvwDP">"Opskrift Rediger"</string>
<string name="_New_recipe_Z1Y2YKJ">"Ny Opskrift"</string>
<string name="_Vishnu_Raghav_B_1qnRnC">"Vishnu Raghav B"</string>
<string name="Author">"Forfatter"</string>
<string name="_for_reporting_issues__suggestions_and_feedback_Z1JUmyE">"til rapportering af problemer, forslag og Feedback"</string>
<string name="_Join_the_Telegram_group_ZAXQgc">"Deltag i telegram-gruppen"</string>
<string name="Version">"version"</string>
<string name="_Supports_full_backups_exported_by_this_app_ZYs4f2">"Understøtter fuld sikkerhedskopier eksporteret af denne App"</string>
<string name="_Import_from_backup_Z28HsC0">"Import fra Backup"</string>
<string name="_Generates_a_zip_file_that_contains_all_your_data__This_file_can_be_imported_back__Z19m3xY">"Opretter en fileip-fil, der indeholder alle data. Denne fil kan importeres igen."</string>
<string name="_Export_a_full_backup_TJfra">"Eksporter til en sikkerhedskopi"</string>
<string name="Database">"Database"</string>
<string name="Dark">"Mørk"</string>
<string name="Light">"Lyst"</string>
<string name="Theme">"Emne"</string>
<string name="_System_default_Z1jruVS">"Systemstandard"</string>
<string name="_App_language_DzFsk">"App Sprog"</string>
<string name="Interface">"Interface"</string>
<string name="_Your_search_did_not_match_any_recipes_in_your_try_later_list_Z2wWbA1">"Din søgning matchede ikke Opskrifter i din senere prøveliste"</string>
<string name="_Your_search_did_not_match_any_recipes_in_your_favourites_1ylvHN">"Din søgning matchede ikke Opskrifter i dine favoritter"</string>
<string name="_Your_search_did_not_match_any_recipes_in_this_category_P7J4V">"Din søgning stemte ikke overens med opskrifter i denne kategori"</string>
<string name="_Your_search_did_not_match_any_recipes_Z1eppHH">"Din søgning stemte ikke overens med opskrifter"</string>
<string name="_No_recipes_found_Z125IxD">"Ingen opskrifter fundet"</string>
<string name="_Category_looks_empty_ZAK5qU">"Kategori er tom"</string>
<string name="_Recipes_you_mark_as_favourite_will_be_listed_here_Z1iIHgY">"Opskrifter, som du markerer som favoritter, er vist her"</string>
<string name="_No_favourites_yet_aPSoG">"Ingen favoritter endnu"</string>
<string name="_Recipes_you_mark_as_try_later_will_be_listed_here_Z1ITwPV">"Opskrifter, der er markeret med try later, vises her"</string>
<string name="_All_done__72KYl">"Alle gjort!"</string>
<string name="_Use_the_pencil_button_to_add_some_notes_Z1wyyeb">"Brug pen-ikonet til at tilføje nogle noter"</string>
<string name="_Use_the_pencil_button_to_add_some_combinations_6NhFS">"Brug pennikonet til at tilføje nogle kombinationer"</string>
<string name="_Use_the_pencil_button_to_add_some_instructions_ZAi0PH">"Brug penikonet til at tilføje nogle forberedelser"</string>
<string name="_Use_the_pencil_button_to_add_some_ingredients_Z1xOX8S">"Brug pen-ikonet til at tilføje nogle ingredienser"</string>
<string name="_Use_the_plus_button_to_add_one_1h20ms">"Brug plusknappen til at tilføje en"</string>
<string name="_Start_adding_your_recipes__rwnVV">"Begynd at tilføje dine opskrifter!"</string>
<string name="large">"stor"</string>
<string name="medium">"medium"</string>
<string name="small">"lille"</string>
<string name="stick">"stok"</string>
<string name="dozen">"dusin"</string>
<string name="drop">"dråbe"</string>
<string name="pinch">"klemme"</string>
<string name="piece">"stykke"</string>
<string name="clove">"spaltes"</string>
<string name="leaf">"blad"</string>
<string name="in">"in"</string>
<string name="cm">"cm"</string>
<string name="kg">"kg"</string>
<string name="g">"g"</string>
<string name="mg">"mg"</string>
<string name="lb">"Pf"</string>
<string name="oz">"oz"</string>
<string name="l">"l"</string>
<string name="ml">"ml"</string>
<string name="gal">"gal"</string>
<string name="qt">"qt"</string>
<string name="pt">"pt"</string>
<string name="cup">"Kop"</string>
<string name="_fl_oz_72kqu">"fl"</string>
<string name="tbsp">"EL"</string>
<string name="dsp">"SL"</string>
<string name="tsp">"TL"</string>
<string name="Unit">"Enhed"</string>
<string name="unit">"enhed"</string>
<string name="Loaf">"Brød"</string>
<string name="Patty">"Patty"</string>
<string name="Roll">"Roller"</string>
<string name="Litre">"Liter"</string>
<string name="Millilitre">"Ml"</string>
<string name="Gallon">"Gallon"</string>
<string name="Cup">"Kop"</string>
<string name="Kilogram">"Kilo"</string>
<string name="Gram">"Gram"</string>
<string name="Pound">"Pund"</string>
<string name="Ounce">"Ounce"</string>
<string name="_Fluid_Ounce_bd10L">"Flydende Ounce"</string>
<string name="Tablespoon">"EL"</string>
<string name="Teaspoon">"TL"</string>
<string name="Piece">"Stykke"</string>
<string name="Serving">"Serverer"</string>
<string name="Vegetarian">"Vegetarisk"</string>
<string name="Vegan">"Vegetarisk"</string>
<string name="Undefined">"Ikke defineret"</string>
<string name="Soups">"Suppe"</string>
<string name="Snacks">"Snackbar"</string>
<string name="_Side_dishes_Z1Et4Vg">"Side retter"</string>
<string name="Seafood">"Skaldyr"</string>
<string name="Sauces">"Sauce"</string>
<string name="Salads">"Salater"</string>
<string name="Rice">"Ris"</string>
<string name="Poultry">"Fjerkræ"</string>
<string name="Pasta">"Pasta"</string>
<string name="Noodles">"Noodle"</string>
<string name="Meat">"Kød"</string>
<string name="_Main_dishes_u6RGQ">"Hovedret"</string>
<string name="Lunch">"Mittag"</string>
<string name="Healthy">"Sund"</string>
<string name="Drinks">"Drink"</string>
<string name="Dinner">"Abendessen"</string>
<string name="Desserts">"Dessertbuffet"</string>
<string name="Breakfast">"Morgenmad"</string>
<string name="Breads">"Brød"</string>
<string name="Beverages">"Drink"</string>
<string name="Barbecue">"Grill"</string>
<string name="Appetizers">"Forret"</string>
<string name="About">"Om"</string>
<string name="Settings">"Indstilling"</string>
<string name="Categories">"Kategori"</string>
<string name="_Meal_Planner_2aq4oj">"Måltid planner"</string>
<string name="Favourites">"Favorit"</string>
<string name="_Try_Later_If7PG">"Prøv senere"</string>
<string name="EnRecipes">"EnRecipes"</string>
<string name="_app_name_1k3Sbz">"EnRecipes"</string>
<string name="app_name">"EnRecipes"</string>
<string name="title_activity_kimera">"EnRecipes"</string>
<string name="_Import_failed_Z1dbs6t">"Import failed"</string>
</resources>

View file

@ -1,8 +1,97 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="_Translations__1IFwAu">"Übersetzungen:"</string>
<string name="_Invalid_file__Z2bRAst">"Invalid file:"</string>
<string name="_Backup_file_has_been_modified_externally__Wjiqq">"Backup file has been modified externally."</string>
<string name="_Backup_file_seems_empty__Zd7qfR">"Backup file seems empty."</string>
<string name="_Backup_file_is_incorrect_or_corrupt__1jXb8N">"Backup file is incorrect or corrupt."</string>
<string name="_Remove_recipe_from_snacks__MNnCU">"Entferne Rezept von Imbiss?"</string>
<string name="_Remove_recipe_from_dinner__8sWfY">"Entferne Rezept von Abendessen?"</string>
<string name="_Remove_recipe_from_lunch__Zwpsg2">"Entferne Rezept von Mittagessen?"</string>
<string name="_Remove_recipe_from_breakfast__ZvYyFG">"Entferne Rezept von Frühstück?"</string>
<string name="_Untitled_Recipe_Zv0UxP">"Unbenanntes Rezept"</string>
<string name="_Star_rating_Z11p4Kw">"Sternebewertung"</string>
<string name="Created">"Erstellt"</string>
<string name="_Filtered_result_1AMEXe">"gefiltertes Ergebnis"</string>
<string name="OK">"OK"</string>
<string name="_recipes_updated_Z2arFrR">"Rezepte aktualisiert"</string>
<string name="_recipes_already_exists_2jqW2s">"Rezept existiert bereits"</string>
<string name="_recipes_imported_1NGeRw">"Rezepte importiert"</string>
<string name="_recipes_found_ZDdUgV">"Rezepte gefunden"</string>
<string name="_Import_summary_244SkL">"Import Zusammenfassung"</string>
<string name="_separate_with_spaces_ZHKOfw">"trennen mit Leerzeichen"</string>
<string name="Tags">"Tags"</string>
<string name="_No_tags_available_Z1C5GqD">"Keine Tags vorhanden"</string>
<string name="_All_Tags_28gMyY">"Alle Tags"</string>
<string name="_All_Categories_Z23JSTS">"Alle Kategorien"</string>
<string name="Vietnamese">"Vietnamesisch"</string>
<string name="Turkish">"Türkisch"</string>
<string name="Thai">"Thailändisch"</string>
<string name="Swedish">"Swedisch"</string>
<string name="_Sri_Lankan_Z7GfBa">"Sri Lankisch"</string>
<string name="Spanish">"Spanisch"</string>
<string name="Scottish">"Schottisch"</string>
<string name="Russian">"Russisch"</string>
<string name="Portuguese">"Portugiesisch"</string>
<string name="Nigerian">"Nigerianisch"</string>
<string name="Mexican">"Mexikanisch"</string>
<string name="Korean">"Koreanisch"</string>
<string name="Kenyan">"Kenianisch"</string>
<string name="Jewish">"Jüdisch"</string>
<string name="Japanese">"Japanisch"</string>
<string name="Jamaican">"Jamaikanisch"</string>
<string name="Italian">"Italienisch"</string>
<string name="Irish">"Irisch"</string>
<string name="Indian">"Indisch"</string>
<string name="Greek">"Griechisch"</string>
<string name="German">"Deutsch"</string>
<string name="French">"Französisch"</string>
<string name="Filipino">"Philipinisch"</string>
<string name="English">"English"</string>
<string name="Egyptian">"Ägyptisch"</string>
<string name="Danish">"Dänisch"</string>
<string name="Chinese">"Chinesisch"</string>
<string name="British">"Britisch"</string>
<string name="Brazilian">"Brazilianisch"</string>
<string name="American">"Amerikanisch"</string>
<string name="_All_Cuisines_2hjCp9">"Alle Küchen"</string>
<string name="Cuisines">"Küchen"</string>
<string name="Cuisine">"Küche"</string>
<string name="_Are_you_sure_you_want_to_remove_ZOnf22">"Bist du sicher, dass du löschen möchtest"</string>
<string name="Units">"Einheiten"</string>
<string name="_Remove_unit__2x26yq">"Einheit löschen?"</string>
<string name="_Remove_yield_unit__Z1duBWR">"Ertragseinheit löschen?"</string>
<string name="_Remove_category__2reaxz">"Kategorie löschen?"</string>
<string name="_Remove_cuisine__22ftcL">"Küche löschen?"</string>
<string name="_New_unit_1CVEEA">"Neue Einheit"</string>
<string name="_New_cuisine_Zrvs3z">"Neue Küche"</string>
<string name="Challenging">"Herausfordernd"</string>
<string name="Moderate">"Moderat"</string>
<string name="Easy">"Einfach"</string>
<string name="_Oldest_first_Z6cq4h">"Älteste zuerst"</string>
<string name="_Newest_first_2Sb3c">"Neueste zuerst"</string>
<string name="_Last_updated_Z2gEbLD">"Zuletzt aktualisiert"</string>
<string name="_Difficulty_level_cSL5d">"Schwierigkeitsgrad"</string>
<string name="Rating">"Bewertung"</string>
<string name="_Slowest_first_hHjY6">"Langsamste zuerst"</string>
<string name="_Quickest_first_Z1CpP7N">"Schnellste zuerst"</string>
<string name="_Your_search_did_not_match_any_recipes_in_the_filtered_result_1TV6QQ">"Deine Suche ergab keine Übereinstimmung mit den Rezepten im gefilterten Ergebnis"</string>
<string name="_Recipe_not_found_2qGveM">"Rezept nicht gefunden"</string>
<string name="_Reset_successful_YxqWK">"Zurücksetzen erfolgreich"</string>
<string name="_Reset_units_list_msRS3">"Einheiten Liste zurücksetzen"</string>
<string name="_Reset_yield_units_list_ZjouMk">"Ertragseinheiten Liste zurücksetzen"</string>
<string name="_Reset_categories_list_Z1JmKra">"Kategorien Liste zurücksetzen"</string>
<string name="_Reset_cuisines_list_1kWL8I">"Küchen Liste zurücksetzen"</string>
<string name="_Resetting_a_list_will_NOT_delete_your_existing_entries_but_only_restores_the_deleted_default_entries__Z28mk0h">"Das Zurücksetzen einer Liste löscht NICHT deine vorhandenen Einträge, sondern stellt nur die gelöschten Standardeinträge wieder her"</string>
<string name="Reset">"Zurücksetzen"</string>
<string name="_Helps_you_choose_what_to_cook_when_you_can_t_decide_muiMv">"Hilft dir wenn du dich nicht entscheiden kannst, was gekocht werden soll"</string>
<string name="_Shake_to_view_random_recipe_ZTK9F2">"Schütteln um zufälliges Rezept anzuzeigen"</string>
<string name="Options">"Optionen"</string>
<string name="_User_guide_2uDJCF">"Anleitung"</string>
<string name="_Privacy_policy_Zb4ht5">"Datenschutz"</string>
<string name="_View_on_GitHub_Z2qOqmx">"Auf GitHub ansehen"</string>
<string name="Translator">"Übersetzer"</string>
<string name="Contributors">"Mitwirkende"</string>
<string name="_Shared_via_EnRecipes__Get_it_on_Play_Store_or_F_Droid__Z2oTOK1">"Geteilt über EnRecipes. Hole es Dir auf dem Play Store oder von F-Droid."</string>
<string name="_Shared_via_EnRecipes__Get_it_on_Play_Store_or_F_Droid__Z2oTOK1">"Geteilt über EnRecipes. Hole es Dir aus dem Play Store oder von F-Droid."</string>
<string name="_Permission_denied_Z7wlWK">"Berechtigung verweigert"</string>
<string name="_Import_successful_2bLM3e">"Import erfolgreich"</string>
<string name="_Verifying____cS102">"Überprüfen..."</string>
@ -32,7 +121,6 @@
<string name="DISCARD">"VERWERFEN"</string>
<string name="_Are_you_sure_you_want_to_discard_unsaved_changes_to_this_recipe__Z1G7sVC">"Möchtest Du nicht gespeicherte Änderungen an diesem Rezept verwerfen?"</string>
<string name="_Unsaved_changes_9fqb4">"Nicht gespeicherte Änderungen"</string>
<string name="_Rename_category_Z1WzCco">"Kategorie umbenennen"</string>
<string name="Search">"Suche"</string>
<string name="_Are_you_sure_you_want_to_delete_the_recipe_29DH9w">"Möchtest Du das Rezept wirklich löschen"</string>
<string name="DELETE">"LÖSCHEN"</string>
@ -65,9 +153,6 @@
<string name="ADD">"HINZUFÜGEN"</string>
<string name="REMOVE">"ENTFERNEN"</string>
<string name="CANCEL">"ABBRECHEN"</string>
<string name="_Last_modified_Z1yBAS3">"Zuletzt geändert"</string>
<string name="Duration">"Dauer"</string>
<string name="_Natural_order_Z1O8On5">"Reihenfolge"</string>
<string name="_Sort_by_Zq01TF">"Sortieren nach"</string>
<string name="Step">"Schritt"</string>
<string name="Item">"Posten"</string>
@ -88,15 +173,12 @@
<string name="_Preparation_time_15BfxT">"Vorbereitungszeit"</string>
<string name="Category">"Kategorie"</string>
<string name="Title">"Titel"</string>
<string name="_Edit_recipe_ZPvwDP">"Rezept Bearbeiten"</string>
<string name="_Edit_recipe_ZPvwDP">"Rezept bearbeiten"</string>
<string name="_New_recipe_Z1Y2YKJ">"Neues Rezept"</string>
<string name="_Follow_on_Mastodon_Z1v6e4V">"Folge auf Mastodon"</string>
<string name="_Follow_on_GitHub_Z1GjptH">"Folge auf GitHub"</string>
<string name="_Vishnu_Raghav_B_1qnRnC">"Vishnu Raghav B"</string>
<string name="Author">"Autor"</string>
<string name="_for_reporting_issues__suggestions_and_feedback_Z1JUmyE">"für die Meldung von Problemen, Anregungen und Feedback"</string>
<string name="_Join_the_Telegram_group_ZAXQgc">"Tritt der Telegrammgruppe bei"</string>
<string name="_View_project_on_GitHub_1hrJ0U">"Projekt auf GitHub anzeigen"</string>
<string name="Version">"Version"</string>
<string name="_Supports_full_backups_exported_by_this_app_ZYs4f2">"Unterstützt vollständige Backups, die von dieser App exportiert werden"</string>
<string name="_Import_from_backup_Z28HsC0">"Importieren vom Backup"</string>
@ -124,11 +206,11 @@
<string name="_Use_the_pencil_button_to_add_some_instructions_ZAi0PH">"Verwende das Stift-Symbol, um einige Zubereitungen hinzuzufügen"</string>
<string name="_Use_the_pencil_button_to_add_some_ingredients_Z1xOX8S">"Verwende das Stift-Symbol, um einige Zutaten hinzuzufügen"</string>
<string name="_Use_the_plus_button_to_add_one_1h20ms">"Verwende das Plus-Symbol, um eins hinzuzufügen"</string>
<string name="_Start_adding_your_recipes__rwnVV">"Beginne deine Rezepte hinzuzufpgen!"</string>
<string name="_Start_adding_your_recipes__rwnVV">"Beginne deine Rezepte hinzuzufügen!"</string>
<string name="large">"groß"</string>
<string name="medium">"mittel"</string>
<string name="medium">"medium"</string>
<string name="small">"klein"</string>
<string name="stick">"Stab"</string>
<string name="stick">"Stange"</string>
<string name="dozen">"Dutzend"</string>
<string name="drop">"Tropfen"</string>
<string name="pinch">"Prise"</string>
@ -147,7 +229,7 @@
<string name="gal">"gal"</string>
<string name="qt">"qt"</string>
<string name="pt">"pt"</string>
<string name="cup">"Becher"</string>
<string name="cup">"Tasse"</string>
<string name="_fl_oz_72kqu">"fl"</string>
<string name="tbsp">"EL"</string>
<string name="dsp">"SL"</string>
@ -160,7 +242,7 @@
<string name="Litre">"Liter"</string>
<string name="Millilitre">"Milliliter"</string>
<string name="Gallon">"Gallone"</string>
<string name="Cup">"Becher"</string>
<string name="Cup">"Tasse"</string>
<string name="Kilogram">"Kilogramm"</string>
<string name="Gram">"Gramm"</string>
<string name="Pound">"Pfund"</string>
@ -172,7 +254,7 @@
<string name="Serving">"Portion"</string>
<string name="Vegetarian">"Vegetarisch"</string>
<string name="Vegan">"Vegan"</string>
<string name="Undefined">"Undefiniert"</string>
<string name="Undefined">"Unsortiert"</string>
<string name="Soups">"Suppen"</string>
<string name="Snacks">"Snacks"</string>
<string name="_Side_dishes_Z1Et4Vg">"Beilagen"</string>
@ -197,8 +279,6 @@
<string name="Appetizers">"Vorspeisen"</string>
<string name="About">"Über"</string>
<string name="Settings">"Einstellungen"</string>
<string name="RENAME">"UMBENENNEN"</string>
<string name="DONE">"FERTIG"</string>
<string name="Categories">"Kategorien"</string>
<string name="_Meal_Planner_2aq4oj">"Essensplaner"</string>
<string name="Favourites">"Favoriten"</string>
@ -207,4 +287,5 @@
<string name="_app_name_1k3Sbz">"EnRecipes"</string>
<string name="app_name">"EnRecipes"</string>
<string name="title_activity_kimera">"EnRecipes"</string>
<string name="_Import_failed_Z1dbs6t">"Import failed"</string>
</resources>

View file

@ -0,0 +1,291 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="_Invalid_file__Z2bRAst">"Invalid file:"</string>
<string name="_Backup_file_has_been_modified_externally__Wjiqq">"Backup file has been modified externally."</string>
<string name="_Backup_file_seems_empty__Zd7qfR">"Backup file seems empty."</string>
<string name="_Backup_file_is_incorrect_or_corrupt__1jXb8N">"Backup file is incorrect or corrupt."</string>
<string name="_Remove_recipe_from_snacks__MNnCU">"Remove recipe from snacks?"</string>
<string name="_Remove_recipe_from_dinner__8sWfY">"Remove recipe from dinner?"</string>
<string name="_Remove_recipe_from_lunch__Zwpsg2">"Remove recipe from lunch?"</string>
<string name="_Remove_recipe_from_breakfast__ZvYyFG">"Remove recipe from breakfast?"</string>
<string name="_Untitled_Recipe_Zv0UxP">"Receta sin título"</string>
<string name="_Star_rating_Z11p4Kw">"Valoración por estrellas"</string>
<string name="Created">"Creado"</string>
<string name="_Filtered_result_1AMEXe">"Resultados filtrados"</string>
<string name="OK">"OK"</string>
<string name="_recipes_updated_Z2arFrR">"recetas actualizadas"</string>
<string name="_recipes_already_exists_2jqW2s">"la receta ya existe"</string>
<string name="_recipes_imported_1NGeRw">"recetas importadas"</string>
<string name="_recipes_found_ZDdUgV">"recetas encontradas"</string>
<string name="_Import_summary_244SkL">"Resumen de importación"</string>
<string name="_separate_with_spaces_ZHKOfw">"separar con espacios"</string>
<string name="Tags">"Etiquetas"</string>
<string name="_No_tags_available_Z1C5GqD">"No hay etiquetas disponibles"</string>
<string name="_All_Tags_28gMyY">"Todas las etiquetas"</string>
<string name="_All_Categories_Z23JSTS">"Todas las categorías"</string>
<string name="Vietnamese">"Vietnamita"</string>
<string name="Turkish">"Turca"</string>
<string name="Thai">"Thai"</string>
<string name="Swedish">"Sueca"</string>
<string name="_Sri_Lankan_Z7GfBa">"Sri Lankiana"</string>
<string name="Spanish">"Española"</string>
<string name="Scottish">"Escocesa"</string>
<string name="Russian">"Rusa"</string>
<string name="Portuguese">"Portuguesa"</string>
<string name="Nigerian">"Nigeriana"</string>
<string name="Mexican">"Mejicana"</string>
<string name="Korean">"Coreana"</string>
<string name="Kenyan">"Keniata"</string>
<string name="Jewish">"Judía"</string>
<string name="Japanese">"Japonés"</string>
<string name="Jamaican">"Jamaiquino"</string>
<string name="Italian">"Italiano"</string>
<string name="Irish">"Irlandés"</string>
<string name="Indian">"Hindú"</string>
<string name="Greek">"Griega"</string>
<string name="German">"Alemana"</string>
<string name="French">"Francesa"</string>
<string name="Filipino">"Filipina"</string>
<string name="English">"Inglesa"</string>
<string name="Egyptian">"Egipcia"</string>
<string name="Danish">"Danesa"</string>
<string name="Chinese">"China"</string>
<string name="British">"Británica"</string>
<string name="Brazilian">"Brasileña"</string>
<string name="American">"Americana"</string>
<string name="_All_Cuisines_2hjCp9">"Todas las cocinas"</string>
<string name="Cuisines">"Comidas"</string>
<string name="Cuisine">"Comida"</string>
<string name="_Are_you_sure_you_want_to_remove_ZOnf22">"Seguro deseas eliminar"</string>
<string name="Units">"Unidades"</string>
<string name="_Remove_unit__2x26yq">"¿Remover unidad?"</string>
<string name="_Remove_yield_unit__Z1duBWR">"¿Remover unidad de medida?"</string>
<string name="_Remove_category__2reaxz">"¿Remover categoría?"</string>
<string name="_Remove_cuisine__22ftcL">"¿Remover comida?"</string>
<string name="_New_unit_1CVEEA">"Nueva unidad"</string>
<string name="_New_cuisine_Zrvs3z">"Nueva comida"</string>
<string name="Challenging">"Desafiante"</string>
<string name="Moderate">"Moderada"</string>
<string name="Easy">"Fácil"</string>
<string name="_Oldest_first_Z6cq4h">"Más antiguas primero"</string>
<string name="_Newest_first_2Sb3c">"Más nuevas primero"</string>
<string name="_Last_updated_Z2gEbLD">"Última actualización"</string>
<string name="_Difficulty_level_cSL5d">"Nivel de dificultad"</string>
<string name="Rating">"Rating"</string>
<string name="_Slowest_first_hHjY6">"La más lenta primero"</string>
<string name="_Quickest_first_Z1CpP7N">"La más rápida primero"</string>
<string name="_Your_search_did_not_match_any_recipes_in_the_filtered_result_1TV6QQ">"Tu búsqueda no encajó con ninguna receta de los resultados filtrados"</string>
<string name="_Recipe_not_found_2qGveM">"Receta no encontrada"</string>
<string name="_Reset_successful_YxqWK">"Reseteo satisfactorio"</string>
<string name="_Reset_units_list_msRS3">"Resetea el listado de unidades"</string>
<string name="_Reset_yield_units_list_ZjouMk">"Resetea el listado de unidad de medidas"</string>
<string name="_Reset_categories_list_Z1JmKra">"Resetea el listado de categorías"</string>
<string name="_Reset_cuisines_list_1kWL8I">"Resetea el listado de comidas"</string>
<string name="_Resetting_a_list_will_NOT_delete_your_existing_entries_but_only_restores_the_deleted_default_entries__Z28mk0h">"Resetear un listado NO borrará tus entradas existentes pero restaurará las eliminadas por default."</string>
<string name="Reset">"Reiniciar"</string>
<string name="_Helps_you_choose_what_to_cook_when_you_can_t_decide_muiMv">"Ayuda a decidir que cocinar cuando no sabes que cocinar"</string>
<string name="_Shake_to_view_random_recipe_ZTK9F2">"Sacude para ver una receta aleatoria"</string>
<string name="Options">"Opciones"</string>
<string name="_User_guide_2uDJCF">"Guía de usuario"</string>
<string name="_Privacy_policy_Zb4ht5">"Política de privacidad"</string>
<string name="_View_on_GitHub_Z2qOqmx">"Visita en GitHub"</string>
<string name="Translator">"Traductor"</string>
<string name="Contributors">"Contribuyentes"</string>
<string name="_Shared_via_EnRecipes__Get_it_on_Play_Store_or_F_Droid__Z2oTOK1">"Compartido via EnRecipes. Consíguela en Play Store o F-Droid."</string>
<string name="_Permission_denied_Z7wlWK">"Permiso denegado"</string>
<string name="_Import_successful_2bLM3e">"Importado satisfactoriamente"</string>
<string name="_Verifying____cS102">"Verificando..."</string>
<string name="_long_time_ago_1nwlFA">"hace mucho tiempo"</string>
<string name="_months_ago_Z1TsskA">"hace meses"</string>
<string name="_weeks_ago_Z2sT1GA">"semanas atrás"</string>
<string name="_days_ago_2iCYkm">"algunos dias atrás"</string>
<string name="yesterday">"ayer"</string>
<string name="today">"hoy"</string>
<string name="_You_tried_this_recipe__ZUJOl3">"Haz intentado esta receta:"</string>
<string name="snacks">"bocadillos"</string>
<string name="dinner">"cena"</string>
<string name="lunch">"almuerzo"</string>
<string name="breakfast">"desayuno"</string>
<string name="_Crop_photo_1VL04J">"Recortar foto"</string>
<string name="_REPLACE_PHOTO_ZLHhwH">"REEMPLAZAR FOTO"</string>
<string name="_Recipe_photo_eqm9B">"Foto de receta"</string>
<string name="_EnRecipes_requires_storage_permission_in_order_to_set_recipe_photo__23OnNT">"EnRecipes requiere el permiso de almacenamiento para colocar la foto de receta."</string>
<string name="Required">"Requerido"</string>
<string name="_New_category_Weg73">"Nueva categoría"</string>
<string name="_New_yield_unit_1Oevd2">"Nueva unidad de medida"</string>
<string name="_Remove_note__2wyMVE">"¿Remover nota?"</string>
<string name="_Remove_combination__1dr2LS">"¿Remover combinación?"</string>
<string name="_Remove_instruction__vkJfi">"¿Remover instrucción?"</string>
<string name="_Remove_ingredient__2puvMO">"¿Remover ingrediente?"</string>
<string name="_KEEP_EDITING_1o9uy3">"CONTINUAR EDITANDO"</string>
<string name="DISCARD">"DESCARTAR"</string>
<string name="_Are_you_sure_you_want_to_discard_unsaved_changes_to_this_recipe__Z1G7sVC">"¿Seguro que quieres descartar los cambios no guardados de esta receta?"</string>
<string name="_Unsaved_changes_9fqb4">"Cambios no guardados"</string>
<string name="Search">"Buscar"</string>
<string name="_Are_you_sure_you_want_to_delete_the_recipe_29DH9w">"Seguro que quieres borrar la receta"</string>
<string name="DELETE">"BORRAR"</string>
<string name="_Delete_recipe__Z2tMYtE">"¿Borrar receta?"</string>
<string name="_Removed_from_Try_Later_1h5Bkp">"Remueve de Intentar luego"</string>
<string name="_Added_to_Try_Later_Z1gaF37">"Agrega a Intentar luego"</string>
<string name="_Removed_from_Favourites_Z5k7LR">"Remover de favoritos"</string>
<string name="_Added_to_Favourites_2mzllO">"Agregar a favoritos"</string>
<string name="_Add_at_least_one_recipe_to_perform_a_backup_17xYaH">"Agrega al menos una receta para realizar un respaldo"</string>
<string name="_EnRecipes_requires_storage_permission_in_order_to_backup_your_data_to_this_device__2cbvIq">"EnRecipes requiere el permiso de almacenamiento para respaldar los datos en este dispositivo"</string>
<string name="CONTINUE">"CONTINUAR"</string>
<string name="_NOT_NOW_Z1HD7qX">"NO AHORA"</string>
<string name="_EnRecipes_requires_storage_permission_in_order_to_import_your_data_from_a_previous_backup__1CKjb7">"EnRecipes requiere el permiso de almacenamiento para importar tus datos de un respaldo previo."</string>
<string name="_Grant_permission_Z1UQBuh">"Dar permmiso"</string>
<string name="_EnRecipes_needs_to_be_restarted_for_the_app_language_to_take_effect__ZWGUtY">"EnRecipes debe reiniciarse para que el cambio de lenguaje surta efecto."</string>
<string name="_EnRecipes_needs_to_be_restarted_for_the_theme_change_to_take_effect__2kU319">"EnRecipes debe reiniciarse para que el cambio de tema surta efecto."</string>
<string name="RESTART">"REINICIAR"</string>
<string name="_Restart_required_Z22YINL">"Reinicio requerido"</string>
<string name="SET">"ESTABLECER"</string>
<string name="_ADD_NEW_Zv8FjM">"AGREGAR NUEVA"</string>
<string name="Share">"Compartir"</string>
<string name="Overview">"Resumen"</string>
<string name="Recipe">"Receta"</string>
<string name="Photo">"Foto"</string>
<string name="min">"min"</string>
<string name="hr">"hr"</string>
<string name="_My_Healthy_Recipe_Z1EqB8f">"Mi receta saludable"</string>
<string name="_Nothing_here__Add_some_recipes_and_try_again__Z25A7Q">"¡Nada por aquí! Agregar algunas recetas e intenta nuevamente."</string>
<string name="_Select_a_recipe_2lL8x2">"Elegir una receta"</string>
<string name="ADD">"AGREGAR"</string>
<string name="REMOVE">"REMOVER"</string>
<string name="CANCEL">"CANCELAR"</string>
<string name="_Sort_by_Zq01TF">"Ordenada por"</string>
<string name="Step">"Paso"</string>
<string name="Item">"Item"</string>
<string name="_ADD_NOTE_ZyNw1r">"AGREGAR NOTA"</string>
<string name="Notes">"Notas"</string>
<string name="Note">"Nota"</string>
<string name="_ADD_COMBINATION_2q9HWq">"AGREGA COMBINACIÓN"</string>
<string name="Combinations">"Combinaciones"</string>
<string name="_ADD_STEP_ZyMPOe">"AGREGAR PASO"</string>
<string name="Instructions">"Instrucciones"</string>
<string name="Instruction">"Instrucción"</string>
<string name="_ADD_INGREDIENT_29sSLU">"AGREGAR INGREDIENTE"</string>
<string name="Ingredients">"Ingredientes"</string>
<string name="Ingredient">"Ingrediente"</string>
<string name="_Yield_measured_in_2OoRT">"Cantidad medida en"</string>
<string name="_Yield_quantity_ZHx3jw">"Cantidad"</string>
<string name="_Cooking_time_2w2fEw">"Tiempo de cocción"</string>
<string name="_Preparation_time_15BfxT">"Tiempo de preparación"</string>
<string name="Category">"Categoria"</string>
<string name="Title">"Titulo"</string>
<string name="_Edit_recipe_ZPvwDP">"Editar receta"</string>
<string name="_New_recipe_Z1Y2YKJ">"Nueva receta"</string>
<string name="_Vishnu_Raghav_B_1qnRnC">"Vishnu Raghav B"</string>
<string name="Author">"Autor"</string>
<string name="_for_reporting_issues__suggestions_and_feedback_Z1JUmyE">"para reportar problemas, sugerencias y devoluciones"</string>
<string name="_Join_the_Telegram_group_ZAXQgc">"Únete al grupo de Telegram"</string>
<string name="Version">"Version"</string>
<string name="_Supports_full_backups_exported_by_this_app_ZYs4f2">"Soporta respaldos completos exportados por esta app"</string>
<string name="_Import_from_backup_Z28HsC0">"Importar de un respaldo"</string>
<string name="_Generates_a_zip_file_that_contains_all_your_data__This_file_can_be_imported_back__Z19m3xY">"Generar un archivo zip con tus datos. Este puede ser importado nuevamente."</string>
<string name="_Export_a_full_backup_TJfra">"Exportar un respaldo completo"</string>
<string name="Database">"Base de datos"</string>
<string name="Dark">"Oscuro"</string>
<string name="Light">"Claro"</string>
<string name="Theme">"Tema"</string>
<string name="_System_default_Z1jruVS">"Default del sistema"</string>
<string name="_App_language_DzFsk">"Lenguaje"</string>
<string name="Interface">"Interfaz"</string>
<string name="_Your_search_did_not_match_any_recipes_in_your_try_later_list_Z2wWbA1">"Tu búsqueda no concuerda con recetas en tu listado de intentar luego"</string>
<string name="_Your_search_did_not_match_any_recipes_in_your_favourites_1ylvHN">"Tu búsqueda no concuerda con recetas en tus favoritos"</string>
<string name="_Your_search_did_not_match_any_recipes_in_this_category_P7J4V">"Tu búsqueda no concuerda con recetas de esta categoría"</string>
<string name="_Your_search_did_not_match_any_recipes_Z1eppHH">"Tu búsqueda no concuerda con recetas"</string>
<string name="_No_recipes_found_Z125IxD">"No se encontraron recetas"</string>
<string name="_Category_looks_empty_ZAK5qU">"Categoría vacía"</string>
<string name="_Recipes_you_mark_as_favourite_will_be_listed_here_Z1iIHgY">"Las recetas que marques como favoritas serán listadas aquí"</string>
<string name="_No_favourites_yet_aPSoG">"No tienes favoritos todavía"</string>
<string name="_Recipes_you_mark_as_try_later_will_be_listed_here_Z1ITwPV">"Las recetas que marques como intentar luego serán listadas aquí"</string>
<string name="_All_done__72KYl">"¡Listo!"</string>
<string name="_Use_the_pencil_button_to_add_some_notes_Z1wyyeb">"Usa el botón del lapiz para agregar notas"</string>
<string name="_Use_the_pencil_button_to_add_some_combinations_6NhFS">"Usa el botón del lapiz para agregar mezclas"</string>
<string name="_Use_the_pencil_button_to_add_some_instructions_ZAi0PH">"Usa el boton del lapiz para agregar instrucciones"</string>
<string name="_Use_the_pencil_button_to_add_some_ingredients_Z1xOX8S">"Usa el lapiz para agregar ingredientes"</string>
<string name="_Use_the_plus_button_to_add_one_1h20ms">"Usa el botón más para agregar una"</string>
<string name="_Start_adding_your_recipes__rwnVV">"¡Comienza a agregar tus recetas!"</string>
<string name="large">"grande"</string>
<string name="medium">"mediano"</string>
<string name="small">"pequeño"</string>
<string name="stick">"rama"</string>
<string name="dozen">"docena"</string>
<string name="drop">"gota"</string>
<string name="pinch">"pizca"</string>
<string name="piece">"porción"</string>
<string name="clove">"clavo"</string>
<string name="leaf">"hoja"</string>
<string name="in">"pulg"</string>
<string name="cm">"cm"</string>
<string name="kg">"kg"</string>
<string name="g">"g"</string>
<string name="mg">"mg"</string>
<string name="lb">"lb"</string>
<string name="oz">"onz"</string>
<string name="l">"l"</string>
<string name="ml">"ml"</string>
<string name="gal">"gal"</string>
<string name="qt">"cuarto"</string>
<string name="pt">"parte"</string>
<string name="cup">"taza"</string>
<string name="_fl_oz_72kqu">"oz liq"</string>
<string name="tbsp">"tbsp"</string>
<string name="dsp">"dsp"</string>
<string name="tsp">"tsp"</string>
<string name="Unit">"Unidad"</string>
<string name="unit">"unidad"</string>
<string name="Loaf">"Hogaza"</string>
<string name="Patty">"Empanada"</string>
<string name="Roll">"Enrollar"</string>
<string name="Litre">"Litro"</string>
<string name="Millilitre">"Mililitro"</string>
<string name="Gallon">"Galon"</string>
<string name="Cup">"Taza"</string>
<string name="Kilogram">"Kilogramo"</string>
<string name="Gram">"Gramo"</string>
<string name="Pound">"Libra"</string>
<string name="Ounce">"Onza"</string>
<string name="_Fluid_Ounce_bd10L">"Onza líquida"</string>
<string name="Tablespoon">"Cucharada"</string>
<string name="Teaspoon">"Cucharadita"</string>
<string name="Piece">"Pieza"</string>
<string name="Serving">"Servicio"</string>
<string name="Vegetarian">"Vegetariano"</string>
<string name="Vegan">"Vegano"</string>
<string name="Undefined">"Indefinido"</string>
<string name="Soups">"Sopas"</string>
<string name="Snacks">"Bocadillo"</string>
<string name="_Side_dishes_Z1Et4Vg">"Platos de acompañamiento"</string>
<string name="Seafood">"Comida del mar"</string>
<string name="Sauces">"Salsas"</string>
<string name="Salads">"Ensaladas"</string>
<string name="Rice">"Arroz"</string>
<string name="Poultry">"Pollería"</string>
<string name="Pasta">"Pasta"</string>
<string name="Noodles">"Fideos"</string>
<string name="Meat">"Carnes"</string>
<string name="_Main_dishes_u6RGQ">"Platos principales"</string>
<string name="Lunch">"Almuerzo"</string>
<string name="Healthy">"Saludable"</string>
<string name="Drinks">"Drinks"</string>
<string name="Dinner">"Cena"</string>
<string name="Desserts">"Postres"</string>
<string name="Breakfast">"Desayuno"</string>
<string name="Breads">"Panes"</string>
<string name="Beverages">"Bebidas"</string>
<string name="Barbecue">"Barbacoa"</string>
<string name="Appetizers">"Aperitivos"</string>
<string name="About">"Acerca de"</string>
<string name="Settings">"Ajustes"</string>
<string name="Categories">"Categorías"</string>
<string name="_Meal_Planner_2aq4oj">"Planificador de comida"</string>
<string name="Favourites">"Favoritos"</string>
<string name="_Try_Later_If7PG">"Probar luego"</string>
<string name="EnRecipes">"EnRecipes"</string>
<string name="_app_name_1k3Sbz">"EnRecipes"</string>
<string name="app_name">"EnRecipes"</string>
<string name="title_activity_kimera">"EnRecipes"</string>
<string name="_Import_failed_Z1dbs6t">"Import failed"</string>
</resources>

View file

@ -0,0 +1,291 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="_Invalid_file__Z2bRAst">"Invalid file:"</string>
<string name="_Backup_file_has_been_modified_externally__Wjiqq">"Backup file has been modified externally."</string>
<string name="_Backup_file_seems_empty__Zd7qfR">"Backup file seems empty."</string>
<string name="_Backup_file_is_incorrect_or_corrupt__1jXb8N">"Backup file is incorrect or corrupt."</string>
<string name="_Remove_recipe_from_snacks__MNnCU">"Remove recipe from snacks?"</string>
<string name="_Remove_recipe_from_dinner__8sWfY">"Remove recipe from dinner?"</string>
<string name="_Remove_recipe_from_lunch__Zwpsg2">"Remove recipe from lunch?"</string>
<string name="_Remove_recipe_from_breakfast__ZvYyFG">"Remove recipe from breakfast?"</string>
<string name="_Untitled_Recipe_Zv0UxP">"Untitled Recipe"</string>
<string name="_Star_rating_Z11p4Kw">"Star rating"</string>
<string name="Created">"Created"</string>
<string name="_Filtered_result_1AMEXe">"Filtered result"</string>
<string name="OK">"OK"</string>
<string name="_recipes_updated_Z2arFrR">"recipes updated"</string>
<string name="_recipes_already_exists_2jqW2s">"recipes already exists"</string>
<string name="_recipes_imported_1NGeRw">"recipes imported"</string>
<string name="_recipes_found_ZDdUgV">"recipes found"</string>
<string name="_Import_summary_244SkL">"Import summary"</string>
<string name="_separate_with_spaces_ZHKOfw">"separate with spaces"</string>
<string name="Tags">"Tags"</string>
<string name="_No_tags_available_Z1C5GqD">"No tags available"</string>
<string name="_All_Tags_28gMyY">"All Tags"</string>
<string name="_All_Categories_Z23JSTS">"All Categories"</string>
<string name="Vietnamese">"Vietnamese"</string>
<string name="Turkish">"Turkish"</string>
<string name="Thai">"Thai"</string>
<string name="Swedish">"Swedish"</string>
<string name="_Sri_Lankan_Z7GfBa">"Sri Lankan"</string>
<string name="Spanish">"Spanish"</string>
<string name="Scottish">"Scottish"</string>
<string name="Russian">"Russian"</string>
<string name="Portuguese">"Portuguese"</string>
<string name="Nigerian">"Nigerian"</string>
<string name="Mexican">"Mexican"</string>
<string name="Korean">"Korean"</string>
<string name="Kenyan">"Kenyan"</string>
<string name="Jewish">"Jewish"</string>
<string name="Japanese">"Japanese"</string>
<string name="Jamaican">"Jamaican"</string>
<string name="Italian">"Italian"</string>
<string name="Irish">"Irish"</string>
<string name="Indian">"Indian"</string>
<string name="Greek">"Greek"</string>
<string name="German">"German"</string>
<string name="French">"French"</string>
<string name="Filipino">"Filipino"</string>
<string name="English">"English"</string>
<string name="Egyptian">"Egyptian"</string>
<string name="Danish">"Danish"</string>
<string name="Chinese">"Chinese"</string>
<string name="British">"British"</string>
<string name="Brazilian">"Brazilian"</string>
<string name="American">"American"</string>
<string name="_All_Cuisines_2hjCp9">"All Cuisines"</string>
<string name="Cuisines">"Cuisines"</string>
<string name="Cuisine">"Cuisine"</string>
<string name="_Are_you_sure_you_want_to_remove_ZOnf22">"Are you sure you want to remove"</string>
<string name="Units">"Units"</string>
<string name="_Remove_unit__2x26yq">"Remove unit?"</string>
<string name="_Remove_yield_unit__Z1duBWR">"Remove yield unit?"</string>
<string name="_Remove_category__2reaxz">"Remove category?"</string>
<string name="_Remove_cuisine__22ftcL">"Remove cuisine?"</string>
<string name="_New_unit_1CVEEA">"New unit"</string>
<string name="_New_cuisine_Zrvs3z">"New cuisine"</string>
<string name="Challenging">"Challenging"</string>
<string name="Moderate">"Moderate"</string>
<string name="Easy">"Easy"</string>
<string name="_Oldest_first_Z6cq4h">"Oldest first"</string>
<string name="_Newest_first_2Sb3c">"Newest first"</string>
<string name="_Last_updated_Z2gEbLD">"Last updated"</string>
<string name="_Difficulty_level_cSL5d">"Difficulty level"</string>
<string name="Rating">"Rating"</string>
<string name="_Slowest_first_hHjY6">"Slowest first"</string>
<string name="_Quickest_first_Z1CpP7N">"Quickest first"</string>
<string name="_Your_search_did_not_match_any_recipes_in_the_filtered_result_1TV6QQ">"Your search did not match any recipes in the filtered result"</string>
<string name="_Recipe_not_found_2qGveM">"Recipe not found"</string>
<string name="_Reset_successful_YxqWK">"Reset successful"</string>
<string name="_Reset_units_list_msRS3">"Reset units list"</string>
<string name="_Reset_yield_units_list_ZjouMk">"Reset yield units list"</string>
<string name="_Reset_categories_list_Z1JmKra">"Reset categories list"</string>
<string name="_Reset_cuisines_list_1kWL8I">"Reset cuisines list"</string>
<string name="_Resetting_a_list_will_NOT_delete_your_existing_entries_but_only_restores_the_deleted_default_entries__Z28mk0h">"Resetting a list will NOT delete your existing entries but only restores the deleted default entries."</string>
<string name="Reset">"Reset"</string>
<string name="_Helps_you_choose_what_to_cook_when_you_can_t_decide_muiMv">"Helps you choose what to cook when you can\'t decide"</string>
<string name="_Shake_to_view_random_recipe_ZTK9F2">"Shake to view random recipe"</string>
<string name="Options">"Options"</string>
<string name="_User_guide_2uDJCF">"User guide"</string>
<string name="_Privacy_policy_Zb4ht5">"Privacy policy"</string>
<string name="_View_on_GitHub_Z2qOqmx">"View on GitHub"</string>
<string name="Translator">"Translator"</string>
<string name="Contributors">"Medewerkers"</string>
<string name="_Shared_via_EnRecipes__Get_it_on_Play_Store_or_F_Droid__Z2oTOK1">"Gedeeld via EnRecipes. Haal het in de Play Store of bij F-Droid."</string>
<string name="_Permission_denied_Z7wlWK">"toestemming geweigerd"</string>
<string name="_Import_successful_2bLM3e">"Succesvol importeren"</string>
<string name="_Verifying____cS102">"Het controleren..."</string>
<string name="_long_time_ago_1nwlFA">"lang geleden"</string>
<string name="_months_ago_Z1TsskA">"voorgaande maanden"</string>
<string name="_weeks_ago_Z2sT1GA">"voorgaande weken"</string>
<string name="_days_ago_2iCYkm">"voorgaande dagen"</string>
<string name="yesterday">"Gisteren"</string>
<string name="today">"vandaag"</string>
<string name="_You_tried_this_recipe__ZUJOl3">"Je probeerde dit recept:"</string>
<string name="snacks">"Hapje"</string>
<string name="dinner">"Diner"</string>
<string name="lunch">"Middag"</string>
<string name="breakfast">"Ontbijt"</string>
<string name="_Crop_photo_1VL04J">"Een foto afknippen"</string>
<string name="_REPLACE_PHOTO_ZLHhwH">"FOTO REPLAATSEN"</string>
<string name="_Recipe_photo_eqm9B">"Receptfoto"</string>
<string name="_EnRecipes_requires_storage_permission_in_order_to_set_recipe_photo__23OnNT">"EnRecipes heeft toestemming nodig om receptfoto\'s in te stellen."</string>
<string name="Required">"Benodigd"</string>
<string name="_New_category_Weg73">"Nieuwe categorie"</string>
<string name="_New_yield_unit_1Oevd2">"Nieuwe opbrengsteenheid"</string>
<string name="_Remove_note__2wyMVE">"Noot verwijderen?"</string>
<string name="_Remove_combination__1dr2LS">"Combinatie verwijderen?"</string>
<string name="_Remove_instruction__vkJfi">"Voorbereiding verwijderen?"</string>
<string name="_Remove_ingredient__2puvMO">"Ingrediënten verwijderen?"</string>
<string name="_KEEP_EDITING_1o9uy3">"VERDERE VERWERKING"</string>
<string name="DISCARD">"AFBREKENING"</string>
<string name="_Are_you_sure_you_want_to_discard_unsaved_changes_to_this_recipe__Z1G7sVC">"Wilt u niet opgeslagen wijzigingen in dit recept weggooien?"</string>
<string name="_Unsaved_changes_9fqb4">"Onopgeslagen veranderingen"</string>
<string name="Search">"Zoeken"</string>
<string name="_Are_you_sure_you_want_to_delete_the_recipe_29DH9w">"Wil je echt het recept verwijderen"</string>
<string name="DELETE">"VERWIJDEREN"</string>
<string name="_Delete_recipe__Z2tMYtE">"Recept verwijderen?"</string>
<string name="_Removed_from_Try_Later_1h5Bkp">"Verwijderd uit Probeer Later"</string>
<string name="_Added_to_Try_Later_Z1gaF37">"Toegevoegd in Later proberen"</string>
<string name="_Removed_from_Favourites_Z5k7LR">"Uit favorieten verwijderd"</string>
<string name="_Added_to_Favourites_2mzllO">"Toegevoegd aan favorieten"</string>
<string name="_Add_at_least_one_recipe_to_perform_a_backup_17xYaH">"Voeg ten minste één recept toe om een back-up te maken"</string>
<string name="_EnRecipes_requires_storage_permission_in_order_to_backup_your_data_to_this_device__2cbvIq">"EnRecipes heeft toestemming nodig om uw gegevens op dit apparaat op te slaan."</string>
<string name="CONTINUE">"CONTINUE"</string>
<string name="_NOT_NOW_Z1HD7qX">"NIET NU"</string>
<string name="_EnRecipes_requires_storage_permission_in_order_to_import_your_data_from_a_previous_backup__1CKjb7">"EnRecipes heeft toestemming nodig om uw gegevens uit een eerdere back-up te importeren."</string>
<string name="_Grant_permission_Z1UQBuh">"Toestemming"</string>
<string name="_EnRecipes_needs_to_be_restarted_for_the_app_language_to_take_effect__ZWGUtY">"EnRecipes moeten opnieuw worden opgestart om de nieuw ingestelde taal te wijzigen"</string>
<string name="_EnRecipes_needs_to_be_restarted_for_the_theme_change_to_take_effect__2kU319">"EnRecipes moeten opnieuw worden opgestart om de wijziging van het onderwerp in werking te laten treden."</string>
<string name="RESTART">"HERSTART"</string>
<string name="_Restart_required_Z22YINL">"Herstart nodig"</string>
<string name="SET">"SETUP"</string>
<string name="_ADD_NEW_Zv8FjM">"NIEUW BIJLAGE"</string>
<string name="Share">"Deel"</string>
<string name="Overview">"Overzicht"</string>
<string name="Recipe">"Recept"</string>
<string name="Photo">"FOTO"</string>
<string name="min">"min"</string>
<string name="hr">"h"</string>
<string name="_My_Healthy_Recipe_Z1EqB8f">"Mijn Gezond Recept"</string>
<string name="_Nothing_here__Add_some_recipes_and_try_again__Z25A7Q">"Niets hier! Voeg wat recepten toe en probeer het opnieuw."</string>
<string name="_Select_a_recipe_2lL8x2">"Recept selecteren"</string>
<string name="ADD">"TOEVOEGEN"</string>
<string name="REMOVE">"VERWIJDEREN"</string>
<string name="CANCEL">"ANNULEREN"</string>
<string name="_Sort_by_Zq01TF">"Sorteren op"</string>
<string name="Step">"Stap"</string>
<string name="Item">"Artikel"</string>
<string name="_ADD_NOTE_ZyNw1r">"OPMERKINGEN TOEVOEGEN"</string>
<string name="Notes">"Opmerkingen"</string>
<string name="Note">"Opmerking"</string>
<string name="_ADD_COMBINATION_2q9HWq">"COMBINATIE TOEVOEGEN"</string>
<string name="Combinations">"Combinaties"</string>
<string name="_ADD_STEP_ZyMPOe">"STAPPEN TOEVOEGEN"</string>
<string name="Instructions">"Voorbereidingen"</string>
<string name="Instruction">"Voorbereiding"</string>
<string name="_ADD_INGREDIENT_29sSLU">"INGREDIENTE TOEVOEGEN"</string>
<string name="Ingredients">"Ingrediënten"</string>
<string name="Ingredient">"Ingrediënt"</string>
<string name="_Yield_measured_in_2OoRT">"Opbrengst gemeten in"</string>
<string name="_Yield_quantity_ZHx3jw">"Opbrengstbedrag"</string>
<string name="_Cooking_time_2w2fEw">"Kooktijd"</string>
<string name="_Preparation_time_15BfxT">"Voorbereidingstijd"</string>
<string name="Category">"Categorie"</string>
<string name="Title">"Titel"</string>
<string name="_Edit_recipe_ZPvwDP">"Recept aanpassen"</string>
<string name="_New_recipe_Z1Y2YKJ">"Nieuw recept"</string>
<string name="_Vishnu_Raghav_B_1qnRnC">"Vishnu Raghav B"</string>
<string name="Author">"Auteur"</string>
<string name="_for_reporting_issues__suggestions_and_feedback_Z1JUmyE">"voor het melden van problemen, suggesties en feedback"</string>
<string name="_Join_the_Telegram_group_ZAXQgc">"Sluit zich aan bij de telegrammengroep"</string>
<string name="Version">"Versie"</string>
<string name="_Supports_full_backups_exported_by_this_app_ZYs4f2">"Ondersteunt volledige back-ups die vanuit deze app worden geëxporteerd"</string>
<string name="_Import_from_backup_Z28HsC0">"Importieren vom Backup"</string>
<string name="_Generates_a_zip_file_that_contains_all_your_data__This_file_can_be_imported_back__Z19m3xY">"Maakt een zip-bestand aan met alle gegevens. Dit bestand kan opnieuw worden geïmporteerd."</string>
<string name="_Export_a_full_backup_TJfra">"Exporteren naar backup"</string>
<string name="Database">"Databank"</string>
<string name="Dark">"Donker"</string>
<string name="Light">"Helder"</string>
<string name="Theme">"Thema"</string>
<string name="_System_default_Z1jruVS">"Systeem Standaard"</string>
<string name="_App_language_DzFsk">"App taal"</string>
<string name="Interface">"Gebruikersinterface"</string>
<string name="_Your_search_did_not_match_any_recipes_in_your_try_later_list_Z2wWbA1">"Uw zoekopdracht kwam niet overeen met de recepten in uw Try Later-lijst"</string>
<string name="_Your_search_did_not_match_any_recipes_in_your_favourites_1ylvHN">"Uw zoekopdracht kwam niet overeen met de recepten in uw favorieten"</string>
<string name="_Your_search_did_not_match_any_recipes_in_this_category_P7J4V">"Uw zoekopdracht kwam niet overeen met recepten in deze categorie"</string>
<string name="_Your_search_did_not_match_any_recipes_Z1eppHH">"Uw zoekopdracht kwam niet overeen met recepten"</string>
<string name="_No_recipes_found_Z125IxD">"Geen recepten gevonden"</string>
<string name="_Category_looks_empty_ZAK5qU">"Categorie is leeg"</string>
<string name="_Recipes_you_mark_as_favourite_will_be_listed_here_Z1iIHgY">"Recepten die u als favoriet markeert staan hier vermeld"</string>
<string name="_No_favourites_yet_aPSoG">"Nog geen favorieten"</string>
<string name="_Recipes_you_mark_as_try_later_will_be_listed_here_Z1ITwPV">"Recepten die gemarkeerd zijn met \'Try later\' staan hier vermeld."</string>
<string name="_All_done__72KYl">"Alles klaar!"</string>
<string name="_Use_the_pencil_button_to_add_some_notes_Z1wyyeb">"Gebruik het potloodicoon om wat aantekeningen toe te voegen"</string>
<string name="_Use_the_pencil_button_to_add_some_combinations_6NhFS">"Gebruik het potloodicoon om enkele combinaties toe te voegen"</string>
<string name="_Use_the_pencil_button_to_add_some_instructions_ZAi0PH">"Gebruik het potloodicoon om wat voorbereidingen toe te voegen"</string>
<string name="_Use_the_pencil_button_to_add_some_ingredients_Z1xOX8S">"Gebruik het potloodicoon om wat ingrediënten toe te voegen"</string>
<string name="_Use_the_plus_button_to_add_one_1h20ms">"Gebruik het plusteken om er een toe te voegen"</string>
<string name="_Start_adding_your_recipes__rwnVV">"Begin met het toevoegen van uw recepten!"</string>
<string name="large">"groot"</string>
<string name="medium">"middelgroot"</string>
<string name="small">"kleine"</string>
<string name="stick">"stiksel"</string>
<string name="dozen">"tientallen"</string>
<string name="drop">"druppel"</string>
<string name="pinch">"knijpen"</string>
<string name="piece">"deel"</string>
<string name="clove">"kruidnagel"</string>
<string name="leaf">"blad"</string>
<string name="in">"in"</string>
<string name="cm">"cm"</string>
<string name="kg">"kg"</string>
<string name="g">"g"</string>
<string name="mg">"mg"</string>
<string name="lb">"Pf"</string>
<string name="oz">"oz"</string>
<string name="l">"l"</string>
<string name="ml">"ml"</string>
<string name="gal">"gal"</string>
<string name="qt">"qt"</string>
<string name="pt">"pt"</string>
<string name="cup">"Beker"</string>
<string name="_fl_oz_72kqu">"fl"</string>
<string name="tbsp">"EL"</string>
<string name="dsp">"SL"</string>
<string name="tsp">"TL"</string>
<string name="Unit">"Eenheid"</string>
<string name="unit">"eenheid"</string>
<string name="Loaf">"Brood"</string>
<string name="Patty">"Pasteitje"</string>
<string name="Roll">"Rol"</string>
<string name="Litre">"Liter"</string>
<string name="Millilitre">"Milliliter"</string>
<string name="Gallon">"Galon"</string>
<string name="Cup">"Beker"</string>
<string name="Kilogram">"Kilogram"</string>
<string name="Gram">"Oproep"</string>
<string name="Pound">"Pond"</string>
<string name="Ounce">"Ounce"</string>
<string name="_Fluid_Ounce_bd10L">"Vloeibare Ounce"</string>
<string name="Tablespoon">"EL"</string>
<string name="Teaspoon">"TL"</string>
<string name="Piece">"Stukje"</string>
<string name="Serving">"Portie"</string>
<string name="Vegetarian">"Vegetarisch"</string>
<string name="Vegan">"Veganistisch"</string>
<string name="Undefined">"Onbekend"</string>
<string name="Soups">"Soepen"</string>
<string name="Snacks">"Hapje"</string>
<string name="_Side_dishes_Z1Et4Vg">"Bijgerechten"</string>
<string name="Seafood">"Zeevruchten"</string>
<string name="Sauces">"Sausen"</string>
<string name="Salads">"Salades"</string>
<string name="Rice">"Rijst"</string>
<string name="Poultry">"Gevogelte"</string>
<string name="Pasta">"Deegwaren"</string>
<string name="Noodles">"Noedels"</string>
<string name="Meat">"Vlees"</string>
<string name="_Main_dishes_u6RGQ">"Hoofdgerechten"</string>
<string name="Lunch">"Lunchen"</string>
<string name="Healthy">"Gezond"</string>
<string name="Drinks">"Drankjes"</string>
<string name="Dinner">"Diner"</string>
<string name="Desserts">"Toetsen"</string>
<string name="Breakfast">"Ontbijt"</string>
<string name="Breads">"Broodjes"</string>
<string name="Beverages">"Drankjes"</string>
<string name="Barbecue">"Barbecue"</string>
<string name="Appetizers">"Voorgerechten"</string>
<string name="About">"Over"</string>
<string name="Settings">"Instellingen"</string>
<string name="Categories">"Categorieën"</string>
<string name="_Meal_Planner_2aq4oj">"Maaltijdenplanner"</string>
<string name="Favourites">"Favoriten"</string>
<string name="_Try_Later_If7PG">"Later proberen"</string>
<string name="EnRecipes">"EnRecipes"</string>
<string name="_app_name_1k3Sbz">"EnRecipes"</string>
<string name="app_name">"EnRecipes"</string>
<string name="title_activity_kimera">"EnRecipes"</string>
<string name="_Import_failed_Z1dbs6t">"Import failed"</string>
</resources>

View file

@ -0,0 +1,291 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="_Invalid_file__Z2bRAst">"Invalid file:"</string>
<string name="_Backup_file_has_been_modified_externally__Wjiqq">"Backup file has been modified externally."</string>
<string name="_Backup_file_seems_empty__Zd7qfR">"Backup file seems empty."</string>
<string name="_Backup_file_is_incorrect_or_corrupt__1jXb8N">"Backup file is incorrect or corrupt."</string>
<string name="_Remove_recipe_from_snacks__MNnCU">"Remove recipe from snacks?"</string>
<string name="_Remove_recipe_from_dinner__8sWfY">"Remove recipe from dinner?"</string>
<string name="_Remove_recipe_from_lunch__Zwpsg2">"Remove recipe from lunch?"</string>
<string name="_Remove_recipe_from_breakfast__ZvYyFG">"Remove recipe from breakfast?"</string>
<string name="_Untitled_Recipe_Zv0UxP">"Receita Sem Título"</string>
<string name="_Star_rating_Z11p4Kw">"Classificação por estrelas"</string>
<string name="Created">"Criado"</string>
<string name="_Filtered_result_1AMEXe">"Resultados filtrados"</string>
<string name="OK">"OK"</string>
<string name="_recipes_updated_Z2arFrR">"receitas atualizadas"</string>
<string name="_recipes_already_exists_2jqW2s">"receita já existe"</string>
<string name="_recipes_imported_1NGeRw">"receitas importadas"</string>
<string name="_recipes_found_ZDdUgV">"receitas encontradas"</string>
<string name="_Import_summary_244SkL">"Importar sumário"</string>
<string name="_separate_with_spaces_ZHKOfw">"separa com espaços"</string>
<string name="Tags">"Etiquetas"</string>
<string name="_No_tags_available_Z1C5GqD">"Sem etiquetas disponíveis"</string>
<string name="_All_Tags_28gMyY">"Todas as Etiquetas"</string>
<string name="_All_Categories_Z23JSTS">"Todas as Categorias"</string>
<string name="Vietnamese">"Vietnamita"</string>
<string name="Turkish">"Turca"</string>
<string name="Thai">"Tailandesa"</string>
<string name="Swedish">"Sueca"</string>
<string name="_Sri_Lankan_Z7GfBa">"Cingalês"</string>
<string name="Spanish">"Espanhola"</string>
<string name="Scottish">"Escocêsa"</string>
<string name="Russian">"Russa"</string>
<string name="Portuguese">"Portuguesa"</string>
<string name="Nigerian">"Nigeriana"</string>
<string name="Mexican">"Mexicana"</string>
<string name="Korean">"Coreana"</string>
<string name="Kenyan">"Queniana"</string>
<string name="Jewish">"Judaica"</string>
<string name="Japanese">"Japonêsa"</string>
<string name="Jamaican">"Jamaicana"</string>
<string name="Italian">"Italiana"</string>
<string name="Irish">"Irlândesa"</string>
<string name="Indian">"Indiana"</string>
<string name="Greek">"Grega"</string>
<string name="German">"Alemã"</string>
<string name="French">"Francesa"</string>
<string name="Filipino">"Filipina"</string>
<string name="English">"Inglêsa"</string>
<string name="Egyptian">"Egípcia"</string>
<string name="Danish">"Dinamarquêsa"</string>
<string name="Chinese">"Chinesa"</string>
<string name="British">"Britânica"</string>
<string name="Brazilian">"Brasileira"</string>
<string name="American">"Americana"</string>
<string name="_All_Cuisines_2hjCp9">"Todas as Cozinhas"</string>
<string name="Cuisines">"Cozinhas"</string>
<string name="Cuisine">"Cozinha"</string>
<string name="_Are_you_sure_you_want_to_remove_ZOnf22">"Tem certeza que pretende remover"</string>
<string name="Units">"Unidades"</string>
<string name="_Remove_unit__2x26yq">"Remover unidade?"</string>
<string name="_Remove_yield_unit__Z1duBWR">"Remover unidade de porção?"</string>
<string name="_Remove_category__2reaxz">"Remover categoria?"</string>
<string name="_Remove_cuisine__22ftcL">"Remover cozinha?"</string>
<string name="_New_unit_1CVEEA">"Nova unidade"</string>
<string name="_New_cuisine_Zrvs3z">"Nova cozinha"</string>
<string name="Challenging">"Desafiadora"</string>
<string name="Moderate">"Moderada"</string>
<string name="Easy">"Fácil"</string>
<string name="_Oldest_first_Z6cq4h">"Mais antiga primeiro"</string>
<string name="_Newest_first_2Sb3c">"Mais recente primeiro"</string>
<string name="_Last_updated_Z2gEbLD">"Ultima atualização"</string>
<string name="_Difficulty_level_cSL5d">"Nível de dificuldade"</string>
<string name="Rating">"Avaliação"</string>
<string name="_Slowest_first_hHjY6">"Mais lentas primeiro"</string>
<string name="_Quickest_first_Z1CpP7N">"Mais rápidas primeiro"</string>
<string name="_Your_search_did_not_match_any_recipes_in_the_filtered_result_1TV6QQ">"A sua pesquisa não encontrou nenhuma receita no resultado filtrado"</string>
<string name="_Recipe_not_found_2qGveM">"Receita não encontrada"</string>
<string name="_Reset_successful_YxqWK">"Redefinição com sucesso"</string>
<string name="_Reset_units_list_msRS3">"Redefinir lista de unidades"</string>
<string name="_Reset_yield_units_list_ZjouMk">"Redefinir lista de porções"</string>
<string name="_Reset_categories_list_Z1JmKra">"Redefinir lista de categorias"</string>
<string name="_Reset_cuisines_list_1kWL8I">"Redefinir lista de cozinhas"</string>
<string name="_Resetting_a_list_will_NOT_delete_your_existing_entries_but_only_restores_the_deleted_default_entries__Z28mk0h">"A redefinição de uma lista NÃO excluirá as entradas existentes, mas apenas restaurará as entradas padrão excluídas."</string>
<string name="Reset">"Redefinir"</string>
<string name="_Helps_you_choose_what_to_cook_when_you_can_t_decide_muiMv">"Ajuda a escolher o que cozinhar quando não consegue decidir"</string>
<string name="_Shake_to_view_random_recipe_ZTK9F2">"Agite para ver receita aleatória"</string>
<string name="Options">"Opções"</string>
<string name="_User_guide_2uDJCF">"Guia de Utilização"</string>
<string name="_Privacy_policy_Zb4ht5">"Política de Privacidade"</string>
<string name="_View_on_GitHub_Z2qOqmx">"Ver no GitHub"</string>
<string name="Translator">"Tradutor"</string>
<string name="Contributors">"Contribuidores"</string>
<string name="_Shared_via_EnRecipes__Get_it_on_Play_Store_or_F_Droid__Z2oTOK1">"Partilhado via EnRecipes. Download na Play Store ou F-Droid."</string>
<string name="_Permission_denied_Z7wlWK">"Permissão recusada"</string>
<string name="_Import_successful_2bLM3e">"Importado com sucesso"</string>
<string name="_Verifying____cS102">"A Verificar..."</string>
<string name="_long_time_ago_1nwlFA">"há muito tempo"</string>
<string name="_months_ago_Z1TsskA">"meses atrás"</string>
<string name="_weeks_ago_Z2sT1GA">"semanas atrás"</string>
<string name="_days_ago_2iCYkm">"dias atrás"</string>
<string name="yesterday">"ontem"</string>
<string name="today">"hoje"</string>
<string name="_You_tried_this_recipe__ZUJOl3">"Tentou esta receita:"</string>
<string name="snacks">"lanches"</string>
<string name="dinner">"jantar"</string>
<string name="lunch">"almoço"</string>
<string name="breakfast">"café da manhã"</string>
<string name="_Crop_photo_1VL04J">"Cortar foto"</string>
<string name="_REPLACE_PHOTO_ZLHhwH">"SUBSTITUIR FOTO"</string>
<string name="_Recipe_photo_eqm9B">"Foto da receita"</string>
<string name="_EnRecipes_requires_storage_permission_in_order_to_set_recipe_photo__23OnNT">"EnRecipes requer permissão de armazenamento para definir a foto da receita."</string>
<string name="Required">"Requerido"</string>
<string name="_New_category_Weg73">"Nova categoria"</string>
<string name="_New_yield_unit_1Oevd2">"Nova unidade de porção"</string>
<string name="_Remove_note__2wyMVE">"Remover nota?"</string>
<string name="_Remove_combination__1dr2LS">"Remover combinação?"</string>
<string name="_Remove_instruction__vkJfi">"Remover instrução?"</string>
<string name="_Remove_ingredient__2puvMO">"Remover ingrediente?"</string>
<string name="_KEEP_EDITING_1o9uy3">"CONTINUAR EDIÇÃO"</string>
<string name="DISCARD">"DESCARTAR"</string>
<string name="_Are_you_sure_you_want_to_discard_unsaved_changes_to_this_recipe__Z1G7sVC">"Tem certeza que deseja descartar as alterações não salvas nesta receita?"</string>
<string name="_Unsaved_changes_9fqb4">"Alterações não salvas"</string>
<string name="Search">"Procurar"</string>
<string name="_Are_you_sure_you_want_to_delete_the_recipe_29DH9w">"Tem certeza que deseja eliminar a receita"</string>
<string name="DELETE">"APAGAR"</string>
<string name="_Delete_recipe__Z2tMYtE">"Eliminar Receita?"</string>
<string name="_Removed_from_Try_Later_1h5Bkp">"Removida de Tentar Mais Tarde"</string>
<string name="_Added_to_Try_Later_Z1gaF37">"Adicionada a Tentar Mais Tarde"</string>
<string name="_Removed_from_Favourites_Z5k7LR">"Removido dos Favoritos"</string>
<string name="_Added_to_Favourites_2mzllO">"Adicionado aos Favoritos"</string>
<string name="_Add_at_least_one_recipe_to_perform_a_backup_17xYaH">"Adicione pelo menos uma receita para fazer um backup"</string>
<string name="_EnRecipes_requires_storage_permission_in_order_to_backup_your_data_to_this_device__2cbvIq">"EnRecipes requer permissão de armazenamento para fazer backup de seus dados neste dispositivo."</string>
<string name="CONTINUE">"CONTINUAR"</string>
<string name="_NOT_NOW_Z1HD7qX">"AGORA NÃO"</string>
<string name="_EnRecipes_requires_storage_permission_in_order_to_import_your_data_from_a_previous_backup__1CKjb7">"EnRecipes requer permissão de armazenamento para importar seus dados de um backup anterior."</string>
<string name="_Grant_permission_Z1UQBuh">"Garantir permissão"</string>
<string name="_EnRecipes_needs_to_be_restarted_for_the_app_language_to_take_effect__ZWGUtY">"EnRecipes precisa ser reiniciada para que a alteração da lingua tenha efeito."</string>
<string name="_EnRecipes_needs_to_be_restarted_for_the_theme_change_to_take_effect__2kU319">"EnRecipes precisa ser reiniciada para que a alteração do tema tenha efeito."</string>
<string name="RESTART">"REINICIAR"</string>
<string name="_Restart_required_Z22YINL">"É necessário reiniciar"</string>
<string name="SET">"SET"</string>
<string name="_ADD_NEW_Zv8FjM">"ADICIONAR NOVA"</string>
<string name="Share">"Partilhar"</string>
<string name="Overview">"Visão Global"</string>
<string name="Recipe">"Receita"</string>
<string name="Photo">"Foto"</string>
<string name="min">"min"</string>
<string name="hr">"hr"</string>
<string name="_My_Healthy_Recipe_Z1EqB8f">"A Minha Receita Saudável"</string>
<string name="_Nothing_here__Add_some_recipes_and_try_again__Z25A7Q">"Nada aqui! Adicione algumas receitas e tente novamente."</string>
<string name="_Select_a_recipe_2lL8x2">"Selecionar a receita"</string>
<string name="ADD">"ADICIONAR"</string>
<string name="REMOVE">"REMOVER"</string>
<string name="CANCEL">"CANCELAR"</string>
<string name="_Sort_by_Zq01TF">"Ordenar por"</string>
<string name="Step">"Passo"</string>
<string name="Item">"Item"</string>
<string name="_ADD_NOTE_ZyNw1r">"ADICIONAR NOTA"</string>
<string name="Notes">"Notas"</string>
<string name="Note">"Nota"</string>
<string name="_ADD_COMBINATION_2q9HWq">"ADICIONAR COMBINAÇÕES"</string>
<string name="Combinations">"Combinações"</string>
<string name="_ADD_STEP_ZyMPOe">"ADICIONAR PASSO"</string>
<string name="Instructions">"Instruções"</string>
<string name="Instruction">"Instrução"</string>
<string name="_ADD_INGREDIENT_29sSLU">"ADICIONAR INGREDIENTE"</string>
<string name="Ingredients">"Ingredientes"</string>
<string name="Ingredient">"Ingredientes"</string>
<string name="_Yield_measured_in_2OoRT">"Porções medidas em"</string>
<string name="_Yield_quantity_ZHx3jw">"Quantidade de porções"</string>
<string name="_Cooking_time_2w2fEw">"Tempo de cozimento"</string>
<string name="_Preparation_time_15BfxT">"Tempo de preparação"</string>
<string name="Category">"Categoria"</string>
<string name="Title">"Título"</string>
<string name="_Edit_recipe_ZPvwDP">"Editar receita"</string>
<string name="_New_recipe_Z1Y2YKJ">"Nova receita"</string>
<string name="_Vishnu_Raghav_B_1qnRnC">"Vishnu Raghav B"</string>
<string name="Author">"Autor"</string>
<string name="_for_reporting_issues__suggestions_and_feedback_Z1JUmyE">"para reportar problemas, sugestões e feedback"</string>
<string name="_Join_the_Telegram_group_ZAXQgc">"Entrar no grupo do Telegram"</string>
<string name="Version">"Versão"</string>
<string name="_Supports_full_backups_exported_by_this_app_ZYs4f2">"Suporta backups completos exportados por este aplicativo"</string>
<string name="_Import_from_backup_Z28HsC0">"Importar do backup"</string>
<string name="_Generates_a_zip_file_that_contains_all_your_data__This_file_can_be_imported_back__Z19m3xY">"Gera um arquivo zip que contém todos os seus dados. Este arquivo pode ser importado de volta."</string>
<string name="_Export_a_full_backup_TJfra">"Exportar um backup completo"</string>
<string name="Database">"Base de Dados"</string>
<string name="Dark">"Escuro"</string>
<string name="Light">"Claro"</string>
<string name="Theme">"Tema"</string>
<string name="_System_default_Z1jruVS">"Padrão do sistema"</string>
<string name="_App_language_DzFsk">"Linguagem da App"</string>
<string name="Interface">"Interface"</string>
<string name="_Your_search_did_not_match_any_recipes_in_your_try_later_list_Z2wWbA1">"A sua pesquisa não encontrou nenhuma receita na sua lista tentar mais tarde"</string>
<string name="_Your_search_did_not_match_any_recipes_in_your_favourites_1ylvHN">"A sua pesquisa não encontrou nenhuma receita em seus favoritos"</string>
<string name="_Your_search_did_not_match_any_recipes_in_this_category_P7J4V">"A sua pesquisa não encontrou nenhuma receita nesta categoria"</string>
<string name="_Your_search_did_not_match_any_recipes_Z1eppHH">"A sua pesquisa não encontrou nenhuma receita"</string>
<string name="_No_recipes_found_Z125IxD">"Nenhuma receita encontrada"</string>
<string name="_Category_looks_empty_ZAK5qU">"Categoria parece vazia"</string>
<string name="_Recipes_you_mark_as_favourite_will_be_listed_here_Z1iIHgY">"As receitas que marcar como favoritas serão listadas aqui"</string>
<string name="_No_favourites_yet_aPSoG">"Ainda não há favoritos"</string>
<string name="_Recipes_you_mark_as_try_later_will_be_listed_here_Z1ITwPV">"As receitas que você marcar como tentativa mais tarde serão listadas aqui"</string>
<string name="_All_done__72KYl">"Tudo feito!"</string>
<string name="_Use_the_pencil_button_to_add_some_notes_Z1wyyeb">"Use o botão lápis para adicionar algumas notas"</string>
<string name="_Use_the_pencil_button_to_add_some_combinations_6NhFS">"Use o botão lápis para adicionar algumas combinações"</string>
<string name="_Use_the_pencil_button_to_add_some_instructions_ZAi0PH">"Use o botão lápis para adicionar algumas instruções"</string>
<string name="_Use_the_pencil_button_to_add_some_ingredients_Z1xOX8S">"Use o botão lápis para adicionar alguns ingredientes"</string>
<string name="_Use_the_plus_button_to_add_one_1h20ms">"Use o botão de adição para adicionar uma"</string>
<string name="_Start_adding_your_recipes__rwnVV">"Comece a adicionar suas receitas!"</string>
<string name="large">"grande"</string>
<string name="medium">"médio"</string>
<string name="small">"pequeno"</string>
<string name="stick">"galho"</string>
<string name="dozen">"dúzia"</string>
<string name="drop">"solta"</string>
<string name="pinch">"pitada"</string>
<string name="piece">"peça"</string>
<string name="clove">"bulbo"</string>
<string name="leaf">"folha"</string>
<string name="in">"in"</string>
<string name="cm">"cm"</string>
<string name="kg">"kg"</string>
<string name="g">"g"</string>
<string name="mg">"mg"</string>
<string name="lb">"lb"</string>
<string name="oz">"oz"</string>
<string name="l">"l"</string>
<string name="ml">"ml"</string>
<string name="gal">"gal"</string>
<string name="qt">"qt"</string>
<string name="pt">"pt"</string>
<string name="cup">"copo"</string>
<string name="_fl_oz_72kqu">"fl oz"</string>
<string name="tbsp">"colher de sopa"</string>
<string name="dsp">"colher de sobremesa"</string>
<string name="tsp">"colher de chá"</string>
<string name="Unit">"Unidade"</string>
<string name="unit">"unidade"</string>
<string name="Loaf">"Loaf"</string>
<string name="Patty">"Empada"</string>
<string name="Roll">"Rolo"</string>
<string name="Litre">"Litro"</string>
<string name="Millilitre">"Mililitro"</string>
<string name="Gallon">"Gallon"</string>
<string name="Cup">"Copo"</string>
<string name="Kilogram">"Quilograma"</string>
<string name="Gram">"Grama"</string>
<string name="Pound">"Pound"</string>
<string name="Ounce">"Ounce"</string>
<string name="_Fluid_Ounce_bd10L">"Fluid Ounce"</string>
<string name="Tablespoon">"Colher de sopa"</string>
<string name="Teaspoon">"Colher de chá"</string>
<string name="Piece">"Peça"</string>
<string name="Serving">"Porção"</string>
<string name="Vegetarian">"Vegetariano"</string>
<string name="Vegan">"Vegan"</string>
<string name="Undefined">"Indefinido"</string>
<string name="Soups">"Sopas"</string>
<string name="Snacks">"Lanches"</string>
<string name="_Side_dishes_Z1Et4Vg">"Acompanhamentos"</string>
<string name="Seafood">"Marisco"</string>
<string name="Sauces">"Molhos"</string>
<string name="Salads">"Saladas"</string>
<string name="Rice">"Arroz"</string>
<string name="Poultry">"Aves"</string>
<string name="Pasta">"Massa"</string>
<string name="Noodles">"Macarrão"</string>
<string name="Meat">"Carne"</string>
<string name="_Main_dishes_u6RGQ">"Pratos principais"</string>
<string name="Lunch">"Almoço"</string>
<string name="Healthy">"Saudável"</string>
<string name="Drinks">"Bebidas"</string>
<string name="Dinner">"Jantar"</string>
<string name="Desserts">"Sobremesas"</string>
<string name="Breakfast">"Café da manhã"</string>
<string name="Breads">"Pães"</string>
<string name="Beverages">"Bebidas"</string>
<string name="Barbecue">"Churrasco"</string>
<string name="Appetizers">"Aperitivos"</string>
<string name="About">"Sobre"</string>
<string name="Settings">"Definições"</string>
<string name="Categories">"Categorias"</string>
<string name="_Meal_Planner_2aq4oj">"Planeador de Refeições"</string>
<string name="Favourites">"Favoritos"</string>
<string name="_Try_Later_If7PG">"Tente Depois"</string>
<string name="EnRecipes">"EnRecipes"</string>
<string name="_app_name_1k3Sbz">"EnRecipes"</string>
<string name="app_name">"EnRecipes"</string>
<string name="title_activity_kimera">"EnRecipes"</string>
<string name="_Import_failed_Z1dbs6t">"Import failed"</string>
</resources>

View file

@ -0,0 +1,291 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="_Invalid_file__Z2bRAst">"Invalid file:"</string>
<string name="_Backup_file_has_been_modified_externally__Wjiqq">"Backup file has been modified externally."</string>
<string name="_Backup_file_seems_empty__Zd7qfR">"Backup file seems empty."</string>
<string name="_Backup_file_is_incorrect_or_corrupt__1jXb8N">"Backup file is incorrect or corrupt."</string>
<string name="_Remove_recipe_from_snacks__MNnCU">"Убрать рецепт из закусок?"</string>
<string name="_Remove_recipe_from_dinner__8sWfY">"Убрать рецепт из ужиныов?"</string>
<string name="_Remove_recipe_from_lunch__Zwpsg2">"Убрать рецепт из обедов?"</string>
<string name="_Remove_recipe_from_breakfast__ZvYyFG">"Убрать рецепт из завтраков?"</string>
<string name="_Untitled_Recipe_Zv0UxP">"Рецепт без названия"</string>
<string name="_Star_rating_Z11p4Kw">"Оценка"</string>
<string name="Created">"Создано"</string>
<string name="_Filtered_result_1AMEXe">"Отфильтрованный результат"</string>
<string name="OK">"ОК"</string>
<string name="_recipes_updated_Z2arFrR">"рецепты обновлены"</string>
<string name="_recipes_already_exists_2jqW2s">"рецепты уже существуют"</string>
<string name="_recipes_imported_1NGeRw">"рецепты импортированы"</string>
<string name="_recipes_found_ZDdUgV">"рецепты найдены"</string>
<string name="_Import_summary_244SkL">"Общая информация про импорт"</string>
<string name="_separate_with_spaces_ZHKOfw">"разделяйте пробелами"</string>
<string name="Tags">"Теги"</string>
<string name="_No_tags_available_Z1C5GqD">"Нету доступных тегов"</string>
<string name="_All_Tags_28gMyY">"Все теги"</string>
<string name="_All_Categories_Z23JSTS">"Все категории"</string>
<string name="Vietnamese">"Вьетнамская"</string>
<string name="Turkish">"Турецкая"</string>
<string name="Thai">"Тайская"</string>
<string name="Swedish">"Шведская"</string>
<string name="_Sri_Lankan_Z7GfBa">"Шри-ланкийская"</string>
<string name="Spanish">"Испанская"</string>
<string name="Scottish">"Шотландская"</string>
<string name="Russian">"Русская"</string>
<string name="Portuguese">"Нигерийская"</string>
<string name="Nigerian">"Нигерийская"</string>
<string name="Mexican">"Мексиканская"</string>
<string name="Korean">"Корейская"</string>
<string name="Kenyan">"Кенийская"</string>
<string name="Jewish">"Еврейская"</string>
<string name="Japanese">"Японская"</string>
<string name="Jamaican">"Ямайская"</string>
<string name="Italian">"Итальянская"</string>
<string name="Irish">"Ирландская"</string>
<string name="Indian">"Индийская"</string>
<string name="Greek">"Греческая"</string>
<string name="German">"Немецкая"</string>
<string name="French">"Французская"</string>
<string name="Filipino">"Филиппинская"</string>
<string name="English">"Английская"</string>
<string name="Egyptian">"Египетская"</string>
<string name="Danish">"Датская"</string>
<string name="Chinese">"Китайская"</string>
<string name="British">"Британская"</string>
<string name="Brazilian">"Бразильская кухня"</string>
<string name="American">"Американская"</string>
<string name="_All_Cuisines_2hjCp9">"Все кухни"</string>
<string name="Cuisines">"Кухни"</string>
<string name="Cuisine">"Кухня"</string>
<string name="_Are_you_sure_you_want_to_remove_ZOnf22">"Вы уверены что хотите удалить"</string>
<string name="Units">"Единицы измерения"</string>
<string name="_Remove_unit__2x26yq">"Удалить единицу измерения?"</string>
<string name="_Remove_yield_unit__Z1duBWR">"Удалить единицу измерения подачи?"</string>
<string name="_Remove_category__2reaxz">"Удалить категорию?"</string>
<string name="_Remove_cuisine__22ftcL">"Удалить кухню?"</string>
<string name="_New_unit_1CVEEA">"Новая единица измерения"</string>
<string name="_New_cuisine_Zrvs3z">"Новая кухня"</string>
<string name="Challenging">"Сложный"</string>
<string name="Moderate">"Средний"</string>
<string name="Easy">"Легкий"</string>
<string name="_Oldest_first_Z6cq4h">"Сначала старые"</string>
<string name="_Newest_first_2Sb3c">"Сначала новое"</string>
<string name="_Last_updated_Z2gEbLD">"Последнее обновление"</string>
<string name="_Difficulty_level_cSL5d">"Уровень сложности"</string>
<string name="Rating">"Рейтинг"</string>
<string name="_Slowest_first_hHjY6">"Сначала самые медленные"</string>
<string name="_Quickest_first_Z1CpP7N">"Самый быстрый сначала"</string>
<string name="_Your_search_did_not_match_any_recipes_in_the_filtered_result_1TV6QQ">"По вашему запросу не найдено ни одного рецепта в отфильтрованном результате"</string>
<string name="_Recipe_not_found_2qGveM">"Рецепт не найден"</string>
<string name="_Reset_successful_YxqWK">"Сброс выполнен успешно"</string>
<string name="_Reset_units_list_msRS3">"Сбросить список единиц измерения"</string>
<string name="_Reset_yield_units_list_ZjouMk">"Сбросить список единиц измерения подачи"</string>
<string name="_Reset_categories_list_Z1JmKra">"Сбросить список категорий"</string>
<string name="_Reset_cuisines_list_1kWL8I">"Сбросить список кухонь"</string>
<string name="_Resetting_a_list_will_NOT_delete_your_existing_entries_but_only_restores_the_deleted_default_entries__Z28mk0h">"Сброс списка НЕ удалит ваши существующие записи, а только восстановит удаленные записи по умолчанию."</string>
<string name="Reset">"Сброс"</string>
<string name="_Helps_you_choose_what_to_cook_when_you_can_t_decide_muiMv">"Помогает выбрать, что приготовить, когда вы не можете решить"</string>
<string name="_Shake_to_view_random_recipe_ZTK9F2">"Встряхнуть, чтобы показать случайный рецепт"</string>
<string name="Options">"Параметры"</string>
<string name="_User_guide_2uDJCF">"Руководство пользователя"</string>
<string name="_Privacy_policy_Zb4ht5">"Политика конфиденциальности"</string>
<string name="_View_on_GitHub_Z2qOqmx">"Проект на GitHub"</string>
<string name="Translator">"Переводчик"</string>
<string name="Contributors">"Участники"</string>
<string name="_Shared_via_EnRecipes__Get_it_on_Play_Store_or_F_Droid__Z2oTOK1">"Отправлено через EnRecipes. Скачайте его в Play Store или F-Droid."</string>
<string name="_Permission_denied_Z7wlWK">"В доступе отказано"</string>
<string name="_Import_successful_2bLM3e">"Импортировано успешно"</string>
<string name="_Verifying____cS102">"Проверка ..."</string>
<string name="_long_time_ago_1nwlFA">"давно"</string>
<string name="_months_ago_Z1TsskA">"несколько месяцев назад"</string>
<string name="_weeks_ago_Z2sT1GA">"несколько недель назад"</string>
<string name="_days_ago_2iCYkm">"несколько дней назад"</string>
<string name="yesterday">"вчера"</string>
<string name="today">"сегодня"</string>
<string name="_You_tried_this_recipe__ZUJOl3">"Вы пробовали этот рецепт:"</string>
<string name="snacks">"закуски"</string>
<string name="dinner">"ужин"</string>
<string name="lunch">"обед"</string>
<string name="breakfast">"завтрак"</string>
<string name="_Crop_photo_1VL04J">"Обрезать фотографию"</string>
<string name="_REPLACE_PHOTO_ZLHhwH">"ЗАМЕНИТЬ ФОТО"</string>
<string name="_Recipe_photo_eqm9B">"Фото для рецепта"</string>
<string name="_EnRecipes_requires_storage_permission_in_order_to_set_recipe_photo__23OnNT">"EnRecipes требует доступ к файлам, чтобы установить фото для рецепта."</string>
<string name="Required">"Требуется"</string>
<string name="_New_category_Weg73">"Новая категория"</string>
<string name="_New_yield_unit_1Oevd2">"Новая единица измерения подачи"</string>
<string name="_Remove_note__2wyMVE">"Удалить заметку?"</string>
<string name="_Remove_combination__1dr2LS">"Удалить комбинацию?"</string>
<string name="_Remove_instruction__vkJfi">"Удалить инструкцию?"</string>
<string name="_Remove_ingredient__2puvMO">"Удалить ингредиент?"</string>
<string name="_KEEP_EDITING_1o9uy3">"ПРОДОЛЖИТЬ РЕДАКТИРОВАНИЕ"</string>
<string name="DISCARD">"ОТМЕНИТЬ"</string>
<string name="_Are_you_sure_you_want_to_discard_unsaved_changes_to_this_recipe__Z1G7sVC">"Вы уверены, что хотите отменить несохраненные изменения этого рецепта?"</string>
<string name="_Unsaved_changes_9fqb4">"Несохраненные изменения"</string>
<string name="Search">"Поиск"</string>
<string name="_Are_you_sure_you_want_to_delete_the_recipe_29DH9w">"Вы уверены, что хотите удалить рецепт"</string>
<string name="DELETE">"УДАЛИТЬ"</string>
<string name="_Delete_recipe__Z2tMYtE">"Удалить рецепт?"</string>
<string name="_Removed_from_Try_Later_1h5Bkp">"Удалено из \"Попробовать позже\""</string>
<string name="_Added_to_Try_Later_Z1gaF37">"Добавлено в \"Попробовать позже\""</string>
<string name="_Removed_from_Favourites_Z5k7LR">"Удалено из избранного"</string>
<string name="_Added_to_Favourites_2mzllO">"Добавлено в избранное"</string>
<string name="_Add_at_least_one_recipe_to_perform_a_backup_17xYaH">"Добавьте хотя бы один рецепт для резервного копирования"</string>
<string name="_EnRecipes_requires_storage_permission_in_order_to_backup_your_data_to_this_device__2cbvIq">"EnRecipes требует доступ к файлам для резервного копирования ваших данных на это устройство."</string>
<string name="CONTINUE">"ПРОДОЛЖИТЬ"</string>
<string name="_NOT_NOW_Z1HD7qX">"НЕ СЕЙЧАС"</string>
<string name="_EnRecipes_requires_storage_permission_in_order_to_import_your_data_from_a_previous_backup__1CKjb7">"EnRecipes требует доступ к файлам, чтобы импортировать ваши данные из предыдущей резервной копии."</string>
<string name="_Grant_permission_Z1UQBuh">"Предоставить разрешение"</string>
<string name="_EnRecipes_needs_to_be_restarted_for_the_app_language_to_take_effect__ZWGUtY">"Необходимо перезапустить приложение, чтобы изменение языка вступило в силу."</string>
<string name="_EnRecipes_needs_to_be_restarted_for_the_theme_change_to_take_effect__2kU319">"Необходимо перезапустить приложение, чтобы изменение темы вступило в силу."</string>
<string name="RESTART">"ПЕРЕЗАПУСТИТЬ"</string>
<string name="_Restart_required_Z22YINL">"Требуется перезапуск"</string>
<string name="SET">"УСТАНОВИТЬ"</string>
<string name="_ADD_NEW_Zv8FjM">"ДОБАВИТЬ НОВОЕ"</string>
<string name="Share">"Поделиться"</string>
<string name="Overview">"Краткое описание"</string>
<string name="Recipe">"Рецепт"</string>
<string name="Photo">"Фото"</string>
<string name="min">"мин"</string>
<string name="hr">"ч"</string>
<string name="_My_Healthy_Recipe_Z1EqB8f">"Мой полезный рецепт"</string>
<string name="_Nothing_here__Add_some_recipes_and_try_again__Z25A7Q">"Здесь ничего! Добавьте рецепты и попробуйте еще раз."</string>
<string name="_Select_a_recipe_2lL8x2">"Выберите рецепт"</string>
<string name="ADD">"ДОБАВИТЬ"</string>
<string name="REMOVE">"УДАЛИТЬ"</string>
<string name="CANCEL">"ОТМЕНИТЬ"</string>
<string name="_Sort_by_Zq01TF">"Сортировать по"</string>
<string name="Step">"Шаг"</string>
<string name="Item">"Ингредиент"</string>
<string name="_ADD_NOTE_ZyNw1r">"ДОБАВИТЬ ЗАМЕТКУ"</string>
<string name="Notes">"Заметки"</string>
<string name="Note">"Заметка"</string>
<string name="_ADD_COMBINATION_2q9HWq">"ДОБАВИТЬ КОМБИНАЦИЮ"</string>
<string name="Combinations">"Комбинации"</string>
<string name="_ADD_STEP_ZyMPOe">"ДОБАВИТЬ ШАГ"</string>
<string name="Instructions">"Инструкции"</string>
<string name="Instruction">"Инструкция"</string>
<string name="_ADD_INGREDIENT_29sSLU">"ДОБАВИТЬ ИНГРЕДИЕНТ"</string>
<string name="Ingredients">"Ингредиенты"</string>
<string name="Ingredient">"Ингредиент"</string>
<string name="_Yield_measured_in_2OoRT">"Подавать в"</string>
<string name="_Yield_quantity_ZHx3jw">"Подавать в количестве"</string>
<string name="_Cooking_time_2w2fEw">"Время готовки"</string>
<string name="_Preparation_time_15BfxT">"Время подготовки"</string>
<string name="Category">"Категория"</string>
<string name="Title">"Заголовок"</string>
<string name="_Edit_recipe_ZPvwDP">"Редактировать рецепт"</string>
<string name="_New_recipe_Z1Y2YKJ">"Новый рецепт"</string>
<string name="_Vishnu_Raghav_B_1qnRnC">"Vishnu Raghav B"</string>
<string name="Author">"Автор"</string>
<string name="_for_reporting_issues__suggestions_and_feedback_Z1JUmyE">"для сообщения о проблемах, предложений и отзывов"</string>
<string name="_Join_the_Telegram_group_ZAXQgc">"Присоединяйтесь к группе в Telegram"</string>
<string name="Version">"Версия"</string>
<string name="_Supports_full_backups_exported_by_this_app_ZYs4f2">"Поддерживает полные резервные копии, созданные этим приложением"</string>
<string name="_Import_from_backup_Z28HsC0">"Импорт из резервной копии"</string>
<string name="_Generates_a_zip_file_that_contains_all_your_data__This_file_can_be_imported_back__Z19m3xY">"Создает zip-файл, содержащий все ваши данные. Этот файл можно импортировать обратно."</string>
<string name="_Export_a_full_backup_TJfra">"Экспорт полной резервной копии"</string>
<string name="Database">"База данных"</string>
<string name="Dark">"Темная"</string>
<string name="Light">"Светлая"</string>
<string name="Theme">"Тема"</string>
<string name="_System_default_Z1jruVS">"По умолчанию"</string>
<string name="_App_language_DzFsk">"Язык приложения"</string>
<string name="Interface">"Интерфейс"</string>
<string name="_Your_search_did_not_match_any_recipes_in_your_try_later_list_Z2wWbA1">"В списке \"Попробовать позже\" по вашему запросу ничего не найдено"</string>
<string name="_Your_search_did_not_match_any_recipes_in_your_favourites_1ylvHN">"В избранном по вашему запросу ничего не найдено "</string>
<string name="_Your_search_did_not_match_any_recipes_in_this_category_P7J4V">"По вашему запросу ничего не найдено в этой категории"</string>
<string name="_Your_search_did_not_match_any_recipes_Z1eppHH">"По вашему запросу ничего не найдено"</string>
<string name="_No_recipes_found_Z125IxD">"Рецептов не найдено"</string>
<string name="_Category_looks_empty_ZAK5qU">"Похоже что в категории нет рецептов"</string>
<string name="_Recipes_you_mark_as_favourite_will_be_listed_here_Z1iIHgY">"Здесь будут перечислены рецепты, которые вы отметили как любимые."</string>
<string name="_No_favourites_yet_aPSoG">"Пока что нет любимых рецептов"</string>
<string name="_Recipes_you_mark_as_try_later_will_be_listed_here_Z1ITwPV">"Здесь будут перечислены рецепты, которые вы хотите попробовать позже"</string>
<string name="_All_done__72KYl">"Все сделано!"</string>
<string name="_Use_the_pencil_button_to_add_some_notes_Z1wyyeb">"Используйте кнопку карандаша, чтобы добавить заметки"</string>
<string name="_Use_the_pencil_button_to_add_some_combinations_6NhFS">"Используйте кнопку карандаша, чтобы добавить несколько комбинаций"</string>
<string name="_Use_the_pencil_button_to_add_some_instructions_ZAi0PH">"Используйте кнопку карандаша, чтобы добавить инструкции"</string>
<string name="_Use_the_pencil_button_to_add_some_ingredients_Z1xOX8S">"Используйте кнопку карандаша, чтобы добавить ингредиенты"</string>
<string name="_Use_the_plus_button_to_add_one_1h20ms">"Используйте кнопку плюса, чтобы добавить рецепт"</string>
<string name="_Start_adding_your_recipes__rwnVV">"Начните добавлять свои рецепты!"</string>
<string name="large">"большой"</string>
<string name="medium">"средний"</string>
<string name="small">"маленький"</string>
<string name="stick">"палочка"</string>
<string name="dozen">"дюжина"</string>
<string name="drop">"капля"</string>
<string name="pinch">"щепотка"</string>
<string name="piece">"кусок"</string>
<string name="clove">"долька"</string>
<string name="leaf">"лист"</string>
<string name="in">"дюйм"</string>
<string name="cm">"см"</string>
<string name="kg">"кг"</string>
<string name="g">"г"</string>
<string name="mg">"мг"</string>
<string name="lb">"фунт"</string>
<string name="oz">"унция"</string>
<string name="l">"л"</string>
<string name="ml">"мл"</string>
<string name="gal">"галлон"</string>
<string name="qt">"кварта"</string>
<string name="pt">"пинта"</string>
<string name="cup">"чашка"</string>
<string name="_fl_oz_72kqu">"жидкая унция"</string>
<string name="tbsp">"ст.л."</string>
<string name="dsp">"д.л."</string>
<string name="tsp">"ч.л.."</string>
<string name="Unit">"Единица измерения"</string>
<string name="unit">"единица измерения"</string>
<string name="Loaf">"Буханка"</string>
<string name="Patty">"Лепешка"</string>
<string name="Roll">"Рулет"</string>
<string name="Litre">"Литр"</string>
<string name="Millilitre">"Миллилитр"</string>
<string name="Gallon">"Галлон"</string>
<string name="Cup">"Чашка"</string>
<string name="Kilogram">"Килограмм"</string>
<string name="Gram">"Грамм"</string>
<string name="Pound">"Фунт"</string>
<string name="Ounce">"Унция"</string>
<string name="_Fluid_Ounce_bd10L">"Жидкая унция"</string>
<string name="Tablespoon">"Столовая ложка"</string>
<string name="Teaspoon">"Чайная ложка"</string>
<string name="Piece">"Кусок"</string>
<string name="Serving">"Порция"</string>
<string name="Vegetarian">"Вегетарианский"</string>
<string name="Vegan">"Веганский"</string>
<string name="Undefined">"Не указано"</string>
<string name="Soups">"Супы"</string>
<string name="Snacks">"Закуски"</string>
<string name="_Side_dishes_Z1Et4Vg">"Гарнир"</string>
<string name="Seafood">"Морепродукты"</string>
<string name="Sauces">"Соусы"</string>
<string name="Salads">"Салаты"</string>
<string name="Rice">"Рис"</string>
<string name="Poultry">"Птица"</string>
<string name="Pasta">"Макаронные изделия"</string>
<string name="Noodles">"Лапша"</string>
<string name="Meat">"Мясо"</string>
<string name="_Main_dishes_u6RGQ">"Основные блюда"</string>
<string name="Lunch">"Обед"</string>
<string name="Healthy">"Здоровая пища"</string>
<string name="Drinks">"Напитки"</string>
<string name="Dinner">"Ужин"</string>
<string name="Desserts">"Десерты"</string>
<string name="Breakfast">"Завтрак"</string>
<string name="Breads">"Выпечка"</string>
<string name="Beverages">"Напитки"</string>
<string name="Barbecue">"Барбекю"</string>
<string name="Appetizers">"Закуски"</string>
<string name="About">"О приложении"</string>
<string name="Settings">"Настройки"</string>
<string name="Categories">"Категории"</string>
<string name="_Meal_Planner_2aq4oj">"Планировщик питания"</string>
<string name="Favourites">"Избранное"</string>
<string name="_Try_Later_If7PG">"Попробовать позже"</string>
<string name="EnRecipes">"EnRecipes"</string>
<string name="_app_name_1k3Sbz">"EnRecipes"</string>
<string name="app_name">"EnRecipes"</string>
<string name="title_activity_kimera">"EnRecipes"</string>
<string name="_Import_failed_Z1dbs6t">"Import failed"</string>
</resources>

View file

@ -1,6 +1,96 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="_Translations__1IFwAu">"மொழிபெயர்ப்புகள்:"</string>
<string name="_Invalid_file__Z2bRAst">"தவறான கோப்பு:"</string>
<string name="_Backup_file_has_been_modified_externally__Wjiqq">"காப்பு கோப்பு வெளிப்புறமாக மாற்றப்பட்டுள்ளது."</string>
<string name="_Backup_file_seems_empty__Zd7qfR">"காப்பு கோப்பு காலியாக உள்ளது."</string>
<string name="_Backup_file_is_incorrect_or_corrupt__1jXb8N">"காப்பு கோப்பு தவறானது அல்லது சிதைந்துள்ளது."</string>
<string name="_Import_failed_Z1dbs6t">"இறக்குமதி தோல்வியுற்றது"</string>
<string name="_Remove_recipe_from_snacks__MNnCU">"தின்பண்டங்களிலிருந்து சமையல் குறிப்பை அகற்றவா?"</string>
<string name="_Remove_recipe_from_dinner__8sWfY">"இரவு உணவில் இருந்து சமையல் குறிப்பை அகற்றவா?"</string>
<string name="_Remove_recipe_from_lunch__Zwpsg2">"மதிய உணவில் இருந்து சமையல் குறிப்பை அகற்றவா?"</string>
<string name="_Remove_recipe_from_breakfast__ZvYyFG">"காலை உணவில் இருந்து சமையல் குறிப்பை அகற்றவா?"</string>
<string name="_Untitled_Recipe_Zv0UxP">"பெயரிடப்படாத சமையல் குறிப்பு"</string>
<string name="_Star_rating_Z11p4Kw">"நட்சத்திர மதிப்பீடு"</string>
<string name="Created">"உருவாக்கப்பட்டது"</string>
<string name="_Filtered_result_1AMEXe">"வடிகட்டப்பட்ட முடிவு"</string>
<string name="OK">"சரி"</string>
<string name="_recipes_updated_Z2arFrR">"சமையல் குறிப்புகள் புதுப்பிக்கப்பட்டது"</string>
<string name="_recipes_already_exists_2jqW2s">"சமையல் குறிப்புகள் ஏற்கனவே உள்ளது"</string>
<string name="_recipes_imported_1NGeRw">"சமையல் குறிப்புகள் இறக்குமதி செய்யப்பட்டது"</string>
<string name="_recipes_found_ZDdUgV">"சமையல் குறிப்புகள் கண்டறியப்பட்டது"</string>
<string name="_Import_summary_244SkL">"இறக்குமதி சுருக்கம்"</string>
<string name="_separate_with_spaces_ZHKOfw">"இடைவெளிகளுடன் பிரிக்கவும்"</string>
<string name="Tags">"குறிச்சொற்கள்"</string>
<string name="_No_tags_available_Z1C5GqD">"குறிச்சொற்கள் எதுவுமில்லை"</string>
<string name="_All_Tags_28gMyY">"அனைத்து குறிச்சொற்கள்"</string>
<string name="_All_Categories_Z23JSTS">"அனைத்து பகுப்புகள்"</string>
<string name="Vietnamese">"வியட்நாமிய"</string>
<string name="Turkish">"துருக்கிய"</string>
<string name="Thai">"தாய்"</string>
<string name="Swedish">"ஸ்வீடிஷ்"</string>
<string name="_Sri_Lankan_Z7GfBa">"இலங்கை"</string>
<string name="Spanish">"ஸ்பானிஷ்"</string>
<string name="Scottish">"ஸ்காட்டிஷ்"</string>
<string name="Russian">"ரஷ்ய"</string>
<string name="Portuguese">"போர்த்துகீசியம்"</string>
<string name="Nigerian">"நைஜீரிய"</string>
<string name="Mexican">"மெக்சிகன்"</string>
<string name="Korean">"கொரிய"</string>
<string name="Kenyan">"கென்ய"</string>
<string name="Jewish">"யூத"</string>
<string name="Japanese">"ஜப்பானிய"</string>
<string name="Jamaican">"ஜமைக்கா"</string>
<string name="Italian">"இத்தாலிய"</string>
<string name="Irish">"ஐரிஷ்"</string>
<string name="Indian">"இந்திய"</string>
<string name="Greek">"கிரேக்க"</string>
<string name="German">"ஜெர்மன்"</string>
<string name="French">"பிரஞ்சு"</string>
<string name="Filipino">"பிலிப்பைன்ஸ்"</string>
<string name="English">"ஆங்கில"</string>
<string name="Egyptian">"எகிப்திய"</string>
<string name="Danish">"டேனிஷ்"</string>
<string name="Chinese">"சீன"</string>
<string name="British">"பிரிட்டிஷ்"</string>
<string name="Brazilian">"பிரேசிலிய"</string>
<string name="American">"அமெரிக்க"</string>
<string name="_All_Cuisines_2hjCp9">"அனைத்து உணவு வகைகள்"</string>
<string name="Cuisines">"உணவு வகைகள்"</string>
<string name="Cuisine">"உணவு வகை"</string>
<string name="_Are_you_sure_you_want_to_remove_ZOnf22">"இதை நிச்சயமாக அகற்ற விரும்புகிறீர்களா"</string>
<string name="Units">"அலகுகள்"</string>
<string name="_Remove_unit__2x26yq">"அலகை அகற்றவா?"</string>
<string name="_Remove_yield_unit__Z1duBWR">"மகசூல் அலகை அகற்றவா?"</string>
<string name="_Remove_category__2reaxz">"பகுப்பை அகற்றவா?"</string>
<string name="_Remove_cuisine__22ftcL">"உணவு வகையை அகற்றவா?"</string>
<string name="_New_unit_1CVEEA">"புதிய அலகு"</string>
<string name="_New_cuisine_Zrvs3z">"புதிய உணவு வகை"</string>
<string name="Challenging">"சவாலானது"</string>
<string name="Moderate">"மிதமானது"</string>
<string name="Easy">"எளிது"</string>
<string name="_Oldest_first_Z6cq4h">"பழையன முதலில்"</string>
<string name="_Newest_first_2Sb3c">"புதியது முதலில்"</string>
<string name="_Last_updated_Z2gEbLD">"கடைசியாக புதுப்பிக்கப்பட்டது"</string>
<string name="_Difficulty_level_cSL5d">"சிரமநிலை"</string>
<string name="Rating">"மதிப்பீடு"</string>
<string name="_Slowest_first_hHjY6">"மெதுவானவை முதலில்"</string>
<string name="_Quickest_first_Z1CpP7N">"விரைவானவை முதலில்"</string>
<string name="_Your_search_did_not_match_any_recipes_in_the_filtered_result_1TV6QQ">"உங்கள் தேடல் வடிகட்டப்பட்ட முடிவில் எந்த சமையல் குறிப்புகளுடனும் பொருந்தவில்லை"</string>
<string name="_Recipe_not_found_2qGveM">"சமையல் குறிப்பு கிடைக்கவில்லை"</string>
<string name="_Reset_successful_YxqWK">"வெற்றிகரமாக மீட்டமைக்கப்பட்டது"</string>
<string name="_Reset_units_list_msRS3">"அலகுகள் பட்டியலை மீட்டமை"</string>
<string name="_Reset_yield_units_list_ZjouMk">"மகசூல் அலகுகள் பட்டியலை மீட்டமை"</string>
<string name="_Reset_categories_list_Z1JmKra">"பகுப்புகள் பட்டியலை மீட்டமை"</string>
<string name="_Reset_cuisines_list_1kWL8I">"உணவு வகைகள் பட்டியலை மீட்டமை"</string>
<string name="_Resetting_a_list_will_NOT_delete_your_existing_entries_but_only_restores_the_deleted_default_entries__Z28mk0h">"பட்டியலை மீட்டமைப்பது உங்கள் இருக்கும் உள்ளீடுகளை நீக்காது, ஆனால் நீக்கப்பட்ட இயல்புநிலை உள்ளீடுகளை மட்டுமே மீட்டமைக்கும்."</string>
<string name="Reset">"மீட்டமை"</string>
<string name="_Helps_you_choose_what_to_cook_when_you_can_t_decide_muiMv">"நீங்கள் தீர்மானிக்க முடியாதபோது என்ன சமைக்க வேண்டும் என்பதைத் தேர்வுசெய்ய உதவும்"</string>
<string name="_Shake_to_view_random_recipe_ZTK9F2">"சாதனத்தை அசைத்து சீரற்ற சமையல் குறிப்பை காண்க"</string>
<string name="Options">"விருப்பங்கள்"</string>
<string name="_User_guide_2uDJCF">"பயனர் வழிகாட்டி"</string>
<string name="_Privacy_policy_Zb4ht5">"தனியுரிமைக் கொள்கை"</string>
<string name="_View_on_GitHub_Z2qOqmx">"கிட்ஹப்பில் காண்க"</string>
<string name="Translator">"மொழிபெயர்ப்பாளர்"</string>
<string name="Contributors">"பங்களிப்பாளர்கள்"</string>
<string name="_Shared_via_EnRecipes__Get_it_on_Play_Store_or_F_Droid__Z2oTOK1">"என்ரெசிபீஸ் வழியாக பகிரப்பட்டது. அதை ப்ளே ஸ்டோர் அல்லது எஃப்-டிரயோடு இருந்து பெறுங்கள்."</string>
<string name="_Permission_denied_Z7wlWK">"அனுமதி மறுக்கப்பட்டது"</string>
@ -12,17 +102,17 @@
<string name="_days_ago_2iCYkm">"நாட்களுக்கு முன்பு"</string>
<string name="yesterday">"நேற்று"</string>
<string name="today">"இன்று"</string>
<string name="_You_tried_this_recipe__ZUJOl3">"இந்த செய்முறையை முயற்சித்தீர்கள்:"</string>
<string name="_You_tried_this_recipe__ZUJOl3">"இச்சமையல் குறிப்பை முயற்சித்தீர்கள்:"</string>
<string name="snacks">"சிற்றிடை உணவு"</string>
<string name="dinner">"இரவு உணவு"</string>
<string name="lunch">"மதிய உணவு"</string>
<string name="breakfast">"காலை உணவு"</string>
<string name="_Crop_photo_1VL04J">"படத்தை வெட்டு"</string>
<string name="_REPLACE_PHOTO_ZLHhwH">"புகைப்படத்தை மாற்றவும்"</string>
<string name="_Recipe_photo_eqm9B">"செய்முறை புகைப்படம்"</string>
<string name="_EnRecipes_requires_storage_permission_in_order_to_set_recipe_photo__23OnNT">"செய்முறை புகைப்படத்தை அமைக்க என்ரெசிபீஸ்க்கு சேமிப்பு அனுமதி தேவை."</string>
<string name="_REPLACE_PHOTO_ZLHhwH">"புகைப்படத்தை மாற்ற"</string>
<string name="_Recipe_photo_eqm9B">"சமையல் குறிப்பு புகைப்படம்"</string>
<string name="_EnRecipes_requires_storage_permission_in_order_to_set_recipe_photo__23OnNT">"சமையல் குறிப்பு புகைப்படத்தை அமைக்க என்ரெசிபீஸ்க்கு சேமிப்பு அனுமதி தேவை."</string>
<string name="Required">"தேவையான"</string>
<string name="_New_category_Weg73">"புதிய வகை"</string>
<string name="_New_category_Weg73">"புதிய பகுப்பு"</string>
<string name="_New_yield_unit_1Oevd2">"புதிய மகசூல் அலகு"</string>
<string name="_Remove_note__2wyMVE">"குறிப்பை அகற்றவா?"</string>
<string name="_Remove_combination__1dr2LS">"சேர்க்கையை அகற்றவா?"</string>
@ -30,18 +120,17 @@
<string name="_Remove_ingredient__2puvMO">"பொருளை அகற்றவா?"</string>
<string name="_KEEP_EDITING_1o9uy3">"தொடர்ந்து திருத்து"</string>
<string name="DISCARD">"நிராகரி"</string>
<string name="_Are_you_sure_you_want_to_discard_unsaved_changes_to_this_recipe__Z1G7sVC">"இந்த செய்முறையில் சேமிக்கப்படாத மாற்றங்களை நிராகரிக்க விரும்புகிறீர்களா?"</string>
<string name="_Are_you_sure_you_want_to_discard_unsaved_changes_to_this_recipe__Z1G7sVC">"இந்த சமையல் குறிப்பில் சேமிக்கப்படாத மாற்றங்களை நிராகரிக்க விரும்புகிறீர்களா?"</string>
<string name="_Unsaved_changes_9fqb4">"சேமிக்கப்படாத மாற்றங்கள்"</string>
<string name="_Rename_category_Z1WzCco">"வகையை மறுபெயரிடுங்கள்"</string>
<string name="Search">"தேடு"</string>
<string name="_Are_you_sure_you_want_to_delete_the_recipe_29DH9w">"இந்த செய்முறையை நீக்க விரும்புகிறீர்களா"</string>
<string name="_Are_you_sure_you_want_to_delete_the_recipe_29DH9w">"இந்த சமையல் குறிப்பை நீக்க விரும்புகிறீர்களா"</string>
<string name="DELETE">"நீக்கு"</string>
<string name="_Delete_recipe__Z2tMYtE">"செய்முறையை நீக்கவா?"</string>
<string name="_Delete_recipe__Z2tMYtE">"சமையல் குறிப்பை நீக்கவா?"</string>
<string name="_Removed_from_Try_Later_1h5Bkp">"பின்னர் முயற்சிப்பதில் இருந்து நீக்கப்பட்டது"</string>
<string name="_Added_to_Try_Later_Z1gaF37">"பின்னர் முயற்சிக்க சேர்க்கப்பட்டது"</string>
<string name="_Removed_from_Favourites_Z5k7LR">"பிடித்தவற்றிலிருந்து அகற்றப்பட்டது"</string>
<string name="_Added_to_Favourites_2mzllO">"பிடித்தவையில் சேர்க்கப்பட்டது"</string>
<string name="_Add_at_least_one_recipe_to_perform_a_backup_17xYaH">"காப்புப்பிரதி செய்ய குறைந்தபட்சம் ஒரு செய்முறையாவது சேர்க்கவும்"</string>
<string name="_Add_at_least_one_recipe_to_perform_a_backup_17xYaH">"காப்புப்பிரதி செய்ய குறைந்தபட்சம் ஒரு சமையல் குறிப்பு சேர்க்கவும்"</string>
<string name="_EnRecipes_requires_storage_permission_in_order_to_backup_your_data_to_this_device__2cbvIq">"இந்தச் சாதனத்தில் உங்கள் தரவை காப்புப் பிரதி எடுக்க என்ரெசிபீஸ்க்கு சேமிப்பக அனுமதி தேவைப்படுகிறது."</string>
<string name="CONTINUE">"தொடர்"</string>
<string name="_NOT_NOW_Z1HD7qX">"இப்போது இல்லை"</string>
@ -55,19 +144,16 @@
<string name="_ADD_NEW_Zv8FjM">"புதியனவற்றை சேர்"</string>
<string name="Share">"பகிர்"</string>
<string name="Overview">"கண்ணோட்டம்"</string>
<string name="Recipe">"செய்முறை"</string>
<string name="Recipe">"சமையல் குறிப்பு"</string>
<string name="Photo">"புகைப்படம்"</string>
<string name="min">"நிமிடம்"</string>
<string name="hr">"மணி"</string>
<string name="_My_Healthy_Recipe_Z1EqB8f">"எனது ஆரோக்கியமான செய்முறை"</string>
<string name="_Nothing_here__Add_some_recipes_and_try_again__Z25A7Q">"இங்கு எதுவுமில்லை! சில சமையல் வகைகளைச் சேர்த்து மீண்டும் முயற்சிக்கவும்."</string>
<string name="_Select_a_recipe_2lL8x2">"ஒரு செய்முறையைத் தேர்ந்தெடுக்கவும்"</string>
<string name="_My_Healthy_Recipe_Z1EqB8f">"எனது ஆரோக்கியமான சமையல் குறிப்பு"</string>
<string name="_Nothing_here__Add_some_recipes_and_try_again__Z25A7Q">"இங்கு எதுவுமில்லை! சில சமையல் குறிப்பிப்புகளை சேர்த்து மீண்டும் முயற்சிக்கவும்."</string>
<string name="_Select_a_recipe_2lL8x2">"ஒரு சமையல் குறிப்பை தேர்ந்தெடுக்கவும்"</string>
<string name="ADD">"சேர்"</string>
<string name="REMOVE">"அகற்று"</string>
<string name="CANCEL">"ரத்துசெய்"</string>
<string name="_Last_modified_Z1yBAS3">"கடைசியாக மாற்றப்பட்டது"</string>
<string name="Duration">"நேரம்"</string>
<string name="_Natural_order_Z1O8On5">"இயற்கை வரிசை"</string>
<string name="_Sort_by_Zq01TF">"வரிசை விதி"</string>
<string name="Step">"செயஂமுறை"</string>
<string name="Item">"பொருள்"</string>
@ -86,17 +172,14 @@
<string name="_Yield_quantity_ZHx3jw">"மகசூல் அளவு"</string>
<string name="_Cooking_time_2w2fEw">"சமைக்கும் நேரம்"</string>
<string name="_Preparation_time_15BfxT">"தயாரிப்பு நேரம்"</string>
<string name="Category">"வகை"</string>
<string name="Category">"பகுப்பு"</string>
<string name="Title">"தலைப்பு"</string>
<string name="_Edit_recipe_ZPvwDP">"செய்முறையைத் திருத்து"</string>
<string name="_New_recipe_Z1Y2YKJ">"புதிய செய்முறை"</string>
<string name="_Follow_on_Mastodon_Z1v6e4V">"மஸ்டோடனில் அவரைப் பின்தொடரவும்"</string>
<string name="_Follow_on_GitHub_Z1GjptH">"கிட்ஹப்பில் அவரைப் பின்தொடரவும்"</string>
<string name="_Vishnu_Raghav_B_1qnRnC">"விஷ்ணு ராகவ் .பா"</string>
<string name="Author">"பயன்பாட்டு ஆசிரியர்"</string>
<string name="_Edit_recipe_ZPvwDP">"சமையல் குறிப்பை திருத்து"</string>
<string name="_New_recipe_Z1Y2YKJ">"புதிய சமையல் குறிப்பு"</string>
<string name="_Vishnu_Raghav_B_1qnRnC">"பா. விஷ்ணு ராகவ்"</string>
<string name="Author">"ஆக்கியோன்"</string>
<string name="_for_reporting_issues__suggestions_and_feedback_Z1JUmyE">"சிக்கல்கள், பரிந்துரைகள் மற்றும் கருத்துக்களைப் புகாரளிக்க"</string>
<string name="_Join_the_Telegram_group_ZAXQgc">"டெலிகிராம் குழுவில் சேரவும்"</string>
<string name="_View_project_on_GitHub_1hrJ0U">"கிட்ஹப்பில் திட்டத்தைக் காண்க"</string>
<string name="Version">"பதிப்பு"</string>
<string name="_Supports_full_backups_exported_by_this_app_ZYs4f2">"இந்த பயன்பாட்டின் மூலம் ஏற்றுமதி செய்யப்பட்ட முழு காப்புப்பிரதிகளை ஆதரிக்கும்"</string>
<string name="_Import_from_backup_Z28HsC0">"காப்புப்பிரதியிலிருந்து இறக்குமதி செய்க"</string>
@ -109,12 +192,12 @@
<string name="_System_default_Z1jruVS">"கணினி இயல்புநிலை"</string>
<string name="_App_language_DzFsk">"பயன்பாட்டு மொழி"</string>
<string name="Interface">"இடைமுகம்"</string>
<string name="_Your_search_did_not_match_any_recipes_in_your_try_later_list_Z2wWbA1">"உங்கள் தேடல் நீங்கள் முயற்சிக்க வேண்டிய பட்டியலில் உள்ள எந்த சமையல் குறிப்புகளுடன் பொருந்தவில்லைை"</string>
<string name="_Your_search_did_not_match_any_recipes_in_your_favourites_1ylvHN">"உங்கள் தேடல் உங்களுக்கு பிடித்தவற்றில் எந்த சமையல் குறிப்புகளுடன் பொருந்தவில்லைை"</string>
<string name="_Your_search_did_not_match_any_recipes_in_this_category_P7J4V">"உங்கள் தேடல் இந்த வகையில் எந்த சமையல் குறிப்புகளுடன் பொருந்தவில்லை"</string>
<string name="_Your_search_did_not_match_any_recipes_Z1eppHH">"உங்கள் தேடல் எந்த சமையல் குறிப்புகளுக்கும் பொருந்தவில்லை"</string>
<string name="_Your_search_did_not_match_any_recipes_in_your_try_later_list_Z2wWbA1">"உங்கள் தேடல் நீங்கள் முயற்சிக்க வேண்டிய பட்டியலில் உள்ள எந்த சமையல் குறிப்புகளுடனும் பொருந்தவில்ல"</string>
<string name="_Your_search_did_not_match_any_recipes_in_your_favourites_1ylvHN">"உங்கள் தேடல் உங்களுக்கு பிடித்தவற்றில் எந்த சமையல் குறிப்புகளுடனும் பொருந்தவில்லைை"</string>
<string name="_Your_search_did_not_match_any_recipes_in_this_category_P7J4V">"உங்கள் தேடல் இப்பகுப்பில் எந்த சமையல் குறிப்புகளுடனும் பொருந்தவில்லை"</string>
<string name="_Your_search_did_not_match_any_recipes_Z1eppHH">"உங்கள் தேடல் எந்த சமையல் குறிப்புகளுடனும் பொருந்தவில்லை"</string>
<string name="_No_recipes_found_Z125IxD">"எந்த சமையல் குறிப்புகளும் இல்லை"</string>
<string name="_Category_looks_empty_ZAK5qU">"இந்த பிரிவில் எந்த சமையல் குறிப்புகளும் இல்லை"</string>
<string name="_Category_looks_empty_ZAK5qU">"இந்த பகுப்பில் எந்த சமையல் குறிப்புகளும் இல்லை"</string>
<string name="_Recipes_you_mark_as_favourite_will_be_listed_here_Z1iIHgY">"நீங்கள் பிடித்ததாகக் குறிக்கும் சமையல் குறிப்புகள் இங்கே பட்டியலிடப்படும்"</string>
<string name="_No_favourites_yet_aPSoG">"இன்னும் பிடித்தவை எதுவும் இல்லை"</string>
<string name="_Recipes_you_mark_as_try_later_will_be_listed_here_Z1ITwPV">"முயற்சிக்க வேண்டும் என நீங்கள் குறிக்கும் சமையல் குறிப்புகள் இங்கே பட்டியலிடப்படும்"</string>
@ -123,7 +206,7 @@
<string name="_Use_the_pencil_button_to_add_some_combinations_6NhFS">"சில சேர்க்கைகளைச் சேர்க்க பென்சில் பொத்தானைப் பயன்படுத்தவும்"</string>
<string name="_Use_the_pencil_button_to_add_some_instructions_ZAi0PH">"செய்முறைகளைச் சேர்க்க பென்சில் பொத்தானைப் பயன்படுத்தவும்"</string>
<string name="_Use_the_pencil_button_to_add_some_ingredients_Z1xOX8S">"தேவையான பொருட்களைச் சேர்க்க பென்சில் பொத்தானைப் பயன்படுத்தவும்"</string>
<string name="_Use_the_plus_button_to_add_one_1h20ms">"ஒரு செய்முறையைச் சேர்க்க பிளஸ் பொத்தானைப் பயன்படுத்தவும்"</string>
<string name="_Use_the_plus_button_to_add_one_1h20ms">"ஒரு சமையல் குறிப்பைச் சேர்க்க பிளஸ் பொத்தானைப் பயன்படுத்தவும்"</string>
<string name="_Start_adding_your_recipes__rwnVV">"உங்கள் சமையல் குறிப்புகளைச் சேர்க்கத் தொடங்குங்கள்!"</string>
<string name="large">"பெரிய"</string>
<string name="medium">"நடுத்தர"</string>
@ -197,9 +280,7 @@
<string name="Appetizers">"பசித்தூண்டி"</string>
<string name="About">"பற்றி"</string>
<string name="Settings">"அமைப்புகள்"</string>
<string name="RENAME">"மறுபெயரிடு"</string>
<string name="DONE">"முடிந்தது"</string>
<string name="Categories">"வகைகள்"</string>
<string name="Categories">"பகுப்புகள்"</string>
<string name="_Meal_Planner_2aq4oj">"உணவுத் திட்டம்"</string>
<string name="Favourites">"பிடித்தவை"</string>
<string name="_Try_Later_If7PG">"பின்னர் முயற்சிக்க"</string>

View file

@ -1,6 +1,96 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="_Translations__1IFwAu">"Translations:"</string>
<string name="_Invalid_file__Z2bRAst">"Invalid file:"</string>
<string name="_Backup_file_has_been_modified_externally__Wjiqq">"Backup file has been modified externally."</string>
<string name="_Backup_file_seems_empty__Zd7qfR">"Backup file seems empty."</string>
<string name="_Backup_file_is_incorrect_or_corrupt__1jXb8N">"Backup file is incorrect or corrupt."</string>
<string name="_Import_failed_Z1dbs6t">"Import failed"</string>
<string name="_Remove_recipe_from_snacks__MNnCU">"Remove recipe from snacks?"</string>
<string name="_Remove_recipe_from_dinner__8sWfY">"Remove recipe from dinner?"</string>
<string name="_Remove_recipe_from_lunch__Zwpsg2">"Remove recipe from lunch?"</string>
<string name="_Remove_recipe_from_breakfast__ZvYyFG">"Remove recipe from breakfast?"</string>
<string name="_Untitled_Recipe_Zv0UxP">"Untitled Recipe"</string>
<string name="_Star_rating_Z11p4Kw">"Star rating"</string>
<string name="Created">"Created"</string>
<string name="_Filtered_result_1AMEXe">"Filtered result"</string>
<string name="OK">"OK"</string>
<string name="_recipes_updated_Z2arFrR">"recipes updated"</string>
<string name="_recipes_already_exists_2jqW2s">"recipes already exists"</string>
<string name="_recipes_imported_1NGeRw">"recipes imported"</string>
<string name="_recipes_found_ZDdUgV">"recipes found"</string>
<string name="_Import_summary_244SkL">"Import summary"</string>
<string name="_separate_with_spaces_ZHKOfw">"separate with spaces"</string>
<string name="Tags">"Tags"</string>
<string name="_No_tags_available_Z1C5GqD">"No tags available"</string>
<string name="_All_Tags_28gMyY">"All Tags"</string>
<string name="_All_Categories_Z23JSTS">"All Categories"</string>
<string name="Vietnamese">"Vietnamese"</string>
<string name="Turkish">"Turkish"</string>
<string name="Thai">"Thai"</string>
<string name="Swedish">"Swedish"</string>
<string name="_Sri_Lankan_Z7GfBa">"Sri Lankan"</string>
<string name="Spanish">"Spanish"</string>
<string name="Scottish">"Scottish"</string>
<string name="Russian">"Russian"</string>
<string name="Portuguese">"Portuguese"</string>
<string name="Nigerian">"Nigerian"</string>
<string name="Mexican">"Mexican"</string>
<string name="Korean">"Korean"</string>
<string name="Kenyan">"Kenyan"</string>
<string name="Jewish">"Jewish"</string>
<string name="Japanese">"Japanese"</string>
<string name="Jamaican">"Jamaican"</string>
<string name="Italian">"Italian"</string>
<string name="Irish">"Irish"</string>
<string name="Indian">"Indian"</string>
<string name="Greek">"Greek"</string>
<string name="German">"German"</string>
<string name="French">"French"</string>
<string name="Filipino">"Filipino"</string>
<string name="English">"English"</string>
<string name="Egyptian">"Egyptian"</string>
<string name="Danish">"Danish"</string>
<string name="Chinese">"Chinese"</string>
<string name="British">"British"</string>
<string name="Brazilian">"Brazilian"</string>
<string name="American">"American"</string>
<string name="_All_Cuisines_2hjCp9">"All Cuisines"</string>
<string name="Cuisines">"Cuisines"</string>
<string name="Cuisine">"Cuisine"</string>
<string name="_Are_you_sure_you_want_to_remove_ZOnf22">"Are you sure you want to remove"</string>
<string name="Units">"Units"</string>
<string name="_Remove_unit__2x26yq">"Remove unit?"</string>
<string name="_Remove_yield_unit__Z1duBWR">"Remove yield unit?"</string>
<string name="_Remove_category__2reaxz">"Remove category?"</string>
<string name="_Remove_cuisine__22ftcL">"Remove cuisine?"</string>
<string name="_New_unit_1CVEEA">"New unit"</string>
<string name="_New_cuisine_Zrvs3z">"New cuisine"</string>
<string name="Challenging">"Challenging"</string>
<string name="Moderate">"Moderate"</string>
<string name="Easy">"Easy"</string>
<string name="_Oldest_first_Z6cq4h">"Oldest first"</string>
<string name="_Newest_first_2Sb3c">"Newest first"</string>
<string name="_Last_updated_Z2gEbLD">"Last updated"</string>
<string name="_Difficulty_level_cSL5d">"Difficulty level"</string>
<string name="Rating">"Rating"</string>
<string name="_Slowest_first_hHjY6">"Slowest first"</string>
<string name="_Quickest_first_Z1CpP7N">"Quickest first"</string>
<string name="_Your_search_did_not_match_any_recipes_in_the_filtered_result_1TV6QQ">"Your search did not match any recipes in the filtered result"</string>
<string name="_Recipe_not_found_2qGveM">"Recipe not found"</string>
<string name="_Reset_successful_YxqWK">"Reset successful"</string>
<string name="_Reset_units_list_msRS3">"Reset units list"</string>
<string name="_Reset_yield_units_list_ZjouMk">"Reset yield units list"</string>
<string name="_Reset_categories_list_Z1JmKra">"Reset categories list"</string>
<string name="_Reset_cuisines_list_1kWL8I">"Reset cuisines list"</string>
<string name="_Resetting_a_list_will_NOT_delete_your_existing_entries_but_only_restores_the_deleted_default_entries__Z28mk0h">"Resetting a list will NOT delete your existing entries but only restores the deleted default entries."</string>
<string name="Reset">"Reset"</string>
<string name="_Helps_you_choose_what_to_cook_when_you_can_t_decide_muiMv">"Helps you choose what to cook when you can\'t decide"</string>
<string name="_Shake_to_view_random_recipe_ZTK9F2">"Shake to view random recipe"</string>
<string name="Options">"Options"</string>
<string name="_User_guide_2uDJCF">"User guide"</string>
<string name="_Privacy_policy_Zb4ht5">"Privacy policy"</string>
<string name="_View_on_GitHub_Z2qOqmx">"View on GitHub"</string>
<string name="Translator">"Translator"</string>
<string name="Contributors">"Contributors"</string>
<string name="_Shared_via_EnRecipes__Get_it_on_Play_Store_or_F_Droid__Z2oTOK1">"Shared via EnRecipes. Get it on Play Store or F-Droid."</string>
<string name="_Permission_denied_Z7wlWK">"Permission denied"</string>
@ -32,7 +122,6 @@
<string name="DISCARD">"DISCARD"</string>
<string name="_Are_you_sure_you_want_to_discard_unsaved_changes_to_this_recipe__Z1G7sVC">"Are you sure you want to discard unsaved changes to this recipe?"</string>
<string name="_Unsaved_changes_9fqb4">"Unsaved changes"</string>
<string name="_Rename_category_Z1WzCco">"Rename category"</string>
<string name="Search">"Search"</string>
<string name="_Are_you_sure_you_want_to_delete_the_recipe_29DH9w">"Are you sure you want to delete the recipe"</string>
<string name="DELETE">"DELETE"</string>
@ -65,9 +154,6 @@
<string name="ADD">"ADD"</string>
<string name="REMOVE">"REMOVE"</string>
<string name="CANCEL">"CANCEL"</string>
<string name="_Last_modified_Z1yBAS3">"Last modified"</string>
<string name="Duration">"Duration"</string>
<string name="_Natural_order_Z1O8On5">"Natural order"</string>
<string name="_Sort_by_Zq01TF">"Sort by"</string>
<string name="Step">"Step"</string>
<string name="Item">"Item"</string>
@ -90,13 +176,10 @@
<string name="Title">"Title"</string>
<string name="_Edit_recipe_ZPvwDP">"Edit recipe"</string>
<string name="_New_recipe_Z1Y2YKJ">"New recipe"</string>
<string name="_Follow_on_Mastodon_Z1v6e4V">"Follow on Mastodon"</string>
<string name="_Follow_on_GitHub_Z1GjptH">"Follow on GitHub"</string>
<string name="_Vishnu_Raghav_B_1qnRnC">"Vishnu Raghav B"</string>
<string name="Author">"Author"</string>
<string name="_for_reporting_issues__suggestions_and_feedback_Z1JUmyE">"for reporting issues, suggestions and feedback"</string>
<string name="_Join_the_Telegram_group_ZAXQgc">"Join the Telegram group"</string>
<string name="_View_project_on_GitHub_1hrJ0U">"View project on GitHub"</string>
<string name="Version">"Version"</string>
<string name="_Supports_full_backups_exported_by_this_app_ZYs4f2">"Supports full backups exported by this app"</string>
<string name="_Import_from_backup_Z28HsC0">"Import from backup"</string>
@ -197,8 +280,6 @@
<string name="Appetizers">"Appetizers"</string>
<string name="About">"About"</string>
<string name="Settings">"Settings"</string>
<string name="RENAME">"RENAME"</string>
<string name="DONE">"DONE"</string>
<string name="Categories">"Categories"</string>
<string name="_Meal_Planner_2aq4oj">"Meal Planner"</string>
<string name="Favourites">"Favourites"</string>

View file

@ -1,33 +1,167 @@
import Vue from "vue"
import Vuex from "vuex"
import {
Couchbase
} from "nativescript-couchbase-plugin"
import {
getFileAccess
} from "@nativescript/core"
const EnRecipesDB = new Couchbase("EnRecipes")
const userCategoriesDB = new Couchbase("userCategories")
const userYieldUnitsDB = new Couchbase("userYieldUnits")
const mealPlansDB = new Couchbase("mealPlans")
Vue.use(Vuex)
const defaultCategories = ["Appetizers", "Barbecue", "Beverages", "Breads", "Breakfast", "Desserts", "Dinner", "Drinks", "Healthy", "Lunch", "Main dishes", "Meat", "Noodles", "Pasta", "Poultry", "Rice", "Salads", "Sauces", "Seafood", "Side dishes", "Snacks", "Soups", "Undefined", "Vegan", "Vegetarian", ]
const defaultYieldUnits = ["Serving", "Piece", "Teaspoon", "Tablespoon", "Fluid Ounce", "Ounce", "Pound", "Gram", "Kilogram", "Cup", "Gallon", "Millilitre", "Litre", "Roll", "Patty", "Loaf", ]
import Vue from "vue";
import Vuex from "vuex";
Vue.use(Vuex);
import {Couchbase} from "nativescript-couchbase-plugin";
import {getFileAccess, File, ApplicationSettings} from "@nativescript/core";
const EnRecipesDB = new Couchbase("EnRecipes");
const userCuisinesDB = new Couchbase("userCuisines");
const userCategoriesDB = new Couchbase("userCategories");
const userYieldUnitsDB = new Couchbase("userYieldUnits");
const userUnitsDB = new Couchbase("userUnits");
const mealPlansDB = new Couchbase("mealPlans");
const defaultCuisines = [
"American",
"Brazilian",
"British",
"Chinese",
"Danish",
"Egyptian",
"Filipino",
"French",
"German",
"Greek",
"Indian",
"Irish",
"Italian",
"Jamaican",
"Japanese",
"Jewish",
"Kenyan",
"Korean",
"Mexican",
"Nigerian",
"Portuguese",
"Russian",
"Scottish",
"Spanish",
"Sri Lankan",
"Swedish",
"Thai",
"Turkish",
"Vietnamese"
];
const defaultCategories = [
"Appetizers",
"Barbecue",
"Beverages",
"Breads",
"Breakfast",
"Desserts",
"Dinner",
"Drinks",
"Healthy",
"Lunch",
"Main dishes",
"Meat",
"Noodles",
"Pasta",
"Poultry",
"Rice",
"Salads",
"Sauces",
"Seafood",
"Side dishes",
"Snacks",
"Soups",
"Undefined",
"Vegan",
"Vegetarian"
];
const defaultYieldUnits = [
"Serving",
"Piece",
"Teaspoon",
"Tablespoon",
"Fluid Ounce",
"Ounce",
"Pound",
"Gram",
"Kilogram",
"Cup",
"Gallon",
"Millilitre",
"Litre",
"Roll",
"Patty",
"Loaf"
];
const defaultUnits = [
"unit",
"tsp",
"dsp",
"tbsp",
"fl oz",
"cup",
"pt",
"qt",
"gal",
"ml",
"l",
"oz",
"lb",
"mg",
"g",
"kg",
"cm",
"in",
"leaf",
"clove",
"piece",
"pinch",
"drop",
"dozen",
"stick",
"small",
"medium",
"large"
];
const listItems = {
cuisines: {
db: userCuisinesDB,
key: "userCuisines",
stateName: "cuisines",
sort: true,
defaultItems: defaultCuisines
},
categories: {
db: userCategoriesDB,
key: "userCategories",
stateName: "categories",
sort: true,
defaultItems: defaultCategories
},
yieldUnits: {
db: userYieldUnitsDB,
key: "userYieldUnits",
stateName: "yieldUnits",
sort: false,
defaultItems: defaultYieldUnits
},
units: {
db: userUnitsDB,
key: "userUnits",
stateName: "units",
sort: false,
defaultItems: defaultUnits
}
};
export default new Vuex.Store({
state: {
recipes: [],
cuisines: [],
categories: [],
userCategories: [],
units: ["unit", "tsp", "dsp", "tbsp", "fl oz", "cup", "pt", "qt", "gal", "ml", "l", "oz", "lb", "mg", "g", "kg", "cm", "in", "leaf", "clove", "piece", "pinch", "drop", "dozen", "stick", "small", "medium", "large", ],
yieldUnits: [],
userYieldUnits: [],
units: [],
mealPlans: [],
icon: {
home: "\ued3b",
heart: "\ued36",
heartOutline: "\uea6c",
label: "\ued51",
labelOutline: "\uea8b",
heartLine: "\uea6c",
cuisine: "\ueb3e",
category: "\uec7c",
categoryLine: "\ue99c",
tag: "\uee12",
tagLine: "\ueb97",
cog: "\ueca6",
info: "\ued49",
menu: "\ueac1",
@ -49,9 +183,9 @@ export default new Vuex.Store({
detail: "\ue9f9",
user: "\uee33",
trash: "\uee26",
donate: "\ueb4f",
donate: "\uece2",
trylater: "\uec31",
trylaterOutline: "\ue94a",
trylaterLine: "\ue94a",
note: "\ueb04",
copy: "\ue9e6",
check: "\ue9a4",
@ -66,397 +200,448 @@ export default new Vuex.Store({
calendar: "\uec55",
today: "\ue97c",
globe: "\uea5a",
lock: "\ued61",
github: "\uee8b",
gitlab: "\uee8c",
shuffle: "\ueb6b",
reset: "\ueb3d",
emptyCart: "\ue999",
cart: "\uec77",
meter: "\ueb96",
star: "\uee0a",
starLine: "\ueb83",
compass: "\uecb4",
show: "\uedfd"
},
currentComponent: "EnRecipes",
language: [{
locale: 'en',
title: 'English'
}, {
locale: 'de',
title: 'Deutsch'
}, {
locale: 'ta',
title: 'தமிழ்'
}, ]
sortType: "Oldest first",
language: [
{
locale: "da",
title: "Dansk"
}, {
locale: "de",
title: "Deutsch"
}, {
locale: "en",
title: "English"
}, {
locale: "es",
title: "Español"
}, {
locale: "nl",
title: "Nederlands"
}, {
locale: "pt",
title: "Português"
}, {
locale: "ru",
title: "Русский"
}, {
locale: "ta",
title: "தமிழ்"
}
],
shakeEnabled: true,
importSummary: {
found: 0,
imported: 0,
updated: 0
}
},
mutations: {
setSortType(state, sortType) {
state.sortType = sortType
},
initializeRecipes(state) {
EnRecipesDB.query({
select: []
}).forEach((recipe) => {
state.recipes.push(recipe)
})
EnRecipesDB.query({select: []}).forEach(r => {
if (r.timeRequired) {
r.prepTime = "00:00";
r.cookTime = r.timeRequired;
delete r.timeRequired;
}
if (!r.hasOwnProperty("cuisine"))
r.cuisine = "Undefined"
if (!r.hasOwnProperty("tags"))
r.tags = []
if (!r.hasOwnProperty("difficulty"))
r.difficulty = "Easy"
if (!r.hasOwnProperty("rating"))
r.rating = 0
if (!r.hasOwnProperty("created"))
r.created = r.lastModified
state.recipes.push(r);
});
state.shakeEnabled = ApplicationSettings.getBoolean("shakeEnabled", true)
state.sortType = ApplicationSettings.getString("sortType", "Oldest first")
},
initializeCategories(state) {
let isCategoriesStored = userCategoriesDB.query({
select: []
}).length
if (isCategoriesStored) {
state.userCategories = userCategoriesDB.getDocument("userCategories").userCategories
let categoriesWithRecipes = state.recipes.map((e) => e.category)
state.userCategories = state.userCategories.filter((e) => categoriesWithRecipes.includes(e))
} else {
userCategoriesDB.createDocument({
userCategories: []
}, "userCategories")
importRecipes(state, recipes) {
let localRecipesIDs,
partition
let imported = 0
let updated = 0
function getUpdatedData(data) {
return data.map(recipe => {
let r = Object.assign({}, recipe);
if (r.timeRequired) {
r.prepTime = "00:00";
r.cookTime = r.timeRequired;
delete r.timeRequired;
}
if (!r.hasOwnProperty("cuisine"))
r.cuisine = "Undefined"
if (!r.hasOwnProperty("tags"))
r.tags = []
if (!r.hasOwnProperty("difficulty"))
r.difficulty = "Easy"
if (!r.hasOwnProperty("rating"))
r.rating = 0
if (!r.hasOwnProperty("created"))
r.created = r.lastModified
return r;
});
}
state.categories = [...defaultCategories, ...state.userCategories]
state.categories.sort()
function createDocuments(data) {
data = getUpdatedData(data);
state.recipes = [
...state.recipes,
...data
];
data.forEach(recipe => {
imported++
EnRecipesDB.createDocument(recipe, recipe.id);
});
}
function updateDocuments(data) {
data = getUpdatedData(data);
data.forEach(recipe => {
let recipeIndex = state.recipes.map((e, i) => {
let d1 = new Date(e.lastModified).getTime();
let d2 = new Date(recipe.lastModified).getTime();
return e.id === recipe.id && d1 < d2
? i
: -1;
}).filter(e => e >= 0)[0];
if (recipeIndex >= 0) {
updated++
Object.assign(state.recipes[recipeIndex], recipe);
EnRecipesDB.updateDocument(recipe.id, recipe);
}
});
}
if (state.recipes.length) {
localRecipesIDs = state.recipes.map(e => e.id);
partition = recipes.reduce((result, recipe, i) => {
localRecipesIDs.indexOf(recipe.id) < 0
? result[0].push(recipe) // create candidates
: result[1].push(recipe); // update candidates
return result;
}, [[], []]);
if (partition[0].length)
createDocuments(partition[0]);
if (partition[1].length)
updateDocuments(partition[1]);
}
else {
createDocuments(recipes);
}
state.importSummary.found = recipes.length
state.importSummary.imported = imported
state.importSummary.updated = updated
},
initializeYieldUnits(state) {
let isYieldUnitsStored = userYieldUnitsDB.query({
select: []
}).length
if (isYieldUnitsStored) {
state.userYieldUnits = userYieldUnitsDB.getDocument("userYieldUnits").userYieldUnits
let yieldUnitsWithRecipes = state.recipes.map((e) => e.yield.unit)
state.userYieldUnits = state.userYieldUnits.filter((e) => yieldUnitsWithRecipes.includes(e))
} else {
userYieldUnitsDB.createDocument({
userYieldUnits: []
}, "userYieldUnits")
addRecipe(state, {id, recipe}) {
state.recipes.push(recipe);
EnRecipesDB.createDocument(recipe, id);
},
overwriteRecipe(state, {id, recipe}) {
let index = state.recipes.indexOf(state.recipes.filter(e => e.id === id)[0]);
Object.assign(state.recipes[index], recipe);
EnRecipesDB.updateDocument(id, recipe);
},
deleteRecipe(state, {index, id}) {
getFileAccess().deleteFile(state.recipes[index].imageSrc);
state.recipes.splice(index, 1);
EnRecipesDB.deleteDocument(id);
state.recipes.forEach((e, i) => {
if (e.combinations.includes(id)) {
state.recipes[i].combinations.splice(e.combinations.indexOf(id), 1);
EnRecipesDB.updateDocument(state.recipes[i].id, state.recipes[i]);
}
});
},
initializeListItems(state) {
function initialize(listName) {
let userItems;
let db = listItems[listName].db;
let key = listItems[listName].key;
let stateName = listItems[listName].stateName;
let defaultItems = listItems[listName].defaultItems;
if (!state[stateName].length) {
let isStored = db.query({select: []}).length;
if (isStored) {
userItems = db.getDocument(key)[key];
if (userItems.some(e => defaultItems.includes(e)))
state[stateName] = userItems;
else
state[stateName] = [
...defaultItems,
...userItems
];
}
else {
if (listItems[listName].sort) {
state[stateName].sort();
}
state[stateName] = defaultItems;
db.createDocument({
[key]: []
}, key);
}
}
}["cuisines", "categories", "yieldUnits", "units"].forEach(item => {
initialize(item);
});
},
importListItems(state, {data, listName}) {
let db = listItems[listName].db;
let key = listItems[listName].key;
let stateName = listItems[listName].stateName;
let items = new Set([
...state[stateName],
...data
]);
state[stateName] = [...items];
if (listItems[listName].sort)
state[stateName].sort();
db.updateDocument(key, {[key]: state[stateName]});
},
addListItem(state, {item, listName}) {
console.log(item, listName);
let db = listItems[listName].db;
let key = listItems[listName].key;
let stateName = listItems[listName].stateName;
let lowercase = state[stateName].map(e => e.toLowerCase());
if (lowercase.indexOf(item.toLowerCase()) == -1) {
state[stateName].push(item);
db.updateDocument(key, {[key]: state[stateName]});
if (listItems[listName].sort)
state[stateName].sort();
}
},
removeListItem(state, {item, listName}) {
let db = listItems[listName].db;
let key = listItems[listName].key;
let stateName = listItems[listName].stateName;
let index = state[stateName].indexOf(item);
state[stateName].splice(index, 1);
db.updateDocument(key, {[key]: state[stateName]});
if (listItems[listName].sort)
state[stateName].sort();
}
,
resetListItems(state, listName) {
let stateName = listItems[listName].stateName;
let defaultItems = listItems[listName].defaultItems;
let items = new Set([
...defaultItems,
...state[listName]
]);
state[listName] = [...items];
if (listItems[listName].sort) {
state[stateName].sort();
}
state.yieldUnits = [...defaultYieldUnits, ...state.userYieldUnits]
},
initializeMealPlans(state) {
let isMealPlansDBStored = mealPlansDB.query({
select: []
}).length
let isMealPlansDBStored = mealPlansDB.query({select: []}).length;
if (isMealPlansDBStored) {
state.mealPlans = mealPlansDB.getDocument("mealPlans").mealPlans
state.mealPlans = mealPlansDB.getDocument("mealPlans").mealPlans;
} else {
mealPlansDB.createDocument({
mealPlans: []
}, "mealPlans")
}, "mealPlans");
}
},
importRecipes(state, recipes) {
let localRecipesIDs, partition
if (state.recipes.length) {
localRecipesIDs = state.recipes.map((e) => e.id)
partition = recipes.reduce(
(result, recipe, i) => {
localRecipesIDs.indexOf(recipe.id) < 0 ? result[0].push(recipe) // create candidates
: result[1].push(recipe) // update candidates
return result
},
[
[],
[]
])
if (partition[0].length) createDocuments(partition[0])
if (partition[1].length) updateDocuments(partition[1])
} else {
createDocuments(recipes)
}
function getUpdatedData(data) {
return data.map((recipe) => {
let r = Object.assign({}, recipe)
if (r.timeRequired) {
r.prepTime = "00:00"
r.cookTime = r.timeRequired
delete r.timeRequired
}
return r
})
}
function createDocuments(data) {
data = getUpdatedData(data)
state.recipes = [...state.recipes, ...data]
data.forEach((recipe) => {
EnRecipesDB.createDocument(recipe, recipe.id)
})
}
function updateDocuments(data) {
data = getUpdatedData(data)
data.forEach((recipe) => {
let recipeIndex = state.recipes.map((e, i) => {
let d1 = new Date(e.lastModified).getTime()
let d2 = new Date(recipe.lastModified).getTime()
return e.id === recipe.id && d1 < d2 ? i : -1
}).filter((e) => e >= 0)[0]
if (recipeIndex >= 0) {
Object.assign(state.recipes[recipeIndex], recipe)
EnRecipesDB.updateDocument(recipe.id, recipe)
}
})
}
},
importCategories(state, categories) {
state.userCategories = new Set([...state.userCategories, ...categories])
userCategoriesDB.updateDocument("userCategories", {
userCategories: [...state.userCategories],
})
state.categories = [...defaultCategories, ...state.userCategories]
state.categories.sort()
},
importYieldUnits(state, yieldUnits) {
state.userYieldUnits = new Set([...state.userYieldUnits, ...yieldUnits])
userYieldUnitsDB.updateDocument("userYieldUnits", {
userYieldUnits: [...state.userYieldUnits],
})
state.yieldUnits = [...defaultYieldUnits, ...state.userYieldUnits]
},
importMealPlans(state, mealPlans) {
let newMealPlans = mealPlans.filter(
(e) => !state.mealPlans.some(
(f) => f.title === e.title && f.startDate === e.startDate))
state.mealPlans = [...state.mealPlans, ...newMealPlans]
let newMealPlans = mealPlans.filter(e => !state.mealPlans.some(f => f.title === e.title && f.startDate === e.startDate));
state.mealPlans = [
...state.mealPlans,
...newMealPlans
];
mealPlansDB.updateDocument("mealPlans", {mealPlans: state.mealPlans});
},
addMealPlan(state, {event, eventColor}) {
state.mealPlans.push({title: event.title, startDate: event.startDate, endDate: event.endDate, eventColor});
mealPlansDB.updateDocument("mealPlans", {
mealPlans: [...state.mealPlans],
})
mealPlans: [...state.mealPlans]
});
},
addRecipe(state, {
id,
recipe
}) {
state.recipes.push(recipe)
EnRecipesDB.createDocument(recipe, id)
},
addCategory(state, category) {
let lowercase = state.categories.map((e) => e.toLowerCase())
if (lowercase.indexOf(category.toLowerCase()) == -1) {
state.userCategories.push(category)
userCategoriesDB.updateDocument("userCategories", {
userCategories: [...state.userCategories],
})
state.categories = [...defaultCategories, ...state.userCategories]
state.categories.sort()
}
},
addYieldUnit(state, yieldUnit) {
let lowercase = state.yieldUnits.map((e) => e.toLowerCase())
if (lowercase.indexOf(yieldUnit.toLowerCase()) == -1) {
state.userYieldUnits.push(yieldUnit)
userYieldUnitsDB.updateDocument("userYieldUnits", {
userYieldUnits: [...state.userYieldUnits],
})
state.yieldUnits = [...defaultYieldUnits, ...state.userYieldUnits]
}
},
addMealPlan(state, {
event,
eventColor
}) {
state.mealPlans.push({
title: event.title,
startDate: event.startDate,
endDate: event.endDate,
eventColor,
})
deleteMealPlan(state, {title, startDate}) {
let mealPlan = state.mealPlans.filter(e => {
let sd = new Date(e.startDate).getTime();
return e.title === title && sd === startDate.getTime();
})[0];
let index = state.mealPlans.indexOf(mealPlan);
state.mealPlans.splice(index, 1);
state.mealPlans = [...state.mealPlans];
let mealPlans = mealPlansDB.getDocument("mealPlans").mealPlans;
mealPlans.splice(index, 1);
mealPlansDB.updateDocument("mealPlans", {
mealPlans: [...state.mealPlans],
})
mealPlans: [...mealPlans]
});
},
deleteRecipe(state, {
index,
id
}) {
getFileAccess().deleteFile(state.recipes[index].imageSrc)
state.recipes.splice(index, 1)
EnRecipesDB.deleteDocument(id)
state.recipes.forEach((e, i) => {
if (e.combinations.includes(id)) {
state.recipes[i].combinations.splice(e.combinations.indexOf(id), 1)
EnRecipesDB.updateDocument(state.recipes[i].id, state.recipes[i])
}
})
toggleState(state, {id, recipe, key, setDate}) {
let index = state.recipes.indexOf(state.recipes.filter(e => e.id === id)[0]);
state.recipes[index][key] = !state.recipes[index][key];
if (setDate)
state.recipes[index].lastTried = new Date();
EnRecipesDB.updateDocument(id, recipe);
},
deleteMealPlan(state, {
title,
startDate
}) {
let mealPlan = state.mealPlans.filter((e) => {
console.log(e.startDate, startDate)
let sd = new Date(e.startDate).getTime()
return e.title === title && sd === startDate.getTime()
})[0]
let index = state.mealPlans.indexOf(mealPlan)
state.mealPlans.splice(index, 1)
state.mealPlans = [...state.mealPlans]
let mealPlans = mealPlansDB.getDocument("mealPlans").mealPlans
mealPlans.splice(index, 1)
mealPlansDB.updateDocument("mealPlans", {
mealPlans: [...mealPlans],
})
},
overwriteRecipe(state, {
id,
recipe
}) {
let index = state.recipes.indexOf(state.recipes.filter((e) => e.id === id)[0])
Object.assign(state.recipes[index], recipe)
EnRecipesDB.updateDocument(id, recipe)
},
toggleState(state, {
id,
recipe,
key,
setDate
}) {
let index = state.recipes.indexOf(state.recipes.filter((e) => e.id === id)[0])
state.recipes[index][key] = !state.recipes[index][key]
if (setDate) state.recipes[index].lastTried = new Date()
EnRecipesDB.updateDocument(id, recipe)
},
setRecipeAsTried(state, {
id,
recipe
}) {
let index = state.recipes.indexOf(state.recipes.filter((e) => e.id === id)[0])
state.recipes[index].tried = true
state.recipes[index].lastTried = new Date()
EnRecipesDB.updateDocument(id, recipe)
setRecipeAsTried(state, {id, recipe}) {
let index = state.recipes.indexOf(state.recipes.filter(e => e.id === id)[0]);
state.recipes[index].tried = true;
state.recipes[index].lastTried = new Date();
EnRecipesDB.updateDocument(id, recipe);
},
setLastTriedDate(state, index) {
state.recipes[index].lastTried = new Date()
EnRecipesDB.updateDocument(state.recipes[index].id, state.recipes[index])
},
renameCategory(state, {
current,
updated
}) {
let lowercase = state.categories.map((e) => e.toLowerCase())
if (lowercase.indexOf(updated.toLowerCase()) == -1) {
state.userCategories.push(updated)
userCategoriesDB.updateDocument("userCategories", {
userCategories: [...state.userCategories],
})
state.categories = [...defaultCategories, ...state.userCategories]
state.categories.sort()
}
state.recipes.forEach((e, i) => {
if (e.category == current) {
state.recipes[i].category = updated
EnRecipesDB.inBatch(() => {
EnRecipesDB.updateDocument(state.recipes[i].id, state.recipes[i])
})
}
})
state.recipes[index].lastTried = new Date();
EnRecipesDB.updateDocument(state.recipes[index].id, state.recipes[index]);
},
setCurrentComponent(state, comp) {
state.currentComponent = comp
state.currentComponent = comp;
},
unSyncCombinations(state, {
id,
combinations
}) {
unSyncCombinations(state, {id, combinations}) {
state.recipes.forEach((e, i) => {
if (combinations.includes(e.id)) {
state.recipes[i].combinations.splice(e.combinations.indexOf(id), 1)
EnRecipesDB.updateDocument(state.recipes[i].id, state.recipes[i])
state.recipes[i].combinations.splice(e.combinations.indexOf(id), 1);
EnRecipesDB.updateDocument(state.recipes[i].id, state.recipes[i]);
}
});
},
setShake(state, shake) {
state.shakeEnabled = shake;
},
setRating(state, {id, recipe, rating}) {
let index = state.recipes.indexOf(state.recipes.filter(e => e.id === id)[0]);
state.recipes[index].rating = rating
EnRecipesDB.updateDocument(id, recipe);
},
unlinkBrokenImages(state) {
state.recipes.forEach((r, i) => {
if (r.imageSrc && !File.exists(r.imageSrc)) {
r.imageSrc = null
Object.assign(state.recipes[i], r);
EnRecipesDB.updateDocument(r.id, r);
}
})
},
}
},
actions: {
initializeRecipes({
setSortTypeAction({
commit
}) {
commit("initializeRecipes")
}, sortType) {
commit("setSortType", sortType)
},
initializeCategories({
commit
}) {
commit("initializeCategories")
},
initializeYieldUnits({
commit
}) {
commit("initializeYieldUnits")
},
initializeMealPlans({
commit
}) {
commit("initializeMealPlans")
initializeRecipes({commit}) {
commit("initializeRecipes");
},
importRecipesAction({
commit
}, recipes) {
commit("importRecipes", recipes)
},
importCategoriesAction({
commit
}, categories) {
commit("importCategories", categories)
},
importYieldUnitsAction({
commit
}, yieldUnits) {
commit("importYieldUnits", yieldUnits)
},
importMealPlansAction({
commit
}, mealPlans) {
commit("importMealPlans", mealPlans)
commit("importRecipes", recipes);
},
addRecipeAction({
commit
}, recipe) {
commit("addRecipe", recipe)
},
addYieldUnitAction({
commit
}, yieldUnit) {
commit("addYieldUnit", yieldUnit)
},
addCategoryAction({
commit
}, category) {
commit("addCategory", category)
},
addMealPlanAction({
commit
}, mealPlan) {
commit("addMealPlan", mealPlan)
},
deleteMealPlanAction({
commit
}, mealPlan) {
commit("deleteMealPlan", mealPlan)
},
deleteRecipeAction({
commit
}, recipe) {
commit("deleteRecipe", recipe)
commit("addRecipe", recipe);
},
overwriteRecipeAction({
commit
}, updatedRecipe) {
commit("overwriteRecipe", updatedRecipe)
commit("overwriteRecipe", updatedRecipe);
},
deleteRecipeAction({
commit
}, recipe) {
commit("deleteRecipe", recipe);
},
initializeListItems({commit}) {
commit("initializeListItems");
},
importListItemsAction({
commit
}, data) {
commit("importListItems", data);
},
addListItemAction({
commit
}, item) {
commit("addListItem", item);
},
removeListItemAction({
commit
}, item) {
commit("removeListItem", item);
},
resetListItemsAction({
commit
}, listName) {
commit("resetListItems", listName);
},
initializeMealPlans({commit}) {
commit("initializeMealPlans");
},
importMealPlansAction({
commit
}, mealPlans) {
commit("importMealPlans", mealPlans);
},
addMealPlanAction({
commit
}, mealPlan) {
commit("addMealPlan", mealPlan);
},
deleteMealPlanAction({
commit
}, mealPlan) {
commit("deleteMealPlan", mealPlan);
},
toggleStateAction({
commit
}, toggledRecipe) {
commit("toggleState", toggledRecipe)
commit("toggleState", toggledRecipe);
},
setRecipeAsTriedAction({
commit
}, recipe) {
commit("setRecipeAsTried", recipe)
commit("setRecipeAsTried", recipe);
},
setLastTriedDateAction({
commit
}, index) {
commit("setLastTriedDate", index)
},
renameCategoryAction({
commit
}, category) {
commit("renameCategory", category)
commit("setLastTriedDate", index);
},
setCurrentComponentAction({
commit
}, comp) {
commit("setCurrentComponent", comp)
commit("setCurrentComponent", comp);
},
unSyncCombinationsAction({
commit
}, combinations) {
commit("unSyncCombinations", combinations)
commit("unSyncCombinations", combinations);
},
},
})
setShakeAction({
commit
}, shake) {
commit("setShake", shake);
},
setRatingAction({
commit
}, rating) {
commit("setRating", rating);
},
unlinkBrokenImages({commit}) {
commit("unlinkBrokenImages");
}
}
});

View file

@ -1,166 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="scale(-237.34) rotate(45 1.43 -2.487)" spreadMethod="pad" id="b">
<stop offset="0" stop-color="#00a0ff" />
<stop offset=".007" stop-color="#00a1ff" />
<stop offset=".26" stop-color="#00beff" />
<stop offset=".512" stop-color="#00d2ff" />
<stop offset=".76" stop-color="#00dfff" />
<stop offset="1" stop-color="#00e3ff" />
</linearGradient>
<linearGradient x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="rotate(180 219.172 149.993) scale(241.97)" spreadMethod="pad" id="d">
<stop offset="0" stop-color="#ffe000" />
<stop offset=".409" stop-color="#ffbd00" />
<stop offset=".775" stop-color="orange" />
<stop offset="1" stop-color="#ff9c00" />
</linearGradient>
<linearGradient x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="rotate(-135 231.512 66.39) scale(321.851)" spreadMethod="pad" id="f">
<stop offset="0" stop-color="#ff3a44" />
<stop offset="1" stop-color="#c31162" />
</linearGradient>
<linearGradient x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="scale(143.72) rotate(-45 4.786 .28)" spreadMethod="pad" id="h">
<stop offset="0" stop-color="#32a071" />
<stop offset=".069" stop-color="#2da771" />
<stop offset=".476" stop-color="#15cf74" />
<stop offset=".801" stop-color="#06e775" />
<stop offset="1" stop-color="#00f076" />
</linearGradient>
<linearGradient x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="rotate(180 219.172 149.993) scale(241.97)" spreadMethod="pad" id="j">
<stop offset="0" stop-color="#ccb300" />
<stop offset=".409" stop-color="#cc9700" />
<stop offset=".775" stop-color="#cc8400" />
<stop offset="1" stop-color="#cc7d00" />
</linearGradient>
<linearGradient x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="rotate(-135 231.512 66.39) scale(321.851)" spreadMethod="pad" id="l">
<stop offset="0" stop-color="#cc2e36" />
<stop offset="1" stop-color="#9c0e4e" />
</linearGradient>
<linearGradient x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="scale(-237.34) rotate(45 1.43 -2.487)" spreadMethod="pad" id="n">
<stop offset="0" stop-color="#008de0" />
<stop offset=".007" stop-color="#008de0" />
<stop offset=".26" stop-color="#00a7e0" />
<stop offset=".512" stop-color="#00b8e0" />
<stop offset=".76" stop-color="#00c4e0" />
<stop offset="1" stop-color="#00c7e0" />
</linearGradient>
<linearGradient x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="rotate(-135 231.512 66.39) scale(321.851)" spreadMethod="pad" id="p">
<stop offset="0" stop-color="#e0333c" />
<stop offset="1" stop-color="#ab0f56" />
</linearGradient>
<linearGradient x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="rotate(180 219.172 149.993) scale(241.97)" spreadMethod="pad" id="r">
<stop offset="0" stop-color="#e0c500" />
<stop offset=".409" stop-color="#e0a600" />
<stop offset=".775" stop-color="#e09100" />
<stop offset="1" stop-color="#e08900" />
</linearGradient>
<linearGradient x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="rotate(180 219.172 149.993) scale(241.97)" spreadMethod="pad" id="t">
<stop offset="0" stop-color="#ffe840" />
<stop offset=".409" stop-color="#ffce40" />
<stop offset=".775" stop-color="#ffbc40" />
<stop offset="1" stop-color="#ffb540" />
</linearGradient>
<linearGradient x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="scale(-237.34) rotate(45 1.43 -2.487)" spreadMethod="pad" id="v">
<stop offset="0" stop-color="#40b8ff" />
<stop offset=".007" stop-color="#40b9ff" />
<stop offset=".26" stop-color="#40ceff" />
<stop offset=".512" stop-color="#40ddff" />
<stop offset=".76" stop-color="#40e7ff" />
<stop offset="1" stop-color="#40eaff" />
</linearGradient>
<linearGradient x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="scale(143.72) rotate(-45 4.786 .28)" spreadMethod="pad" id="x">
<stop offset="0" stop-color="#65b895" />
<stop offset=".069" stop-color="#62bd95" />
<stop offset=".476" stop-color="#50db97" />
<stop offset=".801" stop-color="#44ed98" />
<stop offset="1" stop-color="#40f498" />
</linearGradient>
<clipPath clipPathUnits="userSpaceOnUse" id="a">
<path d="M205.098 176.105l-.743.711c-2.91 3.079-4.628 7.86-4.628 14.051v-1.457V410.566v-1.461c0 6.704 2.003 11.754 5.359 14.782l123.898-123.895-123.886-123.887M199.77 412.27c0 .007 0 .015.003.023-.003-.008-.003-.016-.003-.023m.003.07v0" />
</clipPath>
<clipPath clipPathUnits="userSpaceOnUse" id="c">
<path d="M370.277 257.215l.942.535 48.929 27.801c4.665 2.652 7.774 5.867 9.325 9.269-1.547-3.402-4.657-6.621-9.325-9.273l-48.929-27.801-.942-.531m.012 1.465l-41.305 41.312 41.301 41.305 49.863-28.328c6.332-3.598 9.887-8.235 10.481-12.973v-.019c-.594-4.727-4.149-9.368-10.481-12.965l-49.859-28.332" />
</clipPath>
<clipPath clipPathUnits="userSpaceOnUse" id="e">
<path d="M213.93 171.387c-3.461 0-6.481 1.125-8.836 3.25l.004.004c2.355-2.125 5.379-3.254 8.84-3.254a18.869 18.869 0 01-.008 0m.004 1.465c-3.461-.004-6.481 1.125-8.836 3.25v.003l123.886 123.887 41.305-41.312-145.152-82.473c-4.016-2.277-7.821-3.355-11.203-3.355m-8.871 1.812c-.219.199-.434.41-.645.629l.645-.629" />
</clipPath>
<clipPath clipPathUnits="userSpaceOnUse" id="g">
<path d="M328.984 299.992L205.086 423.887c2.355 2.121 5.371 3.246 8.828 3.246 3.391 0 7.199-1.082 11.223-3.363l145.148-82.473-41.301-41.305m42.235 42.238l-146.082 83c-4.024 2.282-7.832 3.364-11.223 3.364h-.043.059c3.383 0 7.187-1.078 11.207-3.36l146.082-83.004M213.84 428.594" />
</clipPath>
<clipPath clipPathUnits="userSpaceOnUse" id="i">
<path d="M370.277 257.215l.942.535-.942-.535" />
</clipPath>
<clipPath clipPathUnits="userSpaceOnUse" id="k">
<path d="M213.938 171.387c-3.461 0-6.485 1.129-8.84 3.254l-.004-.004a.286.286 0 01-.031.027l-.645.629c-.02.02-.039.043-.063.066l.743.743c2.355-2.125 5.375-3.254 8.836-3.25 3.382 0 7.187 1.078 11.203 3.355l145.152 82.473.93-.93-.942-.535-145.14-82.469c-3.66-2.074-7.141-3.156-10.285-3.336a18.869 18.869 0 00-.914-.023" />
</clipPath>
<clipPath clipPathUnits="userSpaceOnUse" id="m">
<path d="M204.355 175.359c-2.91 3.079-4.628 7.856-4.628 14.051v1.457c0-6.191 1.718-10.972 4.628-14.051l.743-.711-.743-.746" />
</clipPath>
<clipPath clipPathUnits="userSpaceOnUse" id="o">
<path d="M204.355 175.359l.743.746v-.003l-.743-.743" />
</clipPath>
<clipPath clipPathUnits="userSpaceOnUse" id="q">
<path d="M371.219 257.75l-.93.93 49.859 28.332c6.332 3.597 9.887 8.238 10.481 12.965 0-1.735-.387-3.469-1.156-5.157-1.551-3.402-4.66-6.617-9.325-9.269l-48.929-27.801" />
</clipPath>
<clipPath clipPathUnits="userSpaceOnUse" id="s">
<path d="M430.629 299.996c-.594 4.738-4.149 9.375-10.481 12.973l-49.863 28.328.93.93h.004l48.929-27.801c6.981-3.969 10.477-9.199 10.481-14.43" />
</clipPath>
<clipPath clipPathUnits="userSpaceOnUse" id="u">
<path d="M199.727 409.105v1.528c0 .551.015 1.09.043 1.613v.024c0 .007 0 .015.003.023v.059c.301 5.332 1.957 9.492 4.582 12.269l.731-.734c-3.356-3.028-5.359-8.078-5.359-14.782m5.339 16.215l.028.028c-.008-.012-.02-.02-.028-.028" />
</clipPath>
<clipPath clipPathUnits="userSpaceOnUse" id="w">
<path d="M370.285 341.297L225.137 423.77c-4.024 2.281-7.832 3.363-11.223 3.363-3.457 0-6.473-1.125-8.828-3.246l-.731.734c.231.242.465.477.711.699l.028.024c2.336 2.105 5.32 3.23 8.746 3.25h.074c3.391 0 7.199-1.082 11.223-3.364l146.082-83-.004-.003-.93-.93" />
</clipPath>
</defs>
<path d="M186.667 66.667H20c-3.667 0-6.667-3-6.667-6.667V20c0-3.667 3-6.667 6.667-6.667h166.667c3.666 0 6.666 3 6.666 6.667v40c0 3.667-3 6.667-6.666 6.667" />
<path d="M186.667 13.333H20c-3.667 0-6.667 3-6.667 6.667v40c0 3.667 3 6.667 6.667 6.667h166.667c3.666 0 6.666-3 6.666-6.667V20c0-3.667-3-6.667-6.666-6.667m0 1.067c3.088 0 5.6 2.513 5.6 5.6v40c0 3.088-2.512 5.6-5.6 5.6H20a5.607 5.607 0 01-5.6-5.6V20c0-3.087 2.513-5.6 5.6-5.6h166.667" fill="#a6a6a6" />
<path d="M76.558 26.991c0 1.117-.33 2.007-.993 2.67-.753.79-1.734 1.184-2.94 1.184-1.154 0-2.136-.4-2.943-1.2-.81-.801-1.213-1.794-1.213-2.978 0-1.185.404-2.177 1.213-2.978.807-.801 1.789-1.202 2.943-1.202.573 0 1.122.112 1.643.336.52.224.938.521 1.25.894l-.702.703c-.53-.633-1.26-.949-2.19-.949-.843 0-1.57.296-2.185.888-.615.593-.922 1.362-.922 2.308 0 .946.307 1.714.922 2.307a3.042 3.042 0 002.184.888c.894 0 1.639-.297 2.235-.893.387-.388.61-.928.67-1.62h-2.905v-.962h3.877c.038.21.056.41.056.604" fill="#fff" />
<path d="M76.558 26.991h-.133c-.002 1.092-.32 1.94-.955 2.576l-.001.001v.001c-.73.762-1.666 1.141-2.844 1.143-1.123-.002-2.064-.385-2.85-1.162-.783-.779-1.17-1.73-1.172-2.883.001-1.155.389-2.105 1.172-2.883.786-.778 1.727-1.162 2.85-1.163.556 0 1.085.108 1.59.324.505.218.904.503 1.202.858l.102-.086-.094-.095-.704.705.095.093.102-.085c-.554-.664-1.332-.999-2.293-.997a3.175 3.175 0 00-2.277.926c-.641.616-.964 1.428-.963 2.403 0 .974.322 1.786.963 2.403a3.175 3.175 0 002.277.925c.923.002 1.71-.311 2.33-.932.413-.415.647-.989.709-1.703l.012-.145h-2.917v-.694h3.743v-.134l-.131.024c.036.202.054.394.054.58h.266c0-.202-.019-.41-.058-.627l-.02-.11h-4.12V27.482h3.038v-.134l-.133-.011c-.059.67-.273 1.176-.632 1.538-.573.57-1.276.852-2.14.854-.811-.001-1.5-.28-2.093-.85-.587-.57-.88-1.295-.88-2.212 0-.918.293-1.644.88-2.212.594-.57 1.282-.85 2.092-.85.902.002 1.583.3 2.089.901l.093.112.806-.807.086-.086-.078-.094c-.328-.39-.764-.7-1.3-.93a4.259 4.259 0 00-1.696-.347c-1.185 0-2.208.416-3.038 1.24-.832.823-1.252 1.858-1.251 3.073-.001 1.214.419 2.25 1.252 3.073.83.824 1.852 1.24 3.037 1.239 1.235 0 2.259-.41 3.036-1.225l-.096-.093.094.095c.69-.69 1.033-1.623 1.032-2.765h-.133M82.704 23.65H79.06v2.536h3.286v.961H79.06v2.537h3.644v.983h-4.67v-8h4.67v.982" fill="#fff" />
<path d="M82.704 23.65v-.134h-3.777v2.803h3.286v.695h-3.286v2.803h3.643v.716h-4.403V22.8h4.403v.85h.134v-.134.133h.133v-1.116H77.9V30.8h4.937v-1.249h-3.643v-2.27h3.285v-1.228h-3.285v-2.27h3.643v-.134h-.133M87.039 30.667h-1.03v-7.018h-2.234v-.982h5.498v.982h-2.234v7.018" fill="#fff" />
<path d="M87.039 30.667v-.134h-.896v-7.017H83.91V22.8h5.23v.716h-2.234v7.15h.134v-.133.134h.133v-6.884h2.234v-1.25h-5.764v1.25h2.235V30.8h1.295v-.133h-.133M93.25 30.667v-8h1.028v8h-1.027" fill="#fff" />
<path d="M93.25 30.667h.134V22.8h.76v7.733h-.893v.134h.133-.133v.133h1.16v-8.267h-1.294V30.8h.134v-.133M98.838 30.667h-1.029v-7.018h-2.234v-.982h5.497v.982h-2.234v7.018" fill="#fff" />
<path d="M98.838 30.667v-.134h-.895v-7.017h-2.235V22.8h5.231v.716h-2.234v7.15h.133v-.133.134h.133v-6.884h2.235v-1.25h-5.764v1.25h2.234V30.8h1.295v-.133h-.133M106.372 28.963c.593.6 1.317.899 2.174.899s1.582-.3 2.173-.899c.592-.6.89-1.366.89-2.296 0-.931-.298-1.697-.89-2.297-.591-.6-1.316-.899-2.173-.899s-1.581.3-2.174.9c-.59.599-.888 1.365-.888 2.296 0 .93.297 1.697.888 2.296zm5.107.67c-.786.809-1.764 1.212-2.933 1.212-1.17 0-2.148-.403-2.932-1.212-.787-.808-1.18-1.797-1.18-2.966 0-1.17.393-2.159 1.18-2.966.784-.81 1.762-1.214 2.932-1.214 1.162 0 2.138.407 2.928 1.219s1.184 1.799 1.184 2.96c0 1.17-.394 2.159-1.179 2.967" fill="#fff" />
<path d="M106.372 28.963l-.094.094c.614.623 1.38.94 2.268.938.887.002 1.655-.315 2.268-.938.618-.624.929-1.432.928-2.39 0-.96-.31-1.766-.928-2.39-.613-.624-1.38-.94-2.268-.939-.888-.002-1.654.315-2.268.939-.617.624-.929 1.43-.927 2.39-.002.958.31 1.766.927 2.39l.094-.094.095-.094c-.565-.575-.848-1.3-.85-2.202.002-.903.285-1.627.85-2.203.571-.575 1.253-.858 2.079-.86.825.002 1.509.285 2.078.86.567.576.85 1.3.85 2.203 0 .903-.283 1.627-.85 2.202-.57.576-1.253.858-2.078.86-.826-.002-1.508-.284-2.079-.86zm5.107.67l-.095-.093c-.765.783-1.7 1.17-2.838 1.172-1.14-.002-2.074-.389-2.837-1.172l-.004-.004.004.004c-.763-.786-1.14-1.734-1.14-2.873 0-1.14.377-2.088 1.14-2.874.763-.783 1.698-1.17 2.837-1.172 1.131.001 2.064.39 2.833 1.178.765.79 1.144 1.736 1.146 2.868-.002 1.14-.38 2.087-1.141 2.873l.095.093.096.092c.808-.83 1.217-1.86 1.216-3.058.001-1.192-.41-2.22-1.221-3.054-.813-.837-1.83-1.26-3.024-1.259-1.2-.001-2.22.42-3.028 1.254-.81.83-1.217 1.86-1.216 3.059-.001 1.199.406 2.228 1.216 3.059l.003.004-.003-.005c.807.834 1.828 1.255 3.028 1.254 1.2 0 2.22-.42 3.03-1.254l-.097-.092M114.1 30.667v-8h1.252l3.888 6.223h.044l-.044-1.542v-4.681h1.028v8h-1.073l-4.067-6.525h-.045l.045 1.542v4.983H114.1" fill="#fff" />
<path d="M114.1 30.667h.134V22.8h1.044l3.888 6.223h.255l-.048-1.677V22.8h.762v7.733h-.866l-4.067-6.525h-.256l.048 1.678v4.847h-.893v.134h.133-.133v.133h1.16v-5.118l-.044-1.544-.134.004v.133h.045v-.133l-.113.07 4.106 6.588H120.402v-8.267H119.106v4.817l.045 1.544.133-.004v-.133h-.044v.133l.113-.07-3.928-6.287H113.967V30.8h.134v-.133M155.915 53.333h2.488V36.665h-2.488zm22.409-10.664l-2.852 7.227h-.085l-2.96-7.227h-2.68l4.438 10.1-2.53 5.619h2.596l6.84-15.719zm-14.11 8.771c-.815 0-1.951-.407-1.951-1.415 0-1.287 1.416-1.78 2.637-1.78 1.095 0 1.608.236 2.273.558-.193 1.543-1.522 2.637-2.958 2.637zm.3-9.135c-1.8 0-3.666.793-4.438 2.552l2.208.922c.472-.922 1.35-1.223 2.273-1.223 1.287 0 2.595.773 2.616 2.145v.171c-.45-.257-1.414-.643-2.594-.643-2.38 0-4.804 1.308-4.804 3.753 0 2.23 1.952 3.667 4.138 3.667 1.674 0 2.595-.75 3.175-1.63h.085v1.287h2.402v-6.39c0-2.96-2.208-4.611-5.06-4.611zm-15.375 2.393H145.6v-5.713h3.539c1.86 0 2.916 1.54 2.916 2.857 0 1.291-1.056 2.856-2.916 2.856zm-.064-8.033h-5.962v16.668h2.487v-6.315h3.475c2.757 0 5.468-1.996 5.468-5.176s-2.711-5.177-5.468-5.177zm-32.508 14.778c-1.72 0-3.158-1.439-3.158-3.415 0-1.998 1.439-3.459 3.158-3.459 1.697 0 3.028 1.461 3.028 3.459 0 1.976-1.331 3.415-3.028 3.415zm2.856-7.84h-.086c-.558-.666-1.632-1.268-2.985-1.268-2.836 0-5.435 2.492-5.435 5.693 0 3.179 2.6 5.65 5.435 5.65 1.353 0 2.427-.603 2.985-1.29h.086v.817c0 2.17-1.16 3.33-3.028 3.33-1.525 0-2.47-1.096-2.858-2.02l-2.169.902c.623 1.504 2.277 3.351 5.027 3.351 2.921 0 5.391-1.719 5.391-5.907V42.679h-2.363zm4.082 9.73h2.491V36.665h-2.491zm6.165-5.499c-.065-2.19 1.697-3.307 2.964-3.307.989 0 1.826.493 2.105 1.203zm7.733-1.89c-.472-1.267-1.912-3.609-4.855-3.609-2.921 0-5.349 2.299-5.349 5.671 0 3.18 2.406 5.671 5.628 5.671 2.6 0 4.104-1.59 4.726-2.513l-1.933-1.29c-.644.946-1.525 1.57-2.793 1.57-1.267 0-2.17-.58-2.75-1.72l7.583-3.135zm-60.411-1.869v2.406h5.756c-.171 1.353-.623 2.341-1.31 3.029-.837.838-2.148 1.761-4.446 1.761-3.545 0-6.315-2.856-6.315-6.4 0-3.545 2.77-6.402 6.315-6.402 1.912 0 3.307.752 4.339 1.718l1.697-1.696c-1.44-1.375-3.351-2.428-6.036-2.428-4.855 0-8.936 3.953-8.936 8.807 0 4.855 4.08 8.807 8.936 8.807 2.62 0 4.597-.859 6.143-2.47 1.59-1.59 2.084-3.824 2.084-5.628 0-.559-.043-1.074-.13-1.504zm14.772 7.368c-1.72 0-3.201-1.418-3.201-3.437 0-2.04 1.482-3.437 3.2-3.437 1.719 0 3.201 1.397 3.201 3.437 0 2.02-1.482 3.437-3.2 3.437zm0-9.108c-3.137 0-5.693 2.385-5.693 5.671 0 3.265 2.556 5.671 5.693 5.671 3.135 0 5.692-2.406 5.692-5.67 0-3.287-2.557-5.672-5.692-5.672zm12.417 9.108c-1.718 0-3.2-1.418-3.2-3.437 0-2.04 1.482-3.437 3.2-3.437 1.718 0 3.2 1.397 3.2 3.437 0 2.02-1.482 3.437-3.2 3.437zm0-9.108c-3.136 0-5.692 2.385-5.692 5.671 0 3.265 2.556 5.671 5.692 5.671s5.692-2.406 5.692-5.67c0-3.287-2.556-5.672-5.692-5.672" fill="#fff" />
<g clip-path="url(#a)" transform="matrix(.13333 0 0 -.13333 0 80)">
<path d="M205.098 176.105l-.743.711c-2.91 3.079-4.628 7.86-4.628 14.051v-1.457V410.566v-1.461c0 6.704 2.003 11.754 5.359 14.782l123.898-123.895-123.886-123.887M199.77 412.27c0 .007 0 .015.003.023-.003-.008-.003-.016-.003-.023m.003.07v0" fill="url(#b)" />
</g>
<g clip-path="url(#c)" transform="matrix(.13333 0 0 -.13333 0 80)">
<path d="M370.277 257.215l.942.535 48.929 27.801c4.665 2.652 7.774 5.867 9.325 9.269-1.547-3.402-4.657-6.621-9.325-9.273l-48.929-27.801-.942-.531m.012 1.465l-41.305 41.312 41.301 41.305 49.863-28.328c6.332-3.598 9.887-8.235 10.481-12.973v-.019c-.594-4.727-4.149-9.368-10.481-12.965l-49.859-28.332" fill="url(#d)" />
</g>
<g clip-path="url(#e)" transform="matrix(.13333 0 0 -.13333 0 80)">
<path d="M213.93 171.387c-3.461 0-6.481 1.125-8.836 3.25l.004.004c2.355-2.125 5.379-3.254 8.84-3.254a18.869 18.869 0 01-.008 0m.004 1.465c-3.461-.004-6.481 1.125-8.836 3.25v.003l123.886 123.887 41.305-41.312-145.152-82.473c-4.016-2.277-7.821-3.355-11.203-3.355m-8.871 1.812c-.219.199-.434.41-.645.629l.645-.629" fill="url(#f)" />
</g>
<g clip-path="url(#g)" transform="matrix(.13333 0 0 -.13333 0 80)">
<path d="M328.984 299.992L205.086 423.887c2.355 2.121 5.371 3.246 8.828 3.246 3.391 0 7.199-1.082 11.223-3.363l145.148-82.473-41.301-41.305m42.235 42.238l-146.082 83c-4.024 2.282-7.832 3.364-11.223 3.364h-.043.059c3.383 0 7.187-1.078 11.207-3.36l146.082-83.004M213.84 428.594" fill="url(#h)" />
</g>
<path d="M28.647 57.145c.42-.024.883-.168 1.371-.444L49.37 45.705 30.018 56.7c-.487.277-.952.42-1.371.444m-1.301-.43l-.004-.004a.038.038 0 01.004.004m-.09-.087l-.009-.009.009.009" />
<g clip-path="url(#i)" transform="matrix(.13333 0 0 -.13333 0 80)">
<path d="M370.277 257.215l.942.535-.942-.535" fill="url(#j)" />
</g>
<g clip-path="url(#k)" transform="matrix(.13333 0 0 -.13333 0 80)">
<path d="M213.938 171.387c-3.461 0-6.485 1.129-8.84 3.254l-.004-.004a.286.286 0 01-.031.027l-.645.629c-.02.02-.039.043-.063.066l.743.743c2.355-2.125 5.375-3.254 8.836-3.25 3.382 0 7.187 1.078 11.203 3.355l145.152 82.473.93-.93-.942-.535-145.14-82.469c-3.66-2.074-7.141-3.156-10.285-3.336a18.869 18.869 0 00-.914-.023" fill="url(#l)" />
</g>
<path d="M27.247 56.62c-.388-.411-.617-1.049-.617-1.874 0 .825.23 1.462.617 1.873" />
<g clip-path="url(#m)" transform="matrix(.13333 0 0 -.13333 0 80)">
<path d="M204.355 175.359c-2.91 3.079-4.628 7.856-4.628 14.051v1.457c0-6.191 1.718-10.972 4.628-14.051l.743-.711-.743-.746" fill="url(#n)" />
</g>
<g clip-path="url(#o)" transform="matrix(.13333 0 0 -.13333 0 80)">
<path d="M204.355 175.359l.743.746v-.003l-.743-.743" fill="url(#p)" />
</g>
<path d="M57.263 40.69a1.655 1.655 0 010 0" />
<g clip-path="url(#q)" transform="matrix(.13333 0 0 -.13333 0 80)">
<path d="M371.219 257.75l-.93.93 49.859 28.332c6.332 3.597 9.887 8.238 10.481 12.965 0-1.735-.387-3.469-1.156-5.157-1.551-3.402-4.66-6.617-9.325-9.269l-48.929-27.801" fill="url(#r)" />
</g>
<path d="M57.417 40.001c0-.698-.466-1.395-1.397-1.924l-6.524-3.707 6.524 3.706c.932.53 1.398 1.228 1.397 1.925" fill="#404040" />
<g clip-path="url(#s)" transform="matrix(.13333 0 0 -.13333 0 80)">
<path d="M430.629 299.996c-.594 4.738-4.149 9.375-10.481 12.973l-49.863 28.328.93.93h.004l48.929-27.801c6.981-3.969 10.477-9.199 10.481-14.43" fill="url(#t)" />
</g>
<path d="M26.63 25.25v-.001.002m.006-.217v-.003.003m0-.006v-.007.007m0-.008c.078-1.37.822-2.161 1.876-2.166a1.715 1.715 0 00-1.166.433l-.004.004c-.033.03-.064.06-.095.093-.35.37-.57.925-.61 1.636" fill="#404040" />
<g clip-path="url(#u)" transform="matrix(.13333 0 0 -.13333 0 80)">
<path d="M199.727 409.105v1.528c0 .551.015 1.09.043 1.613v.024c0 .007 0 .015.003.023v.059c.301 5.332 1.957 9.492 4.582 12.269l.731-.734c-3.356-3.028-5.359-8.078-5.359-14.782m5.339 16.215l.028.028c-.008-.012-.02-.02-.028-.028" fill="url(#v)" />
</g>
<path d="M28.512 22.854h.004-.004" fill="#404040" />
<g clip-path="url(#w)" transform="matrix(.13333 0 0 -.13333 0 80)">
<path d="M370.285 341.297L225.137 423.77c-4.024 2.281-7.832 3.363-11.223 3.363-3.457 0-6.473-1.125-8.828-3.246l-.731.734c.231.242.465.477.711.699l.028.024c2.336 2.105 5.32 3.23 8.746 3.25h.074c3.391 0 7.199-1.082 11.223-3.364l146.082-83-.004-.003-.93-.93" fill="url(#x)" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 19 KiB

View file

@ -1,2 +1,2 @@
- Fixed: Ingredients unit getting reset on save
- Added app language: Deutsch
- Added app language: German

View file

@ -0,0 +1,12 @@
- New: Add cuisine and tags to your recipes along with category
- New: Rate and set difficulty level to your recipes
- New: Shake device to view random recipe (can be disabled under settings)
- Improvement: Search your recipes by name, ingredient or tag
- Improvement: Add or delete cuisines, categories, yield units, units
- Improvement: More sorting options
- Improvement: Now you can see the created and last updated time of a recipe
- Added app languages: Danish, Dutch, Portuguese, Russian and Spanish
- Removed: Categories rename feature
- Updated translations
- Several UI improvements and bug fixes
- Note: Recipes created with previous versions of this app will not display accurate created date, my apologies for that

View file

@ -5,7 +5,7 @@ EnRecipes is an easy to use, privacy-friendly digital cookbook that lets you cre
* Create recipes quickly
* Add photo, notes and combinations to your recipes
* Organise your recipes by category
* Quickly search for your recipes
* Quickly search for your recipes either by name or ingredient
* Mark recipes as favourites and add them to your Try Later list
* Scale your recipe ingredients to serve more or less people
* Get notified of when you last tried a recipe

491
package-lock.json generated
View file

@ -35,31 +35,30 @@
}
},
"@babel/compat-data": {
"version": "7.12.5",
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.12.5.tgz",
"integrity": "sha512-DTsS7cxrsH3by8nqQSpFSyjSfSYl57D6Cf4q8dW3LK83tBKBDCkfcay1nYkXq1nIHXnpX8WMMb/O25HOy3h1zg==",
"version": "7.12.7",
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.12.7.tgz",
"integrity": "sha512-YaxPMGs/XIWtYqrdEOZOCPsVWfEoriXopnsz3/i7apYPXQ3698UFhS6dVT1KN5qOsWmVgw/FOrmQgpRaZayGsw==",
"dev": true
},
"@babel/core": {
"version": "7.12.3",
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.3.tgz",
"integrity": "sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g==",
"version": "7.12.10",
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.10.tgz",
"integrity": "sha512-eTAlQKq65zHfkHZV0sIVODCPGVgoo1HdBlbSLi9CqOzuZanMv2ihzY+4paiKr1mH+XmYESMAmJ/dpZ68eN6d8w==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.10.4",
"@babel/generator": "^7.12.1",
"@babel/generator": "^7.12.10",
"@babel/helper-module-transforms": "^7.12.1",
"@babel/helpers": "^7.12.1",
"@babel/parser": "^7.12.3",
"@babel/template": "^7.10.4",
"@babel/traverse": "^7.12.1",
"@babel/types": "^7.12.1",
"@babel/helpers": "^7.12.5",
"@babel/parser": "^7.12.10",
"@babel/template": "^7.12.7",
"@babel/traverse": "^7.12.10",
"@babel/types": "^7.12.10",
"convert-source-map": "^1.7.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.1",
"json5": "^2.1.2",
"lodash": "^4.17.19",
"resolve": "^1.3.2",
"semver": "^5.4.1",
"source-map": "^0.5.0"
},
@ -73,12 +72,12 @@
}
},
"@babel/generator": {
"version": "7.12.5",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.5.tgz",
"integrity": "sha512-m16TQQJ8hPt7E+OS/XVQg/7U184MLXtvuGbCdA7na61vha+ImkyyNM/9DDA0unYCVZn3ZOhng+qz48/KBOT96A==",
"version": "7.12.11",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.11.tgz",
"integrity": "sha512-Ggg6WPOJtSi8yYQvLVjG8F/TlpWDlKx0OpS4Kt+xMQPs5OaGYWy+v1A+1TvxI6sAMGZpKWWoAQ1DaeQbImlItA==",
"dev": true,
"requires": {
"@babel/types": "^7.12.5",
"@babel/types": "^7.12.11",
"jsesc": "^2.5.1",
"source-map": "^0.5.0"
},
@ -92,12 +91,12 @@
}
},
"@babel/helper-annotate-as-pure": {
"version": "7.10.4",
"resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz",
"integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==",
"version": "7.12.10",
"resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.10.tgz",
"integrity": "sha512-XplmVbC1n+KY6jL8/fgLVXXUauDIB+lD5+GsQEh6F6GBF1dq1qy4DP4yXWzDKcoqXB3X58t61e85Fitoww4JVQ==",
"dev": true,
"requires": {
"@babel/types": "^7.10.4"
"@babel/types": "^7.12.10"
}
},
"@babel/helper-builder-binary-assignment-operator-visitor": {
@ -136,13 +135,12 @@
}
},
"@babel/helper-create-regexp-features-plugin": {
"version": "7.12.1",
"resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.1.tgz",
"integrity": "sha512-rsZ4LGvFTZnzdNZR5HZdmJVuXK8834R5QkF3WvcnBhrlVtF0HSIUC6zbreL9MgjTywhKokn8RIYRiq99+DLAxA==",
"version": "7.12.7",
"resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.7.tgz",
"integrity": "sha512-idnutvQPdpbduutvi3JVfEgcVIHooQnhvhx0Nk9isOINOIGYkZea1Pk2JlJRiUnMefrlvr0vkByATBY/mB4vjQ==",
"dev": true,
"requires": {
"@babel/helper-annotate-as-pure": "^7.10.4",
"@babel/helper-regex": "^7.10.4",
"regexpu-core": "^4.7.1"
}
},
@ -167,23 +165,23 @@
}
},
"@babel/helper-function-name": {
"version": "7.10.4",
"resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz",
"integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==",
"version": "7.12.11",
"resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.11.tgz",
"integrity": "sha512-AtQKjtYNolKNi6nNNVLQ27CP6D9oFR6bq/HPYSizlzbp7uC1M59XJe8L+0uXjbIaZaUJF99ruHqVGiKXU/7ybA==",
"dev": true,
"requires": {
"@babel/helper-get-function-arity": "^7.10.4",
"@babel/template": "^7.10.4",
"@babel/types": "^7.10.4"
"@babel/helper-get-function-arity": "^7.12.10",
"@babel/template": "^7.12.7",
"@babel/types": "^7.12.11"
}
},
"@babel/helper-get-function-arity": {
"version": "7.10.4",
"resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz",
"integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==",
"version": "7.12.10",
"resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.10.tgz",
"integrity": "sha512-mm0n5BPjR06wh9mPQaDdXWDoll/j5UpCAPl1x8fS71GHm7HA6Ua2V4ylG1Ju8lvcTOietbPNNPaSilKj+pj+Ag==",
"dev": true,
"requires": {
"@babel/types": "^7.10.4"
"@babel/types": "^7.12.10"
}
},
"@babel/helper-hoist-variables": {
@ -196,12 +194,12 @@
}
},
"@babel/helper-member-expression-to-functions": {
"version": "7.12.1",
"resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.1.tgz",
"integrity": "sha512-k0CIe3tXUKTRSoEx1LQEPFU9vRQfqHtl+kf8eNnDqb4AUJEy5pz6aIiog+YWtVm2jpggjS1laH68bPsR+KWWPQ==",
"version": "7.12.7",
"resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz",
"integrity": "sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw==",
"dev": true,
"requires": {
"@babel/types": "^7.12.1"
"@babel/types": "^7.12.7"
}
},
"@babel/helper-module-imports": {
@ -231,12 +229,12 @@
}
},
"@babel/helper-optimise-call-expression": {
"version": "7.10.4",
"resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz",
"integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==",
"version": "7.12.10",
"resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.10.tgz",
"integrity": "sha512-4tpbU0SrSTjjt65UMWSrUOPZTsgvPgGG4S8QSTNHacKzpS51IVWGDj0yCwyeZND/i+LSN2g/O63jEXEWm49sYQ==",
"dev": true,
"requires": {
"@babel/types": "^7.10.4"
"@babel/types": "^7.12.10"
}
},
"@babel/helper-plugin-utils": {
@ -245,15 +243,6 @@
"integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==",
"dev": true
},
"@babel/helper-regex": {
"version": "7.10.5",
"resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.5.tgz",
"integrity": "sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg==",
"dev": true,
"requires": {
"lodash": "^4.17.19"
}
},
"@babel/helper-remap-async-to-generator": {
"version": "7.12.1",
"resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz",
@ -266,15 +255,15 @@
}
},
"@babel/helper-replace-supers": {
"version": "7.12.5",
"resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.5.tgz",
"integrity": "sha512-5YILoed0ZyIpF4gKcpZitEnXEJ9UoDRki1Ey6xz46rxOzfNMAhVIJMoune1hmPVxh40LRv1+oafz7UsWX+vyWA==",
"version": "7.12.11",
"resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.11.tgz",
"integrity": "sha512-q+w1cqmhL7R0FNzth/PLLp2N+scXEK/L2AHbXUyydxp828F4FEa5WcVoqui9vFRiHDQErj9Zof8azP32uGVTRA==",
"dev": true,
"requires": {
"@babel/helper-member-expression-to-functions": "^7.12.1",
"@babel/helper-optimise-call-expression": "^7.10.4",
"@babel/traverse": "^7.12.5",
"@babel/types": "^7.12.5"
"@babel/helper-member-expression-to-functions": "^7.12.7",
"@babel/helper-optimise-call-expression": "^7.12.10",
"@babel/traverse": "^7.12.10",
"@babel/types": "^7.12.11"
}
},
"@babel/helper-simple-access": {
@ -296,12 +285,12 @@
}
},
"@babel/helper-split-export-declaration": {
"version": "7.11.0",
"resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz",
"integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==",
"version": "7.12.11",
"resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.11.tgz",
"integrity": "sha512-LsIVN8j48gHgwzfocYUSkO/hjYAOJqlpJEc7tGXcIm4cubjVUf8LGW6eWRyxEu7gA25q02p0rQUWoCI33HNS5g==",
"dev": true,
"requires": {
"@babel/types": "^7.11.0"
"@babel/types": "^7.12.11"
}
},
"@babel/helper-validator-identifier": {
@ -311,9 +300,9 @@
"dev": true
},
"@babel/helper-validator-option": {
"version": "7.12.1",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.1.tgz",
"integrity": "sha512-YpJabsXlJVWP0USHjnC/AQDTLlZERbON577YUVO/wLpqyj6HAtVYnWaQaN0iUN+1/tWn3c+uKKXjRut5115Y2A==",
"version": "7.12.11",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.11.tgz",
"integrity": "sha512-TBFCyj939mFSdeX7U7DDj32WtzYY7fDcalgq8v3fBZMNOJQNn7nOYzMaUCiPxPYfCup69mtIpqlKgMZLvQ8Xhw==",
"dev": true
},
"@babel/helper-wrap-function": {
@ -351,15 +340,15 @@
}
},
"@babel/parser": {
"version": "7.12.5",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.5.tgz",
"integrity": "sha512-FVM6RZQ0mn2KCf1VUED7KepYeUWoVShczewOCfm3nzoBybaih51h+sYVVGthW9M6lPByEPTQf+xm27PBdlpwmQ==",
"version": "7.12.11",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.11.tgz",
"integrity": "sha512-N3UxG+uuF4CMYoNj8AhnbAcJF0PiuJ9KHuy1lQmkYsxTer/MAH9UBNHsBoAX/4s6NvlDD047No8mYVGGzLL4hg==",
"dev": true
},
"@babel/plugin-proposal-async-generator-functions": {
"version": "7.12.1",
"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.1.tgz",
"integrity": "sha512-d+/o30tJxFxrA1lhzJqiUcEJdI6jKlNregCv5bASeGf2Q4MXmnwH7viDo7nhx1/ohf09oaH8j1GVYG/e3Yqk6A==",
"version": "7.12.12",
"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.12.tgz",
"integrity": "sha512-nrz9y0a4xmUrRq51bYkWJIO5SBZyG2ys2qinHsN0zHDHVsUaModrkpyWWWXfGqYQmOL3x9sQIcTNN/pBGpo09A==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.10.4",
@ -428,9 +417,9 @@
}
},
"@babel/plugin-proposal-numeric-separator": {
"version": "7.12.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.5.tgz",
"integrity": "sha512-UiAnkKuOrCyjZ3sYNHlRlfuZJbBHknMQ9VMwVeX97Ofwx7RpD6gS2HfqTCh8KNUQgcOm8IKt103oR4KIjh7Q8g==",
"version": "7.12.7",
"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.7.tgz",
"integrity": "sha512-8c+uy0qmnRTeukiGsjLGy6uVs/TFjJchGXUeBqlG4VWYOdJWkhhVPdQ3uHwbmalfJwv2JsV0qffXP4asRfL2SQ==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.10.4",
@ -459,9 +448,9 @@
}
},
"@babel/plugin-proposal-optional-chaining": {
"version": "7.12.1",
"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.1.tgz",
"integrity": "sha512-c2uRpY6WzaVDzynVY9liyykS+kVU+WRZPMPYpkelXH8KBt1oXoI89kPbZKKG/jDT5UK92FTW2fZkZaJhdiBabw==",
"version": "7.12.7",
"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.7.tgz",
"integrity": "sha512-4ovylXZ0PWmwoOvhU2vhnzVNnm88/Sm9nx7V8BPgMvAzn5zDou3/Awy0EjglyubVHasJj+XCEkr/r1X3P5elCA==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.10.4",
@ -627,9 +616,9 @@
}
},
"@babel/plugin-transform-block-scoping": {
"version": "7.12.1",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.1.tgz",
"integrity": "sha512-zJyAC9sZdE60r1nVQHblcfCj29Dh2Y0DOvlMkcqSo0ckqjiCwNiUezUKw+RjOCwGfpLRwnAeQ2XlLpsnGkvv9w==",
"version": "7.12.12",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.12.tgz",
"integrity": "sha512-VOEPQ/ExOVqbukuP7BYJtI5ZxxsmegTwzZ04j1aF0dkSypGo9XpDHuOrABsJu+ie+penpSJheDJ11x1BEZNiyQ==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.10.4"
@ -865,13 +854,12 @@
}
},
"@babel/plugin-transform-sticky-regex": {
"version": "7.12.1",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.1.tgz",
"integrity": "sha512-CiUgKQ3AGVk7kveIaPEET1jNDhZZEl1RPMWdTBE1799bdz++SwqDHStmxfCtDfBhQgCl38YRiSnrMuUMZIWSUQ==",
"version": "7.12.7",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.7.tgz",
"integrity": "sha512-VEiqZL5N/QvDbdjfYQBhruN0HYjSPjC4XkeqW4ny/jNtH9gcbgaqBIXYEZCNnESMAGs0/K/R7oFGMhOyu/eIxg==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.10.4",
"@babel/helper-regex": "^7.10.4"
"@babel/helper-plugin-utils": "^7.10.4"
}
},
"@babel/plugin-transform-template-literals": {
@ -884,9 +872,9 @@
}
},
"@babel/plugin-transform-typeof-symbol": {
"version": "7.12.1",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.1.tgz",
"integrity": "sha512-EPGgpGy+O5Kg5pJFNDKuxt9RdmTgj5sgrus2XVeMp/ZIbOESadgILUbm50SNpghOh3/6yrbsH+NB5+WJTmsA7Q==",
"version": "7.12.10",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.10.tgz",
"integrity": "sha512-JQ6H8Rnsogh//ijxspCjc21YPd3VLVoYtAwv3zQmqAt8YGYUtdo5usNhdl4b9/Vir2kPFZl6n1h0PfUz4hJhaA==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.10.4"
@ -912,16 +900,16 @@
}
},
"@babel/preset-env": {
"version": "7.12.1",
"resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.12.1.tgz",
"integrity": "sha512-H8kxXmtPaAGT7TyBvSSkoSTUK6RHh61So05SyEbpmr0MCZrsNYn7mGMzzeYoOUCdHzww61k8XBft2TaES+xPLg==",
"version": "7.12.11",
"resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.12.11.tgz",
"integrity": "sha512-j8Tb+KKIXKYlDBQyIOy4BLxzv1NUOwlHfZ74rvW+Z0Gp4/cI2IMDPBWAgWceGcE7aep9oL/0K9mlzlMGxA8yNw==",
"dev": true,
"requires": {
"@babel/compat-data": "^7.12.1",
"@babel/helper-compilation-targets": "^7.12.1",
"@babel/helper-module-imports": "^7.12.1",
"@babel/compat-data": "^7.12.7",
"@babel/helper-compilation-targets": "^7.12.5",
"@babel/helper-module-imports": "^7.12.5",
"@babel/helper-plugin-utils": "^7.10.4",
"@babel/helper-validator-option": "^7.12.1",
"@babel/helper-validator-option": "^7.12.11",
"@babel/plugin-proposal-async-generator-functions": "^7.12.1",
"@babel/plugin-proposal-class-properties": "^7.12.1",
"@babel/plugin-proposal-dynamic-import": "^7.12.1",
@ -929,10 +917,10 @@
"@babel/plugin-proposal-json-strings": "^7.12.1",
"@babel/plugin-proposal-logical-assignment-operators": "^7.12.1",
"@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1",
"@babel/plugin-proposal-numeric-separator": "^7.12.1",
"@babel/plugin-proposal-numeric-separator": "^7.12.7",
"@babel/plugin-proposal-object-rest-spread": "^7.12.1",
"@babel/plugin-proposal-optional-catch-binding": "^7.12.1",
"@babel/plugin-proposal-optional-chaining": "^7.12.1",
"@babel/plugin-proposal-optional-chaining": "^7.12.7",
"@babel/plugin-proposal-private-methods": "^7.12.1",
"@babel/plugin-proposal-unicode-property-regex": "^7.12.1",
"@babel/plugin-syntax-async-generators": "^7.8.0",
@ -950,7 +938,7 @@
"@babel/plugin-transform-arrow-functions": "^7.12.1",
"@babel/plugin-transform-async-to-generator": "^7.12.1",
"@babel/plugin-transform-block-scoped-functions": "^7.12.1",
"@babel/plugin-transform-block-scoping": "^7.12.1",
"@babel/plugin-transform-block-scoping": "^7.12.11",
"@babel/plugin-transform-classes": "^7.12.1",
"@babel/plugin-transform-computed-properties": "^7.12.1",
"@babel/plugin-transform-destructuring": "^7.12.1",
@ -974,14 +962,14 @@
"@babel/plugin-transform-reserved-words": "^7.12.1",
"@babel/plugin-transform-shorthand-properties": "^7.12.1",
"@babel/plugin-transform-spread": "^7.12.1",
"@babel/plugin-transform-sticky-regex": "^7.12.1",
"@babel/plugin-transform-sticky-regex": "^7.12.7",
"@babel/plugin-transform-template-literals": "^7.12.1",
"@babel/plugin-transform-typeof-symbol": "^7.12.1",
"@babel/plugin-transform-typeof-symbol": "^7.12.10",
"@babel/plugin-transform-unicode-escapes": "^7.12.1",
"@babel/plugin-transform-unicode-regex": "^7.12.1",
"@babel/preset-modules": "^0.1.3",
"@babel/types": "^7.12.1",
"core-js-compat": "^3.6.2",
"@babel/types": "^7.12.11",
"core-js-compat": "^3.8.0",
"semver": "^5.5.0"
}
},
@ -1008,101 +996,120 @@
}
},
"@babel/template": {
"version": "7.10.4",
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz",
"integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==",
"version": "7.12.7",
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.7.tgz",
"integrity": "sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.10.4",
"@babel/parser": "^7.10.4",
"@babel/types": "^7.10.4"
"@babel/parser": "^7.12.7",
"@babel/types": "^7.12.7"
}
},
"@babel/traverse": {
"version": "7.12.5",
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.5.tgz",
"integrity": "sha512-xa15FbQnias7z9a62LwYAA5SZZPkHIXpd42C6uW68o8uTuua96FHZy1y61Va5P/i83FAAcMpW8+A/QayntzuqA==",
"version": "7.12.12",
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.12.tgz",
"integrity": "sha512-s88i0X0lPy45RrLM8b9mz8RPH5FqO9G9p7ti59cToE44xFm1Q+Pjh5Gq4SXBbtb88X7Uy7pexeqRIQDDMNkL0w==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.10.4",
"@babel/generator": "^7.12.5",
"@babel/helper-function-name": "^7.10.4",
"@babel/helper-split-export-declaration": "^7.11.0",
"@babel/parser": "^7.12.5",
"@babel/types": "^7.12.5",
"@babel/code-frame": "^7.12.11",
"@babel/generator": "^7.12.11",
"@babel/helper-function-name": "^7.12.11",
"@babel/helper-split-export-declaration": "^7.12.11",
"@babel/parser": "^7.12.11",
"@babel/types": "^7.12.12",
"debug": "^4.1.0",
"globals": "^11.1.0",
"lodash": "^4.17.19"
},
"dependencies": {
"@babel/code-frame": {
"version": "7.12.11",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz",
"integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==",
"dev": true,
"requires": {
"@babel/highlight": "^7.10.4"
}
}
}
},
"@babel/types": {
"version": "7.12.6",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz",
"integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==",
"version": "7.12.12",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.12.tgz",
"integrity": "sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==",
"dev": true,
"requires": {
"@babel/helper-validator-identifier": "^7.10.4",
"@babel/helper-validator-identifier": "^7.12.11",
"lodash": "^4.17.19",
"to-fast-properties": "^2.0.0"
},
"dependencies": {
"@babel/helper-validator-identifier": {
"version": "7.12.11",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz",
"integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==",
"dev": true
}
}
},
"@nativescript-community/perms": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/@nativescript-community/perms/-/perms-2.1.1.tgz",
"integrity": "sha512-Ay4v1lEGTQ5rYYlYA8CKcCXuxOuyU4633r/JXi9aRG8MgxfOT+rDuQLgSz+LLCYmBK1ndfHHfyUTilkaUj1H8Q=="
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/@nativescript-community/perms/-/perms-2.1.4.tgz",
"integrity": "sha512-5SeHHRAklrzy2FdUdpM1lr/uceIBrHFzciaRhoeBW54jHzs5ImbR541pvUE/uM5+AYok+Dy8wbr8kvCT4f4Ecg=="
},
"@nativescript-community/text": {
"version": "1.3.6",
"resolved": "https://registry.npmjs.org/@nativescript-community/text/-/text-1.3.6.tgz",
"integrity": "sha512-SVTfg+Pp7wqBLoIBpzPOJQXLc8I47dGQrtA5QRxu2FJ0GGpnD1FyAxyDW6K5Fek7U3Bw0/KGVAmiwBPA/yhHHg=="
"version": "1.3.11",
"resolved": "https://registry.npmjs.org/@nativescript-community/text/-/text-1.3.11.tgz",
"integrity": "sha512-slK3Wr6eBwkyGdeelanwI8Y8gkaaWXBGxUfLjb8HgTxlHMvRkBJjXKZcAZ0EFTsC+oGKIGwaJWm+wWrqdm1MLw=="
},
"@nativescript-community/ui-material-activityindicator": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/@nativescript-community/ui-material-activityindicator/-/ui-material-activityindicator-5.1.1.tgz",
"integrity": "sha512-V/xm/Mgq//0gTg723YJIwWzNbcajphesSpCHEzClVfQzhHwspo/UbLRHfCPKnSEyQN0btn3RxA1gsPpyANVy2Q==",
"version": "5.1.16",
"resolved": "https://registry.npmjs.org/@nativescript-community/ui-material-activityindicator/-/ui-material-activityindicator-5.1.16.tgz",
"integrity": "sha512-G4AFYqIltz+uagiHgR82U9hnTURPd+7P9Ja/UCeq1zEpziu31dMbBsaQ7qzYR8t80kDogxarwRSrO+IYTMRNCw==",
"requires": {
"@nativescript-community/ui-material-core": "^5.1.1"
"@nativescript-community/ui-material-core": "^5.1.16"
}
},
"@nativescript-community/ui-material-button": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/@nativescript-community/ui-material-button/-/ui-material-button-5.1.1.tgz",
"integrity": "sha512-h732SkqZFiu4T58e8BbXuHazeDTlU/cwstINCn97rSHon81tzsYHgpPSii5GxE3AVq/CBmKfU0LXLwodNnH0mQ==",
"version": "5.1.16",
"resolved": "https://registry.npmjs.org/@nativescript-community/ui-material-button/-/ui-material-button-5.1.16.tgz",
"integrity": "sha512-rT7qXDUQ4mdZx7Ove095OhyoNv1CaawsxC7XlhDzeYg137owp84927u0tRDIH+kv7E0Gp8IEM43+ulY9kAFDdQ==",
"requires": {
"@nativescript-community/text": "^1.2.5",
"@nativescript-community/ui-material-core": "^5.1.1"
"@nativescript-community/text": "^1.3.10",
"@nativescript-community/ui-material-core": "^5.1.16"
}
},
"@nativescript-community/ui-material-core": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/@nativescript-community/ui-material-core/-/ui-material-core-5.1.1.tgz",
"integrity": "sha512-3Ozc5NLRcHoXIxlooCfPj0F24Nqef37N1bsjQh+7oHBcBEYuOACcsd3lIkKp0MzVFTLja1nDwElxoml9PU9YDQ==",
"version": "5.1.16",
"resolved": "https://registry.npmjs.org/@nativescript-community/ui-material-core/-/ui-material-core-5.1.16.tgz",
"integrity": "sha512-RtuVFgC3NmtIyjkpHf5knYTsvcm/LvEfoEqjFlHPl5HxT/x1MuRerZs38FFtuwmbJVYpTQ6mxeDxTHiwC4jurQ==",
"requires": {
"@nativescript/hook": "~2.0.0"
}
},
"@nativescript-community/ui-material-floatingactionbutton": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/@nativescript-community/ui-material-floatingactionbutton/-/ui-material-floatingactionbutton-5.1.1.tgz",
"integrity": "sha512-fdkqr7UfJFRo3feynNCOFgBazykBuIpD5unuKawrt4wh0oNeApPD9BMV7ngS57vWkwP1+JYGDR6/symFvkfgLw==",
"version": "5.1.16",
"resolved": "https://registry.npmjs.org/@nativescript-community/ui-material-floatingactionbutton/-/ui-material-floatingactionbutton-5.1.16.tgz",
"integrity": "sha512-VpGVzLvO7A8YFZ5fVGBfeusu+xUjgA2c2qH0Ez4SBJJama4Q/5T8DgQUHxulKConUA6vguNMRuB1yfSZ/4AtFA==",
"requires": {
"@nativescript-community/ui-material-core": "^5.1.1"
"@nativescript-community/ui-material-core": "^5.1.16"
}
},
"@nativescript-community/ui-material-progress": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/@nativescript-community/ui-material-progress/-/ui-material-progress-5.1.1.tgz",
"integrity": "sha512-ejItPEyxCj27i4xQfrMOLEF0jafT2ZMqY6l39d6bNMW0ggP7pEIP07ocRd0eIsXy9lqFMryEekBqlpEnKVjrsQ==",
"version": "5.1.16",
"resolved": "https://registry.npmjs.org/@nativescript-community/ui-material-progress/-/ui-material-progress-5.1.16.tgz",
"integrity": "sha512-v7L8bkTurF4F4Bn8+V4UeNTR3Q7VQkOrplmHeeZePAR/4a55z5BI6WaWgvO22yrMQ8InWAUsKQvu3S2JXNSFYw==",
"requires": {
"@nativescript-community/ui-material-core": "^5.1.1"
"@nativescript-community/ui-material-core": "^5.1.16"
}
},
"@nativescript-community/ui-material-ripple": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/@nativescript-community/ui-material-ripple/-/ui-material-ripple-5.1.1.tgz",
"integrity": "sha512-BKFTFGb7Yve5Kp0uVw24kcW6xUGG5SzqpHdtAL3ZMsmedhZytDLtGqb/olWH8tQbJu5JiUW/I6/ot/7VH7ZQSA==",
"version": "5.1.16",
"resolved": "https://registry.npmjs.org/@nativescript-community/ui-material-ripple/-/ui-material-ripple-5.1.16.tgz",
"integrity": "sha512-TOiF+MXZlDFbxgr/wsXA6WsYB4bg7k0eoQWK8GFhiSlFiQxRxqlch1uXwVj8aVRvULPJH65/Qc9LaNQjWT90hQ==",
"requires": {
"@nativescript-community/ui-material-core": "^5.1.1"
"@nativescript-community/ui-material-core": "^5.1.16"
}
},
"@nativescript/android": {
@ -1148,9 +1155,9 @@
"integrity": "sha512-I9ue8S0jJ4V1h0aJLO6ZrSoxqqlUaVXWAnNu+EHsJ70WHujPp0yslYrmIYsKfzlNoZVEIMA5Fjx/sW7UWIwL9g=="
},
"@nativescript/theme": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@nativescript/theme/-/theme-3.0.0.tgz",
"integrity": "sha512-7oxHRF9R36oMie//rvZAI1kdizGJwZcRISlSiA3pAoCiqHMRpuM4tb3V+nTS2waSVA1tmUtU50oHcG7NEcEv7A=="
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/@nativescript/theme/-/theme-3.0.1.tgz",
"integrity": "sha512-5rduFdEjjGyUgK+jaJ/2EHxi+qAgTZuK9XgfxHw0KJAIIWP9HNL8JV8IVUBeIodRPHhSJZJVQT7t+8peH/4dVQ=="
},
"@nativescript/webpack": {
"version": "3.0.8",
@ -1277,9 +1284,9 @@
"dev": true
},
"@types/node": {
"version": "14.14.8",
"resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.8.tgz",
"integrity": "sha512-z/5Yd59dCKI5kbxauAJgw6dLPzW+TNOItNE00PkpzNwUIEwdj/Lsqwq94H5DdYBX7C13aRA0CY32BK76+neEUA==",
"version": "14.14.16",
"resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.16.tgz",
"integrity": "sha512-naXYePhweTi+BMv11TgioE2/FXU4fSl29HAH1ffxVciNsH3rYXjNP2yM8wqmSm7jS20gM8TIklKiTen+1iVncw==",
"dev": true
},
"@types/parse-json": {
@ -1864,38 +1871,17 @@
"dev": true
},
"babel-loader": {
"version": "8.2.1",
"resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.1.tgz",
"integrity": "sha512-dMF8sb2KQ8kJl21GUjkW1HWmcsL39GOV5vnzjqrCzEPNY0S0UfMLnumidiwIajDSBmKhYf5iRW+HXaM4cvCKBw==",
"version": "8.2.2",
"resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.2.tgz",
"integrity": "sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g==",
"dev": true,
"requires": {
"find-cache-dir": "^2.1.0",
"find-cache-dir": "^3.3.1",
"loader-utils": "^1.4.0",
"make-dir": "^2.1.0",
"pify": "^4.0.1",
"make-dir": "^3.1.0",
"schema-utils": "^2.6.5"
},
"dependencies": {
"find-cache-dir": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz",
"integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==",
"dev": true,
"requires": {
"commondir": "^1.0.1",
"make-dir": "^2.0.0",
"pkg-dir": "^3.0.0"
}
},
"find-up": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
"integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
"dev": true,
"requires": {
"locate-path": "^3.0.0"
}
},
"json5": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
@ -1915,59 +1901,6 @@
"emojis-list": "^3.0.0",
"json5": "^1.0.1"
}
},
"locate-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
"integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
"dev": true,
"requires": {
"p-locate": "^3.0.0",
"path-exists": "^3.0.0"
}
},
"make-dir": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
"integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
"dev": true,
"requires": {
"pify": "^4.0.1",
"semver": "^5.6.0"
}
},
"p-limit": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
"integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
"dev": true,
"requires": {
"p-try": "^2.0.0"
}
},
"p-locate": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
"integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
"dev": true,
"requires": {
"p-limit": "^2.0.0"
}
},
"path-exists": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
"integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
"dev": true
},
"pkg-dir": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
"integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
"dev": true,
"requires": {
"find-up": "^3.0.0"
}
}
}
},
@ -2283,16 +2216,16 @@
}
},
"browserslist": {
"version": "4.14.7",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.7.tgz",
"integrity": "sha512-BSVRLCeG3Xt/j/1cCGj1019Wbty0H+Yvu2AOuZSuoaUWn3RatbL33Cxk+Q4jRMRAbOm0p7SLravLjpnT6s0vzQ==",
"version": "4.16.0",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.0.tgz",
"integrity": "sha512-/j6k8R0p3nxOC6kx5JGAxsnhc9ixaWJfYc+TNTzxg6+ARaESAvQGV7h0uNOB4t+pLQJZWzcrMxXOxjgsCj3dqQ==",
"dev": true,
"requires": {
"caniuse-lite": "^1.0.30001157",
"caniuse-lite": "^1.0.30001165",
"colorette": "^1.2.1",
"electron-to-chromium": "^1.3.591",
"electron-to-chromium": "^1.3.621",
"escalade": "^3.1.1",
"node-releases": "^1.1.66"
"node-releases": "^1.1.67"
}
},
"buffer": {
@ -2432,9 +2365,9 @@
}
},
"caniuse-lite": {
"version": "1.0.30001159",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001159.tgz",
"integrity": "sha512-w9Ph56jOsS8RL20K9cLND3u/+5WASWdhC/PPrf+V3/HsM3uHOavWOR1Xzakbv4Puo/srmPHudkmCRWM7Aq+/UA==",
"version": "1.0.30001170",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001170.tgz",
"integrity": "sha512-Dd4d/+0tsK0UNLrZs3CvNukqalnVTRrxb5mcQm8rHL49t7V5ZaTygwXkrq+FB+dVDf++4ri8eJnFEJAB8332PA==",
"dev": true
},
"caseless": {
@ -2786,12 +2719,12 @@
}
},
"core-js-compat": {
"version": "3.7.0",
"resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.7.0.tgz",
"integrity": "sha512-V8yBI3+ZLDVomoWICO6kq/CD28Y4r1M7CWeO4AGpMdMfseu8bkSubBmUPySMGKRTS+su4XQ07zUkAsiu9FCWTg==",
"version": "3.8.1",
"resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.8.1.tgz",
"integrity": "sha512-a16TLmy9NVD1rkjUGbwuyWkiDoN0FDpAwrfLONvHFQx0D9k7J9y0srwMT8QP/Z6HE3MIFaVynEeYwZwPX1o5RQ==",
"dev": true,
"requires": {
"browserslist": "^4.14.6",
"browserslist": "^4.15.0",
"semver": "7.0.0"
},
"dependencies": {
@ -3005,9 +2938,9 @@
"dev": true
},
"debug": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz",
"integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==",
"version": "4.3.1",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
"integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
"dev": true,
"requires": {
"ms": "2.1.2"
@ -3216,9 +3149,9 @@
"dev": true
},
"electron-to-chromium": {
"version": "1.3.598",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.598.tgz",
"integrity": "sha512-G5Ztk23/ubLYVPxPXnB1uu105uzIPd4xB/D8ld8x1GaSC9+vU9NZL16nYZya8H77/7CCKKN7dArzJL3pBs8N7A==",
"version": "1.3.633",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.633.tgz",
"integrity": "sha512-bsVCsONiVX1abkWdH7KtpuDAhsQ3N3bjPYhROSAXE78roJKet0Y5wznA14JE9pzbwSZmSMAW6KiKYf1RvbTJkA==",
"dev": true
},
"elliptic": {
@ -4179,9 +4112,9 @@
"dev": true
},
"get-intrinsic": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.1.tgz",
"integrity": "sha512-ZnWP+AmS1VUaLgTRy47+zKtjTxz+0xMpx3I52i+aalBK1QP19ggLF3Db89KJX7kjfOfP2eoa01qc++GwPgufPg==",
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.2.tgz",
"integrity": "sha512-aeX0vrFm21ILl3+JpFFRNe9aUvp6VFZb2/CTbgLb8j75kOhvoNYjt9d8KA/tJG4gSo8nzEDedRl0h7vDmBYRVg==",
"dev": true,
"requires": {
"function-bind": "^1.1.1",
@ -5528,6 +5461,11 @@
"to-regex": "^3.0.1"
}
},
"nativescript-accelerometer": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/nativescript-accelerometer/-/nativescript-accelerometer-3.0.0.tgz",
"integrity": "sha512-2sEfxTzzeXae6sDvW2dymgsNb8Z6qgNQOCUKJz+G8GI00w807R+EK9+zOwQcaW6jne741D0laAwzTW+ofg9HqA=="
},
"nativescript-couchbase-plugin": {
"version": "0.9.6",
"resolved": "https://registry.npmjs.org/nativescript-couchbase-plugin/-/nativescript-couchbase-plugin-0.9.6.tgz",
@ -5560,6 +5498,11 @@
}
}
},
"nativescript-intl": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/nativescript-intl/-/nativescript-intl-4.0.2.tgz",
"integrity": "sha512-a8VGIFhLYCMtdTuZpiE2d9NcxLkkHGYt2EeG37aRTG4TjlMrUhV0IxfoTzj9zDGk1p1xAPSIo6yGPb2Z9hay2A=="
},
"nativescript-permissions": {
"version": "1.3.11",
"resolved": "https://registry.npmjs.org/nativescript-permissions/-/nativescript-permissions-1.3.11.tgz",
@ -5610,18 +5553,20 @@
"ts-node": "^8.10.2"
}
},
"nativescript-vibrate": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/nativescript-vibrate/-/nativescript-vibrate-4.0.1.tgz",
"integrity": "sha512-T9VspAu+pgYM/AWLradA4HPv/tdfx8jrhIOD02PZs09KhJyjQE3BoubnHcmg0neeQAhgxHiuXGdit8QOAyKaBA=="
},
"nativescript-vue": {
"version": "2.8.1",
"resolved": "https://registry.npmjs.org/nativescript-vue/-/nativescript-vue-2.8.1.tgz",
"integrity": "sha512-mJuEetMZ+YjmxbqD9H3y2oWWAUUDxpGS4fniL8NM9QVSQZJLZbE9ATWQcFR2ZqvCIsvv7nS3bZfXUy+YbRP/Sw==",
"requires": {
"@nativescript/hook": "2.0.0"
}
"version": "2.8.3",
"resolved": "https://registry.npmjs.org/nativescript-vue/-/nativescript-vue-2.8.3.tgz",
"integrity": "sha512-2F3Jv0Y1gzATjcVnFn7RaJm9QDAINOJNtQ4Wh0B3lGiC5qsmQy91IjF2wxVOzGk5QNA2v4shSG+Emco53n0+6w=="
},
"nativescript-vue-template-compiler": {
"version": "2.8.1",
"resolved": "https://registry.npmjs.org/nativescript-vue-template-compiler/-/nativescript-vue-template-compiler-2.8.1.tgz",
"integrity": "sha512-0W2Ub1LyI879CGNB09WiHxrGw2fJIKii3G1K4egDzBbQ7sKqsED2vy2GT1lx1ybjUM3bkiz8gq8LsOc1EDHUig==",
"version": "2.8.3",
"resolved": "https://registry.npmjs.org/nativescript-vue-template-compiler/-/nativescript-vue-template-compiler-2.8.3.tgz",
"integrity": "sha512-xePEXKdQ1nLJbj4LF3VEyluz6SOL0dSonNb3gKGJ7nfGEgBywm8nUZdwmwGcy2/1JL4CWtRs9f9wz431McXBTg==",
"dev": true,
"requires": {
"de-indent": "^1.0.2",
@ -8306,9 +8251,9 @@
"dev": true
},
"vue-loader": {
"version": "15.9.5",
"resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.9.5.tgz",
"integrity": "sha512-oeMOs2b5o5gRqkxfds10bCx6JeXYTwivRgbb8hzOrcThD2z1+GqEKE3EX9A2SGbsYDf4rXwRg6D5n1w0jO5SwA==",
"version": "15.9.6",
"resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.9.6.tgz",
"integrity": "sha512-j0cqiLzwbeImIC6nVIby2o/ABAWhlppyL/m5oJ67R5MloP0hj/DtFgb0Zmq3J9CG7AJ+AXIvHVnJAPBvrLyuDg==",
"dev": true,
"requires": {
"@vue/component-compiler-utils": "^3.1.0",
@ -8379,9 +8324,9 @@
"dev": true
},
"vuex": {
"version": "3.5.1",
"resolved": "https://registry.npmjs.org/vuex/-/vuex-3.5.1.tgz",
"integrity": "sha512-w7oJzmHQs0FM9LXodfskhw9wgKBiaB+totOdb8sNzbTB2KDCEEwEs29NzBZFh/lmEK1t5tDmM1vtsO7ubG1DFw=="
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/vuex/-/vuex-3.6.0.tgz",
"integrity": "sha512-W74OO2vCJPs9/YjNjW8lLbj+jzT24waTo2KShI8jLvJW8OaIkgb3wuAMA7D+ZiUxDOx3ubwSZTaJBip9G8a3aQ=="
},
"watchpack": {
"version": "1.7.5",

View file

@ -5,39 +5,42 @@
"author": "Vishnu Raghav <design@vishnuraghav.com>",
"license": "GPL",
"dependencies": {
"@nativescript-community/perms": "^2.1.1",
"@nativescript-community/ui-material-activityindicator": "^5.0.30",
"@nativescript-community/ui-material-button": "^5.1.0",
"@nativescript-community/ui-material-floatingactionbutton": "^5.0.30",
"@nativescript-community/ui-material-progress": "^5.0.30",
"@nativescript-community/ui-material-ripple": "^5.0.30",
"@nativescript-community/perms": "^2.1.4",
"@nativescript-community/ui-material-activityindicator": "^5.1.16",
"@nativescript-community/ui-material-button": "^5.1.16",
"@nativescript-community/ui-material-floatingactionbutton": "^5.1.16",
"@nativescript-community/ui-material-progress": "^5.1.16",
"@nativescript-community/ui-material-ripple": "^5.1.16",
"@nativescript/core": "~7.0.0",
"@nativescript/localize": "^5.0.2",
"@nativescript/social-share": "^2.0.1",
"@nativescript/theme": "^3.0.0",
"@nativescript/theme": "^3.0.1",
"@nativescript/zip": "^5.0.0",
"@nstudio/nativescript-checkbox": "^2.0.4",
"nativescript-accelerometer": "^3.0.0",
"nativescript-couchbase-plugin": "^0.9.6",
"nativescript-feedback": "^2.0.0",
"nativescript-imagecropper": "^4.0.1",
"nativescript-intl": "^4.0.2",
"nativescript-plugin-filepicker": "^1.0.0",
"nativescript-toast": "^2.0.0",
"nativescript-ui-calendar": "^7.0.2",
"nativescript-ui-listview": "^9.0.4",
"nativescript-ui-sidedrawer": "^9.0.3",
"nativescript-vue": "^2.8.1",
"vuex": "^3.5.1"
"nativescript-vibrate": "^4.0.1",
"nativescript-vue": "^2.8.3",
"vuex": "^3.6.0"
},
"devDependencies": {
"@babel/core": "^7.12.3",
"@babel/preset-env": "^7.12.1",
"@babel/core": "^7.12.10",
"@babel/preset-env": "^7.12.11",
"@nativescript/android": "7.0.1",
"@nativescript/webpack": "^3.0.8",
"@types/node": "^14.14.8",
"babel-loader": "^8.2.1",
"nativescript-vue-template-compiler": "^2.8.1",
"@types/node": "^14.14.16",
"babel-loader": "^8.2.2",
"nativescript-vue-template-compiler": "^2.8.3",
"node-sass": "^4.14.1",
"vue-loader": "^15.9.5"
"vue-loader": "^15.9.6"
},
"main": "main"
}

View file

@ -1,2 +1,2 @@
#Sat Dec 12 23:32:21 IST 2020
#Tue Dec 29 00:27:03 IST 2020
gradle.version=6.4

View file

@ -18,8 +18,7 @@
},
"@nativescript/social-share": {
"/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/node_modules/@nativescript/social-share/platforms/android/AndroidManifest.xml": "ca6e2ceca22448641563fa6f6c773ef10b292e10",
"/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/node_modules/@nativescript/social-share/platforms/android/res/xml/provider_paths.xml": "dbe562dfa44616ea40d88a3cbd74b3e8f44c54f3",
"/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/node_modules/@nativescript/social-share/platforms/android/social_share.aar": "3d89f16bd7f2490c09bb8eab1d74e9f88033ffe5"
"/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/node_modules/@nativescript/social-share/platforms/android/res/xml/provider_paths.xml": "dbe562dfa44616ea40d88a3cbd74b3e8f44c54f3"
},
"@nativescript/zip": {
"/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/node_modules/@nativescript/zip/platforms/android/include.gradle": "81c5f85b571d2665da42be015e2d1dfd271ee4e6"
@ -55,10 +54,17 @@
"/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/node_modules/nativescript-ui-sidedrawer/platforms/android/TNSSideDrawer-release.aar": "ae03340e741bdf430de4849d4dd117bf07197851",
"/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/node_modules/nativescript-ui-sidedrawer/platforms/android/typings/sidedrawer.d.ts": "8256a2295125597755fe6a6faee866b0750e65f2"
},
"nativescript-vibrate": {
"/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/node_modules/nativescript-vibrate/platforms/android/README.md": "45f2f63427be0a461a7e2dfd5ff0ad5bab64068f",
"/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/node_modules/nativescript-vibrate/platforms/android/include.gradle": "06e7e1be49eb6d614094596003280aa7eea789f3",
"/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/node_modules/nativescript-vibrate/platforms/android/nativescript_vibrate.aar": "a60d480c8553e72412f49655a113759fe3321ccb"
},
"@nativescript-community/ui-material-core": {
"/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/node_modules/@nativescript-community/ui-material-core/platforms/android/AndroidManifest.xml": "9b6f49aa9c71e8a45ec570027e025274ffcadc96",
"/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/node_modules/@nativescript-community/ui-material-core/platforms/android/include.gradle": "ec90dc697edab3c184ec95b0a42c9f206900f048",
"/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/node_modules/@nativescript-community/ui-material-core/platforms/android/java/com/nativescript/material/core/Utils.java": "3813226945705be3d52cf19dc945ea9bf2c77e12",
"/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/node_modules/@nativescript-community/ui-material-core/platforms/android/res/layout/material_page.xml": "29f912255e893697d6abd438f67a854149136292",
"/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/node_modules/@nativescript-community/ui-material-core/platforms/android/ui_material_core.aar": "3fe79b5007be09ca25466ea2c7021d86fd664dca"
"/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/node_modules/@nativescript-community/ui-material-core/platforms/android/ui_material_core.aar": "16ba6c7b1ca76423844a6e8a94bdbeed395c1432"
},
"@nativescript-community/text": {
"/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/node_modules/@nativescript-community/text/platforms/android/AndroidManifest.xml": "b80912f909195692d3bd071566274feba0b37660",
@ -66,11 +72,11 @@
"/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/node_modules/@nativescript-community/text/platforms/android/java/com/nativescript/text/CustomTypefaceSpan.java": "421f984280aa806183057f2ddd53febdbc32d2b1",
"/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/node_modules/@nativescript-community/text/platforms/android/java/com/nativescript/text/Font.java": "fb4d246ad367d178e11ef08c34ec182418d30890",
"/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/node_modules/@nativescript-community/text/platforms/android/java/com/nativescript/text/HtmlToSpannedConverter.java": "38643430e4b8cac690b89a07adc3a86f7060f93d",
"/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/node_modules/@nativescript-community/text/platforms/android/java/com/nativescript/text/URLSpanNoUnderline.java": "f1535d3e8cdd10b6d25a906a658fd4b77a836b20",
"/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/node_modules/@nativescript-community/text/platforms/android/text.aar": "da95e8963059120f05961c45e7774f63b62a697d"
"/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/node_modules/@nativescript-community/text/platforms/android/java/com/nativescript/text/URLSpanNoUnderline.java": "b3da85c1d16eff30c54fb5725e1e46fea265d7ce",
"/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/node_modules/@nativescript-community/text/platforms/android/text.aar": "77d471b2127e5f1f2b78b89656e7287bcf488b22"
},
"nativescript-ui-core": {
"/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/node_modules/nativescript-ui-core/platforms/android/TNSCore-release.aar": "0e2fe0b867821ad56b8f0b9c8ac4c90f4c399e3c",
"/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/node_modules/nativescript-ui-core/platforms/android/typings/core.d.ts": "5c032652edfa1719ef8c8190fc0f66d3b1c313c2"
"/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/node_modules/nativescript-ui-core/platforms/android/typings/core.d.ts": "5c032652edfa1719ef8c8190fc0f66d3b1c313c2",
"/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/node_modules/nativescript-ui-core/platforms/android/TNSCore-release.aar": "0e2fe0b867821ad56b8f0b9c8ac4c90f4c399e3c"
}
}

View file

@ -1,8 +1,7 @@
{
"time": "Sat Dec 12 2020 23:32:03 GMT+0530 (India Standard Time)",
"time": "Tue Dec 29 2020 11:28:21 GMT+0530 (India Standard Time)",
"nativePlatformStatus": "3",
"release": true,
"changesRequireBuild": true,
"projectFileHash": "fb9e88d4de45c25d11cdb213099296c37ead4f86feca0660ea574579198bbb2d",
"changesRequireBuildTime": "Sat Dec 12 2020 23:32:03 GMT+0530 (India Standard Time)"
"projectFileHash": "de8936b04a8811e04d93e9717fc4448bf88e2e84157623dd6556d8a57dadf3a1",
"changesRequireBuildTime": "Tue Dec 29 2020 11:28:21 GMT+0530 (India Standard Time)"
}

View file

@ -1,13 +0,0 @@
/**
* Automatically generated file. DO NOT MODIFY
*/
package com.vishnuraghav.enrecipes;
public final class BuildConfig {
public static final boolean DEBUG = false;
public static final String APPLICATION_ID = "com.vishnuraghav.enrecipes";
public static final String BUILD_TYPE = "release";
public static final String FLAVOR = "";
public static final int VERSION_CODE = 4;
public static final String VERSION_NAME = "1.1.3";
}

View file

@ -1 +0,0 @@
[{"type":"MAIN","splits":[],"versionCode":4,"versionName":"1.1.3","enabled":true,"outputFile":"app-release.apk","fullName":"release","baseName":"release","dirName":""}]

File diff suppressed because one or more lines are too long

View file

@ -1,36 +0,0 @@
{
"logs": [
{
"outputFile": "/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/android/app/build/intermediates/incremental/mergeReleaseResources/merged.dir/values-af/values-af.xml",
"map": [
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/be4c35a38818aae510fb57719aacbd93/appcompat-1.2.0/res/values-af/values-af.xml",
"from": {
"startLines": "2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29",
"startColumns": "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4",
"startOffsets": "105,213,309,415,500,603,721,798,874,965,1058,1153,1247,1346,1439,1534,1633,1728,1822,1903,2010,2115,2212,2320,2423,2525,2679,2777",
"endColumns": "107,95,105,84,102,117,76,75,90,92,94,93,98,92,94,98,94,93,80,106,104,96,107,102,101,153,97,80",
"endOffsets": "208,304,410,495,598,716,793,869,960,1053,1148,1242,1341,1434,1529,1628,1723,1817,1898,2005,2110,2207,2315,2418,2520,2674,2772,2853"
}
},
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/1dc5cba16eb2c928c676e9d5f11f544c/core-1.3.0/res/values-af/values-af.xml",
"from": {
"startLines": "2",
"startColumns": "4",
"startOffsets": "55",
"endColumns": "100",
"endOffsets": "151"
},
"to": {
"startLines": "30",
"startColumns": "4",
"startOffsets": "2858",
"endColumns": "100",
"endOffsets": "2954"
}
}
]
}
]
}

View file

@ -1,36 +0,0 @@
{
"logs": [
{
"outputFile": "/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/android/app/build/intermediates/incremental/mergeReleaseResources/merged.dir/values-am/values-am.xml",
"map": [
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/be4c35a38818aae510fb57719aacbd93/appcompat-1.2.0/res/values-am/values-am.xml",
"from": {
"startLines": "2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29",
"startColumns": "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4",
"startOffsets": "105,203,301,407,493,596,713,791,867,958,1051,1143,1237,1337,1430,1525,1618,1709,1800,1880,1980,2080,2176,2278,2378,2477,2627,2723",
"endColumns": "97,97,105,85,102,116,77,75,90,92,91,93,99,92,94,92,90,90,79,99,99,95,101,99,98,149,95,79",
"endOffsets": "198,296,402,488,591,708,786,862,953,1046,1138,1232,1332,1425,1520,1613,1704,1795,1875,1975,2075,2171,2273,2373,2472,2622,2718,2798"
}
},
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/1dc5cba16eb2c928c676e9d5f11f544c/core-1.3.0/res/values-am/values-am.xml",
"from": {
"startLines": "2",
"startColumns": "4",
"startOffsets": "55",
"endColumns": "100",
"endOffsets": "151"
},
"to": {
"startLines": "30",
"startColumns": "4",
"startOffsets": "2803",
"endColumns": "100",
"endOffsets": "2899"
}
}
]
}
]
}

View file

@ -1,36 +0,0 @@
{
"logs": [
{
"outputFile": "/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/android/app/build/intermediates/incremental/mergeReleaseResources/merged.dir/values-ar/values-ar.xml",
"map": [
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/be4c35a38818aae510fb57719aacbd93/appcompat-1.2.0/res/values-ar/values-ar.xml",
"from": {
"startLines": "2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29",
"startColumns": "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4",
"startOffsets": "105,213,317,424,506,607,721,801,879,970,1063,1155,1249,1349,1442,1537,1630,1721,1815,1894,1999,2097,2195,2303,2403,2506,2661,2758",
"endColumns": "107,103,106,81,100,113,79,77,90,92,91,93,99,92,94,92,90,93,78,104,97,97,107,99,102,154,96,81",
"endOffsets": "208,312,419,501,602,716,796,874,965,1058,1150,1244,1344,1437,1532,1625,1716,1810,1889,1994,2092,2190,2298,2398,2501,2656,2753,2835"
}
},
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/1dc5cba16eb2c928c676e9d5f11f544c/core-1.3.0/res/values-ar/values-ar.xml",
"from": {
"startLines": "2",
"startColumns": "4",
"startOffsets": "55",
"endColumns": "100",
"endOffsets": "151"
},
"to": {
"startLines": "30",
"startColumns": "4",
"startOffsets": "2840",
"endColumns": "100",
"endOffsets": "2936"
}
}
]
}
]
}

View file

@ -1,36 +0,0 @@
{
"logs": [
{
"outputFile": "/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/android/app/build/intermediates/incremental/mergeReleaseResources/merged.dir/values-as/values-as.xml",
"map": [
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/1dc5cba16eb2c928c676e9d5f11f544c/core-1.3.0/res/values-as/values-as.xml",
"from": {
"startLines": "2",
"startColumns": "4",
"startOffsets": "55",
"endColumns": "100",
"endOffsets": "151"
},
"to": {
"startLines": "30",
"startColumns": "4",
"startOffsets": "2924",
"endColumns": "100",
"endOffsets": "3020"
}
},
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/be4c35a38818aae510fb57719aacbd93/appcompat-1.2.0/res/values-as/values-as.xml",
"from": {
"startLines": "2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29",
"startColumns": "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4",
"startOffsets": "105,213,312,419,510,612,732,809,884,975,1068,1163,1257,1357,1450,1545,1639,1730,1821,1907,2020,2128,2227,2336,2452,2572,2739,2841",
"endColumns": "107,98,106,90,101,119,76,74,90,92,94,93,99,92,94,93,90,90,85,112,107,98,108,115,119,166,101,82",
"endOffsets": "208,307,414,505,607,727,804,879,970,1063,1158,1252,1352,1445,1540,1634,1725,1816,1902,2015,2123,2222,2331,2447,2567,2734,2836,2919"
}
}
]
}
]
}

View file

@ -1,36 +0,0 @@
{
"logs": [
{
"outputFile": "/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/android/app/build/intermediates/incremental/mergeReleaseResources/merged.dir/values-az/values-az.xml",
"map": [
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/1dc5cba16eb2c928c676e9d5f11f544c/core-1.3.0/res/values-az/values-az.xml",
"from": {
"startLines": "2",
"startColumns": "4",
"startOffsets": "55",
"endColumns": "100",
"endOffsets": "151"
},
"to": {
"startLines": "30",
"startColumns": "4",
"startOffsets": "2897",
"endColumns": "100",
"endOffsets": "2993"
}
},
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/be4c35a38818aae510fb57719aacbd93/appcompat-1.2.0/res/values-az/values-az.xml",
"from": {
"startLines": "2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29",
"startColumns": "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4",
"startOffsets": "105,215,316,426,514,621,735,817,895,986,1079,1173,1272,1372,1465,1560,1654,1745,1837,1922,2027,2133,2233,2342,2447,2549,2707,2813",
"endColumns": "109,100,109,87,106,113,81,77,90,92,93,98,99,92,94,93,90,91,84,104,105,99,108,104,101,157,105,83",
"endOffsets": "210,311,421,509,616,730,812,890,981,1074,1168,1267,1367,1460,1555,1649,1740,1832,1917,2022,2128,2228,2337,2442,2544,2702,2808,2892"
}
}
]
}
]
}

View file

@ -1,36 +0,0 @@
{
"logs": [
{
"outputFile": "/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/android/app/build/intermediates/incremental/mergeReleaseResources/merged.dir/values-b+sr+Latn/values-b+sr+Latn.xml",
"map": [
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/be4c35a38818aae510fb57719aacbd93/appcompat-1.2.0/res/values-b+sr+Latn/values-b+sr+Latn.xml",
"from": {
"startLines": "2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29",
"startColumns": "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4",
"startOffsets": "105,212,313,419,505,609,731,816,898,989,1082,1177,1271,1371,1464,1559,1664,1755,1846,1932,2037,2143,2246,2353,2462,2569,2739,2836",
"endColumns": "106,100,105,85,103,121,84,81,90,92,94,93,99,92,94,104,90,90,85,104,105,102,106,108,106,169,96,86",
"endOffsets": "207,308,414,500,604,726,811,893,984,1077,1172,1266,1366,1459,1554,1659,1750,1841,1927,2032,2138,2241,2348,2457,2564,2734,2831,2918"
}
},
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/1dc5cba16eb2c928c676e9d5f11f544c/core-1.3.0/res/values-b+sr+Latn/values-b+sr+Latn.xml",
"from": {
"startLines": "2",
"startColumns": "4",
"startOffsets": "55",
"endColumns": "100",
"endOffsets": "151"
},
"to": {
"startLines": "30",
"startColumns": "4",
"startOffsets": "2923",
"endColumns": "100",
"endOffsets": "3019"
}
}
]
}
]
}

View file

@ -1,36 +0,0 @@
{
"logs": [
{
"outputFile": "/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/android/app/build/intermediates/incremental/mergeReleaseResources/merged.dir/values-be/values-be.xml",
"map": [
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/1dc5cba16eb2c928c676e9d5f11f544c/core-1.3.0/res/values-be/values-be.xml",
"from": {
"startLines": "2",
"startColumns": "4",
"startOffsets": "55",
"endColumns": "100",
"endOffsets": "151"
},
"to": {
"startLines": "30",
"startColumns": "4",
"startOffsets": "2917",
"endColumns": "100",
"endOffsets": "3013"
}
},
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/be4c35a38818aae510fb57719aacbd93/appcompat-1.2.0/res/values-be/values-be.xml",
"from": {
"startLines": "2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29",
"startColumns": "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4",
"startOffsets": "105,225,328,444,530,635,754,834,911,1003,1097,1192,1286,1381,1475,1571,1666,1758,1850,1931,2037,2142,2240,2348,2454,2562,2735,2835",
"endColumns": "119,102,115,85,104,118,79,76,91,93,94,93,94,93,95,94,91,91,80,105,104,97,107,105,107,172,99,81",
"endOffsets": "220,323,439,525,630,749,829,906,998,1092,1187,1281,1376,1470,1566,1661,1753,1845,1926,2032,2137,2235,2343,2449,2557,2730,2830,2912"
}
}
]
}
]
}

View file

@ -1,36 +0,0 @@
{
"logs": [
{
"outputFile": "/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/android/app/build/intermediates/incremental/mergeReleaseResources/merged.dir/values-bg/values-bg.xml",
"map": [
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/be4c35a38818aae510fb57719aacbd93/appcompat-1.2.0/res/values-bg/values-bg.xml",
"from": {
"startLines": "2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29",
"startColumns": "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4",
"startOffsets": "105,225,331,436,522,632,753,833,910,1001,1094,1189,1283,1383,1476,1571,1679,1770,1861,1944,2058,2166,2266,2380,2487,2595,2755,2854",
"endColumns": "119,105,104,85,109,120,79,76,90,92,94,93,99,92,94,107,90,90,82,113,107,99,113,106,107,159,98,83",
"endOffsets": "220,326,431,517,627,748,828,905,996,1089,1184,1278,1378,1471,1566,1674,1765,1856,1939,2053,2161,2261,2375,2482,2590,2750,2849,2933"
}
},
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/1dc5cba16eb2c928c676e9d5f11f544c/core-1.3.0/res/values-bg/values-bg.xml",
"from": {
"startLines": "2",
"startColumns": "4",
"startOffsets": "55",
"endColumns": "100",
"endOffsets": "151"
},
"to": {
"startLines": "30",
"startColumns": "4",
"startOffsets": "2938",
"endColumns": "100",
"endOffsets": "3034"
}
}
]
}
]
}

View file

@ -1,36 +0,0 @@
{
"logs": [
{
"outputFile": "/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/android/app/build/intermediates/incremental/mergeReleaseResources/merged.dir/values-bn/values-bn.xml",
"map": [
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/1dc5cba16eb2c928c676e9d5f11f544c/core-1.3.0/res/values-bn/values-bn.xml",
"from": {
"startLines": "2",
"startColumns": "4",
"startOffsets": "55",
"endColumns": "100",
"endOffsets": "151"
},
"to": {
"startLines": "30",
"startColumns": "4",
"startOffsets": "2922",
"endColumns": "100",
"endOffsets": "3018"
}
},
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/be4c35a38818aae510fb57719aacbd93/appcompat-1.2.0/res/values-bn/values-bn.xml",
"from": {
"startLines": "2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29",
"startColumns": "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4",
"startOffsets": "105,213,319,425,514,619,740,823,905,996,1089,1183,1277,1377,1470,1565,1659,1750,1841,1927,2037,2141,2244,2352,2460,2565,2730,2835",
"endColumns": "107,105,105,88,104,120,82,81,90,92,93,93,99,92,94,93,90,90,85,109,103,102,107,107,104,164,104,86",
"endOffsets": "208,314,420,509,614,735,818,900,991,1084,1178,1272,1372,1465,1560,1654,1745,1836,1922,2032,2136,2239,2347,2455,2560,2725,2830,2917"
}
}
]
}
]
}

View file

@ -1,36 +0,0 @@
{
"logs": [
{
"outputFile": "/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/android/app/build/intermediates/incremental/mergeReleaseResources/merged.dir/values-bs/values-bs.xml",
"map": [
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/be4c35a38818aae510fb57719aacbd93/appcompat-1.2.0/res/values-bs/values-bs.xml",
"from": {
"startLines": "2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29",
"startColumns": "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4",
"startOffsets": "105,226,323,430,516,620,742,827,909,1000,1093,1188,1282,1382,1475,1570,1665,1756,1847,1935,2038,2142,2243,2348,2462,2565,2734,2830",
"endColumns": "120,96,106,85,103,121,84,81,90,92,94,93,99,92,94,94,90,90,87,102,103,100,104,113,102,168,95,86",
"endOffsets": "221,318,425,511,615,737,822,904,995,1088,1183,1277,1377,1470,1565,1660,1751,1842,1930,2033,2137,2238,2343,2457,2560,2729,2825,2912"
}
},
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/1dc5cba16eb2c928c676e9d5f11f544c/core-1.3.0/res/values-bs/values-bs.xml",
"from": {
"startLines": "2",
"startColumns": "4",
"startOffsets": "55",
"endColumns": "100",
"endOffsets": "151"
},
"to": {
"startLines": "30",
"startColumns": "4",
"startOffsets": "2917",
"endColumns": "100",
"endOffsets": "3013"
}
}
]
}
]
}

View file

@ -1,36 +0,0 @@
{
"logs": [
{
"outputFile": "/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/android/app/build/intermediates/incremental/mergeReleaseResources/merged.dir/values-ca/values-ca.xml",
"map": [
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/1dc5cba16eb2c928c676e9d5f11f544c/core-1.3.0/res/values-ca/values-ca.xml",
"from": {
"startLines": "2",
"startColumns": "4",
"startOffsets": "55",
"endColumns": "100",
"endOffsets": "151"
},
"to": {
"startLines": "30",
"startColumns": "4",
"startOffsets": "2912",
"endColumns": "100",
"endOffsets": "3008"
}
},
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/be4c35a38818aae510fb57719aacbd93/appcompat-1.2.0/res/values-ca/values-ca.xml",
"from": {
"startLines": "2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29",
"startColumns": "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4",
"startOffsets": "105,228,333,440,523,629,755,839,918,1009,1102,1195,1290,1388,1481,1574,1668,1759,1850,1931,2042,2150,2248,2358,2463,2571,2731,2830",
"endColumns": "122,104,106,82,105,125,83,78,90,92,92,94,97,92,92,93,90,90,80,110,107,97,109,104,107,159,98,81",
"endOffsets": "223,328,435,518,624,750,834,913,1004,1097,1190,1285,1383,1476,1569,1663,1754,1845,1926,2037,2145,2243,2353,2458,2566,2726,2825,2907"
}
}
]
}
]
}

View file

@ -1,36 +0,0 @@
{
"logs": [
{
"outputFile": "/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/android/app/build/intermediates/incremental/mergeReleaseResources/merged.dir/values-cs/values-cs.xml",
"map": [
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/be4c35a38818aae510fb57719aacbd93/appcompat-1.2.0/res/values-cs/values-cs.xml",
"from": {
"startLines": "2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29",
"startColumns": "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4",
"startOffsets": "105,212,314,423,509,614,731,809,885,976,1069,1164,1258,1352,1445,1540,1637,1728,1819,1903,2007,2119,2218,2324,2435,2537,2700,2798",
"endColumns": "106,101,108,85,104,116,77,75,90,92,94,93,93,92,94,96,90,90,83,103,111,98,105,110,101,162,97,82",
"endOffsets": "207,309,418,504,609,726,804,880,971,1064,1159,1253,1347,1440,1535,1632,1723,1814,1898,2002,2114,2213,2319,2430,2532,2695,2793,2876"
}
},
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/1dc5cba16eb2c928c676e9d5f11f544c/core-1.3.0/res/values-cs/values-cs.xml",
"from": {
"startLines": "2",
"startColumns": "4",
"startOffsets": "55",
"endColumns": "100",
"endOffsets": "151"
},
"to": {
"startLines": "30",
"startColumns": "4",
"startOffsets": "2881",
"endColumns": "100",
"endOffsets": "2977"
}
}
]
}
]
}

View file

@ -1,36 +0,0 @@
{
"logs": [
{
"outputFile": "/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/android/app/build/intermediates/incremental/mergeReleaseResources/merged.dir/values-da/values-da.xml",
"map": [
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/be4c35a38818aae510fb57719aacbd93/appcompat-1.2.0/res/values-da/values-da.xml",
"from": {
"startLines": "2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29",
"startColumns": "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4",
"startOffsets": "105,205,299,415,500,600,713,791,867,958,1051,1144,1238,1332,1425,1520,1618,1709,1800,1879,1987,2094,2190,2303,2406,2507,2660,2757",
"endColumns": "99,93,115,84,99,112,77,75,90,92,92,93,93,92,94,97,90,90,78,107,106,95,112,102,100,152,96,79",
"endOffsets": "200,294,410,495,595,708,786,862,953,1046,1139,1233,1327,1420,1515,1613,1704,1795,1874,1982,2089,2185,2298,2401,2502,2655,2752,2832"
}
},
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/1dc5cba16eb2c928c676e9d5f11f544c/core-1.3.0/res/values-da/values-da.xml",
"from": {
"startLines": "2",
"startColumns": "4",
"startOffsets": "55",
"endColumns": "100",
"endOffsets": "151"
},
"to": {
"startLines": "30",
"startColumns": "4",
"startOffsets": "2837",
"endColumns": "100",
"endOffsets": "2933"
}
}
]
}
]
}

View file

@ -1,77 +0,0 @@
{
"logs": [
{
"outputFile": "/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/android/app/build/intermediates/incremental/mergeReleaseResources/merged.dir/values-de/values-de.xml",
"map": [
{
"source": "/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/android/app/src/main/res/values-de/strings.xml",
"from": {
"startLines": "64,197,196,95,195,194,193,192,66,45,201,88,77,3,162,37,31,200,105,104,191,190,189,68,205,203,161,164,188,83,82,80,79,110,72,163,106,159,156,187,185,160,184,75,74,166,56,183,157,58,170,182,165,65,199,51,57,23,181,158,53,180,179,178,35,171,198,55,176,175,71,168,169,107,89,174,154,173,172,99,76,81,54,73,78,43,42,40,120,109,36,32,116,86,19,38,90,49,50,44,47,22,103,167,93,92,102,48,101,6,97,30,67,186,202,61,46,69,24,91,25,118,115,62,5,87,20,21,117,119,27,29,28,26,41,39,34,52,63,4,177,70,126,100,108,2,204,33,122,124,123,121,125,7,98,94,84,85,14,114,113,112,111,206,11,150,96,8,9,10,207,18,135,138,149,16,131,132,152,140,146,60,137,139,144,127,142,136,17,128,141,59,145,143,134,133,148,147,129,15,130,151,208,13,153,155,12",
"startColumns": "2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2",
"startOffsets": "4930,12843,12793,6677,12750,12703,12662,12614,5018,3399,13019,6249,5597,118,11278,2591,2058,12979,7646,7599,12565,12519,12475,5131,13242,13131,11235,11364,12432,5939,5891,5771,5716,7893,5337,11317,7686,11145,11026,12391,12290,11185,12247,5483,5441,11443,4439,12207,11064,4528,11625,12162,11403,4973,12933,4176,4486,1510,12124,11106,4299,12082,12041,11991,2431,11665,12882,4398,11891,11850,5296,11543,11585,7725,6296,11800,10944,11760,11709,7034,5522,5823,4342,5377,5652,3049,2968,2794,9107,7833,2472,2104,8644,6120,1149,2634,6336,3805,3996,3195,3504,1337,7517,11482,6538,6463,7307,3732,7228,414,6857,1991,5063,12331,13069,4636,3447,5174,1560,6402,1623,8870,8567,4712,336,6178,1213,1277,8720,8944,1760,1917,1839,1694,2885,2702,2357,4223,4861,171,11933,5237,9849,7078,7765,53,13180,2276,9301,9594,9447,9166,9735,487,6947,6609,5984,6056,878,8445,8288,8128,7950,13290,736,10794,6718,549,615,676,13345,1101,10270,10383,10755,1014,10107,10149,10874,10451,10651,4603,10349,10417,10585,9947,10517,10310,1060,9986,10483,4567,10617,10551,10230,10190,10721,10687,10028,972,10068,10838,13392,838,10909,10985,792",
"endColumns": "42,38,49,40,42,46,40,47,44,47,49,46,54,52,38,42,45,39,39,46,48,45,43,42,47,48,42,38,42,44,47,51,54,56,39,46,38,39,37,40,40,49,42,38,41,38,46,39,41,38,39,44,39,44,45,46,41,49,37,38,42,41,40,49,40,43,50,40,41,40,40,41,39,39,39,49,40,39,50,43,74,67,55,63,63,145,80,90,58,59,118,171,75,57,63,67,65,190,179,203,227,172,81,60,70,74,209,72,78,72,89,66,67,59,61,75,56,62,62,60,70,73,76,148,77,70,63,59,149,162,78,73,77,65,82,91,73,75,68,164,57,58,97,149,67,64,61,80,145,140,146,134,113,61,86,67,71,63,93,121,156,159,177,54,55,43,138,65,60,59,46,47,39,33,38,45,41,40,34,31,35,32,33,33,31,38,33,38,40,41,33,35,33,33,39,39,33,33,39,41,38,35,59,39,34,40,45",
"endOffsets": "4970,12879,12840,6715,12790,12747,12700,12659,5060,3444,13066,6293,5649,168,11314,2631,2101,13016,7683,7643,12611,12562,12516,5171,13287,13177,11275,11400,12472,5981,5936,5820,5768,7947,5374,11361,7722,11182,11061,12429,12328,11232,12287,5519,5480,11479,4483,12244,11103,4564,11662,12204,11440,5015,12976,4220,4525,1557,12159,11142,4339,12121,12079,12038,2469,11706,12930,4436,11930,11888,5334,11582,11622,7762,6333,11847,10982,11797,11757,7075,5594,5888,4395,5438,5713,3192,3046,2882,9163,7890,2588,2273,8717,6175,1210,2699,6399,3993,4173,3396,3729,1507,7596,11540,6606,6535,7514,3802,7304,484,6944,2055,5128,12388,13128,4709,3501,5234,1620,6460,1691,8941,8641,4858,411,6246,1274,1334,8867,9104,1836,1988,1914,1757,2965,2791,2428,4296,4927,333,11988,5293,9944,7225,7830,115,13239,2354,9444,9732,9591,9298,9846,546,7031,6674,6053,6117,969,8564,8442,8285,8125,13342,789,10835,6854,612,673,733,13389,1146,10307,10414,10791,1057,10146,10187,10906,10480,10684,4633,10380,10448,10614,9983,10548,10346,1098,10025,10514,4600,10648,10582,10267,10227,10752,10718,10065,1011,10104,10871,13449,875,10941,11023,835"
},
"to": {
"startLines": "2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,228,229,231,232,233,234,235,239,240",
"startColumns": "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4",
"startOffsets": "105,150,191,243,286,331,380,423,473,520,570,622,671,728,783,824,869,917,959,1001,1050,1101,1149,1195,1240,1290,1341,1386,1427,1472,1519,1569,1623,1680,1739,1781,1830,1871,1913,1953,1996,2039,2091,2136,2177,2221,2262,2311,2353,2397,2438,2480,2527,2569,2616,2664,2713,2757,2809,2849,2890,2935,2979,3022,3074,3117,3163,3216,3259,3303,3346,3389,3433,3475,3517,3559,3611,3654,3696,3749,3795,3872,3942,4000,4066,4132,4280,4363,4456,4517,4579,4700,4874,4952,5012,5078,5148,5216,5409,5591,5797,6027,6202,6286,6349,6422,6499,6711,6786,6867,6942,7034,7103,7173,7235,7299,7377,7436,7501,7566,7629,7702,7778,7857,8008,8088,8161,8227,8289,8441,8606,8687,8763,8843,8911,8996,9090,9166,9244,9315,9482,9542,9603,9703,9855,9925,9992,10056,10139,10287,10430,10579,10716,10832,10896,10985,11055,11129,11195,11291,11415,11574,11736,11916,11973,12031,12077,12218,12286,12349,15138,15187,15237,15279,15315,15356,15404,15448,15491,15528,15562,15600,15635,15671,15707,15741,15782,15818,15859,15902,15946,15982,16020,16056,16092,16134,16176,16212,16330,16372,16517,16558,16596,16658,16700,16917,16960",
"endColumns": "44,40,51,42,44,48,42,49,46,49,51,48,56,54,40,44,47,41,41,48,50,47,45,44,49,50,44,40,44,46,49,53,56,58,41,48,40,41,39,42,42,51,44,40,43,40,48,41,43,40,41,46,41,46,47,48,43,51,39,40,44,43,42,51,42,45,52,42,43,42,42,43,41,41,41,51,42,41,52,45,76,69,57,65,65,147,82,92,60,61,120,173,77,59,65,69,67,192,181,205,229,174,83,62,72,76,211,74,80,74,91,68,69,61,63,77,58,64,64,62,72,75,78,150,79,72,65,61,151,164,80,75,79,67,84,93,75,77,70,166,59,60,99,151,69,66,63,82,147,142,148,136,115,63,88,69,73,65,95,123,158,161,179,56,57,45,140,67,62,61,48,49,41,35,40,47,43,42,36,33,37,34,35,35,33,40,35,40,42,43,35,37,35,35,41,41,35,35,41,43,40,37,61,41,36,42,47",
"endOffsets": "145,186,238,281,326,375,418,468,515,565,617,666,723,778,819,864,912,954,996,1045,1096,1144,1190,1235,1285,1336,1381,1422,1467,1514,1564,1618,1675,1734,1776,1825,1866,1908,1948,1991,2034,2086,2131,2172,2216,2257,2306,2348,2392,2433,2475,2522,2564,2611,2659,2708,2752,2804,2844,2885,2930,2974,3017,3069,3112,3158,3211,3254,3298,3341,3384,3428,3470,3512,3554,3606,3649,3691,3744,3790,3867,3937,3995,4061,4127,4275,4358,4451,4512,4574,4695,4869,4947,5007,5073,5143,5211,5404,5586,5792,6022,6197,6281,6344,6417,6494,6706,6781,6862,6937,7029,7098,7168,7230,7294,7372,7431,7496,7561,7624,7697,7773,7852,8003,8083,8156,8222,8284,8436,8601,8682,8758,8838,8906,8991,9085,9161,9239,9310,9477,9537,9598,9698,9850,9920,9987,10051,10134,10282,10425,10574,10711,10827,10891,10980,11050,11124,11190,11286,11410,11569,11731,11911,11968,12026,12072,12213,12281,12344,12406,15182,15232,15274,15310,15351,15399,15443,15486,15523,15557,15595,15630,15666,15702,15736,15777,15813,15854,15897,15941,15977,16015,16051,16087,16129,16171,16207,16243,16367,16411,16553,16591,16653,16695,16732,16955,17003"
}
},
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/a1ac0e418c7c22501d8d66a2f6fbfb08/jetified-ucrop-2.2.3/res/values-de/values-de.xml",
"from": {
"startLines": "2,3,4",
"startColumns": "4,4,4",
"startOffsets": "55,121,179",
"endColumns": "65,57,55",
"endOffsets": "116,174,230"
},
"to": {
"startLines": "236,237,238",
"startColumns": "4,4,4",
"startOffsets": "16737,16803,16861",
"endColumns": "65,57,55",
"endOffsets": "16798,16856,16912"
}
},
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/be4c35a38818aae510fb57719aacbd93/appcompat-1.2.0/res/values-de/values-de.xml",
"from": {
"startLines": "2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29",
"startColumns": "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4",
"startOffsets": "105,210,308,420,506,612,727,805,880,972,1066,1162,1263,1370,1470,1574,1672,1770,1867,1949,2060,2162,2260,2367,2470,2574,2730,2832",
"endColumns": "104,97,111,85,105,114,77,74,91,93,95,100,106,99,103,97,97,96,81,110,101,97,106,102,103,155,101,81",
"endOffsets": "205,303,415,501,607,722,800,875,967,1061,1157,1258,1365,1465,1569,1667,1765,1862,1944,2055,2157,2255,2362,2465,2569,2725,2827,2909"
},
"to": {
"startLines": "172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,227",
"startColumns": "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4",
"startOffsets": "12411,12516,12614,12726,12812,12918,13033,13111,13186,13278,13372,13468,13569,13676,13776,13880,13978,14076,14173,14255,14366,14468,14566,14673,14776,14880,15036,16248",
"endColumns": "104,97,111,85,105,114,77,74,91,93,95,100,106,99,103,97,97,96,81,110,101,97,106,102,103,155,101,81",
"endOffsets": "12511,12609,12721,12807,12913,13028,13106,13181,13273,13367,13463,13564,13671,13771,13875,13973,14071,14168,14250,14361,14463,14561,14668,14771,14875,15031,15133,16325"
}
},
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/1dc5cba16eb2c928c676e9d5f11f544c/core-1.3.0/res/values-de/values-de.xml",
"from": {
"startLines": "2",
"startColumns": "4",
"startOffsets": "55",
"endColumns": "100",
"endOffsets": "151"
},
"to": {
"startLines": "230",
"startColumns": "4",
"startOffsets": "16416",
"endColumns": "100",
"endOffsets": "16512"
}
}
]
}
]
}

View file

@ -1,36 +0,0 @@
{
"logs": [
{
"outputFile": "/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/android/app/build/intermediates/incremental/mergeReleaseResources/merged.dir/values-el/values-el.xml",
"map": [
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/be4c35a38818aae510fb57719aacbd93/appcompat-1.2.0/res/values-el/values-el.xml",
"from": {
"startLines": "2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29",
"startColumns": "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4",
"startOffsets": "105,223,334,451,536,642,765,854,939,1030,1123,1218,1312,1412,1505,1600,1697,1788,1879,1964,2075,2184,2286,2397,2507,2615,2786,2886",
"endColumns": "117,110,116,84,105,122,88,84,90,92,94,93,99,92,94,96,90,90,84,110,108,101,110,109,107,170,99,85",
"endOffsets": "218,329,446,531,637,760,849,934,1025,1118,1213,1307,1407,1500,1595,1692,1783,1874,1959,2070,2179,2281,2392,2502,2610,2781,2881,2967"
}
},
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/1dc5cba16eb2c928c676e9d5f11f544c/core-1.3.0/res/values-el/values-el.xml",
"from": {
"startLines": "2",
"startColumns": "4",
"startOffsets": "55",
"endColumns": "100",
"endOffsets": "151"
},
"to": {
"startLines": "30",
"startColumns": "4",
"startOffsets": "2972",
"endColumns": "100",
"endOffsets": "3068"
}
}
]
}
]
}

View file

@ -1,36 +0,0 @@
{
"logs": [
{
"outputFile": "/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/android/app/build/intermediates/incremental/mergeReleaseResources/merged.dir/values-en-rAU/values-en-rAU.xml",
"map": [
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/1dc5cba16eb2c928c676e9d5f11f544c/core-1.3.0/res/values-en-rAU/values-en-rAU.xml",
"from": {
"startLines": "2",
"startColumns": "4",
"startOffsets": "55",
"endColumns": "100",
"endOffsets": "151"
},
"to": {
"startLines": "30",
"startColumns": "4",
"startOffsets": "2845",
"endColumns": "100",
"endOffsets": "2941"
}
},
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/be4c35a38818aae510fb57719aacbd93/appcompat-1.2.0/res/values-en-rAU/values-en-rAU.xml",
"from": {
"startLines": "2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29",
"startColumns": "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4",
"startOffsets": "105,209,309,417,501,601,716,794,869,960,1053,1148,1242,1342,1435,1530,1624,1715,1806,1888,1991,2094,2193,2298,2402,2506,2662,2762",
"endColumns": "103,99,107,83,99,114,77,74,90,92,94,93,99,92,94,93,90,90,81,102,102,98,104,103,103,155,99,82",
"endOffsets": "204,304,412,496,596,711,789,864,955,1048,1143,1237,1337,1430,1525,1619,1710,1801,1883,1986,2089,2188,2293,2397,2501,2657,2757,2840"
}
}
]
}
]
}

View file

@ -1,36 +0,0 @@
{
"logs": [
{
"outputFile": "/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/android/app/build/intermediates/incremental/mergeReleaseResources/merged.dir/values-en-rCA/values-en-rCA.xml",
"map": [
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/be4c35a38818aae510fb57719aacbd93/appcompat-1.2.0/res/values-en-rCA/values-en-rCA.xml",
"from": {
"startLines": "2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29",
"startColumns": "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4",
"startOffsets": "105,209,309,417,501,601,716,794,869,960,1053,1148,1242,1342,1435,1530,1624,1715,1806,1888,1991,2094,2193,2298,2402,2506,2662,2762",
"endColumns": "103,99,107,83,99,114,77,74,90,92,94,93,99,92,94,93,90,90,81,102,102,98,104,103,103,155,99,82",
"endOffsets": "204,304,412,496,596,711,789,864,955,1048,1143,1237,1337,1430,1525,1619,1710,1801,1883,1986,2089,2188,2293,2397,2501,2657,2757,2840"
}
},
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/1dc5cba16eb2c928c676e9d5f11f544c/core-1.3.0/res/values-en-rCA/values-en-rCA.xml",
"from": {
"startLines": "2",
"startColumns": "4",
"startOffsets": "55",
"endColumns": "100",
"endOffsets": "151"
},
"to": {
"startLines": "30",
"startColumns": "4",
"startOffsets": "2845",
"endColumns": "100",
"endOffsets": "2941"
}
}
]
}
]
}

View file

@ -1,36 +0,0 @@
{
"logs": [
{
"outputFile": "/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/android/app/build/intermediates/incremental/mergeReleaseResources/merged.dir/values-en-rGB/values-en-rGB.xml",
"map": [
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/1dc5cba16eb2c928c676e9d5f11f544c/core-1.3.0/res/values-en-rGB/values-en-rGB.xml",
"from": {
"startLines": "2",
"startColumns": "4",
"startOffsets": "55",
"endColumns": "100",
"endOffsets": "151"
},
"to": {
"startLines": "30",
"startColumns": "4",
"startOffsets": "2845",
"endColumns": "100",
"endOffsets": "2941"
}
},
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/be4c35a38818aae510fb57719aacbd93/appcompat-1.2.0/res/values-en-rGB/values-en-rGB.xml",
"from": {
"startLines": "2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29",
"startColumns": "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4",
"startOffsets": "105,209,309,417,501,601,716,794,869,960,1053,1148,1242,1342,1435,1530,1624,1715,1806,1888,1991,2094,2193,2298,2402,2506,2662,2762",
"endColumns": "103,99,107,83,99,114,77,74,90,92,94,93,99,92,94,93,90,90,81,102,102,98,104,103,103,155,99,82",
"endOffsets": "204,304,412,496,596,711,789,864,955,1048,1143,1237,1337,1430,1525,1619,1710,1801,1883,1986,2089,2188,2293,2397,2501,2657,2757,2840"
}
}
]
}
]
}

View file

@ -1,36 +0,0 @@
{
"logs": [
{
"outputFile": "/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/android/app/build/intermediates/incremental/mergeReleaseResources/merged.dir/values-en-rIN/values-en-rIN.xml",
"map": [
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/be4c35a38818aae510fb57719aacbd93/appcompat-1.2.0/res/values-en-rIN/values-en-rIN.xml",
"from": {
"startLines": "2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29",
"startColumns": "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4",
"startOffsets": "105,209,309,417,501,601,716,794,869,960,1053,1148,1242,1342,1435,1530,1624,1715,1806,1888,1991,2094,2193,2298,2402,2506,2662,2762",
"endColumns": "103,99,107,83,99,114,77,74,90,92,94,93,99,92,94,93,90,90,81,102,102,98,104,103,103,155,99,82",
"endOffsets": "204,304,412,496,596,711,789,864,955,1048,1143,1237,1337,1430,1525,1619,1710,1801,1883,1986,2089,2188,2293,2397,2501,2657,2757,2840"
}
},
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/1dc5cba16eb2c928c676e9d5f11f544c/core-1.3.0/res/values-en-rIN/values-en-rIN.xml",
"from": {
"startLines": "2",
"startColumns": "4",
"startOffsets": "55",
"endColumns": "100",
"endOffsets": "151"
},
"to": {
"startLines": "30",
"startColumns": "4",
"startOffsets": "2845",
"endColumns": "100",
"endOffsets": "2941"
}
}
]
}
]
}

View file

@ -1,36 +0,0 @@
{
"logs": [
{
"outputFile": "/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/android/app/build/intermediates/incremental/mergeReleaseResources/merged.dir/values-en-rXC/values-en-rXC.xml",
"map": [
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/be4c35a38818aae510fb57719aacbd93/appcompat-1.2.0/res/values-en-rXC/values-en-rXC.xml",
"from": {
"startLines": "2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29",
"startColumns": "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4",
"startOffsets": "105,312,515,725,912,1113,1329,1509,1684,1878,2072,2267,2464,2663,2858,3056,3253,3447,3641,3826,4031,4234,4435,4641,4846,5053,5327,5528",
"endColumns": "206,202,209,186,200,215,179,174,193,193,194,196,198,194,197,196,193,193,184,204,202,200,205,204,206,273,200,185",
"endOffsets": "307,510,720,907,1108,1324,1504,1679,1873,2067,2262,2459,2658,2853,3051,3248,3442,3636,3821,4026,4229,4430,4636,4841,5048,5322,5523,5709"
}
},
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/1dc5cba16eb2c928c676e9d5f11f544c/core-1.3.0/res/values-en-rXC/values-en-rXC.xml",
"from": {
"startLines": "2",
"startColumns": "4",
"startOffsets": "55",
"endColumns": "203",
"endOffsets": "254"
},
"to": {
"startLines": "30",
"startColumns": "4",
"startOffsets": "5714",
"endColumns": "203",
"endOffsets": "5913"
}
}
]
}
]
}

View file

@ -1,36 +0,0 @@
{
"logs": [
{
"outputFile": "/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/android/app/build/intermediates/incremental/mergeReleaseResources/merged.dir/values-es-rUS/values-es-rUS.xml",
"map": [
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/be4c35a38818aae510fb57719aacbd93/appcompat-1.2.0/res/values-es-rUS/values-es-rUS.xml",
"from": {
"startLines": "2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29",
"startColumns": "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4",
"startOffsets": "105,225,334,442,527,629,745,830,910,1001,1094,1189,1283,1382,1475,1574,1670,1761,1852,1934,2041,2140,2239,2347,2455,2562,2721,2821",
"endColumns": "119,108,107,84,101,115,84,79,90,92,94,93,98,92,98,95,90,90,81,106,98,98,107,107,106,158,99,82",
"endOffsets": "220,329,437,522,624,740,825,905,996,1089,1184,1278,1377,1470,1569,1665,1756,1847,1929,2036,2135,2234,2342,2450,2557,2716,2816,2899"
}
},
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/1dc5cba16eb2c928c676e9d5f11f544c/core-1.3.0/res/values-es-rUS/values-es-rUS.xml",
"from": {
"startLines": "2",
"startColumns": "4",
"startOffsets": "55",
"endColumns": "100",
"endOffsets": "151"
},
"to": {
"startLines": "30",
"startColumns": "4",
"startOffsets": "2904",
"endColumns": "100",
"endOffsets": "3000"
}
}
]
}
]
}

View file

@ -1,36 +0,0 @@
{
"logs": [
{
"outputFile": "/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/android/app/build/intermediates/incremental/mergeReleaseResources/merged.dir/values-es/values-es.xml",
"map": [
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/be4c35a38818aae510fb57719aacbd93/appcompat-1.2.0/res/values-es/values-es.xml",
"from": {
"startLines": "2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29",
"startColumns": "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4",
"startOffsets": "105,207,320,428,513,614,742,828,909,1001,1095,1192,1286,1386,1480,1576,1672,1764,1856,1938,2045,2156,2255,2363,2471,2578,2737,2836",
"endColumns": "101,112,107,84,100,127,85,80,91,93,96,93,99,93,95,95,91,91,81,106,110,98,107,107,106,158,98,82",
"endOffsets": "202,315,423,508,609,737,823,904,996,1090,1187,1281,1381,1475,1571,1667,1759,1851,1933,2040,2151,2250,2358,2466,2573,2732,2831,2914"
}
},
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/1dc5cba16eb2c928c676e9d5f11f544c/core-1.3.0/res/values-es/values-es.xml",
"from": {
"startLines": "2",
"startColumns": "4",
"startOffsets": "55",
"endColumns": "100",
"endOffsets": "151"
},
"to": {
"startLines": "30",
"startColumns": "4",
"startOffsets": "2919",
"endColumns": "100",
"endOffsets": "3015"
}
}
]
}
]
}

View file

@ -1,36 +0,0 @@
{
"logs": [
{
"outputFile": "/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/android/app/build/intermediates/incremental/mergeReleaseResources/merged.dir/values-et/values-et.xml",
"map": [
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/1dc5cba16eb2c928c676e9d5f11f544c/core-1.3.0/res/values-et/values-et.xml",
"from": {
"startLines": "2",
"startColumns": "4",
"startOffsets": "55",
"endColumns": "100",
"endOffsets": "151"
},
"to": {
"startLines": "30",
"startColumns": "4",
"startOffsets": "2910",
"endColumns": "100",
"endOffsets": "3006"
}
},
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/be4c35a38818aae510fb57719aacbd93/appcompat-1.2.0/res/values-et/values-et.xml",
"from": {
"startLines": "2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29",
"startColumns": "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4",
"startOffsets": "105,211,310,421,507,609,726,807,884,976,1070,1166,1268,1377,1471,1572,1666,1758,1851,1934,2045,2149,2248,2358,2460,2559,2725,2827",
"endColumns": "105,98,110,85,101,116,80,76,91,93,95,101,108,93,100,93,91,92,82,110,103,98,109,101,98,165,101,82",
"endOffsets": "206,305,416,502,604,721,802,879,971,1065,1161,1263,1372,1466,1567,1661,1753,1846,1929,2040,2144,2243,2353,2455,2554,2720,2822,2905"
}
}
]
}
]
}

View file

@ -1,36 +0,0 @@
{
"logs": [
{
"outputFile": "/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/android/app/build/intermediates/incremental/mergeReleaseResources/merged.dir/values-eu/values-eu.xml",
"map": [
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/1dc5cba16eb2c928c676e9d5f11f544c/core-1.3.0/res/values-eu/values-eu.xml",
"from": {
"startLines": "2",
"startColumns": "4",
"startOffsets": "55",
"endColumns": "100",
"endOffsets": "151"
},
"to": {
"startLines": "30",
"startColumns": "4",
"startOffsets": "2933",
"endColumns": "100",
"endOffsets": "3029"
}
},
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/be4c35a38818aae510fb57719aacbd93/appcompat-1.2.0/res/values-eu/values-eu.xml",
"from": {
"startLines": "2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29",
"startColumns": "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4",
"startOffsets": "105,214,312,422,508,614,738,824,905,997,1091,1187,1281,1382,1476,1572,1669,1761,1854,1936,2045,2154,2253,2362,2469,2580,2751,2850",
"endColumns": "108,97,109,85,105,123,85,80,91,93,95,93,100,93,95,96,91,92,81,108,108,98,108,106,110,170,98,82",
"endOffsets": "209,307,417,503,609,733,819,900,992,1086,1182,1276,1377,1471,1567,1664,1756,1849,1931,2040,2149,2248,2357,2464,2575,2746,2845,2928"
}
}
]
}
]
}

View file

@ -1,36 +0,0 @@
{
"logs": [
{
"outputFile": "/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/android/app/build/intermediates/incremental/mergeReleaseResources/merged.dir/values-fa/values-fa.xml",
"map": [
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/be4c35a38818aae510fb57719aacbd93/appcompat-1.2.0/res/values-fa/values-fa.xml",
"from": {
"startLines": "2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29",
"startColumns": "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4",
"startOffsets": "105,215,316,427,511,612,727,807,884,977,1072,1164,1258,1360,1455,1552,1646,1739,1829,1911,2019,2123,2221,2327,2432,2537,2694,2795",
"endColumns": "109,100,110,83,100,114,79,76,92,94,91,93,101,94,96,93,92,89,81,107,103,97,105,104,104,156,100,81",
"endOffsets": "210,311,422,506,607,722,802,879,972,1067,1159,1253,1355,1450,1547,1641,1734,1824,1906,2014,2118,2216,2322,2427,2532,2689,2790,2872"
}
},
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/1dc5cba16eb2c928c676e9d5f11f544c/core-1.3.0/res/values-fa/values-fa.xml",
"from": {
"startLines": "2",
"startColumns": "4",
"startOffsets": "55",
"endColumns": "100",
"endOffsets": "151"
},
"to": {
"startLines": "30",
"startColumns": "4",
"startOffsets": "2877",
"endColumns": "100",
"endOffsets": "2973"
}
}
]
}
]
}

View file

@ -1,53 +0,0 @@
{
"logs": [
{
"outputFile": "/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/android/app/build/intermediates/incremental/mergeReleaseResources/merged.dir/values-fi/values-fi.xml",
"map": [
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/1dc5cba16eb2c928c676e9d5f11f544c/core-1.3.0/res/values-fi/values-fi.xml",
"from": {
"startLines": "2",
"startColumns": "4",
"startOffsets": "55",
"endColumns": "100",
"endOffsets": "151"
},
"to": {
"startLines": "30",
"startColumns": "4",
"startOffsets": "2856",
"endColumns": "100",
"endOffsets": "2952"
}
},
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/be4c35a38818aae510fb57719aacbd93/appcompat-1.2.0/res/values-fi/values-fi.xml",
"from": {
"startLines": "2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29",
"startColumns": "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4",
"startOffsets": "105,213,313,422,508,613,731,817,896,987,1080,1175,1269,1363,1456,1552,1651,1742,1836,1916,2023,2124,2221,2327,2427,2525,2675,2775",
"endColumns": "107,99,108,85,104,117,85,78,90,92,94,93,93,92,95,98,90,93,79,106,100,96,105,99,97,149,99,80",
"endOffsets": "208,308,417,503,608,726,812,891,982,1075,1170,1264,1358,1451,1547,1646,1737,1831,1911,2018,2119,2216,2322,2422,2520,2670,2770,2851"
}
},
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/a1ac0e418c7c22501d8d66a2f6fbfb08/jetified-ucrop-2.2.3/res/values-fi/values-fi.xml",
"from": {
"startLines": "2,3,4,5",
"startColumns": "4,4,4,4",
"startOffsets": "55,178,243,293",
"endColumns": "122,64,49,48",
"endOffsets": "173,238,288,337"
},
"to": {
"startLines": "31,32,33,34",
"startColumns": "4,4,4,4",
"startOffsets": "2957,3080,3145,3195",
"endColumns": "122,64,49,48",
"endOffsets": "3075,3140,3190,3239"
}
}
]
}
]
}

View file

@ -1,36 +0,0 @@
{
"logs": [
{
"outputFile": "/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/android/app/build/intermediates/incremental/mergeReleaseResources/merged.dir/values-fr-rCA/values-fr-rCA.xml",
"map": [
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/1dc5cba16eb2c928c676e9d5f11f544c/core-1.3.0/res/values-fr-rCA/values-fr-rCA.xml",
"from": {
"startLines": "2",
"startColumns": "4",
"startOffsets": "55",
"endColumns": "100",
"endOffsets": "151"
},
"to": {
"startLines": "30",
"startColumns": "4",
"startOffsets": "2942",
"endColumns": "100",
"endOffsets": "3038"
}
},
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/be4c35a38818aae510fb57719aacbd93/appcompat-1.2.0/res/values-fr-rCA/values-fr-rCA.xml",
"from": {
"startLines": "2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29",
"startColumns": "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4",
"startOffsets": "105,216,323,433,520,626,756,841,921,1012,1105,1203,1298,1398,1491,1584,1679,1770,1861,1947,2057,2168,2271,2382,2490,2597,2756,2855",
"endColumns": "110,106,109,86,105,129,84,79,90,92,97,94,99,92,92,94,90,90,85,109,110,102,110,107,106,158,98,86",
"endOffsets": "211,318,428,515,621,751,836,916,1007,1100,1198,1293,1393,1486,1579,1674,1765,1856,1942,2052,2163,2266,2377,2485,2592,2751,2850,2937"
}
}
]
}
]
}

View file

@ -1,53 +0,0 @@
{
"logs": [
{
"outputFile": "/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/android/app/build/intermediates/incremental/mergeReleaseResources/merged.dir/values-fr/values-fr.xml",
"map": [
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/a1ac0e418c7c22501d8d66a2f6fbfb08/jetified-ucrop-2.2.3/res/values-fr/values-fr.xml",
"from": {
"startLines": "2,3,4",
"startColumns": "4,4,4",
"startOffsets": "55,124,182",
"endColumns": "68,57,52",
"endOffsets": "119,177,230"
},
"to": {
"startLines": "31,32,33",
"startColumns": "4,4,4",
"startOffsets": "3035,3104,3162",
"endColumns": "68,57,52",
"endOffsets": "3099,3157,3210"
}
},
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/be4c35a38818aae510fb57719aacbd93/appcompat-1.2.0/res/values-fr/values-fr.xml",
"from": {
"startLines": "2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29",
"startColumns": "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4",
"startOffsets": "105,216,331,441,523,629,759,837,913,1004,1097,1195,1290,1390,1483,1576,1671,1762,1853,1939,2049,2160,2263,2374,2482,2589,2748,2847",
"endColumns": "110,114,109,81,105,129,77,75,90,92,97,94,99,92,92,94,90,90,85,109,110,102,110,107,106,158,98,86",
"endOffsets": "211,326,436,518,624,754,832,908,999,1092,1190,1285,1385,1478,1571,1666,1757,1848,1934,2044,2155,2258,2369,2477,2584,2743,2842,2929"
}
},
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/1dc5cba16eb2c928c676e9d5f11f544c/core-1.3.0/res/values-fr/values-fr.xml",
"from": {
"startLines": "2",
"startColumns": "4",
"startOffsets": "55",
"endColumns": "100",
"endOffsets": "151"
},
"to": {
"startLines": "30",
"startColumns": "4",
"startOffsets": "2934",
"endColumns": "100",
"endOffsets": "3030"
}
}
]
}
]
}

View file

@ -1,36 +0,0 @@
{
"logs": [
{
"outputFile": "/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/android/app/build/intermediates/incremental/mergeReleaseResources/merged.dir/values-gl/values-gl.xml",
"map": [
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/be4c35a38818aae510fb57719aacbd93/appcompat-1.2.0/res/values-gl/values-gl.xml",
"from": {
"startLines": "2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29",
"startColumns": "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4",
"startOffsets": "105,209,313,421,506,607,735,820,900,992,1086,1183,1277,1377,1471,1567,1662,1754,1846,1927,2035,2142,2249,2358,2463,2577,2754,2853",
"endColumns": "103,103,107,84,100,127,84,79,91,93,96,93,99,93,95,94,91,91,80,107,106,106,108,104,113,176,98,82",
"endOffsets": "204,308,416,501,602,730,815,895,987,1081,1178,1272,1372,1466,1562,1657,1749,1841,1922,2030,2137,2244,2353,2458,2572,2749,2848,2931"
}
},
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/1dc5cba16eb2c928c676e9d5f11f544c/core-1.3.0/res/values-gl/values-gl.xml",
"from": {
"startLines": "2",
"startColumns": "4",
"startOffsets": "55",
"endColumns": "100",
"endOffsets": "151"
},
"to": {
"startLines": "30",
"startColumns": "4",
"startOffsets": "2936",
"endColumns": "100",
"endOffsets": "3032"
}
}
]
}
]
}

View file

@ -1,36 +0,0 @@
{
"logs": [
{
"outputFile": "/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/android/app/build/intermediates/incremental/mergeReleaseResources/merged.dir/values-gu/values-gu.xml",
"map": [
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/be4c35a38818aae510fb57719aacbd93/appcompat-1.2.0/res/values-gu/values-gu.xml",
"from": {
"startLines": "2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29",
"startColumns": "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4",
"startOffsets": "105,212,316,423,510,610,730,808,885,976,1069,1164,1258,1358,1451,1546,1640,1731,1822,1902,2008,2109,2206,2315,2415,2525,2685,2788",
"endColumns": "106,103,106,86,99,119,77,76,90,92,94,93,99,92,94,93,90,90,79,105,100,96,108,99,109,159,102,80",
"endOffsets": "207,311,418,505,605,725,803,880,971,1064,1159,1253,1353,1446,1541,1635,1726,1817,1897,2003,2104,2201,2310,2410,2520,2680,2783,2864"
}
},
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/1dc5cba16eb2c928c676e9d5f11f544c/core-1.3.0/res/values-gu/values-gu.xml",
"from": {
"startLines": "2",
"startColumns": "4",
"startOffsets": "55",
"endColumns": "100",
"endOffsets": "151"
},
"to": {
"startLines": "30",
"startColumns": "4",
"startOffsets": "2869",
"endColumns": "100",
"endOffsets": "2965"
}
}
]
}
]
}

View file

@ -1,19 +0,0 @@
{
"logs": [
{
"outputFile": "/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/android/app/build/intermediates/incremental/mergeReleaseResources/merged.dir/values-h360dp-land-v13/values-h360dp-land-v13.xml",
"map": [
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/42dea8ecc581c81857f6fd9072fdd732/material-1.2.1/res/values-h360dp-land-v13/values-h360dp-land-v13.xml",
"from": {
"startLines": "2,3,4,5,6,7,8,9,10",
"startColumns": "4,4,4,4,4,4,4,4,4",
"startOffsets": "55,114,170,226,293,358,413,478,547",
"endColumns": "58,55,55,66,64,54,64,68,68",
"endOffsets": "109,165,221,288,353,408,473,542,611"
}
}
]
}
]
}

View file

@ -1,19 +0,0 @@
{
"logs": [
{
"outputFile": "/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/android/app/build/intermediates/incremental/mergeReleaseResources/merged.dir/values-h480dp-land-v13/values-h480dp-land-v13.xml",
"map": [
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/42dea8ecc581c81857f6fd9072fdd732/material-1.2.1/res/values-h480dp-land-v13/values-h480dp-land-v13.xml",
"from": {
"startLines": "2,3,4,5,6,7,8,9,10",
"startColumns": "4,4,4,4,4,4,4,4,4",
"startOffsets": "55,114,170,226,293,358,413,478,547",
"endColumns": "58,55,55,66,64,54,64,68,68",
"endOffsets": "109,165,221,288,353,408,473,542,611"
}
}
]
}
]
}

View file

@ -1,19 +0,0 @@
{
"logs": [
{
"outputFile": "/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/android/app/build/intermediates/incremental/mergeReleaseResources/merged.dir/values-h720dp-v13/values-h720dp-v13.xml",
"map": [
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/be4c35a38818aae510fb57719aacbd93/appcompat-1.2.0/res/values-h720dp-v13/values-h720dp-v13.xml",
"from": {
"startLines": "2",
"startColumns": "4",
"startOffsets": "55",
"endColumns": "66",
"endOffsets": "117"
}
}
]
}
]
}

View file

@ -1,20 +0,0 @@
{
"logs": [
{
"outputFile": "/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/android/app/build/intermediates/incremental/mergeReleaseResources/merged.dir/values-hdpi-v4/values-hdpi-v4.xml",
"map": [
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/be4c35a38818aae510fb57719aacbd93/appcompat-1.2.0/res/values-hdpi-v4/values-hdpi-v4.xml",
"from": {
"startLines": "2",
"startColumns": "4",
"startOffsets": "55",
"endLines": "6",
"endColumns": "13",
"endOffsets": "327"
}
}
]
}
]
}

View file

@ -1,36 +0,0 @@
{
"logs": [
{
"outputFile": "/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/android/app/build/intermediates/incremental/mergeReleaseResources/merged.dir/values-hi/values-hi.xml",
"map": [
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/1dc5cba16eb2c928c676e9d5f11f544c/core-1.3.0/res/values-hi/values-hi.xml",
"from": {
"startLines": "2",
"startColumns": "4",
"startOffsets": "55",
"endColumns": "100",
"endOffsets": "151"
},
"to": {
"startLines": "30",
"startColumns": "4",
"startOffsets": "2869",
"endColumns": "100",
"endOffsets": "2965"
}
},
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/be4c35a38818aae510fb57719aacbd93/appcompat-1.2.0/res/values-hi/values-hi.xml",
"from": {
"startLines": "2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29",
"startColumns": "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4",
"startOffsets": "105,211,309,419,505,607,728,806,883,974,1067,1162,1256,1356,1449,1544,1638,1729,1820,1901,2006,2108,2206,2316,2419,2528,2686,2787",
"endColumns": "105,97,109,85,101,120,77,76,90,92,94,93,99,92,94,93,90,90,80,104,101,97,109,102,108,157,100,81",
"endOffsets": "206,304,414,500,602,723,801,878,969,1062,1157,1251,1351,1444,1539,1633,1724,1815,1896,2001,2103,2201,2311,2414,2523,2681,2782,2864"
}
}
]
}
]
}

View file

@ -1,36 +0,0 @@
{
"logs": [
{
"outputFile": "/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/android/app/build/intermediates/incremental/mergeReleaseResources/merged.dir/values-hr/values-hr.xml",
"map": [
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/be4c35a38818aae510fb57719aacbd93/appcompat-1.2.0/res/values-hr/values-hr.xml",
"from": {
"startLines": "2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29",
"startColumns": "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4",
"startOffsets": "105,210,305,412,498,602,721,806,888,979,1072,1167,1261,1361,1454,1549,1644,1735,1826,1912,2016,2128,2229,2334,2448,2550,2719,2816",
"endColumns": "104,94,106,85,103,118,84,81,90,92,94,93,99,92,94,94,90,90,85,103,111,100,104,113,101,168,96,84",
"endOffsets": "205,300,407,493,597,716,801,883,974,1067,1162,1256,1356,1449,1544,1639,1730,1821,1907,2011,2123,2224,2329,2443,2545,2714,2811,2896"
}
},
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/1dc5cba16eb2c928c676e9d5f11f544c/core-1.3.0/res/values-hr/values-hr.xml",
"from": {
"startLines": "2",
"startColumns": "4",
"startOffsets": "55",
"endColumns": "100",
"endOffsets": "151"
},
"to": {
"startLines": "30",
"startColumns": "4",
"startOffsets": "2901",
"endColumns": "100",
"endOffsets": "2997"
}
}
]
}
]
}

View file

@ -1,36 +0,0 @@
{
"logs": [
{
"outputFile": "/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/android/app/build/intermediates/incremental/mergeReleaseResources/merged.dir/values-hu/values-hu.xml",
"map": [
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/1dc5cba16eb2c928c676e9d5f11f544c/core-1.3.0/res/values-hu/values-hu.xml",
"from": {
"startLines": "2",
"startColumns": "4",
"startOffsets": "55",
"endColumns": "100",
"endOffsets": "151"
},
"to": {
"startLines": "30",
"startColumns": "4",
"startOffsets": "2943",
"endColumns": "100",
"endOffsets": "3039"
}
},
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/be4c35a38818aae510fb57719aacbd93/appcompat-1.2.0/res/values-hu/values-hu.xml",
"from": {
"startLines": "2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29",
"startColumns": "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4",
"startOffsets": "105,213,305,420,504,619,742,819,894,985,1078,1173,1267,1367,1460,1555,1650,1741,1832,1915,2025,2135,2235,2346,2455,2574,2756,2859",
"endColumns": "107,91,114,83,114,122,76,74,90,92,94,93,99,92,94,94,90,90,82,109,109,99,110,108,118,181,102,83",
"endOffsets": "208,300,415,499,614,737,814,889,980,1073,1168,1262,1362,1455,1550,1645,1736,1827,1910,2020,2130,2230,2341,2450,2569,2751,2854,2938"
}
}
]
}
]
}

View file

@ -1,36 +0,0 @@
{
"logs": [
{
"outputFile": "/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/android/app/build/intermediates/incremental/mergeReleaseResources/merged.dir/values-hy/values-hy.xml",
"map": [
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/be4c35a38818aae510fb57719aacbd93/appcompat-1.2.0/res/values-hy/values-hy.xml",
"from": {
"startLines": "2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29",
"startColumns": "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4",
"startOffsets": "105,213,313,423,512,618,735,817,897,988,1081,1176,1270,1370,1463,1558,1652,1743,1834,1917,2023,2129,2228,2338,2446,2547,2717,2814",
"endColumns": "107,99,109,88,105,116,81,79,90,92,94,93,99,92,94,93,90,90,82,105,105,98,109,107,100,169,96,82",
"endOffsets": "208,308,418,507,613,730,812,892,983,1076,1171,1265,1365,1458,1553,1647,1738,1829,1912,2018,2124,2223,2333,2441,2542,2712,2809,2892"
}
},
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/1dc5cba16eb2c928c676e9d5f11f544c/core-1.3.0/res/values-hy/values-hy.xml",
"from": {
"startLines": "2",
"startColumns": "4",
"startOffsets": "55",
"endColumns": "100",
"endOffsets": "151"
},
"to": {
"startLines": "30",
"startColumns": "4",
"startOffsets": "2897",
"endColumns": "100",
"endOffsets": "2993"
}
}
]
}
]
}

View file

@ -1,36 +0,0 @@
{
"logs": [
{
"outputFile": "/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/android/app/build/intermediates/incremental/mergeReleaseResources/merged.dir/values-in/values-in.xml",
"map": [
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/be4c35a38818aae510fb57719aacbd93/appcompat-1.2.0/res/values-in/values-in.xml",
"from": {
"startLines": "2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29",
"startColumns": "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4",
"startOffsets": "105,220,324,429,516,620,736,819,897,988,1081,1176,1270,1370,1463,1558,1652,1743,1834,1920,2023,2128,2229,2333,2442,2550,2710,2809",
"endColumns": "114,103,104,86,103,115,82,77,90,92,94,93,99,92,94,93,90,90,85,102,104,100,103,108,107,159,98,84",
"endOffsets": "215,319,424,511,615,731,814,892,983,1076,1171,1265,1365,1458,1553,1647,1738,1829,1915,2018,2123,2224,2328,2437,2545,2705,2804,2889"
}
},
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/1dc5cba16eb2c928c676e9d5f11f544c/core-1.3.0/res/values-in/values-in.xml",
"from": {
"startLines": "2",
"startColumns": "4",
"startOffsets": "55",
"endColumns": "100",
"endOffsets": "151"
},
"to": {
"startLines": "30",
"startColumns": "4",
"startOffsets": "2894",
"endColumns": "100",
"endOffsets": "2990"
}
}
]
}
]
}

View file

@ -1,36 +0,0 @@
{
"logs": [
{
"outputFile": "/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/android/app/build/intermediates/incremental/mergeReleaseResources/merged.dir/values-is/values-is.xml",
"map": [
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/1dc5cba16eb2c928c676e9d5f11f544c/core-1.3.0/res/values-is/values-is.xml",
"from": {
"startLines": "2",
"startColumns": "4",
"startOffsets": "55",
"endColumns": "100",
"endOffsets": "151"
},
"to": {
"startLines": "30",
"startColumns": "4",
"startOffsets": "2860",
"endColumns": "100",
"endOffsets": "2956"
}
},
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/be4c35a38818aae510fb57719aacbd93/appcompat-1.2.0/res/values-is/values-is.xml",
"from": {
"startLines": "2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29",
"startColumns": "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4",
"startOffsets": "105,205,302,414,499,600,714,795,874,965,1058,1151,1245,1351,1444,1539,1634,1725,1819,1900,2010,2117,2214,2323,2423,2526,2681,2779",
"endColumns": "99,96,111,84,100,113,80,78,90,92,92,93,105,92,94,94,90,93,80,109,106,96,108,99,102,154,97,80",
"endOffsets": "200,297,409,494,595,709,790,869,960,1053,1146,1240,1346,1439,1534,1629,1720,1814,1895,2005,2112,2209,2318,2418,2521,2676,2774,2855"
}
}
]
}
]
}

View file

@ -1,53 +0,0 @@
{
"logs": [
{
"outputFile": "/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/android/app/build/intermediates/incremental/mergeReleaseResources/merged.dir/values-it/values-it.xml",
"map": [
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/be4c35a38818aae510fb57719aacbd93/appcompat-1.2.0/res/values-it/values-it.xml",
"from": {
"startLines": "2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29",
"startColumns": "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4",
"startOffsets": "105,210,313,422,506,611,730,808,883,975,1069,1162,1256,1357,1451,1548,1643,1735,1827,1908,2014,2121,2219,2323,2429,2536,2699,2799",
"endColumns": "104,102,108,83,104,118,77,74,91,93,92,93,100,93,96,94,91,91,80,105,106,97,103,105,106,162,99,81",
"endOffsets": "205,308,417,501,606,725,803,878,970,1064,1157,1251,1352,1446,1543,1638,1730,1822,1903,2009,2116,2214,2318,2424,2531,2694,2794,2876"
}
},
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/1dc5cba16eb2c928c676e9d5f11f544c/core-1.3.0/res/values-it/values-it.xml",
"from": {
"startLines": "2",
"startColumns": "4",
"startOffsets": "55",
"endColumns": "100",
"endOffsets": "151"
},
"to": {
"startLines": "30",
"startColumns": "4",
"startOffsets": "2881",
"endColumns": "100",
"endOffsets": "2977"
}
},
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/a1ac0e418c7c22501d8d66a2f6fbfb08/jetified-ucrop-2.2.3/res/values-it/values-it.xml",
"from": {
"startLines": "2,3,4",
"startColumns": "4,4,4",
"startOffsets": "55,120,179",
"endColumns": "64,58,50",
"endOffsets": "115,174,225"
},
"to": {
"startLines": "31,32,33",
"startColumns": "4,4,4",
"startOffsets": "2982,3047,3106",
"endColumns": "64,58,50",
"endOffsets": "3042,3101,3152"
}
}
]
}
]
}

View file

@ -1,36 +0,0 @@
{
"logs": [
{
"outputFile": "/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/android/app/build/intermediates/incremental/mergeReleaseResources/merged.dir/values-iw/values-iw.xml",
"map": [
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/be4c35a38818aae510fb57719aacbd93/appcompat-1.2.0/res/values-iw/values-iw.xml",
"from": {
"startLines": "2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29",
"startColumns": "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4",
"startOffsets": "105,210,310,418,502,604,720,799,877,968,1062,1156,1250,1350,1443,1538,1631,1722,1814,1895,2000,2103,2201,2306,2408,2510,2664,2761",
"endColumns": "104,99,107,83,101,115,78,77,90,93,93,93,99,92,94,92,90,91,80,104,102,97,104,101,101,153,96,81",
"endOffsets": "205,305,413,497,599,715,794,872,963,1057,1151,1245,1345,1438,1533,1626,1717,1809,1890,1995,2098,2196,2301,2403,2505,2659,2756,2838"
}
},
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/1dc5cba16eb2c928c676e9d5f11f544c/core-1.3.0/res/values-iw/values-iw.xml",
"from": {
"startLines": "2",
"startColumns": "4",
"startOffsets": "55",
"endColumns": "100",
"endOffsets": "151"
},
"to": {
"startLines": "30",
"startColumns": "4",
"startOffsets": "2843",
"endColumns": "100",
"endOffsets": "2939"
}
}
]
}
]
}

View file

@ -1,36 +0,0 @@
{
"logs": [
{
"outputFile": "/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/android/app/build/intermediates/incremental/mergeReleaseResources/merged.dir/values-ja/values-ja.xml",
"map": [
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/1dc5cba16eb2c928c676e9d5f11f544c/core-1.3.0/res/values-ja/values-ja.xml",
"from": {
"startLines": "2",
"startColumns": "4",
"startOffsets": "55",
"endColumns": "100",
"endOffsets": "151"
},
"to": {
"startLines": "30",
"startColumns": "4",
"startOffsets": "2770",
"endColumns": "100",
"endOffsets": "2866"
}
},
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/be4c35a38818aae510fb57719aacbd93/appcompat-1.2.0/res/values-ja/values-ja.xml",
"from": {
"startLines": "2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29",
"startColumns": "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4",
"startOffsets": "105,202,295,400,482,580,688,766,841,932,1025,1120,1214,1314,1407,1502,1596,1687,1778,1856,1958,2056,2151,2254,2350,2446,2594,2691",
"endColumns": "96,92,104,81,97,107,77,74,90,92,94,93,99,92,94,93,90,90,77,101,97,94,102,95,95,147,96,78",
"endOffsets": "197,290,395,477,575,683,761,836,927,1020,1115,1209,1309,1402,1497,1591,1682,1773,1851,1953,2051,2146,2249,2345,2441,2589,2686,2765"
}
}
]
}
]
}

View file

@ -1,36 +0,0 @@
{
"logs": [
{
"outputFile": "/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/android/app/build/intermediates/incremental/mergeReleaseResources/merged.dir/values-ka/values-ka.xml",
"map": [
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/1dc5cba16eb2c928c676e9d5f11f544c/core-1.3.0/res/values-ka/values-ka.xml",
"from": {
"startLines": "2",
"startColumns": "4",
"startOffsets": "55",
"endColumns": "100",
"endOffsets": "151"
},
"to": {
"startLines": "30",
"startColumns": "4",
"startOffsets": "2890",
"endColumns": "100",
"endOffsets": "2986"
}
},
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/be4c35a38818aae510fb57719aacbd93/appcompat-1.2.0/res/values-ka/values-ka.xml",
"from": {
"startLines": "2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29",
"startColumns": "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4",
"startOffsets": "105,213,316,427,513,618,731,814,893,984,1077,1172,1266,1366,1459,1554,1649,1740,1831,1912,2025,2131,2229,2342,2447,2551,2709,2808",
"endColumns": "107,102,110,85,104,112,82,78,90,92,94,93,99,92,94,94,90,90,80,112,105,97,112,104,103,157,98,81",
"endOffsets": "208,311,422,508,613,726,809,888,979,1072,1167,1261,1361,1454,1549,1644,1735,1826,1907,2020,2126,2224,2337,2442,2546,2704,2803,2885"
}
}
]
}
]
}

View file

@ -1,36 +0,0 @@
{
"logs": [
{
"outputFile": "/mnt/82e5ff15-70b8-44a5-bb66-55688fc2381f/Freelance/Projects/WIP/EnRecipes/Developement/EnRecipes-App/platforms/android/app/build/intermediates/incremental/mergeReleaseResources/merged.dir/values-kk/values-kk.xml",
"map": [
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/1dc5cba16eb2c928c676e9d5f11f544c/core-1.3.0/res/values-kk/values-kk.xml",
"from": {
"startLines": "2",
"startColumns": "4",
"startOffsets": "55",
"endColumns": "100",
"endOffsets": "151"
},
"to": {
"startLines": "30",
"startColumns": "4",
"startOffsets": "2878",
"endColumns": "100",
"endOffsets": "2974"
}
},
{
"source": "/home/vrb/.gradle/caches/transforms-2/files-2.1/be4c35a38818aae510fb57719aacbd93/appcompat-1.2.0/res/values-kk/values-kk.xml",
"from": {
"startLines": "2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29",
"startColumns": "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4",
"startOffsets": "105,213,318,428,513,619,738,818,895,986,1079,1174,1268,1368,1461,1556,1653,1744,1835,1916,2021,2124,2222,2329,2435,2535,2701,2796",
"endColumns": "107,104,109,84,105,118,79,76,90,92,94,93,99,92,94,96,90,90,80,104,102,97,106,105,99,165,94,81",
"endOffsets": "208,313,423,508,614,733,813,890,981,1074,1169,1263,1363,1456,1551,1648,1739,1830,1911,2016,2119,2217,2324,2430,2530,2696,2791,2873"
}
}
]
}
]
}

Some files were not shown because too many files have changed in this diff Show more