The JDB Util dependency has been upgraded to 3.4 from 2.0. This includes
backwords-incompatible changes in the LightOptionParser class used by this
project. I need to re-write that code to use the newer version of
LightOptionParser.
* Strted making the page responsive (size-based media queries, mobile meta
tags, and reworked the UI for small sizes).
* Fixed bugs in the periodicRefresh function.
* Changed the yaw.prod.conf file to match the actual PROD coniguration.
* Reworked the buid process to compile SCSS files and move WWW assets
directories individually.
* Added pulsing animation for the current marker.
* Bugfix for View objects.
* Reworked separator display. Now it is handled by the
`EntryListView.renderOne` function instead of `EntryListView.render`. This
way the proper separator is inserted even if we are only adding one new entry
(like when creating a new entry) and not only when we refresh the list.
* Added a periodic refresh function that is triggered every minute. It
refreshes the current entry so the duration is current, and refreshes te main
list when a new day begins.
* Modified make target `deploy` to require the `build` target first.
* When creating a new timestamp entry we no longer refresh the collection from
the server. Now we use the `success` callback to set the server-supplied
values on the model.
* Changed the cookie Path value to allow the cookie to be reused for the
domain, not just ths `/ts_api` path. This allows the user to refresh the page
and reuse their existing session as long as it is not stale.
* Fixed a bug in the `ts_json:ejson_to_record_strict/2` function. It was
expecting a record out of `ts_json:ejson_to_record/2` but that function
returns a tuple with the record and extended data. Because of the way
`ejson_to_record_strict` uses case statements to check for specific values it
was still passing the parsed record and data through, but all the checks were
being bypassed.
* Fixed bugs in the `index.yaws` bootstrap code for the case where the user
already has a valid session.
* Added `urlRoot` functions to the Backbone model definitions.
* Changed the behavior of the new entry creation method. We were trying to
fetch just updated attributes from the server for the model we created, but
we were pulling all the entries due to the URL backbone was using. This led
to the new client-side model having all the previous entry models as
attributes. Ideally we would fix the fetch so that only the one model is
requested from the server, but we run into a catch-22 because the lookup id
is not know by the client as it is generated on the server-side. For now I
have changed this behavior so that we still pull all entries, but we pull
them into the collection. The collection is then smart enough to update the
entries that have changed (namely the new one). The server returns the newly
created entry attributes in response to the POST request that the client
makes initially, so when I have more time to work on this I plan to do away
with the fetch after create, and just pull in the data from the server's
response.
* Changed formatting.
* Added UUIDs to `ts_entry` records. Updated `ts_json:construct_record` to
respond to `uuid` member properties if present. UUIDs are not required by the
strict parsing functions in `ts_json` because the client will make a request
with no UUID if it is a purely new timestamp. IN fact, this is the normal
case. The UUID is only present when another tool is syncing its copy of this
timeline wand adding entries that it has created and assigned UUIDs to.
* `ts_entry:new` will create a UUID for a new entry if it does not already have
one.
* Restructured the build process to put all build artifacts into a dedicated
`build` subdirectory, instead of mising them in an amongst the source code.
* Added the `uuid` module to the project. It can be found at
https://gitorious.org/avtobiff/erlang-uuid
* Rewrote asset URLs to use relative paths instead of absolute paths. Relative
paths are correct in this case, becuase assets always live alongside the HTML
pages. This change was needed to accomodate the new organization of the JDB
Labs dev environment, where all projects live under subdirectories of the
same virtual server instead of subdomains.
* Tweaked the timestamp entry fields in the web UI to save when the field is
blurred, not just when <Enter> or <Ctrl>-<Enter> is pressed (though those
still work).
* Added a UUID field to TimelineMarker.
* Updated StreamBasedTimelineSource to read and write UUIDs. The current format
is compatible with the 1.x format, but support for the 1.x format is planned
to be deprecated for 3.x.
The UUID is added on the same line as the timestamp, with a `,` separating
the timestamp and the UUID value.
* Updated JDBLabsWebTimelineSource to use UUIDs to reconcile the different
timestamp entries (more reliable that using the timestamp value).
* ts_api:list_timelines/2 was looking for keys as atoms instead of lists (strings).
* Exported the ts_json:decode_datetime/1 function (needed by ts_api module).
* Fixed a crash case when trying to check the credentials of a non-existent user.
* SyncTarget now persists the remote timeline after pushing to it.
* Added SyncTarget.shutdown() to allow callers to signal the sync timer thread
to stop.
* Fixed a bug where a SyncTarget was added instanciated times.
* Added `edit` which uses the program in $EDITOR to allow the user to edit the
current timeline marker.
* Added `delete` to remove the current timeline marker from the timeline.
* Added support for using a named TTY device in order to use an interactive
program ($EDITOR in this case) to take over interaction with the user. There
is still a problem with this, in that a process by default only has access to
its controlling TTY device. This mean, for example, that redirecting the
subprocess input and output to the TTY will fail to work properly if the
timestamper CLI process is not part of the same process group as the process
owning the TTY the user is interacting with. This is the case when using
nailgun: the java process running TimeStamperCLI is not part of the same
process group as the user's client shell.
I think TTY device permissions may be alterable, and we can work around this
by changing the permissions for the current TTY in the launcher script that
invokes the nailgun client. Needs more investigation.
* Added package build target to create a zip of the CLI standalone installation.