diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 467e419e7043bc74b1544ee227685a0ddbe2f8ba..0e16cea3d461e7a9cb27d16b9258adfad93fcc4c 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -10,6 +10,7 @@ "dependencies": { "emoji-picker-element": "^1.21.3", "jquery": "^3.7.1", + "svelte-gravatar": "^1.0.3", "svelte-i18n": "^4.0.0", "svelte-material-icons": "^3.0.5", "svelte-select": "^5.8.3" @@ -33,7 +34,6 @@ "eslint": "^8.56.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-svelte": "^2.35.1", - "jquery": "^3.7.1", "jwt-decode": "^4.0.0", "less": "^4.2.0", "postcss": "^8.4.35", @@ -1863,6 +1863,14 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", + "engines": { + "node": "*" + } + }, "node_modules/chokidar": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", @@ -2013,6 +2021,14 @@ "node": ">= 8" } }, + "node_modules/crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", + "engines": { + "node": "*" + } + }, "node_modules/css-selector-tokenizer": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.8.0.tgz", @@ -3069,6 +3085,11 @@ "node": ">=8" } }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, "node_modules/is-builtin-module": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", @@ -3206,8 +3227,7 @@ "node_modules/jquery": { "version": "3.7.1", "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz", - "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==", - "dev": true + "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==" }, "node_modules/js-yaml": { "version": "4.1.0", @@ -3408,6 +3428,16 @@ "semver": "bin/semver" } }, + "node_modules/md5": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", + "dependencies": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } + }, "node_modules/mdn-data": { "version": "2.0.30", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", @@ -4665,6 +4695,27 @@ "@floating-ui/dom": "^1.5.3" } }, + "node_modules/svelte-gravatar": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/svelte-gravatar/-/svelte-gravatar-1.0.3.tgz", + "integrity": "sha512-CNxIV2lAuiqwdaPrGAM/BFj5U1dNNQXzeyh+HVi/48BODFXoDy0L1CMqYyvM+aKiF4ideZUBwT0S9/C1BeL5oA==", + "dependencies": { + "md5": "^2.2.1", + "svelte": "^3.16.0", + "svelte-waypoint": "^0.1.3" + }, + "peerDependencies": { + "svelte": "*" + } + }, + "node_modules/svelte-gravatar/node_modules/svelte": { + "version": "3.59.2", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.59.2.tgz", + "integrity": "sha512-vzSyuGr3eEoAtT/A6bmajosJZIUWySzY2CzB3w2pgPvnkUjGqlDnsNnA0PMO+mMAhuyMul6C2uuZzY6ELSkzyA==", + "engines": { + "node": ">= 8" + } + }, "node_modules/svelte-hero-icons": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/svelte-hero-icons/-/svelte-hero-icons-5.1.0.tgz", @@ -5207,6 +5258,11 @@ "svelte-floating-ui": "1.5.8" } }, + "node_modules/svelte-waypoint": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/svelte-waypoint/-/svelte-waypoint-0.1.4.tgz", + "integrity": "sha512-UEqoXZjJeKj2sWlAIsBOFjxjMn+KP8aFCc/zjdmZi1cCOE59z6T2C+I6ZaAf8EmNQqNzfZVB/Lci4Ci9spzXAw==" + }, "node_modules/sveltekit-i18n": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/sveltekit-i18n/-/sveltekit-i18n-2.4.2.tgz", diff --git a/frontend/package.json b/frontend/package.json index af45da805b582ed6997adde6d8383c45dc341d7d..06f92529c194f86f11720db8694479a86c0565e5 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -48,6 +48,7 @@ "dependencies": { "emoji-picker-element": "^1.21.3", "jquery": "^3.7.1", + "svelte-gravatar": "^1.0.3", "svelte-i18n": "^4.0.0", "svelte-material-icons": "^3.0.5", "svelte-select": "^5.8.3" diff --git a/frontend/src/lib/components/sessions/message.svelte b/frontend/src/lib/components/sessions/message.svelte index 4cb6d9227173ef3e65cd1c2ab754bf12931add17..348dde6a774a4ba41d9039de07f9517fbbd990ec 100644 --- a/frontend/src/lib/components/sessions/message.svelte +++ b/frontend/src/lib/components/sessions/message.svelte @@ -1,8 +1,9 @@ <script lang="ts"> import type Message from '$lib/types/message'; import { displayTime } from '$lib/utils/date'; - import { AcademicCap, Check, Icon, Sparkles, User } from 'svelte-hero-icons'; + import { Check, Icon } from 'svelte-hero-icons'; import { user } from '$lib/types/user'; + import Gravatar from 'svelte-gravatar'; export let message: Message; @@ -19,14 +20,13 @@ </script> <div class="chat" class:chat-start={!isSender} class:chat-end={isSender}> - <div class="rounded-full p-3 mx-2 bg-gray-200 chat-image" title={message.user.nickname}> - {#if message.user.type == 0} - <Icon src={Sparkles} class="w-6 m-auto" /> - {:else if message.user.type == 1} - <Icon src={AcademicCap} class="w-6 m-auto" /> - {:else} - <Icon src={User} class="w-6 m-auto" /> - {/if} + <div class="rounded-full mx-2 chat-image size-12" title={message.user.nickname}> + <Gravatar + email={message.user.email} + size={64} + title={message.user.nickname} + class="rounded-full" + /> </div> <div class="chat-bubble whitespace-pre-wrap" class:chat-bubble-primary={!isSender}> {message.content} diff --git a/frontend/src/routes/session/+page.svelte b/frontend/src/routes/session/+page.svelte index dd110f559dc1bfb59d694eda0d7c7e6c03a68601..cdc89480fbce27ada5f3afd4156218ab923e6651 100644 --- a/frontend/src/routes/session/+page.svelte +++ b/frontend/src/routes/session/+page.svelte @@ -6,7 +6,7 @@ import { getBaseURL } from '$lib/utils/login'; import { onMount } from 'svelte'; import { user } from '$lib/types/user'; - import { AcademicCap, Icon, Sparkles, User } from 'svelte-hero-icons'; + import Gravatar from 'svelte-gravatar'; export let data; let session: Session | null = null; @@ -40,13 +40,14 @@ : 'marker:text-red-500'} marker:text-3xl" > <div class="inline-flex space-x-2"> - {#if sessionUser.type == 0} - <Icon src={Sparkles} class="w-5" /> - {:else if sessionUser.type == 1} - <Icon src={AcademicCap} class="w-5" /> - {:else} - <Icon src={User} class="w-5" /> - {/if} + <div class="rounded-full mx-2 chat-image size-6" title={sessionUser.nickname}> + <Gravatar + email={sessionUser.email} + size={64} + title={sessionUser.nickname} + class="rounded-full" + /> + </div> <span class:font-bold={sessionUser === $user}>{sessionUser.nickname}</span> </div>