From 5d2b178795d9e9cb6c75de8f48b2bfdee698537d Mon Sep 17 00:00:00 2001 From: Nils Date: Tue, 4 Nov 2025 13:35:32 +0100 Subject: [PATCH 01/10] allow images in chat --- backend/src/services/socket/socketSendService.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/backend/src/services/socket/socketSendService.ts b/backend/src/services/socket/socketSendService.ts index d2815c6..4576394 100644 --- a/backend/src/services/socket/socketSendService.ts +++ b/backend/src/services/socket/socketSendService.ts @@ -23,5 +23,7 @@ export function sendHistogramToSession(sessionToken: string, histogram: Estimati } function sanitize(dirty: string): string { - return sanitizeHtml(dirty); + return sanitizeHtml(dirty, { + allowedTags: sanitizeHtml.defaults.allowedTags.concat([ 'img' ]) + }); } From 3db1c950c9330c938ad893dc342270a7776b60f0 Mon Sep 17 00:00:00 2001 From: Nils Date: Tue, 4 Nov 2025 13:52:14 +0100 Subject: [PATCH 02/10] personentage estimations --- backend/src/models/SessionModel.ts | 8 +++++++- frontend/src/components/EstimationOptionsChooser.vue | 3 +++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/backend/src/models/SessionModel.ts b/backend/src/models/SessionModel.ts index fde088f..d20aee3 100644 --- a/backend/src/models/SessionModel.ts +++ b/backend/src/models/SessionModel.ts @@ -4,12 +4,14 @@ export enum EstimationOption { Fibonacci = 'Fibonacci', PowersOfTwo = 'PowersOfTwo', TShirtSizes = 'TShirtSizes', + PersonDays = 'PersonDays', Custom = 'Custom', } export const FibonacciEstimationValues = ['🤷‍♂️', '☕', '1', '2', '3', '5', '8', '13', '21', '34', '55', '89', '144']; export const PowersOfTwoEstimationValues = ['🤷‍♂️', '☕', '1', '2', '4', '8', '16', '32', '64', '128', '256', '512', '1024']; export const TShirtSizesEstimationValues = ['🤷‍♂️', '☕', 'XS', 'S', 'M', 'L', 'XL', 'XXL']; +export const PersonDaysEstimationValues = ['🤷‍♂️', '☕', '0.5', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14']; export function getEstimationValues(options: EstimationOption): string[] { switch (options) { @@ -19,6 +21,8 @@ export function getEstimationValues(options: EstimationOption): string[] { return PowersOfTwoEstimationValues; case EstimationOption.TShirtSizes: return TShirtSizesEstimationValues; + case EstimationOption.PersonDays: + return PersonDaysEstimationValues; case EstimationOption.Custom: return []; } @@ -31,7 +35,9 @@ export function parseEstimationType(type: string): EstimationOption | undefined case 'PowersOfTwo': return EstimationOption.PowersOfTwo; case 'TShirtSizes': - return EstimationOption.TShirtSizes; + return EstimationOption.TShirtSizes + case 'PersonDays': + return EstimationOption.PersonDays; case 'Custom': return EstimationOption.Custom; } diff --git a/frontend/src/components/EstimationOptionsChooser.vue b/frontend/src/components/EstimationOptionsChooser.vue index 01e032f..fe8d7f5 100644 --- a/frontend/src/components/EstimationOptionsChooser.vue +++ b/frontend/src/components/EstimationOptionsChooser.vue @@ -28,6 +28,9 @@ const handleMenuClick = (e: any) => { T-Shirt Sizes + + Personentage + From d297ab2763de153451dfb5764b3eff0d7be3a626 Mon Sep 17 00:00:00 2001 From: Nils Date: Tue, 4 Nov 2025 13:57:53 +0100 Subject: [PATCH 03/10] fix personentage --- frontend/src/models/Session.model.ts | 42 ++++++++++++++++++++-------- 1 file changed, 31 insertions(+), 11 deletions(-) diff --git a/frontend/src/models/Session.model.ts b/frontend/src/models/Session.model.ts index 618e8e8..b28617d 100644 --- a/frontend/src/models/Session.model.ts +++ b/frontend/src/models/Session.model.ts @@ -1,23 +1,17 @@ -import type {ExportEstimatePlayer, Player} from "@/models/Player.model"; - -export interface Session { - token: string; - name: string; - players: Player[]; - // open = true -> everyone can see the estimates - open: boolean; -} +import type { ExportEstimatePlayer, ExportPlayer, Player } from '@/models/Player.model'; export enum EstimationOption { Fibonacci = 'Fibonacci', PowersOfTwo = 'PowersOfTwo', TShirtSizes = 'TShirtSizes', + PersonDays = 'PersonDays', Custom = 'Custom', } export const FibonacciEstimationValues = ['🤷‍♂️', '☕', '1', '2', '3', '5', '8', '13', '21', '34', '55', '89', '144']; export const PowersOfTwoEstimationValues = ['🤷‍♂️', '☕', '1', '2', '4', '8', '16', '32', '64', '128', '256', '512', '1024']; export const TShirtSizesEstimationValues = ['🤷‍♂️', '☕', 'XS', 'S', 'M', 'L', 'XL', 'XXL']; +export const PersonDaysEstimationValues = ['🤷‍♂️', '☕', '0.5', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14']; export function getEstimationValues(options: EstimationOption): string[] { switch (options) { @@ -27,6 +21,8 @@ export function getEstimationValues(options: EstimationOption): string[] { return PowersOfTwoEstimationValues; case EstimationOption.TShirtSizes: return TShirtSizesEstimationValues; + case EstimationOption.PersonDays: + return PersonDaysEstimationValues; case EstimationOption.Custom: return []; } @@ -39,19 +35,43 @@ export function parseEstimationType(type: string): EstimationOption | undefined case 'PowersOfTwo': return EstimationOption.PowersOfTwo; case 'TShirtSizes': - return EstimationOption.TShirtSizes; + return EstimationOption.TShirtSizes + case 'PersonDays': + return EstimationOption.PersonDays; case 'Custom': return EstimationOption.Custom; } return undefined; } +export interface Session { + token: string; + name: string; + players: Player[]; + // open = true -> everyone can see the estimates + open: boolean; + estimationOptions: EstimationOption; + estimationValues: string[]; + timeoutId?: NodeJS.Timeout; +} + +export interface NewSessionDto { + name: string; + leaderName: string; +} + +export interface ExportSession { + token: string; + name: string; + players: ExportPlayer[]; + open: boolean; +} export interface ExportEstimateSession { token: string; name: string; players: ExportEstimatePlayer[]; + open: boolean; estimationOptions: EstimationOption; estimationValues: string[]; - open: boolean; } \ No newline at end of file From 05000f2b8fa6f01de65600011e68ecc2e11abe5b Mon Sep 17 00:00:00 2001 From: Nils Date: Tue, 4 Nov 2025 14:07:48 +0100 Subject: [PATCH 04/10] increase size of color theme chooser and estimation option chooser --- frontend/src/components/ColorThemeChooser.vue | 4 ++-- frontend/src/components/EstimationOptionsChooser.vue | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/frontend/src/components/ColorThemeChooser.vue b/frontend/src/components/ColorThemeChooser.vue index 777fe47..6b90cef 100644 --- a/frontend/src/components/ColorThemeChooser.vue +++ b/frontend/src/components/ColorThemeChooser.vue @@ -1,5 +1,5 @@ \ No newline at end of file diff --git a/frontend/src/models/Message.model.ts b/frontend/src/models/Message.model.ts index 94369d4..fcc3cdb 100644 --- a/frontend/src/models/Message.model.ts +++ b/frontend/src/models/Message.model.ts @@ -2,4 +2,5 @@ export interface Message { name: string; message: string; timestamp: number; + type: 'ai' | 'std'; } \ No newline at end of file From 6994f4189bd21dba8c9f94c18b03ce215bc6ffa2 Mon Sep 17 00:00:00 2001 From: lreg Date: Thu, 6 Nov 2025 23:41:46 +0100 Subject: [PATCH 06/10] improve hint --- frontend/src/components/Chat.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/components/Chat.vue b/frontend/src/components/Chat.vue index 9d6501a..6586743 100644 --- a/frontend/src/components/Chat.vue +++ b/frontend/src/components/Chat.vue @@ -77,7 +77,7 @@ const commandOptions: Command[] = [ { title: '/img [url]', command: '/img', - description: 'send image' + description: 'send image of gif' }, ]; From 87300d7591bd65ad98e69029e061a554649c05c8 Mon Sep 17 00:00:00 2001 From: lreg Date: Fri, 7 Nov 2025 00:03:03 +0100 Subject: [PATCH 07/10] some work on scroll down --- frontend/src/components/Chat.vue | 43 ++++++++++++++++++++++++++------ 1 file changed, 36 insertions(+), 7 deletions(-) diff --git a/frontend/src/components/Chat.vue b/frontend/src/components/Chat.vue index 6586743..fef5b4d 100644 --- a/frontend/src/components/Chat.vue +++ b/frontend/src/components/Chat.vue @@ -1,7 +1,7 @@