Scott Worley [Wed, 2 Mar 2022 00:23:45 +0000 (16:23 -0800)]
h/l to move between task nesting levels
Scott Worley [Wed, 2 Mar 2022 00:14:40 +0000 (16:14 -0800)]
Rename: moveCursor → moveCursorVertically
Scott Worley [Wed, 2 Mar 2022 00:06:11 +0000 (16:06 -0800)]
"vp" to view the tag "Project"
Scott Worley [Wed, 2 Mar 2022 00:04:18 +0000 (16:04 -0800)]
Nested tag view
Scott Worley [Tue, 1 Mar 2022 23:47:39 +0000 (15:47 -0800)]
Factor insertInPriorityOrder() out of setPriority()
Scott Worley [Thu, 10 Feb 2022 03:11:30 +0000 (19:11 -0800)]
When creating a task while viewing a tag, the new task has that tag
Scott Worley [Thu, 10 Feb 2022 01:48:49 +0000 (17:48 -0800)]
Wrap task description before going into tag space
Scott Worley [Thu, 10 Feb 2022 01:43:56 +0000 (17:43 -0800)]
Don't assume input is first child
Scott Worley [Thu, 10 Feb 2022 00:59:50 +0000 (16:59 -0800)]
"i"nbox view shows "u"ntagged tasks
Scott Worley [Thu, 10 Feb 2022 00:54:15 +0000 (16:54 -0800)]
Task-level operations should work even when a tag is focused
Scott Worley [Thu, 10 Feb 2022 00:30:47 +0000 (16:30 -0800)]
Tag view
Scott Worley [Thu, 10 Feb 2022 00:30:02 +0000 (16:30 -0800)]
resetView
Scott Worley [Thu, 10 Feb 2022 00:29:10 +0000 (16:29 -0800)]
currentTag helper
Scott Worley [Wed, 9 Feb 2022 23:40:54 +0000 (15:40 -0800)]
Put state colors in one place
Scott Worley [Wed, 9 Feb 2022 19:48:21 +0000 (11:48 -0800)]
Invert priorities
Making "high" priorities low numbers was a mistake.
1. Things that come freshly to attention are much more often among the
highest priority things and are very rarely lower priority that
everything else being tracked.
2. Logging the completion of an already-done task, a task that was *so*
high-priority that it was completed before even being tracked here,
feels bad when it ends up initially marked as lowest-priority-ever
unless some additional action is taken.
3. Marking a new task highest-ever-priority is fairly common and
oughtn't cost two log entries.
4. All the high priority tasks ever tracked oughtn't be fighting over
the smallest-representable IEEE floating point values, as they all
try to get slightly closer to zero. When highest-priority is now(),
these tasks get nicely spread out over the keyspace. This helps with
* keeping priority values integer-rounded, which helps with
* serialized log size
* log parsing simplicity (clients needn't support scientific notation)
* preventing underflow
* making the priority-sorted 'done' views be not-completely-useless
as all the tasks that have ever been high-priority get haphazardly
interleaved near zero. Instead, it becomes almost chronological.
This change does rather a lot of violence to current users of this tool,
inverting their displayed task list order & making no provision
whatsoever for gentle migration across this change of an implementation
detail. This is fine, because there's still only one user of this tool:
the author. Breaking changes like this will not be tolerated after
deployment.
Scott Worley [Sun, 30 Jan 2022 00:53:24 +0000 (16:53 -0800)]
Scroll to top when entering a new task
Scott Worley [Sun, 30 Jan 2022 00:40:07 +0000 (16:40 -0800)]
Edit should still work when a tag has focus
Scott Worley [Sat, 29 Jan 2022 23:10:25 +0000 (15:10 -0800)]
^e and ^y for scrolling without moving the cursor
Scott Worley [Sat, 29 Jan 2022 21:01:42 +0000 (13:01 -0800)]
Mostly ignore inputs when control is pressed
Scott Worley [Sat, 29 Jan 2022 20:57:13 +0000 (12:57 -0800)]
"G" to Go to the count-prefixed line. eg: "1G" to go to the top
Scott Worley [Sat, 29 Jan 2022 20:46:36 +0000 (12:46 -0800)]
vi-style count-prefix for task movement
Scott Worley [Sat, 29 Jan 2022 20:23:21 +0000 (12:23 -0800)]
vi-style count-prefix for cursor movement
Scott Worley [Fri, 28 Jan 2022 07:45:40 +0000 (23:45 -0800)]
Redo
Scott Worley [Fri, 28 Jan 2022 07:36:26 +0000 (23:36 -0800)]
Factor out some boilerplate in UI
Scott Worley [Fri, 28 Jan 2022 07:20:39 +0000 (23:20 -0800)]
"va" to view all tasks
... except deleted tasks. You have to go to the deleted-tasks view
specifically to see those.
Scott Worley [Fri, 28 Jan 2022 07:07:47 +0000 (23:07 -0800)]
Style the state-dates
Scott Worley [Fri, 28 Jan 2022 06:54:22 +0000 (22:54 -0800)]
Show dates on non-todo-state tasks
Eg, this is the completion date for completed tasks, etc.
Scott Worley [Fri, 28 Jan 2022 06:37:20 +0000 (22:37 -0800)]
Declare character encoding
This quiets a warning in the Firefox console.
Scott Worley [Fri, 28 Jan 2022 06:24:42 +0000 (22:24 -0800)]
"sm" and "vsm" for someday-*maybe*, rather than just "s"
The "maybe" in "someday-maybe" feels really important. It feels
importantly different than "someday". It definitely feels worth the
extra keystrokes & extra keystroke state logic.
Scott Worley [Fri, 28 Jan 2022 06:21:06 +0000 (22:21 -0800)]
Rename inputStates to be less semantic and more concrete
Scott Worley [Fri, 28 Jan 2022 06:20:21 +0000 (22:20 -0800)]
"T" to make task "Top" priority
Scott Worley [Fri, 28 Jan 2022 05:59:47 +0000 (21:59 -0800)]
Factor out makeTopPriority
Scott Worley [Fri, 28 Jan 2022 03:34:24 +0000 (19:34 -0800)]
"x" removes the first tag if a task, rather than a tag, is selected
Scott Worley [Fri, 28 Jan 2022 03:26:04 +0000 (19:26 -0800)]
Press "x" to remove tags
Scott Worley [Fri, 28 Jan 2022 03:15:37 +0000 (19:15 -0800)]
Undo tag
Scott Worley [Fri, 28 Jan 2022 03:09:20 +0000 (19:09 -0800)]
Accept "vv" for jumping to the default view
Scott Worley [Thu, 27 Jan 2022 23:37:51 +0000 (15:37 -0800)]
Disallow all-spaces task descriptions and tag-names
Scott Worley [Thu, 27 Jan 2022 23:32:16 +0000 (15:32 -0800)]
Don't listen for keystrokes until log replay is done
Scott Worley [Thu, 27 Jan 2022 23:27:19 +0000 (15:27 -0800)]
Provide a visual indicator of the current view-state
h/t https://css-tricks.com/body-border/
Scott Worley [Thu, 27 Jan 2022 23:05:50 +0000 (15:05 -0800)]
Keep tags visually associated with their task
If a task's tags line-wrap, the shouldn't go into the next task's space.
Scott Worley [Thu, 27 Jan 2022 21:34:30 +0000 (13:34 -0800)]
Keep tags sorted
Scott Worley [Thu, 27 Jan 2022 21:24:18 +0000 (13:24 -0800)]
Color tags
Scott Worley [Thu, 27 Jan 2022 20:52:53 +0000 (12:52 -0800)]
Keep description in its own span
Tags broke task.textContent being an easy way to get the task
description, which editTask was using. This restores neatness & fixes a
bug in which tag names were slurped into the edit-task buffer.
Scott Worley [Thu, 27 Jan 2022 20:45:58 +0000 (12:45 -0800)]
Do more filtering in faster browser-native code
Scott Worley [Thu, 27 Jan 2022 20:40:30 +0000 (12:40 -0800)]
The tag-input box appearing should not move other tasks' tags around
Scott Worley [Thu, 27 Jan 2022 20:26:23 +0000 (12:26 -0800)]
Fix: Escape aborts tagging
Scott Worley [Thu, 27 Jan 2022 20:13:49 +0000 (12:13 -0800)]
Disallow empty-string as a tag name
Scott Worley [Thu, 27 Jan 2022 20:10:11 +0000 (12:10 -0800)]
Use previous tag name as default new tag name
This makes tagging a bunch of tasks with the same tag easier.
Scott Worley [Thu, 27 Jan 2022 20:02:27 +0000 (12:02 -0800)]
Don't create duplicate tags; Tagging is idempotent
Scott Worley [Thu, 27 Jan 2022 19:59:03 +0000 (11:59 -0800)]
Don't attempt to create duplicate tags
Scott Worley [Thu, 27 Jan 2022 19:57:00 +0000 (11:57 -0800)]
Add tags
Scott Worley [Thu, 27 Jan 2022 19:41:01 +0000 (11:41 -0800)]
Avoid children[0]
Scott Worley [Thu, 27 Jan 2022 19:40:09 +0000 (11:40 -0800)]
Sort log apply actions
Scott Worley [Thu, 27 Jan 2022 19:12:40 +0000 (11:12 -0800)]
Use classList to set class
Scott Worley [Thu, 27 Jan 2022 19:06:48 +0000 (11:06 -0800)]
Change "todo" view key "t" -> "q" ("queue")
Scott Worley [Thu, 27 Jan 2022 08:36:25 +0000 (00:36 -0800)]
Don't select-all the task description when beginning editing
I find that
* most edits are more gentle than complete replacement
* I consistently reach for the "end" key to begin editing
* If I want complete replacement, ^A is easier to type than "end"
Scott Worley [Thu, 27 Jan 2022 08:30:22 +0000 (00:30 -0800)]
Escape to abort a task edit
Scott Worley [Thu, 27 Jan 2022 08:25:01 +0000 (00:25 -0800)]
Always return to command mode (leave input box) after creating a task
Even in other views, where the just-created task cannot accept focus.
Scott Worley [Thu, 27 Jan 2022 08:07:27 +0000 (00:07 -0800)]
undoLog is private to the UI
Scott Worley [Thu, 27 Jan 2022 07:49:58 +0000 (23:49 -0800)]
Views: Show tasks by state
Scott Worley [Thu, 27 Jan 2022 07:28:51 +0000 (23:28 -0800)]
Allow browserUI private fields
Scott Worley [Thu, 27 Jan 2022 07:19:31 +0000 (23:19 -0800)]
Use CSS for filtering the view
Scott Worley [Thu, 27 Jan 2022 07:12:18 +0000 (23:12 -0800)]
Always set state attribute
Scott Worley [Thu, 27 Jan 2022 07:00:48 +0000 (23:00 -0800)]
Leader key "v" for selecting views
Scott Worley [Thu, 27 Jan 2022 06:53:54 +0000 (22:53 -0800)]
Commands are in command mode
Scott Worley [Thu, 27 Jan 2022 06:33:53 +0000 (22:33 -0800)]
Use a monotonic clock
Generally assume that clock values always increase to simplify reasoning
everywhere clock values are used. Then enforce that assumption.
Clock values don't really, truly always go up because page reloads &
multiple devices, but since I'm not currently planning to spend the
effort that would be required to perfectly handle this in all cases,
making it happen in fewer cases is a win (rather than just making bugs
I want to fix harder to reproduce).
Scott Worley [Thu, 27 Jan 2022 06:17:43 +0000 (22:17 -0800)]
Explicitly remove the completeEdit onblur event listener
When the completeEdit is invoked by keystroke, we don't want it invoked
a second time as a result of its own action removing the input field.
Firefox does *not* call the "blur" event when a focused input element is removed.
Chromium *does* call the "blur" event when a focused input element is removed.
So this is needed for Chromium.
Scott Worley [Thu, 27 Jan 2022 06:07:18 +0000 (22:07 -0800)]
Edit task descriptions
Scott Worley [Thu, 27 Jan 2022 03:32:16 +0000 (19:32 -0800)]
Don't change state if it's already in that state
Scott Worley [Thu, 27 Jan 2022 02:44:21 +0000 (18:44 -0800)]
Change focus in BrowserUI, never in Model
We don't want updates coming in from network sync to move focus around.
Scott Worley [Thu, 27 Jan 2022 01:51:51 +0000 (17:51 -0800)]
Tasks have one state. Enables undo for state changes
Scott Worley [Wed, 26 Jan 2022 22:46:28 +0000 (14:46 -0800)]
Undo for task creation and reordering
Scott Worley [Wed, 26 Jan 2022 22:17:16 +0000 (14:17 -0800)]
Never mind about Destroy. Deleting is just state "deleted"
It doesn't get erased from the log anyway.
Scott Worley [Wed, 26 Jan 2022 21:59:25 +0000 (13:59 -0800)]
Full-width input box
Scott Worley [Wed, 26 Jan 2022 21:46:03 +0000 (13:46 -0800)]
Start with focus on top task
Scott Worley [Wed, 26 Jan 2022 21:25:47 +0000 (13:25 -0800)]
Control-enter to make new tasks top-priority
Scott Worley [Wed, 26 Jan 2022 21:25:06 +0000 (13:25 -0800)]
Allow Model to return values through UI
Scott Worley [Wed, 26 Jan 2022 21:11:09 +0000 (13:11 -0800)]
Initiate task creation with Enter key rather than form submit
This will let us detect modifiers on the keystroke.
Scott Worley [Wed, 26 Jan 2022 21:00:15 +0000 (13:00 -0800)]
Eliminate createTask. It's part of addTask
In the spirit of maintaining the invariant: all tasks are in the DOM; no
loose, floating tasks.
Scott Worley [Wed, 26 Jan 2022 20:55:28 +0000 (12:55 -0800)]
Re-order tasks
Scott Worley [Wed, 26 Jan 2022 20:50:10 +0000 (12:50 -0800)]
Put tasks in a div
Scott Worley [Wed, 26 Jan 2022 19:31:02 +0000 (11:31 -0800)]
Sort Model methods
Scott Worley [Wed, 26 Jan 2022 18:59:16 +0000 (10:59 -0800)]
Factor out task offset logic
Scott Worley [Wed, 26 Jan 2022 18:44:48 +0000 (10:44 -0800)]
Fix moving focus over completed tasks
It sure would be nice if we could just trigger whatever the browser does
for tab and shift-tab key presses, instead of doing all this.
Scott Worley [Wed, 26 Jan 2022 17:45:41 +0000 (09:45 -0800)]
Use a prefix for localStorage keys
Scott Worley [Wed, 26 Jan 2022 09:01:48 +0000 (01:01 -0800)]
Set tasks "done" (or "waiting", "cancelled", "someday-maybe")
Scott Worley [Wed, 26 Jan 2022 07:54:34 +0000 (23:54 -0800)]
Leave something focused after destroying a task
Scott Worley [Wed, 26 Jan 2022 07:51:50 +0000 (23:51 -0800)]
Move focusTaskNameInput and moveCursor into BrowserUI
Scott Worley [Wed, 26 Jan 2022 07:45:42 +0000 (23:45 -0800)]
Destroy tasks
Scott Worley [Wed, 26 Jan 2022 06:47:55 +0000 (22:47 -0800)]
BrowserUI
Scott Worley [Wed, 26 Jan 2022 06:35:52 +0000 (22:35 -0800)]
moveCursor returns whether it was able to or not
Scott Worley [Wed, 26 Jan 2022 06:29:14 +0000 (22:29 -0800)]
Keep the creation timestamp in the DOM
Scott Worley [Wed, 26 Jan 2022 06:24:05 +0000 (22:24 -0800)]
Keep handleKey lean
Scott Worley [Wed, 26 Jan 2022 06:17:51 +0000 (22:17 -0800)]
Keep Log narrowly about log stuff
Scott Worley [Wed, 26 Jan 2022 06:13:35 +0000 (22:13 -0800)]
Persistence
Scott Worley [Wed, 26 Jan 2022 05:47:53 +0000 (21:47 -0800)]
Build and consume Log entries
Scott Worley [Tue, 25 Jan 2022 23:53:04 +0000 (15:53 -0800)]
Writes go through the Log
Scott Worley [Tue, 25 Jan 2022 22:33:34 +0000 (14:33 -0800)]
No empty-string-named tasks
Scott Worley [Tue, 25 Jan 2022 22:29:23 +0000 (14:29 -0800)]
"c" to "Create" tasks
Scott Worley [Tue, 25 Jan 2022 22:28:35 +0000 (14:28 -0800)]
New tasks get focus.