From 2e7764297b2cd8060503d97c8240e6cc47b56e5f Mon Sep 17 00:00:00 2001 From: chrabia297 Date: Tue, 9 May 2023 22:37:33 +0200 Subject: [PATCH 01/10] feat: added new priorities: highest and lowest --- src/Query/Filter/PriorityField.ts | 14 +++++- src/Suggestor/Suggestor.ts | 8 +++ src/Task.ts | 10 ++-- src/TaskLineRenderer.ts | 4 +- src/TaskSerializer/DataviewTaskSerializer.ts | 8 ++- src/TaskSerializer/DefaultTaskSerializer.ts | 16 +++++- src/Urgency.ts | 14 ++++-- tests/Query/Filter/PriorityField.test.ts | 47 ++++++++++++++++-- tests/Query/Urgency.test.ts | 49 ++++++++++--------- tests/Task.test.ts | 2 +- .../DataviewTaskSerializer.test.ts | 6 +-- .../DefaultTaskSerializer.test.ts | 6 +-- tests/TaskSerializer/TaskSerializer.test.ts | 18 +++---- 13 files changed, 147 insertions(+), 55 deletions(-) diff --git a/src/Query/Filter/PriorityField.ts b/src/Query/Filter/PriorityField.ts index bf14ea596c..caf7f35be2 100644 --- a/src/Query/Filter/PriorityField.ts +++ b/src/Query/Filter/PriorityField.ts @@ -10,7 +10,7 @@ export class PriorityField extends Field { // is to capture them in Nested Capture Groups, like this: // (leading-white-space-in-outer-capture-group(values-to-use-are-in-inner-capture-group)) // The capture groups are numbered in the order of their opening brackets, from left to right. - private static readonly priorityRegexp = /^priority(\s+is)?(\s+(above|below|not))?(\s+(low|none|medium|high))$/; + private static readonly priorityRegexp = /^priority(\s+is)?(\s+(above|below|not))?(\s+(lowest|low|none|medium|high|highest))$/; createFilterOrErrorMessage(line: string): FilterOrErrorMessage { const result = new FilterOrErrorMessage(line); @@ -20,6 +20,9 @@ export class PriorityField extends Field { let filterPriority: Priority | null = null; switch (filterPriorityString) { + case 'lowest': + filterPriority = Priority.Lowest; + break; case 'low': filterPriority = Priority.Low; break; @@ -32,6 +35,9 @@ export class PriorityField extends Field { case 'high': filterPriority = Priority.High; break; + case 'highest': + filterPriority = Priority.Highest; + break; } if (filterPriority === null) { @@ -92,6 +98,9 @@ export class PriorityField extends Field { case Priority.High: priorityName = 'High'; break; + case Priority.Highest: + priorityName = 'Highest'; + break; case Priority.Medium: priorityName = 'Medium'; break; @@ -101,6 +110,9 @@ export class PriorityField extends Field { case Priority.Low: priorityName = 'Low'; break; + case Priority.Lowest: + priorityName = 'Lowest'; + break; } return [`Priority ${task.priority}: ${priorityName}`]; }; diff --git a/src/Suggestor/Suggestor.ts b/src/Suggestor/Suggestor.ts index b30d2e1d74..72c45ced3d 100644 --- a/src/Suggestor/Suggestor.ts +++ b/src/Suggestor/Suggestor.ts @@ -83,6 +83,10 @@ function addTaskPropertySuggestions( appendText: `${symbols.scheduledDateSymbol} `, }); if (!hasPriority(line)) { + genericSuggestions.push({ + displayText: `${symbols.prioritySymbols.Highest} highest priority`, + appendText: `${symbols.prioritySymbols.Highest} `, + }); genericSuggestions.push({ displayText: `${symbols.prioritySymbols.High} high priority`, appendText: `${symbols.prioritySymbols.High} `, @@ -95,6 +99,10 @@ function addTaskPropertySuggestions( displayText: `${symbols.prioritySymbols.Low} low priority`, appendText: `${symbols.prioritySymbols.Low} `, }); + genericSuggestions.push({ + displayText: `${symbols.prioritySymbols.Lowest} lowest priority`, + appendText: `${symbols.prioritySymbols.Lowest} `, + }); } if (!line.includes(symbols.recurrenceSymbol)) genericSuggestions.push({ diff --git a/src/Task.ts b/src/Task.ts index 2212934c38..05980af44a 100644 --- a/src/Task.ts +++ b/src/Task.ts @@ -19,10 +19,12 @@ import { compareByDate } from './lib/DateTools'; * @enum {number} */ export enum Priority { - High = '1', - Medium = '2', - None = '3', - Low = '4', + Highest = '1', + High = '2', + Medium = '3', + None = '4', + Low = '5', + Lowest = '6', } export class TaskRegularExpressions { diff --git a/src/TaskLineRenderer.ts b/src/TaskLineRenderer.ts index 46907f218a..e887fe10f1 100644 --- a/src/TaskLineRenderer.ts +++ b/src/TaskLineRenderer.ts @@ -240,9 +240,11 @@ function getComponentClassesAndData(component: TaskLayoutComponent, task: Task): break; case 'priority': { let priorityValue = null; - if (task.priority === taskModule.Priority.High) priorityValue = 'high'; + if (task.priority === taskModule.Priority.Highest) priorityValue = 'highest'; + else if (task.priority === taskModule.Priority.High) priorityValue = 'high'; else if (task.priority === taskModule.Priority.Medium) priorityValue = 'medium'; else if (task.priority === taskModule.Priority.Low) priorityValue = 'low'; + else if (task.priority === taskModule.Priority.Lowest) priorityValue = 'lowest'; else priorityValue = 'normal'; dataAttributes['taskPriority'] = priorityValue; genericClasses.push(LayoutClasses.priority); diff --git a/src/TaskSerializer/DataviewTaskSerializer.ts b/src/TaskSerializer/DataviewTaskSerializer.ts index b7f2519d3a..47058f1d7d 100644 --- a/src/TaskSerializer/DataviewTaskSerializer.ts +++ b/src/TaskSerializer/DataviewTaskSerializer.ts @@ -60,9 +60,11 @@ function toInlineFieldRegex(innerFieldRegex: RegExp): RegExp { */ export const DATAVIEW_SYMBOLS = { prioritySymbols: { + Highest: 'priority:: highest', High: 'priority:: high', Medium: 'priority:: medium', Low: 'priority:: low', + Lowest: 'priority:: lowest', None: '', }, startDateSymbol: 'start::', @@ -72,7 +74,7 @@ export const DATAVIEW_SYMBOLS = { doneDateSymbol: 'completion::', recurrenceSymbol: 'repeat::', TaskFormatRegularExpressions: { - priorityRegex: toInlineFieldRegex(/priority:: *(high|medium|low)/), + priorityRegex: toInlineFieldRegex(/priority:: *(highest|high|medium|low|lowest)/), startDateRegex: toInlineFieldRegex(/start:: *(\d{4}-\d{2}-\d{2})/), createdDateRegex: toInlineFieldRegex(/created:: *(\d{4}-\d{2}-\d{2})/), scheduledDateRegex: toInlineFieldRegex(/scheduled:: *(\d{4}-\d{2}-\d{2})/), @@ -93,12 +95,16 @@ export class DataviewTaskSerializer extends DefaultTaskSerializer { protected parsePriority(p: string): Priority { switch (p) { + case 'highest': + return Priority.Highest; case 'high': return Priority.High; case 'medium': return Priority.Medium; case 'low': return Priority.Low; + case 'lowest': + return Priority.Lowest; default: return Priority.None; } diff --git a/src/TaskSerializer/DefaultTaskSerializer.ts b/src/TaskSerializer/DefaultTaskSerializer.ts index 73ce50fc0a..e3a8165fe4 100644 --- a/src/TaskSerializer/DefaultTaskSerializer.ts +++ b/src/TaskSerializer/DefaultTaskSerializer.ts @@ -13,9 +13,11 @@ import type { TaskDetails, TaskSerializer } from '.'; */ export interface DefaultTaskSerializerSymbols { readonly prioritySymbols: { + Highest: string; High: string; Medium: string; Low: string; + Lowest: string; None: string; }; readonly startDateSymbol: string; @@ -41,9 +43,11 @@ export interface DefaultTaskSerializerSymbols { */ export const DEFAULT_SYMBOLS: DefaultTaskSerializerSymbols = { prioritySymbols: { + Highest: 'πŸ”', High: '⏫', Medium: 'πŸ”Ό', Low: 'πŸ”½', + Lowest: '⏬', None: '', }, startDateSymbol: 'πŸ›«', @@ -55,7 +59,7 @@ export const DEFAULT_SYMBOLS: DefaultTaskSerializerSymbols = { TaskFormatRegularExpressions: { // The following regex's end with `$` because they will be matched and // removed from the end until none are left. - priorityRegex: /([β«πŸ”ΌπŸ”½])$/u, + priorityRegex: /([πŸ”β«πŸ”ΌπŸ”½β¬])$/u, startDateRegex: /πŸ›« *(\d{4}-\d{2}-\d{2})$/u, createdDateRegex: /βž• *(\d{4}-\d{2}-\d{2})$/u, scheduledDateRegex: /[β³βŒ›] *(\d{4}-\d{2}-\d{2})$/u, @@ -103,12 +107,16 @@ export class DefaultTaskSerializer implements TaskSerializer { case 'priority': { let priority: string = ''; - if (task.priority === Priority.High) { + if (task.priority === Priority.Highest) { + priority = ' ' + prioritySymbols.Highest; + } else if (task.priority === Priority.High) { priority = ' ' + prioritySymbols.High; } else if (task.priority === Priority.Medium) { priority = ' ' + prioritySymbols.Medium; } else if (task.priority === Priority.Low) { priority = ' ' + prioritySymbols.Low; + } else if (task.priority === Priority.Lowest) { + priority = ' ' + prioritySymbols.Lowest; } return priority; } @@ -160,12 +168,16 @@ export class DefaultTaskSerializer implements TaskSerializer { protected parsePriority(p: string): Priority { const { prioritySymbols } = this.symbols; switch (p) { + case prioritySymbols.Lowest: + return Priority.Lowest; case prioritySymbols.Low: return Priority.Low; case prioritySymbols.Medium: return Priority.Medium; case prioritySymbols.High: return Priority.High; + case prioritySymbols.Highest: + return Priority.Highest; default: return Priority.None; } diff --git a/src/Urgency.ts b/src/Urgency.ts index 9185d8ce4e..34f5e0f1ed 100644 --- a/src/Urgency.ts +++ b/src/Urgency.ts @@ -41,18 +41,26 @@ export class Urgency { } switch (task.priority) { - // High + // Highest case '1': + urgency += 1.5 * Urgency.priorityCoefficient; + break; + // High + case '2': urgency += 1.0 * Urgency.priorityCoefficient; break; // Medium - case '2': + case '3': urgency += 0.65 * Urgency.priorityCoefficient; break; // None - case '3': + case '4': urgency += 0.325 * Urgency.priorityCoefficient; break; + // Low + case '5': + urgency += 0.1 * Urgency.priorityCoefficient; + break; } return urgency; diff --git a/tests/Query/Filter/PriorityField.test.ts b/tests/Query/Filter/PriorityField.test.ts index c10ca095e1..ed3c700287 100644 --- a/tests/Query/Filter/PriorityField.test.ts +++ b/tests/Query/Filter/PriorityField.test.ts @@ -17,52 +17,83 @@ function testTaskFilterForTaskWithPriority(filter: string, priority: Priority, e } describe('priority is', () => { + it('priority is highest', () => { + const filter = 'priority is highest'; + testTaskFilterForTaskWithPriority(filter, Priority.Highest, true); + testTaskFilterForTaskWithPriority(filter, Priority.High, false); + testTaskFilterForTaskWithPriority(filter, Priority.Medium, false); + testTaskFilterForTaskWithPriority(filter, Priority.None, false); + testTaskFilterForTaskWithPriority(filter, Priority.Low, false); + testTaskFilterForTaskWithPriority(filter, Priority.Lowest, false); + }); + it('priority is high', () => { const filter = 'priority is high'; + testTaskFilterForTaskWithPriority(filter, Priority.Highest, false); testTaskFilterForTaskWithPriority(filter, Priority.High, true); testTaskFilterForTaskWithPriority(filter, Priority.Medium, false); testTaskFilterForTaskWithPriority(filter, Priority.None, false); testTaskFilterForTaskWithPriority(filter, Priority.Low, false); + testTaskFilterForTaskWithPriority(filter, Priority.Lowest, false); }); it('priority is medium', () => { const filter = 'priority is medium'; + testTaskFilterForTaskWithPriority(filter, Priority.Highest, false); testTaskFilterForTaskWithPriority(filter, Priority.High, false); testTaskFilterForTaskWithPriority(filter, Priority.Medium, true); testTaskFilterForTaskWithPriority(filter, Priority.None, false); testTaskFilterForTaskWithPriority(filter, Priority.Low, false); + testTaskFilterForTaskWithPriority(filter, Priority.Lowest, false); }); it('priority is none', () => { const filter = 'priority is none'; + testTaskFilterForTaskWithPriority(filter, Priority.Highest, false); testTaskFilterForTaskWithPriority(filter, Priority.High, false); testTaskFilterForTaskWithPriority(filter, Priority.Medium, false); testTaskFilterForTaskWithPriority(filter, Priority.None, true); testTaskFilterForTaskWithPriority(filter, Priority.Low, false); + testTaskFilterForTaskWithPriority(filter, Priority.Lowest, false); }); it('priority is low', () => { const filter = 'priority is low'; + testTaskFilterForTaskWithPriority(filter, Priority.Highest, false); testTaskFilterForTaskWithPriority(filter, Priority.High, false); testTaskFilterForTaskWithPriority(filter, Priority.Medium, false); testTaskFilterForTaskWithPriority(filter, Priority.None, false); testTaskFilterForTaskWithPriority(filter, Priority.Low, true); + testTaskFilterForTaskWithPriority(filter, Priority.Lowest, false); + }); + + it('priority is lowest', () => { + const filter = 'priority is lowest'; + testTaskFilterForTaskWithPriority(filter, Priority.Highest, false); + testTaskFilterForTaskWithPriority(filter, Priority.High, false); + testTaskFilterForTaskWithPriority(filter, Priority.Medium, false); + testTaskFilterForTaskWithPriority(filter, Priority.None, false); + testTaskFilterForTaskWithPriority(filter, Priority.Low, false); + testTaskFilterForTaskWithPriority(filter, Priority.Lowest, true); }); }); describe('priority above', () => { it('priority above none', () => { const filter = 'priority above none'; + testTaskFilterForTaskWithPriority(filter, Priority.Lowest, false); testTaskFilterForTaskWithPriority(filter, Priority.Low, false); testTaskFilterForTaskWithPriority(filter, Priority.None, false); testTaskFilterForTaskWithPriority(filter, Priority.Medium, true); testTaskFilterForTaskWithPriority(filter, Priority.High, true); + testTaskFilterForTaskWithPriority(filter, Priority.Highest, true); }); }); describe('priority below', () => { it('priority below none', () => { const filter = 'priority below none'; + testTaskFilterForTaskWithPriority(filter, Priority.Lowest, true); testTaskFilterForTaskWithPriority(filter, Priority.Low, true); testTaskFilterForTaskWithPriority(filter, Priority.None, false); }); @@ -70,6 +101,8 @@ describe('priority below', () => { describe('priority is not', () => { it.each([ + ['lowest', Priority.Lowest, false], + ['lowest', Priority.Low, true], ['low', Priority.Low, false], ['low', Priority.None, true], ['none', Priority.None, false], @@ -78,6 +111,8 @@ describe('priority is not', () => { ['medium', Priority.Medium, false], ['high', Priority.Medium, true], ['high', Priority.High, false], + ['highest', Priority.Highest, false], + ['highest', Priority.High, true], ])('priority is not %s (with %s)', (filter: string, input: Priority, expected: boolean) => { // TODO Use name of input priority instead of testTaskFilterForTaskWithPriority(`priority is not ${filter}`, input, expected); @@ -142,9 +177,11 @@ describe('sorting by priority', () => { // Assert // This tests each adjacent pair of priority values, in descending order, // to prove that sorting of all combinations will be correct. + expectTaskComparesBefore(sorter, with_priority(Priority.Highest), with_priority(Priority.High)); expectTaskComparesBefore(sorter, with_priority(Priority.High), with_priority(Priority.Medium)); expectTaskComparesBefore(sorter, with_priority(Priority.Medium), with_priority(Priority.None)); expectTaskComparesBefore(sorter, with_priority(Priority.None), with_priority(Priority.Low)); + expectTaskComparesBefore(sorter, with_priority(Priority.Low), with_priority(Priority.Lowest)); expectTaskComparesEqual(sorter, with_priority(Priority.None), with_priority(Priority.None)); }); @@ -163,10 +200,12 @@ describe('grouping by priority', () => { }); it.each([ - ['- [ ] a ⏫', ['Priority 1: High']], - ['- [ ] a πŸ”Ό', ['Priority 2: Medium']], - ['- [ ] a', ['Priority 3: None']], - ['- [ ] a πŸ”½', ['Priority 4: Low']], + ['- [ ] a πŸ”', ['Priority 1: Highest']], + ['- [ ] a ⏫', ['Priority 2: High']], + ['- [ ] a πŸ”Ό', ['Priority 3: Medium']], + ['- [ ] a', ['Priority 4: None']], + ['- [ ] a πŸ”½', ['Priority 5: Low']], + ['- [ ] a ⏬', ['Priority 6: Lowest']], ])('task "%s" should have groups: %s', (taskLine: string, groups: string[]) => { // Arrange const grouper = new PriorityField().createGrouper().grouper; diff --git a/tests/Query/Urgency.test.ts b/tests/Query/Urgency.test.ts index fa969239ec..7640ca8fd1 100644 --- a/tests/Query/Urgency.test.ts +++ b/tests/Query/Urgency.test.ts @@ -46,10 +46,13 @@ function lowPriorityBuilder() { describe('urgency - priority component', () => { it('should score correctly for priority', () => { const builder = new TaskBuilder(); + // I don't really know what values should I put here + testUrgency(builder.priority(Priority.Highest), 9.0); testUrgency(builder.priority(Priority.High), 6.0); testUrgency(builder.priority(Priority.Medium), 3.9); testUrgency(builder.priority(Priority.None), 1.95); - testUrgency(builder.priority(Priority.Low), 0.0); + testUrgency(builder.priority(Priority.Low), 0.6); + testUrgency(builder.priority(Priority.Lowest), 0.0); }); }); @@ -65,28 +68,28 @@ function testUrgencyForDueDate(daysToDate: number, expectedScore: number) { describe('urgency - due date component', () => { it('More than 7 days overdue: 12.0', () => { - testUrgencyForDueDate(-200, 12.0); - testUrgencyForDueDate(-8, 12.0); + testUrgencyForDueDate(-200, 12.6); + testUrgencyForDueDate(-8, 12.6); }); it('Due between 7 days ago and in 14 days: Range of 12.0 to 0.2', () => { - testUrgencyForDueDate(-7, 12.0); - testUrgencyForDueDate(0, 8.8); // documentation says: 9.0 for "today" - testUrgencyForDueDate(1, 8.34286); - testUrgencyForDueDate(6, 6.05714); - testUrgencyForDueDate(13, 2.85714); - testUrgencyForDueDate(14, 2.4); // documentation says: 0.2 + testUrgencyForDueDate(-7, 12.6); + testUrgencyForDueDate(0, 9.4); // documentation says: 9.0 for "today" + testUrgencyForDueDate(1, 8.94286); + testUrgencyForDueDate(6, 6.65714); + testUrgencyForDueDate(13, 3.45714); + testUrgencyForDueDate(14, 3); // documentation says: 0.2 }); it('More than 14 days until due: 0.2', () => { - testUrgencyForDueDate(15, 2.4); // // documentation says: 0.2 - testUrgencyForDueDate(40, 2.4); // // documentation says: 0.2 - testUrgencyForDueDate(200, 2.4); // // documentation says: 0.2 + testUrgencyForDueDate(15, 3); // // documentation says: 0.2 + testUrgencyForDueDate(40, 3); // // documentation says: 0.2 + testUrgencyForDueDate(200, 3); // // documentation says: 0.2 }); it('not due: 0.0', () => { const lowPriority = lowPriorityBuilder(); - testUrgency(lowPriority.dueDate(null), 0.0); + testUrgency(lowPriority.dueDate(null), 0.6); }); }); @@ -104,17 +107,17 @@ describe('urgency - scheduled date component', () => { const lowPriority = lowPriorityBuilder(); it('scheduled Today or earlier: 5.0', () => { - testUrgencyForScheduledDate(0, 5.0); - testUrgencyForScheduledDate(-20, 5.0); + testUrgencyForScheduledDate(0, 5.6); + testUrgencyForScheduledDate(-20, 5.6); }); it('scheduled Tomorrow or later: 0.0', () => { - testUrgencyForScheduledDate(1, 0.0); - testUrgencyForScheduledDate(39, 0.0); + testUrgencyForScheduledDate(1, 0.6); + testUrgencyForScheduledDate(39, 0.6); }); it('not scheduled: 0.0', () => { - testUrgency(lowPriority.scheduledDate(null), 0.0); + testUrgency(lowPriority.scheduledDate(null), 0.6); }); }); @@ -132,16 +135,16 @@ describe('urgency - start date component', () => { const lowPriority = lowPriorityBuilder(); it('start Today or earlier: 0.0', () => { - testUrgencyForStartDate(0, 0.0); - testUrgencyForStartDate(-22, 0.0); + testUrgencyForStartDate(0, 0.6); + testUrgencyForStartDate(-22, 0.6); }); it('start Tomorrow or later: -3.0', () => { - testUrgencyForStartDate(1, -3.0); - testUrgencyForStartDate(67, -3.0); + testUrgencyForStartDate(1, -2.4); + testUrgencyForStartDate(67, -2.4); }); it('not scheduled: 0.0', () => { - testUrgency(lowPriority.startDate(null), 0.0); + testUrgency(lowPriority.startDate(null), 0.6); }); }); diff --git a/tests/Task.test.ts b/tests/Task.test.ts index b0df5e5d65..13409fceea 100644 --- a/tests/Task.test.ts +++ b/tests/Task.test.ts @@ -242,7 +242,7 @@ describe('parsing', () => { scheduled: '2022-07-03', start: '2022-07-04', created: '2022-07-05', - priority: '3', + priority: '4', recurrence: 'every day', }); } diff --git a/tests/TaskSerializer/DataviewTaskSerializer.test.ts b/tests/TaskSerializer/DataviewTaskSerializer.test.ts index e51e753529..16ecb5269c 100644 --- a/tests/TaskSerializer/DataviewTaskSerializer.test.ts +++ b/tests/TaskSerializer/DataviewTaskSerializer.test.ts @@ -32,7 +32,7 @@ describe('DataviewTaskSerializer', () => { }); it('should parse a priority', () => { - const priorities = ['High', 'Medium', 'Low'] as const; + const priorities = ['Highest', 'High', 'Medium', 'Low', 'Lowest'] as const; for (const p of priorities) { const prioritySymbol = DATAVIEW_SYMBOLS.prioritySymbols[p]; const priority = Priority[p]; @@ -233,8 +233,8 @@ describe('DataviewTaskSerializer', () => { expect(serialized).toEqual(` [${symbol} 2021-06-20]`); }); - it('should serialize a High, Medium and Low priority', () => { - const priorities = ['High', 'Medium', 'Low'] as const; + it('should serialize a Highest, High, Medium, Low and Lowest priority', () => { + const priorities = ['Highest', 'High', 'Medium', 'Low', 'Lowest'] as const; for (const p of priorities) { const task = new TaskBuilder().priority(Priority[p]).description('').build(); const serialized = serialize(task); diff --git a/tests/TaskSerializer/DefaultTaskSerializer.test.ts b/tests/TaskSerializer/DefaultTaskSerializer.test.ts index e9c1774b91..ecc202098e 100644 --- a/tests/TaskSerializer/DefaultTaskSerializer.test.ts +++ b/tests/TaskSerializer/DefaultTaskSerializer.test.ts @@ -44,7 +44,7 @@ describe.each(symbolMap)("DefaultTaskSerializer with '$taskFormat' symbols", ({ }); it('should parse a priority', () => { - const priorities = ['High', 'None', 'Medium', 'Low'] as const; + const priorities = ['Highest', 'High', 'None', 'Medium', 'Low', 'Lowest'] as const; for (const p of priorities) { const prioritySymbol = symbols.prioritySymbols[p]; const priority = Priority[p]; @@ -86,8 +86,8 @@ describe.each(symbolMap)("DefaultTaskSerializer with '$taskFormat' symbols", ({ expect(serialized).toEqual(` ${symbol} 2021-06-20`); }); - it('should serialize a High, Medium and Low priority', () => { - const priorities = ['High', 'Medium', 'Low'] as const; + it('should serialize a Highest, High, Medium, Low and Lowest priority', () => { + const priorities = ['Highest', 'High', 'Medium', 'Low', 'Lowest'] as const; for (const p of priorities) { const task = new TaskBuilder().priority(Priority[p]).description('').build(); const serialized = serialize(task); diff --git a/tests/TaskSerializer/TaskSerializer.test.ts b/tests/TaskSerializer/TaskSerializer.test.ts index 3798049d4d..f0de162f66 100644 --- a/tests/TaskSerializer/TaskSerializer.test.ts +++ b/tests/TaskSerializer/TaskSerializer.test.ts @@ -15,9 +15,9 @@ window.moment = moment; This file contains a tested, end-to-end example for implementing and using a {@link TaskSerializer}.
- This file should also contain any {@link TaskSerializer} tests that should be tested + This file should also contain any {@link TaskSerializer} tests that should be tested against all the {@link TaskSerializer}s defined in this repo. Tests that only - apply to one should be housed in that serializer's specific test file + apply to one should be housed in that serializer's specific test file */ describe('TaskSerializer Example', () => { @@ -87,7 +87,7 @@ describe('TaskSerializer Example', () => { }); it('should parse just a priority', () => { - expect(ts.deserialize('1')).toMatchTaskDetails({ priority: Priority.High }); + expect(ts.deserialize('2')).toMatchTaskDetails({ priority: Priority.High }); }); it('should parse just a description', () => { @@ -97,18 +97,18 @@ describe('TaskSerializer Example', () => { }); it('should parse a priority and dueDate', () => { - expect(ts.deserialize('1 1978-09-21')).toMatchTaskDetails({ + expect(ts.deserialize('2 1978-09-21')).toMatchTaskDetails({ priority: Priority.High, dueDate: moment('1978-09-21', 'YYYY-MM-DD'), }); }); it('should parse a priority and description', () => { - expect(ts.deserialize('1 Wobble')).toMatchTaskDetails({ priority: Priority.High, description: 'Wobble' }); + expect(ts.deserialize('2 Wobble')).toMatchTaskDetails({ priority: Priority.High, description: 'Wobble' }); }); it('should parse a full task', () => { - expect(ts.deserialize('1 1978-09-21 Wobble')).toMatchTaskDetails({ + expect(ts.deserialize('2 1978-09-21 Wobble')).toMatchTaskDetails({ priority: Priority.High, description: 'Wobble', dueDate: moment('1978-09-21', 'YYYY-MM-DD'), @@ -119,9 +119,9 @@ describe('TaskSerializer Example', () => { describe('serialize', () => { it('should serialize a task', () => { const tb = new TaskBuilder().description(''); - expect(ts.serialize(tb.priority(Priority.High).build())).toEqual('1'); - expect(ts.serialize(tb.description('Wobble').build())).toEqual('1 Wobble'); - expect(ts.serialize(tb.dueDate('1978-09-21').build())).toEqual('1 1978-09-21 Wobble'); + expect(ts.serialize(tb.priority(Priority.High).build())).toEqual('2'); + expect(ts.serialize(tb.description('Wobble').build())).toEqual('2 Wobble'); + expect(ts.serialize(tb.dueDate('1978-09-21').build())).toEqual('2 1978-09-21 Wobble'); }); }); }); From 8c7bde4f640f93afe44e057b5650a66b1e0c220b Mon Sep 17 00:00:00 2001 From: chrabia297 Date: Wed, 10 May 2023 01:36:31 +0200 Subject: [PATCH 02/10] fixed suggestor unit tests --- src/Query/Filter/PriorityField.ts | 3 ++- ...with__dataview__symbols_show_all_suggested_text.approved.md | 2 ++ ...te_with__emoji__symbols_show_all_suggested_text.approved.md | 2 ++ tests/Suggestor/Suggestor.test.ts | 2 +- 4 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/Query/Filter/PriorityField.ts b/src/Query/Filter/PriorityField.ts index caf7f35be2..991797c79d 100644 --- a/src/Query/Filter/PriorityField.ts +++ b/src/Query/Filter/PriorityField.ts @@ -10,7 +10,8 @@ export class PriorityField extends Field { // is to capture them in Nested Capture Groups, like this: // (leading-white-space-in-outer-capture-group(values-to-use-are-in-inner-capture-group)) // The capture groups are numbered in the order of their opening brackets, from left to right. - private static readonly priorityRegexp = /^priority(\s+is)?(\s+(above|below|not))?(\s+(lowest|low|none|medium|high|highest))$/; + private static readonly priorityRegexp = + /^priority(\s+is)?(\s+(above|below|not))?(\s+(lowest|low|none|medium|high|highest))$/; createFilterOrErrorMessage(line: string): FilterOrErrorMessage { const result = new FilterOrErrorMessage(line); diff --git a/tests/Suggestor/Suggestor.test.auto-complete_with__dataview__symbols_show_all_suggested_text.approved.md b/tests/Suggestor/Suggestor.test.auto-complete_with__dataview__symbols_show_all_suggested_text.approved.md index 0eb6427e63..aa50e93278 100644 --- a/tests/Suggestor/Suggestor.test.auto-complete_with__dataview__symbols_show_all_suggested_text.approved.md +++ b/tests/Suggestor/Suggestor.test.auto-complete_with__dataview__symbols_show_all_suggested_text.approved.md @@ -4,9 +4,11 @@ | due:: due date | due:: | | start:: start date | start:: | | scheduled:: scheduled date | scheduled:: | +| priority:: highest highest priority | priority:: highest | | priority:: high high priority | priority:: high | | priority:: medium medium priority | priority:: medium | | priority:: low low priority | priority:: low | +| priority:: lowest lowest priority | priority:: lowest | | repeat:: recurring (repeat) | repeat:: | | created:: created today (2022-07-11) | created:: 2022-07-11 | | every | repeat:: every | diff --git a/tests/Suggestor/Suggestor.test.auto-complete_with__emoji__symbols_show_all_suggested_text.approved.md b/tests/Suggestor/Suggestor.test.auto-complete_with__emoji__symbols_show_all_suggested_text.approved.md index aab2245f59..1f80a5412a 100644 --- a/tests/Suggestor/Suggestor.test.auto-complete_with__emoji__symbols_show_all_suggested_text.approved.md +++ b/tests/Suggestor/Suggestor.test.auto-complete_with__emoji__symbols_show_all_suggested_text.approved.md @@ -4,9 +4,11 @@ | πŸ“… due date | πŸ“… | | πŸ›« start date | πŸ›« | | ⏳ scheduled date | ⏳ | +| πŸ” highest priority | πŸ” | | ⏫ high priority | ⏫ | | πŸ”Ό medium priority | πŸ”Ό | | πŸ”½ low priority | πŸ”½ | +| ⏬ lowest priority | ⏬ | | πŸ” recurring (repeat) | πŸ” | | βž• created today (2022-07-11) | βž• 2022-07-11 | | every | πŸ” every | diff --git a/tests/Suggestor/Suggestor.test.ts b/tests/Suggestor/Suggestor.test.ts index a23dd714e2..1ab5df86be 100644 --- a/tests/Suggestor/Suggestor.test.ts +++ b/tests/Suggestor/Suggestor.test.ts @@ -48,8 +48,8 @@ describe.each([ { displayText: `${dueDateSymbol} due date`, appendText: `${dueDateSymbol} ` }, { displayText: `${startDateSymbol} start date`, appendText: `${startDateSymbol} ` }, { displayText: `${scheduledDateSymbol} scheduled date`, appendText: `${scheduledDateSymbol} ` }, + { displayText: `${prioritySymbols.Highest} highest priority`, appendText: `${prioritySymbols.Highest} ` }, { displayText: `${prioritySymbols.High} high priority`, appendText: `${prioritySymbols.High} ` }, - { displayText: `${prioritySymbols.Medium} medium priority`, appendText: `${prioritySymbols.Medium} ` }, ]); }); From daeefa7c8aacad3d7f28c732706b131b2aa8082c Mon Sep 17 00:00:00 2001 From: chrabia297 Date: Sun, 21 May 2023 02:32:46 +0200 Subject: [PATCH 03/10] review changes: fixed priority numbers, changed highest icon --- src/Task.ts | 12 ++--- src/TaskSerializer/DefaultTaskSerializer.ts | 4 +- src/Urgency.ts | 13 ++--- src/ui/EditTask.svelte | 22 ++++++++- tests/Query/Filter/PriorityField.test.ts | 12 ++--- tests/Query/Urgency.test.ts | 48 +++++++++---------- ...ymbols_show_all_suggested_text.approved.md | 2 +- tests/Task.test.ts | 2 +- tests/TaskSerializer/TaskSerializer.test.ts | 14 +++--- 9 files changed, 74 insertions(+), 55 deletions(-) diff --git a/src/Task.ts b/src/Task.ts index 05980af44a..f41ff74c54 100644 --- a/src/Task.ts +++ b/src/Task.ts @@ -19,12 +19,12 @@ import { compareByDate } from './lib/DateTools'; * @enum {number} */ export enum Priority { - Highest = '1', - High = '2', - Medium = '3', - None = '4', - Low = '5', - Lowest = '6', + Highest = '0', + High = '1', + Medium = '2', + None = '3', + Low = '4', + Lowest = '5', } export class TaskRegularExpressions { diff --git a/src/TaskSerializer/DefaultTaskSerializer.ts b/src/TaskSerializer/DefaultTaskSerializer.ts index e3a8165fe4..82c303bc6d 100644 --- a/src/TaskSerializer/DefaultTaskSerializer.ts +++ b/src/TaskSerializer/DefaultTaskSerializer.ts @@ -43,7 +43,7 @@ export interface DefaultTaskSerializerSymbols { */ export const DEFAULT_SYMBOLS: DefaultTaskSerializerSymbols = { prioritySymbols: { - Highest: 'πŸ”', + Highest: 'πŸ†™', High: '⏫', Medium: 'πŸ”Ό', Low: 'πŸ”½', @@ -59,7 +59,7 @@ export const DEFAULT_SYMBOLS: DefaultTaskSerializerSymbols = { TaskFormatRegularExpressions: { // The following regex's end with `$` because they will be matched and // removed from the end until none are left. - priorityRegex: /([πŸ”β«πŸ”ΌπŸ”½β¬])$/u, + priorityRegex: /([πŸ†™β«πŸ”ΌπŸ”½β¬])$/u, startDateRegex: /πŸ›« *(\d{4}-\d{2}-\d{2})$/u, createdDateRegex: /βž• *(\d{4}-\d{2}-\d{2})$/u, scheduledDateRegex: /[β³βŒ›] *(\d{4}-\d{2}-\d{2})$/u, diff --git a/src/Urgency.ts b/src/Urgency.ts index 34f5e0f1ed..b0a14ba01d 100644 --- a/src/Urgency.ts +++ b/src/Urgency.ts @@ -42,24 +42,25 @@ export class Urgency { switch (task.priority) { // Highest - case '1': + case '0': urgency += 1.5 * Urgency.priorityCoefficient; break; // High - case '2': + case '1': urgency += 1.0 * Urgency.priorityCoefficient; break; // Medium - case '3': + case '2': urgency += 0.65 * Urgency.priorityCoefficient; break; // None - case '4': + case '3': urgency += 0.325 * Urgency.priorityCoefficient; break; - // Low + // no modification for "Low" priority + // Lowest case '5': - urgency += 0.1 * Urgency.priorityCoefficient; + urgency -= 0.1 * Urgency.priorityCoefficient; break; } diff --git a/src/ui/EditTask.svelte b/src/ui/EditTask.svelte index ea48fbc471..ae632018c3 100644 --- a/src/ui/EditTask.svelte +++ b/src/ui/EditTask.svelte @@ -25,7 +25,7 @@ let editableTask: { description: string; status: Status; - priority: 'none' | 'low' | 'medium' | 'high'; + priority: 'none' | 'lowest' | 'low' | 'medium' | 'high' | 'highest'; recurrenceRule: string; createdDate: string; startDate: string; @@ -70,6 +70,10 @@ label: string, symbol: string }[] = [{ + value: 'lowest', + label: 'Lowest', + symbol: prioritySymbols.Lowest + }, { value: 'low', label: 'Low', symbol: prioritySymbols.Low @@ -85,6 +89,10 @@ value: 'high', label: 'High', symbol: prioritySymbols.High + }, { + value: 'highest', + label: 'Highest', + symbol: prioritySymbols.Highest }] /* @@ -216,12 +224,16 @@ addGlobalFilterOnSave = true; } let priority: typeof editableTask.priority = 'none'; - if (task.priority === Priority.Low) { + if (task.priority === Priority.Lowest) { + priority = 'lowest'; + } else if (task.priority === Priority.Low) { priority = 'low'; } else if (task.priority === Priority.Medium) { priority = 'medium'; } else if (task.priority === Priority.High) { priority = 'high'; + } else if (task.priority === Priority.Highest) { + priority = 'highest'; } editableTask = { @@ -299,6 +311,9 @@ let parsedPriority: Priority; switch (editableTask.priority) { + case 'lowest': + parsedPriority = Priority.Lowest; + break; case 'low': parsedPriority = Priority.Low; break; @@ -308,6 +323,9 @@ case 'high': parsedPriority = Priority.High; break; + case 'highest': + parsedPriority = Priority.Highest; + break; default: parsedPriority = Priority.None; } diff --git a/tests/Query/Filter/PriorityField.test.ts b/tests/Query/Filter/PriorityField.test.ts index ed3c700287..5261d5e7f8 100644 --- a/tests/Query/Filter/PriorityField.test.ts +++ b/tests/Query/Filter/PriorityField.test.ts @@ -200,12 +200,12 @@ describe('grouping by priority', () => { }); it.each([ - ['- [ ] a πŸ”', ['Priority 1: Highest']], - ['- [ ] a ⏫', ['Priority 2: High']], - ['- [ ] a πŸ”Ό', ['Priority 3: Medium']], - ['- [ ] a', ['Priority 4: None']], - ['- [ ] a πŸ”½', ['Priority 5: Low']], - ['- [ ] a ⏬', ['Priority 6: Lowest']], + ['- [ ] a πŸ†™', ['Priority 0: Highest']], + ['- [ ] a ⏫', ['Priority 1: High']], + ['- [ ] a πŸ”Ό', ['Priority 2: Medium']], + ['- [ ] a', ['Priority 3: None']], + ['- [ ] a πŸ”½', ['Priority 4: Low']], + ['- [ ] a ⏬', ['Priority 5: Lowest']], ])('task "%s" should have groups: %s', (taskLine: string, groups: string[]) => { // Arrange const grouper = new PriorityField().createGrouper().grouper; diff --git a/tests/Query/Urgency.test.ts b/tests/Query/Urgency.test.ts index 7640ca8fd1..6cbd9256fd 100644 --- a/tests/Query/Urgency.test.ts +++ b/tests/Query/Urgency.test.ts @@ -51,8 +51,8 @@ describe('urgency - priority component', () => { testUrgency(builder.priority(Priority.High), 6.0); testUrgency(builder.priority(Priority.Medium), 3.9); testUrgency(builder.priority(Priority.None), 1.95); - testUrgency(builder.priority(Priority.Low), 0.6); - testUrgency(builder.priority(Priority.Lowest), 0.0); + testUrgency(builder.priority(Priority.Low), 0.0); + testUrgency(builder.priority(Priority.Lowest), -0.6); }); }); @@ -68,28 +68,28 @@ function testUrgencyForDueDate(daysToDate: number, expectedScore: number) { describe('urgency - due date component', () => { it('More than 7 days overdue: 12.0', () => { - testUrgencyForDueDate(-200, 12.6); - testUrgencyForDueDate(-8, 12.6); + testUrgencyForDueDate(-200, 12.0); + testUrgencyForDueDate(-8, 12.0); }); it('Due between 7 days ago and in 14 days: Range of 12.0 to 0.2', () => { - testUrgencyForDueDate(-7, 12.6); - testUrgencyForDueDate(0, 9.4); // documentation says: 9.0 for "today" - testUrgencyForDueDate(1, 8.94286); - testUrgencyForDueDate(6, 6.65714); - testUrgencyForDueDate(13, 3.45714); - testUrgencyForDueDate(14, 3); // documentation says: 0.2 + testUrgencyForDueDate(-7, 12.0); + testUrgencyForDueDate(0, 8.8); // documentation says: 9.0 for "today" + testUrgencyForDueDate(1, 8.34286); + testUrgencyForDueDate(6, 6.05714); + testUrgencyForDueDate(13, 2.85714); + testUrgencyForDueDate(14, 2.4); // documentation says: 0.2 }); it('More than 14 days until due: 0.2', () => { - testUrgencyForDueDate(15, 3); // // documentation says: 0.2 - testUrgencyForDueDate(40, 3); // // documentation says: 0.2 - testUrgencyForDueDate(200, 3); // // documentation says: 0.2 + testUrgencyForDueDate(15, 2.4); // // documentation says: 0.2 + testUrgencyForDueDate(40, 2.4); // // documentation says: 0.2 + testUrgencyForDueDate(200, 2.4); // // documentation says: 0.2 }); it('not due: 0.0', () => { const lowPriority = lowPriorityBuilder(); - testUrgency(lowPriority.dueDate(null), 0.6); + testUrgency(lowPriority.dueDate(null), 0.0); }); }); @@ -107,17 +107,17 @@ describe('urgency - scheduled date component', () => { const lowPriority = lowPriorityBuilder(); it('scheduled Today or earlier: 5.0', () => { - testUrgencyForScheduledDate(0, 5.6); - testUrgencyForScheduledDate(-20, 5.6); + testUrgencyForScheduledDate(0, 5.0); + testUrgencyForScheduledDate(-20, 5.0); }); it('scheduled Tomorrow or later: 0.0', () => { - testUrgencyForScheduledDate(1, 0.6); - testUrgencyForScheduledDate(39, 0.6); + testUrgencyForScheduledDate(1, 0.0); + testUrgencyForScheduledDate(39, 0.0); }); it('not scheduled: 0.0', () => { - testUrgency(lowPriority.scheduledDate(null), 0.6); + testUrgency(lowPriority.scheduledDate(null), 0.0); }); }); @@ -135,16 +135,16 @@ describe('urgency - start date component', () => { const lowPriority = lowPriorityBuilder(); it('start Today or earlier: 0.0', () => { - testUrgencyForStartDate(0, 0.6); - testUrgencyForStartDate(-22, 0.6); + testUrgencyForStartDate(0, 0.0); + testUrgencyForStartDate(-22, 0.0); }); it('start Tomorrow or later: -3.0', () => { - testUrgencyForStartDate(1, -2.4); - testUrgencyForStartDate(67, -2.4); + testUrgencyForStartDate(1, -3.0); + testUrgencyForStartDate(67, -3.0); }); it('not scheduled: 0.0', () => { - testUrgency(lowPriority.startDate(null), 0.6); + testUrgency(lowPriority.startDate(null), 0.0); }); }); diff --git a/tests/Suggestor/Suggestor.test.auto-complete_with__emoji__symbols_show_all_suggested_text.approved.md b/tests/Suggestor/Suggestor.test.auto-complete_with__emoji__symbols_show_all_suggested_text.approved.md index 1f80a5412a..81b2714998 100644 --- a/tests/Suggestor/Suggestor.test.auto-complete_with__emoji__symbols_show_all_suggested_text.approved.md +++ b/tests/Suggestor/Suggestor.test.auto-complete_with__emoji__symbols_show_all_suggested_text.approved.md @@ -4,7 +4,7 @@ | πŸ“… due date | πŸ“… | | πŸ›« start date | πŸ›« | | ⏳ scheduled date | ⏳ | -| πŸ” highest priority | πŸ” | +| πŸ†™ highest priority | πŸ†™ | | ⏫ high priority | ⏫ | | πŸ”Ό medium priority | πŸ”Ό | | πŸ”½ low priority | πŸ”½ | diff --git a/tests/Task.test.ts b/tests/Task.test.ts index 13409fceea..b0df5e5d65 100644 --- a/tests/Task.test.ts +++ b/tests/Task.test.ts @@ -242,7 +242,7 @@ describe('parsing', () => { scheduled: '2022-07-03', start: '2022-07-04', created: '2022-07-05', - priority: '4', + priority: '3', recurrence: 'every day', }); } diff --git a/tests/TaskSerializer/TaskSerializer.test.ts b/tests/TaskSerializer/TaskSerializer.test.ts index f0de162f66..1febd320d6 100644 --- a/tests/TaskSerializer/TaskSerializer.test.ts +++ b/tests/TaskSerializer/TaskSerializer.test.ts @@ -87,7 +87,7 @@ describe('TaskSerializer Example', () => { }); it('should parse just a priority', () => { - expect(ts.deserialize('2')).toMatchTaskDetails({ priority: Priority.High }); + expect(ts.deserialize('1')).toMatchTaskDetails({ priority: Priority.High }); }); it('should parse just a description', () => { @@ -97,18 +97,18 @@ describe('TaskSerializer Example', () => { }); it('should parse a priority and dueDate', () => { - expect(ts.deserialize('2 1978-09-21')).toMatchTaskDetails({ + expect(ts.deserialize('1 1978-09-21')).toMatchTaskDetails({ priority: Priority.High, dueDate: moment('1978-09-21', 'YYYY-MM-DD'), }); }); it('should parse a priority and description', () => { - expect(ts.deserialize('2 Wobble')).toMatchTaskDetails({ priority: Priority.High, description: 'Wobble' }); + expect(ts.deserialize('1 Wobble')).toMatchTaskDetails({ priority: Priority.High, description: 'Wobble' }); }); it('should parse a full task', () => { - expect(ts.deserialize('2 1978-09-21 Wobble')).toMatchTaskDetails({ + expect(ts.deserialize('1 1978-09-21 Wobble')).toMatchTaskDetails({ priority: Priority.High, description: 'Wobble', dueDate: moment('1978-09-21', 'YYYY-MM-DD'), @@ -119,9 +119,9 @@ describe('TaskSerializer Example', () => { describe('serialize', () => { it('should serialize a task', () => { const tb = new TaskBuilder().description(''); - expect(ts.serialize(tb.priority(Priority.High).build())).toEqual('2'); - expect(ts.serialize(tb.description('Wobble').build())).toEqual('2 Wobble'); - expect(ts.serialize(tb.dueDate('1978-09-21').build())).toEqual('2 1978-09-21 Wobble'); + expect(ts.serialize(tb.priority(Priority.High).build())).toEqual('1'); + expect(ts.serialize(tb.description('Wobble').build())).toEqual('1 Wobble'); + expect(ts.serialize(tb.dueDate('1978-09-21').build())).toEqual('1 1978-09-21 Wobble'); }); }); }); From 42d3dcbca0070c53da0229797095ae1867e977ad Mon Sep 17 00:00:00 2001 From: chrabia297 Date: Sun, 21 May 2023 20:21:03 +0200 Subject: [PATCH 04/10] fixed highest priority emoji to a star in a box --- src/TaskSerializer/DefaultTaskSerializer.ts | 4 ++-- tests/Query/Filter/PriorityField.test.ts | 2 +- ...e_with__emoji__symbols_show_all_suggested_text.approved.md | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/TaskSerializer/DefaultTaskSerializer.ts b/src/TaskSerializer/DefaultTaskSerializer.ts index 82c303bc6d..c6f586ae7c 100644 --- a/src/TaskSerializer/DefaultTaskSerializer.ts +++ b/src/TaskSerializer/DefaultTaskSerializer.ts @@ -43,7 +43,7 @@ export interface DefaultTaskSerializerSymbols { */ export const DEFAULT_SYMBOLS: DefaultTaskSerializerSymbols = { prioritySymbols: { - Highest: 'πŸ†™', + Highest: '*️⃣', High: '⏫', Medium: 'πŸ”Ό', Low: 'πŸ”½', @@ -59,7 +59,7 @@ export const DEFAULT_SYMBOLS: DefaultTaskSerializerSymbols = { TaskFormatRegularExpressions: { // The following regex's end with `$` because they will be matched and // removed from the end until none are left. - priorityRegex: /([πŸ†™β«πŸ”ΌπŸ”½β¬])$/u, + priorityRegex: /((\u{2A}\u{FE0F}\u{20E3})|[β«πŸ”ΌπŸ”½β¬])$/u, startDateRegex: /πŸ›« *(\d{4}-\d{2}-\d{2})$/u, createdDateRegex: /βž• *(\d{4}-\d{2}-\d{2})$/u, scheduledDateRegex: /[β³βŒ›] *(\d{4}-\d{2}-\d{2})$/u, diff --git a/tests/Query/Filter/PriorityField.test.ts b/tests/Query/Filter/PriorityField.test.ts index 5261d5e7f8..42c2b6fadc 100644 --- a/tests/Query/Filter/PriorityField.test.ts +++ b/tests/Query/Filter/PriorityField.test.ts @@ -200,7 +200,7 @@ describe('grouping by priority', () => { }); it.each([ - ['- [ ] a πŸ†™', ['Priority 0: Highest']], + ['- [ ] a *️⃣', ['Priority 0: Highest']], ['- [ ] a ⏫', ['Priority 1: High']], ['- [ ] a πŸ”Ό', ['Priority 2: Medium']], ['- [ ] a', ['Priority 3: None']], diff --git a/tests/Suggestor/Suggestor.test.auto-complete_with__emoji__symbols_show_all_suggested_text.approved.md b/tests/Suggestor/Suggestor.test.auto-complete_with__emoji__symbols_show_all_suggested_text.approved.md index 81b2714998..ff49c041e6 100644 --- a/tests/Suggestor/Suggestor.test.auto-complete_with__emoji__symbols_show_all_suggested_text.approved.md +++ b/tests/Suggestor/Suggestor.test.auto-complete_with__emoji__symbols_show_all_suggested_text.approved.md @@ -4,7 +4,7 @@ | πŸ“… due date | πŸ“… | | πŸ›« start date | πŸ›« | | ⏳ scheduled date | ⏳ | -| πŸ†™ highest priority | πŸ†™ | +| *️⃣ highest priority | *️⃣ | | ⏫ high priority | ⏫ | | πŸ”Ό medium priority | πŸ”Ό | | πŸ”½ low priority | πŸ”½ | From 602a1d7edb0a90b5143ed3e708a5e030145002bb Mon Sep 17 00:00:00 2001 From: chrabia297 Date: Sun, 21 May 2023 22:42:22 +0200 Subject: [PATCH 05/10] fixed edit task modal styling --- src/ui/EditTask.svelte | 34 ++++++++++++++++++++++++---------- styles.css | 11 +++++++---- 2 files changed, 31 insertions(+), 14 deletions(-) diff --git a/src/ui/EditTask.svelte b/src/ui/EditTask.svelte index ae632018c3..8dc40d1ac5 100644 --- a/src/ui/EditTask.svelte +++ b/src/ui/EditTask.svelte @@ -68,31 +68,45 @@ const priorityOptions: { value: typeof editableTask.priority, label: string, - symbol: string }[] = + symbol: string, + accessKey: string, + accessKeyIndex: number}[] = [{ value: 'lowest', label: 'Lowest', - symbol: prioritySymbols.Lowest + symbol: prioritySymbols.Lowest, + accessKey: 'o', + accessKeyIndex: 1 }, { value: 'low', label: 'Low', - symbol: prioritySymbols.Low + symbol: prioritySymbols.Low, + accessKey: 'l', + accessKeyIndex: 0 }, { value: 'none', label: 'Normal', - symbol: prioritySymbols.None + symbol: prioritySymbols.None, + accessKey: 'n', + accessKeyIndex: 0 }, { value: 'medium', label: 'Medium', - symbol: prioritySymbols.Medium + symbol: prioritySymbols.Medium, + accessKey: 'm', + accessKeyIndex: 0 }, { value: 'high', label: 'High', - symbol: prioritySymbols.High + symbol: prioritySymbols.High, + accessKey: 'h', + accessKeyIndex: 0 }, { value: 'highest', label: 'Highest', - symbol: prioritySymbols.Highest + symbol: prioritySymbols.Highest, + accessKey: 'e', + accessKeyIndex: 4 }] /* @@ -377,7 +391,7 @@
- {#each priorityOptions as {value, label, symbol}} + {#each priorityOptions as {value, label, symbol, accessKey, accessKeyIndex}}