This assumes that adding or removing labels is a relatively
common action to do on an event and provides a quicker
and simpler mechanism than bringing up the full event
dialogue.
This is meant to be invoked from a context menu action or
similar.
When an event has been modified, this control opens a dialogue
where the previous version of the event may be reviewed and if
necessary restored.
Technically, this was the quid of and closes#138.
Preferences are read from the store and passed to graph components
via the `settings` prop. Component may changed their own settings
by emitting the `update:settings` signal.
The user preferences are saved in the browser's localStorage and
read by setCredentials() whenever that function is called. From
that point they are cached in the Vuex store.
Provided that preferences are only modified through the store,
via the saveUserPreference() call, the preferences should always
be in sync between the store and the browser.
The preferences object is a key/value store. Each key is
expected to be in the form of a series of dot-separated prefixes,
e.g., `UserX.RoleY.Graphs.GraphType1.setting0`.
For user preferences, the first two prefix elements should be the
username and role of the user that the setting applies to. These will
be automatically added and stripped by saveUserPreference() and
loadUserPreferences() respectively.
Fixes#150.
Contributes towards the goal of #149. As irrelevant data (such
as for non-firing guns) is no longer shown at all. This affects:
* Firetime (only active array data shown)
* Gun deltas (only active array shown)
* Fill time (only non-active array shown)
We move most of the logic from the client (as it was until now) to the
server.
The PATCH command maintains the same format but it should provide only
one of the following keys per request:
* ts0
* ts1
* speed
* fsp
* lsp
* lagAfter
* sequence
Earlier keys in the list above take priority over latter ones.
The following keys may be provided by themselves or in combination with
each other (but not with any of the above):
* name
* remarks
* meta
As a special case, an empty string as the `name` value causes the name
to be auto-generated.
See comments in the code `patch.js` for details on the update logic.