STOW CHANGELOG ================================================================ 2025_0526 Adds custom stringify and outputs 1 record per line Clarifies 'Sort rows by Column' message and uses custom dialog Marks unsaved on col sift/sort/zap/move/add/edit[note/type/name] Styles active column Lets user toggle background grid Adds Theme Mode - [Light,Dark,Auto] (CSS controlled) 2025_0525 Rewrites all data-table functions from scratch and re-implements (Prepares for handling larger files and pagination options) Adds all available methods to the data-table on read / load Separates data-table and frontend related actions and purposes Keeps data-table in sync with user edits (vs. wait until save) Rewrites all frontend actions to use new data-table methods: row fns: clone, delete, add (above below), copy as JSON col fns: edit [name, type, note], delete, sort, move, add Updates "Save" function to work with new library Rewrites table-data filter to redraw frontend with matches only Prepares for pagination setup (vs hide & show existing rows) Adds pagination logic to backend Adds previous and next page buttons to frontend Adds 'rows per page' option to frontend and live updates Disables 'left' on the first page, 'right' on last Shows the current page number and total page count on frontend Reworks 'add row above / below' key-shortcuts for pagination Alerts if filters or rows-per-page stops 'hides' newly made row Updates frontend stats to work with new pagination logic Adds 'default value' per columns Uses 'default value' on new record columns with no live filter 2025_0517 Dismisses context menu on any right click event outside of it Resizes table on add column via keyboard shortcut 2025_0515 Adds regex column filter (JS flavour) "/expression/any_flags" Adds initial right click menu to cells 2025_0514 Adds keyboard shortcut to change selected cell with arrow keys Adds alt+up and alt+down for new row above or below Removes 'n' shortcut Adds alt+left and alt_right for new column on left or right Documents new shortcuts in demo table 2025_0513 Adds menu item to make "New DB" (Previously refreshed page to return to Demo DB on page load) Confirms if user wants to close any open unsaved file first Resets all state Prompts for wanted columns names, as comma separated list Loads new blank DB Adds custom button text to prompts (adds parameters to Fn) Stops rows of blank cells collapsing (Adds height CSS property) Saves and opens compressed gzipped DBs (.gz) as well as (.json) Adds 'Copy row as JSON' to record row menu Makes JSON keys match column order (even if numerical-only) Shows current saved/unsaved status on frontend Adds 'scroll to top' button and shows it when not at top Logs time to save a file (DB>JS>JSON>Compress>Write) Updates demo DB to list some keyboard shortcuts and actions Adds new row, triggered by key shortcut, below any selected row Updates record count after more actions that change it 2025_0512 Adds "dense view" toggle for cell vertical padding Swaps cell borders for outlines to not affect inner / row height Shows all tool tips on hover (vs after hover) Puts context menus near click position (avoids viewport edges) Aligns context menus to grid Scrolls any context menu taller than viewport Saves data in more compact form: [name:[c1v,c2v],note:[c1v,c2v]] Instead of object per column (each repeating all column keys) Tests tool with a 4000 cell database (e.g. 800 rows, 5 cols) Stores column filter state as 0/1 (not boolean) for lighter file Shows current filter query in cell, and truncates to fit Highlights columns that have an active search filter 2025_0511 Allows setting type of data per column, Number, String, Boolean Reads in and stores type per column in data Stores typed data in backend, shows string on frontend Alerts user if they enter a value not matching the column type Adds 'any' type which converts column inputs to likeliest types Adds 'Copy DB as JSON' to menu, notifies on pass or fail Replaces cell editor with custom prompt FN for wider use Adds 'column type' editor (popover) and tool tips to options Styles column per type (Aligns data in number columns right) Keeps column CSS in sync with columns on move e.g. move a number-type column left, match css to new position Stores save date in file's "meta" object "last" property Enters column filter editor of selected cell on keypress 'f' Shows DB name as table header (caption) Sets DB meta (name, note, made) to blanks if absent Allows renaming DB by clicking table title / caption Fixes 'clone row'. Clones record data (not cell textContent) 2025_0510 Makes filter editor a popover (to see whole of long queries) Styles context menus Stores one settings {} per column {name,note,find,filterOn,etc} Allows editing column note (for purpose / prompt / description) Shows any column note on hover column name cell 2025_0509 Allows switching each column filter on or off (preserves query) Stores filter on or off state in saved file 2025_0508 Aligns UI to a grid Scroll snaps to grid Makes first table column cells TH - reserves TD for record data (Simplifies backend logic as a result) Implements custom right click handler Adds right click menu to rows 2025_0507 Adds row actions menu Offers to delete all ticked rows if user clicks one of many Adds custom confirm dialog function (for any use case later) Updates displayed number of selected rows (via custom observer) Backend refactors, groups and improves keyboard shortcuts logic 2025_0506 Adds column actions menu Adds 'add new column' (to left or right of current) action Refactors row maker (Separates function per specific head row) (Filter row maker, Title row maker) Adds 'move column' (to left or right) action Adds 'sort column' (a-z and z-a) action Warns user 'sort column' currently has no undo feature Allows user to clear a cell/properties value Adds 'delete column' action Warns user 'delete column' action currently has no undo feature Adds 'rename column' action (notifies no change if given "") Rewrites "add new record" Adds new record above selected record or above top record Populates new records with all current search queries Updates "clone record" function Updates "delete selected records" function Updates tool to store and load JSON (not txt) Drafts a helper tool to convert todotxt file or string to JSDB (short for "JSON Database", simple format/spec this tool uses) Handles loading database with missing data (e.g. field names) Changes shortcuts to trigger on keyup not keydown (placeholder) Avoids multiple function triggers on single keypress event 2025_0505 Refactors to process a JSON object not text Presents data as a table, with keys as column header row names Adds filter for every column / field Stops checking a row against unchecked filters on 1st mismatch Adds placeholder for column sort buttons Adds 'insert date stamp' button to editor popover Makes editor input a 'type=search' for inbuilt 'clear' button Adds datalist prompts to column filters: "IS_BLANK", "NOT_BLANK" Removes sidebar and related logic (which column filters replace) 2025_0502 Unifies search logic matches each searched word to the start of a word in a record it previously let a one word query match any text in a record 2025_0427 Adds notice for users who have disabled JavaScript Tells user if their browser doesn't support the File Access API Changes backend naming: projects |> 'Groups'. contexts |> 'tags' Auto focuses 'reopen file' button when tool remembers a file Opens main menu with '/' keyboard shortcut 2025_0423 Adds searchable popover main menu palette Adds CMD+SHIFT+P / CMD+P to activate main menu Adds up down arrow nav to main menu palette Closes main menu on item selection Makes 'reopen' button prominent when the option exists Removes any project tags from search on click another in sidebar Moves record value searcher to table column header Moves clear search button inside search field Closes main menu on click 'clear' button in empty search field Unifies search field X button + Escape Key logic (Clear > Close) 2025_0418 Implements IndexedDB and File Access API (Chromium only) Stores only a reference to a local file in indexedDB Remembers file from last session, attempts to auto-re-open it Removes all local storage code from previous versions (PROS: now a file-based app. CONS: limited to chromium browsers) 2025_0411 Scrolls selected record into view, only if needed Tidies and links to log Selects and scrolls to element via arrow keys (disables default) Adds 'reset_app' command Removes all instances of tag from search query on sidebar click Adds 'update visible records count' function (runs on restore) Improves "strip date from preview" function 2025_0410 Named tool "Stow" Adds license info Tidies code 2025_0409 DB specific Tweaks 'Made' and 'Done' data format to store date AND time Strips dates data from preview of record Adds local storage Builds sidebar tags sections from nested details elements Saves DB as plain text file Loads existing txt file Tests 800+ record database Scrolls table body (not page) Toggles nested tag display via DETAIL elements marker only Allows elements in detail SUMMARY to perform other actions Styles sidebar 2025_0408 Refactors frontend to use plain HTML to show state (not CSS) Checkboxes and radios show states Buttons show actions Disabled attributes show options related to active elements Adds multi-record select and actions (e.g. delete, change state) Refactors towards developing tool as general purpose DB editor Initial implementation focused on task-specific DB Adds 'clone' record option 2025_0406 Updates counts (records, tags) when database changes Styles nested tags to look nested in sidebar Highlights sidebar tags and states in current search query Counts how many records match any current search query Filters records shown by clicking tags in sidebar - Adds any tag clicked in sidebar to search query if absent - Removes any tag clicked in sidebar from search query if found Pre-populates new record window with date stamp Pre-populates new record window with any tags in current search Picks search logic to use based on search query word count - Allows a single word query to match anywhere in a record - Needs every query word to match the start of a word in record Adds date to new record data if missing from form / field data Re-sorts shown records when DB changes (on edit or add record) Adds keyboard shortcuts to navigate selected records: up, down Adds JS DB to string DB converter 2025_0405 Adds base functions, logic, layout, and UI elements Parses string DB to JS DB Shows DB on front end Filters records by user search Filters records by property state (e.g. done, todo, any) Shows tags and counts (e.g. project, context) from DB in sidebar Allows changing record data ================================================================ By + © 2025 Greg Abbott