diff --git a/docs/docs/documentation/getting-started/faq.md b/docs/docs/documentation/getting-started/faq.md new file mode 100644 index 000000000000..3cb838264977 --- /dev/null +++ b/docs/docs/documentation/getting-started/faq.md @@ -0,0 +1,42 @@ +# Frequently Asked Questions + +## How can I change the theme? + +You can change the theme by settings the environment variables on the frontend container. + +Links: + +- [Frontend Theme](/mealie/documentation/getting-started/installation/frontend-config#themeing) + +## How can I change the language? + +Languages need to be set on the frontend and backend containers as ENV variables. + +Links + +- [Frontend Config](/mealie/documentation/getting-started/installation/frontend-config/) +- [Backend Config](/mealie/documentation/getting-started/installation/backend-config/) + +## How can I change the Login Session Timeout? + +Login session can be configured by setting the `TOKEN_TIME` variable on the backend container. + +- [Backend Config](/mealie/documentation/getting-started/installation/backend-config/) + +## Can I serve Mealie on a subpath? + +No. Due to limitations from the Javascript Framework, mealie doesn't support serving Mealie on a subpath. + +## Can I install Mealie without docker? + +Yes, you can install Mealie on your local machine. HOWEVER, it is recommended that you don't. Managing non-system versions of python, node, and npm is a pain. Moreover updating and upgrading your system with this configuration is unsupported and will likely require manual interventions. If you insist on installing Mealie on your local machine, you can use the links below to help guide your path. + +- [Advanced Installation](/mealie/documentation/getting-started/installation/advanced/) + +## How I can attach an Image or Video to a Recipe? + +Yes. Mealie's Recipe Steps and other fields support the markdown syntax and therefor supports images and videos. To attach an image to the recipe, you can upload it as an asset and use the provided copy button to generate the html image tag required to render the image. For videos, Mealie provides no way to host videos. You'll need to host your videos with another provider and embed them in your recipe. Generally, the video provider will provide a link to the video and the html tag required to render the video. For example, youtube provides the following link that works inside a step. You can adjust the width and height attributes as necessary to ensure a fit. + +```html + +``` \ No newline at end of file diff --git a/docs/docs/documentation/getting-started/installation/installation-checklist.md b/docs/docs/documentation/getting-started/installation/installation-checklist.md index cfef45de850a..cc1f5b0e8f12 100644 --- a/docs/docs/documentation/getting-started/installation/installation-checklist.md +++ b/docs/docs/documentation/getting-started/installation/installation-checklist.md @@ -2,7 +2,7 @@ To install Mealie on your server there are a few steps for proper configuration. Let's go through them. -## Step 0: Pre-work +## Pre-work To deploy mealie on your local network it is highly recommended to use docker to deploy the image straight from dockerhub. Using the docker-compose templates provided, you should be able to get a stack up and running easily by changing a few default values and deploying. You can deploy with either SQLite (default) or Postgres. SQLite is sufficient for most use cases. Additionally, with Mealie's automated backup and restore functionality, you can easily move between SQLite and Postgres as you wish. diff --git a/docs/docs/documentation/getting-started/introduction.md b/docs/docs/documentation/getting-started/introduction.md index 12c788f98603..cad32e1910c3 100644 --- a/docs/docs/documentation/getting-started/introduction.md +++ b/docs/docs/documentation/getting-started/introduction.md @@ -2,7 +2,7 @@ Mealie is a self hosted recipe manager and meal planner with a RestAPI backend and a reactive frontend application built in Vue for a pleasant user experience for the whole family. Easily add recipes into your database by providing the url and Mealie will automatically import the relevant data or add a family recipe with the UI editor. Mealie also provides an API for interactions from 3rd party applications. -[Remember to join the Discord](https://discord.gg/QuStdQGSGK)! +[Remember to join the Discord](https://discord.gg/QuStdQGSGK) !!! note In some of the demo gifs the styling may be different than the finale application. demos were done during development prior to finale styling. diff --git a/docs/docs/overrides/api.html b/docs/docs/overrides/api.html index c971cd76b2ef..95b6e816e7bc 100644 --- a/docs/docs/overrides/api.html +++ b/docs/docs/overrides/api.html @@ -14,7 +14,7 @@
diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml index aa06c1d145ed..da823f6dc5e4 100644 --- a/docs/mkdocs.yml +++ b/docs/mkdocs.yml @@ -55,7 +55,9 @@ nav: - Getting Started: - Introduction: "documentation/getting-started/introduction.md" - Updating: "documentation/getting-started/updating.md" + - FAQ: "documentation/getting-started/faq.md" - API: "documentation/getting-started/api-usage.md" + - Installation: - Installation Checklist: "documentation/getting-started/installation/installation-checklist.md" - SQLite (Recommended): "documentation/getting-started/installation/sqlite.md" @@ -63,6 +65,7 @@ nav: - Frontend Configuration: "documentation/getting-started/installation/frontend-config.md" - Backend Configuration: "documentation/getting-started/installation/backend-config.md" - Advanced: "documentation/getting-started/installation/advanced.md" + - Recipes: - Working With Recipes: "documentation/recipes/recipes.md" - Organizing Recipes: "documentation/recipes/organizing-recipes.md" @@ -88,7 +91,9 @@ nav: - Reverse Proxy (SWAG): "documentation/community-guide/swag.md" - Home Assistant: "documentation/community-guide/home-assistant.md" - Bulk Url Import: "documentation/community-guide/bulk-url-import.md" + - API Reference: "api/redoc.md" + - Contributors Guide: - Non-Code: "contributors/non-coders.md" - Translating: "contributors/translating.md" @@ -99,7 +104,9 @@ nav: - Style Guide: "contributors/developers-guide/style-guide.md" - Guides: - Improving Ingredient Parser: "contributors/guides/ingredient-parser.md" + - Development Road Map: "roadmap.md" + - Change Log: - v1.0.0 A Whole New App: "changelog/v1.0.0.md" - v0.5.2 Misc Updates: "changelog/v0.5.2.md" diff --git a/frontend/api/admin-api.ts b/frontend/api/admin-api.ts index d0ee28c42113..951faf5aee63 100644 --- a/frontend/api/admin-api.ts +++ b/frontend/api/admin-api.ts @@ -1,11 +1,13 @@ import { AdminAboutAPI } from "./admin/admin-about"; import { AdminTaskAPI } from "./admin/admin-tasks"; +import { AdminUsersApi } from "./admin/admin-users"; import { ApiRequestInstance } from "~/types/api"; export class AdminAPI { private static instance: AdminAPI; public about: AdminAboutAPI; public serverTasks: AdminTaskAPI; + public users: AdminUsersApi; constructor(requests: ApiRequestInstance) { if (AdminAPI.instance instanceof AdminAPI) { @@ -14,6 +16,7 @@ export class AdminAPI { this.about = new AdminAboutAPI(requests); this.serverTasks = new AdminTaskAPI(requests); + this.users = new AdminUsersApi(requests); Object.freeze(this); AdminAPI.instance = this; diff --git a/frontend/api/admin/admin-users.ts b/frontend/api/admin/admin-users.ts new file mode 100644 index 000000000000..314a383fbd46 --- /dev/null +++ b/frontend/api/admin/admin-users.ts @@ -0,0 +1,39 @@ +import { BaseCRUDAPI } from "../_base"; + +const prefix = "/api"; + +interface UserCreate { + username: string; + fullName: string; + email: string; + admin: boolean; + group: string; + advanced: boolean; + canInvite: boolean; + canManage: boolean; + canOrganize: boolean; + password: string; +} + +export interface UserToken { + name: string; + id: number; + createdAt: Date; +} + +interface UserRead extends UserToken { + id: number; + groupId: number; + favoriteRecipes: any[]; + tokens: UserToken[]; +} + +const routes = { + adminUsers: `${prefix}/admin/users`, + adminUsersId: (tag: string) => `${prefix}/admin/users/${tag}`, +}; + +export class AdminUsersApi extends BaseCRUDAPI { + baseRoute: string = routes.adminUsers; + itemRoute = routes.adminUsersId; +} diff --git a/frontend/components/Layout/AppFloatingButton.vue b/frontend/components/Layout/AppFloatingButton.vue deleted file mode 100644 index 66a1d135e3d9..000000000000 --- a/frontend/components/Layout/AppFloatingButton.vue +++ /dev/null @@ -1,288 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/frontend/components/global/AppButtonUpload.vue b/frontend/components/global/AppButtonUpload.vue index 81fa9ff3d757..cab57c00b061 100644 --- a/frontend/components/global/AppButtonUpload.vue +++ b/frontend/components/global/AppButtonUpload.vue @@ -1,8 +1,8 @@ +
+ +
@@ -115,6 +125,7 @@ export default defineComponent({ headers: [ { text: i18n.t("general.name"), value: "name" }, { text: i18n.t("general.created"), value: "date" }, + { text: "Size", value: "size" }, { text: "", value: "actions", align: "right" }, ], }); diff --git a/frontend/pages/admin/dashboard.vue b/frontend/pages/admin/dashboard.vue index ff15452e56b8..fd75e0e9752f 100644 --- a/frontend/pages/admin/dashboard.vue +++ b/frontend/pages/admin/dashboard.vue @@ -42,7 +42,7 @@