1. Added some info to the tooltips.
2. When you check the 'stepped' checkbox, we will modify the
width/width2 values so that they are different (if they are not
already).
-- At the very least, this gives a visual indication that the checkbox
actually *did* something.
-- Line spacing was too big on the keycaps (I think it was picking up
the spacing from Bootstrap); fixed in CSS
-- DSA keys were showing the inner-border in the incorrect spot (wasn't
really noticable on the dark colors of Retro DSA); fixed in CSS
-- Replaced custom min/max functions with the correct Math.min, Math.max
functions.
-- The valiation for x/y offsets was too aggressive; for some
oddly-shaped keys, it didn't let you set values that were big enough.
-- Swapped the order of the keylabel tops for the primary & secondary
rectangles. This ensures that the label is in the same place whether
stepped or not, at the expense of maybe affecting old layouts.
-- The first section is for true "presets"... standard layouts without
much customization.
-- The second section is for "samples"... these are layouts with more
extensive changes.
We've always allowed HTML in the key text, but HRs didn't render... now
I've added styles to render the HR as a string of horizontal-line
characters (which ensures they pick up the correct text-color).
-- Primary size applies to the first cap; secondary size applies to all
other caps
-- If primary is changed, we automatically change the secondary to keep
it in sync; this is *usually* what we want.
-- Some special serialization rules to ensure we don't write out more
data than needed; same rules apply there, if primary is changed,
secondary changes.
-- Used to be 1-5; is now 1-9.
-- DSA used to make size=5 *really* big. Now that there are more sizes,
DSA no longer has any overrides (so it's back to being a linear
scale)... old size 5 ==> new size 8.
The new parser is generated by Jison (a JS parser generator, like
Bison).
-- Modified one of the Jison samples to support our "leniency"
requirement.
-- Added a makefile to build & minify the parser.
-- The new parser also generates better error messages... but they
expect to be displayed in a console. So I changed the error alert DIV
to use a fixed-width font.
-- all labels are separated by \n's in the serialized data; now just
supporting 3 more
-- labels are now stored as an array internally
-- Fixed a bug where inserting a key would say "g:undefined"
-- Fixed a bug where you could have an invalid key selected after
editing the raw data.
-- Extended serialized format to include metadata.
-- Route access to keyboard keys through a helper function.
-- Added a new editor tab for keyboard properties
-- F2 when no keys are selected goes to kbd-properties tab
-- Single metadata property so far: "backcolor"; sets the background
color of #keyboard
Misc:
-- Moved undo/redo key bindings to the editor... allows undo/redo
hotkeys to work properly in raw data
-- Raw data changes now get logged as a transaction
Implemented as a POST upload to AWS/S3.
-- Each layout is a separate file; identified by its MD5 hash
-- No real security to protect against malicious users "erasing"
layouts, but S3 offers versioning.
Also:
-- Added save button on the toolbar.
-- Added load/save alert boxes.
-- Added Ctrl+S hotkey to save.
Couldn't get real access to the clipboard, so we can only copy/paste
within one instance of the app, at the moment.
Also fixed a few undo/redo bugs:
-- after undo/redo, invalid keys were still selected and showing in the
editor
-- A number of transactions didn't do anything, but invoking them would
empty the redo stack; now checking for these conditions before logging
the transaction.
-- Limiting the undo stack to 32 levels, for performance/memory reasons.
-- When I started copying key nodes instead of assigning references
(when I added validation), I caused a problem where the form wouldn't
update when you modified a key outside of the form.
-- This also affected inserting keys, which would insert keys in a
seemingly random place.
-- I'm now properly updating $scope.multi when I modify properties on
the selected keys.
-- I also deleted the findKeyAfter() function (used only in addKeys),
and using the more-robust sortKeys() method.
-- Note that this can be a bit unintuitive sometimes.
-- If works great so long as the range between your last selected key
and the key you clicked on don't overlap. I think this will be the most
common case.
-- If the ranges overlap, a bunch of items will end up being toggled,
which is weird.
Apparently Ctrl+Click isn't allowed on Mac computers (gets translated to
right-click). In order to allow multi-select, etc., on Macs, I'm
checking for Alt everywhere I was previously checking for Ctrl.
I broke the next/prev key logic when I added the input validation; since
$scope.multi is now a *copy* of a key, rather than an actual key, we
can't rely on looking it up in the keys[] array to determine the
most-recently selected key.