100 Commits
Author SHA1 Message Date
Jonathan Bernard 846f505f6b Bugfix to periodic refresh behavior. 2013-11-13 10:32:42 -06:00
Jonathan Bernard 4a7486305c Fixed bug in options definition. 2013-10-26 10:09:01 -05:00
Jonathan Bernard 8cc257c24e Fixed bugs in initial 2.0 release. 2013-10-11 16:37:11 -05:00
Jonathan Bernard 216b3c5303 Updated to library 2.1. Fixed auto-generated start script. 2013-10-11 16:34:36 -05:00
Jonathan Bernard 15750f65d4 Upgrading timestamper-lib version. 2013-09-22 15:23:15 -05:00
Jonathan Bernard bc51d17932 Upgrading to Griffon 1.2.0 2013-09-22 15:22:44 -05:00
Jonathan Bernard 4c8d8a9f2d Version 1.5: Fixed an issue with JDBLabsWebTimeline persist. 2013-09-22 15:19:44 -05:00
Jonathan Bernard 621e00deaa Using lists instead of atoms for things being turned into JSON. 2013-09-21 15:52:29 -05:00
Jonathan Bernard 4992d7cac9 Version 1.4: SyncTarget syncOnExit property is meaningful now. 2013-09-13 09:24:44 -05:00
Jonathan Bernard e296e87003 Version 1.6: Added help section, bugfix, updated build process.
* Build now includes config and bin resources.
* Build new builds an executable jar.
* Added help section.
* Bugfix for working directory.
2013-09-13 09:16:08 -05:00
Jonathan Bernard 269a9b9125 Version 0.5: Added support for syncing timelines.
* Added missing libraries required by timeline-lib to support syncable
  timelines.
* Added code to shutdown sync threads upon exit.
2013-09-13 08:57:45 -05:00
Jonathan Bernard 68ce5bb272 Version 1.3: bugfix, add shutdown for SyncTarget threads.
* 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.
2013-09-13 08:48:50 -05:00
Jonathan Bernard 76bf676c2c Added edit and delete commands.
* 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.
2013-08-10 01:40:02 -05:00
Jonathan Bernard 284a4159d1 Added command to re-read the timeline source. 2013-08-09 11:45:56 -05:00
Jonathan Bernard 6e6d799dee Added TimelineProperties.reloadTimeline() method. 2013-08-09 11:37:55 -05:00
Jonathan Bernard e4a756baf5 Moved back to realtime update model.
* Using patched version of Jansi.
* Raw ANSI controls always sent to play well with Nailgun.
2013-08-08 23:14:18 -05:00
Jonathan Bernard f78cd57ec7 Can now add marks. Display is single-threaded, refresh on command.
Also implemented save and quit (including cases for Ctrl-D, `exit`, and `quit`)
2013-08-08 20:09:15 -05:00
Jonathan Bernard 769245b690 Working on UI using ANSI escape sequences. 2013-08-08 14:21:00 -05:00
Jonathan Bernard f9e700f27b Updated common-build to 1.10 2013-07-30 11:30:43 -05:00
Jonathan Bernard ec154c8a49 Updated build reference. 2013-07-19 18:54:22 -05:00
Jonathan Bernard fcbb0bd1ee Updated build script. 2013-07-19 18:52:07 -05:00
Jonathan Bernard 988ed2bb51 Minor reformatting. 2013-07-19 18:47:45 -05:00
Jonathan Bernard 00a5252542 Small changes to Category and Event toString()
* Updated Category and Event toString methods to report the duration alongside
  the description.
* Updated QD TicketCategorizationPlan to reflect previous changes to
  CategorizationPlan interface.
2012-09-04 10:41:40 -05:00
Jonathan Bernard 2650fca7f1 Removed unnecessary dependancy. 2012-08-30 22:50:52 -05:00
Jonathan Bernard cda3544cac Creating initial project structure. 2011-06-19 07:23:36 -05:00
Jonathan Bernard b01421d45d Adjusted session timeout to be 12 hours. 2011-06-18 09:36:03 -05:00
Jonathan Bernard 602bdca7e3 Minor fixes needed for last_timeline to work.
* Added route back for PUT /ts_api/user/<username>
* Fixed typo in ``ts_api:put_user/2``.
* Fixed incorrect expected return from ``ts_ext_data:set_property/3``.
* Added missing assignment for ``ts_user.email`` in the appropriate
  ``ts_json:construct_record/3`` clause.
* Fixed model attribute assignment in ``ts.js``.
2011-06-15 18:31:53 -05:00
Jonathan Bernard 3999e736be Bug fixes and implementation refinement around `ts_ext_data`.
* Transformed the test database to match the new data model. Added
  ``ts_ext_data`` table and moved ``ts_user.ext_data`` values to it.
* Added D0022: cascade delete ``ts_ext_data`` when ``ts_entry`` record is
  deleted.
* Completed refactor of ``ts_api`` functions to account for extended data:

    * ``post_entry/3``
    * ``put_entry/3``

* Created ``ts_entry:write/2`` to write extended data atomically with the entry.
* Fixed copy/paste bug in ``ts_ext_data:create_table/1``.
* Fixed implementation of ``ts_ext_data:set_property/3`` to be explicit about
  taking a record, not a reference. It then extracts the reference and passes it
  to the underlying implementation in ``ts_ext_data:do_set_property/3``.
* Refactored ``ts_ext_data:do_set_property/3`` to take a record *reference*, not
  the record itself.
* Refactored the ``ts_ext_data:get_property/2`` and
  ``ts_ext_data:get_properties/1`` functions to return key value tuple pairs,
  not ``ts_ext_data{}`` records.
2011-06-15 07:34:41 -05:00
Jonathan Bernard 658091e947 Bugfixing, compile-error-sqhashung. 2011-06-15 00:54:58 -05:00
Jonathan Bernard 7d11112226 Fixed extended data handling in `ts_json` module.
* Refactored ``ts_json:ext_data_to_ejson{1,2}`` from a function that iterates
  over a list of extended data properties and returns a transformed list to
  ``ts_json:ext_data_to_ejson/1``, a function that transforms one extended data
  property. The iteration behavior is acheived using ``lists:map/2``.
* Refactored ``ts_json:ejson_to_ext_data{1,2}`` in a similar fashion to
  ``ts_json:ext_data_to_ejson{1,2}``.
* Fixed ``ts_json:construct_record/3`` to use ``ts_json:ejson_to_ext_data/1``.
2011-06-15 00:26:31 -05:00
Jonathan Bernard 8bb50c058d Changed Data Model
------------------

* Created the extended data table. This is a more generic version of the
  extended data field that was on ``ts_user``. Instead of arbitrary key-value
  pairs going in a list on the user record we will have an additional table, a
  one to many relationship between existing tables and the ``ts_ext_data``
  table, each row being an extended value of the corresponding record.
* Added support to the ``timestamper:create_tables/1`` and
  ``timestamper_dev:create_table/1`` functions for the new ``ts_ext_data`` table.

Documentation
-------------

* Added some general docs about the DB layer code.
* Added two new issues, *D0020*: Entry exclusion filters and *D0021*: notes width.

API Changes
-----------

Necessitated by the change to the data model.

* Updated ``ts_api`` data-retrieval functions to use extended data:

    * ``get_user_summary/2``
    * ``list_timelines/2``
    * ``list_entries/3``

* Updated ``ts_api:put_timeline/3`` to parse the extended data supplied by the
  caller. *FIXME* it is not actually saving this data.
* TODO: Started updating ``ts_api:post_entry/3`` to handle extended data, need
  to finish.

Database Layer
--------------

Changes necessitated by the change to the model.

* Added ``ts_common:do_set_ext_data/2`` which iterates through the extended data
  key-value pairs calling ``ts_ext_data:set_property/3``. It does not provide a
  transaction context.
* Split ``ts_common:new/1`` and ``ts_common:update/1`` functions into multiple
  functions to prevent code-duplication:

    * ``do_{new,update}`` contains the code that performs integrity checks and
      the actual database write function. It does this assuming that it is being
      called from within the context of an mnesia transaction (uses
      ``mnesia:read`` and ``mnesia:write``).
    * ``{new,update}/1`` performs the same function as previously. The
      implementation changed from using mnesia ``dirty_*`` calls to prociding a
      transaction and calling ``do_{new,update}/1``.
    * ``{new,update}/2`` expect the record to update/create and the extended
      data to write atomically with the record. They provide a transaction
      context, call ``do_{new,update}/1``, then call ``do_set_ext_data/2``.

* Similar to the refactoring of ``ts_common:{new,update}/1``,
  ``ts_entry:{new,update}/1`` have been refactored into multiple methods each to
  support extended data properties:

    * ``do_{new,update}/1`` perform the actual update assuming we have already
      established an mnesia transaction.
    * ``{new,update}/1`` behave the same as they used to, but now do so by
      creating an mnesia transaction and calling ``do_{new,update}/1``.
    * ``{new,update}/2`` create an mnesia transaction, call
      ``do_{new,update}/1``, and then call ``ts_common:do_set_ext_data/2``.

* Again similar to the refactoring of ``ts_common:{new,update}/1``,
  ``ts_user:{new,update}/1`` have been refactored into multiple methods each to
  support extended data properties:

    * ``do_{new,update}/1`` perform the actual update assuming we have already
      established an mnesia transaction.
    * ``{new,update}/1`` behave the same as they used to, but now do so by
      creating an mnesia transaction and calling ``do_{new,update}/1``.
    * ``{new,update}/2`` create an mnesia transaction, call
      ``do_{new,update}/1``, and then call ``ts_common:do_set_ext_data/2``.

* Created the ``ts_ext_data`` module as the interface to the extended data
  properties introduced in the data model:

    * ``create_table/1`` performs the same function as it does in the other db
      layer modules, creates the table with the appropriate structure given the
      more general table options desired (location, storage type, etc.).
    * ``set_property/3`` takes a record, a property key, and a property value as
      input and sets the property described by the property key on the record to
      the given value, assuming this is a valid property for the record to have.
      For example, currently the ``ts_user`` record can have an associated
      property, ``last_timeline``, which represents the last timeline the user
      was working with. Trying to pass this property with a ``ts_entry`` record
      would result in an exception. This function uses
      ``ts_ext_data:do_set_property/3`` as its underlying implementation.
    * ``get_property/2`` takes a record and a property key and returns the value
      of that property for the given record, or ``not_set`` if the property has
      not been set on that record. This method creates its own mnesia
      transaction.
    * ``get_properties/1`` takes a record and returns a list of key-value tuples
      representing all of the extended data properties set for the given record.
      This method creates its own mnesia transaction.
    * ``do_set_property/3`` takes a record reference (not the whole record), a
      a property key, and adds the property assignment to the ``ts_ext_data``
      table. It creates its own mnesia transaction.

* Added ``new/2`` and ``update/2`` to the ``ts_timeline`` module to support
  extended data properties. They delegate implementation to
  ``ts_common:{new,update}/2``.

JSON Encoding/Decoding
----------------------

Changes necessitated by the change to the data model.

The JSON objects now contain a potentially unlimited number of fields, as each
extended data property is encoded as a seperate field, and looks no different
from any of the required fields on the object. The intended explanation in API
documentation is that each object type (``user``, ``timeline``, or ``entry``)
now has both *required* fields that *MUST* be present in every message in either
direction and *optional* fields that may or may not be present in any
communication with the API. There should be a clear distinction between which
fields are required and which are optional. It might also be a good idea to
provide a suggested default for optional values when they are not present.

* Updated documentation about JSON record structures to reflect the fact that
  there are now potentially many optional attributes in addition to the required
  attributes for each record.
* ``record_to_ejson/1`` refactored to ``record_to_ejson/2`` which also takes
  the extended data attributes and appends them as additional attributes to
  the end of the record structure.
* Created ``ext_data_to_ejson/{1,2}`` to provide a mechanism for reformatting
  extended data properties whose internal representations are not immediately
  translatable into JSON. Currently only the ``entry_exclusions`` property,
  which is a list of strings, needs to be treated this way (changing from
  ``[val, val]`` to ``{array, [val, val]}`` as needed by ``json:encode/1``.
  ``ext_data_to_ejson/1`` acts as a more user-friendly facade to
  ``ext_data_to_ejson/2``.
* Rewrote ``ejson_to_record/{2,3}`` and ``ejson_to_record_strict/{2,3}`` to
  handle extended data. They now use a common method, ``construct_record/3`` to
  create the actual record object and extended data key-value list.
  ``ejson_to_record_strict/{2,3}`` only differs in that it checks for the
  presence of each required field of the record after the record is constructed.
  The three-parameter versions of these functions also take in the intended
  reference for the constructed record, replacing anything that is in the EJSON
  body as the record reference (useful when the body does not have the record
  ids). These methods now return a tuple: ``{Record, ExtData}`` instead of just
  the record.
* Created ``construct_record/3`` takes a record and the EJSON fields from the
  input object. The third parameter is an accumulator for the extended data
  properties found when constructing the record. This method works by iterating
  over the list of input fields. It recognizes any required fields and updates
  the record being built with the value. Any fields it does not recognize it
  assumes are extended data properties and adds to its list. When all input
  fields have been visited it returns the record and list it has constructed.
* ``ejson_to_ext_data/{1,2}`` is the inverse of ``ext_data_to_ejson/{1,2}``.
  *TODO*: this method is not actually being used by the ``ejson_to_record*``
  methods.
2011-06-14 16:48:04 -05:00
Jonathan Bernard 99d04935cb Implemented timeline selection.
* Added personal VIM ide extension.
* Implemented timeline selection (resolves D0007)
* Slightly restyled the new timeline button and timeline list menu.
2011-06-10 11:49:45 -05:00
Jonathan Bernard b5eadd6fc4 Fixed timeline creation, API logical fixes.
* Resolved issues:

    * #0006: Fix timeline menu UI.
    * #0015: Create new timeline button in timeline menu.
    * #0017: Implement timeline creation.

* Removed ts_api:post_timeline/3, corresponded to `POST` to
  `/ts_api/timelines/<user-id>`, which makes no sense as there is no way to
  auto-generate new timeline-ids.
* Changed ts_api:put_timeline/3 to use ts_timeline:write. This resolved #0017.
* Changed ts_api:put_entry/4 to use ts_entry:write.
* Implemented ts_entry:write/1 and ts_timeline:write/1. These functions are
  simple passthroughs to mnesia:dirty_write/1.
* Added clarifing documentation for ts_json:record_to_ejson JSON formats.
* Renamed ts_json:ejson_to_record/2 to ts_json:ejson_to_record_strict/2 and
  added ts_json:ejson_to_record/2 as a lax version of the same.
* Updated all ts_api functions to use updated ts_json methods.
2011-06-07 20:47:23 -05:00
Jonathan Bernard bc364b2ebd Merge branch 'client-redesign'
Conflicts:
	yaws.dev.conf
2011-06-07 08:38:09 -05:00
Jonathan Bernard 89336e844f Implemented new timeline functionality client-side.
* Fixed returned information in ts_api:put_timeline/3
* Added UI for new timeline button.
* Added client-side implementation of new timeline creation. There is a problem
  on the server-side, PUT should support creating new items and updating
  existing items.
2011-06-07 08:34:20 -05:00
Jonathan Bernard 76083b5972 Added icons for timeline creation. 2011-06-07 08:29:26 -05:00
Jonathan Bernard cf42d133f6 Added UI for timeline creation. 2011-06-01 06:29:48 -05:00
Jonathan Bernard 72ef1ac277 Moved issues to issue tracker. 2011-05-27 09:50:43 -05:00
Jonathan Bernard 2cc17b85f1 Implemented notes UI.
- Switched from a global reset in www/css/ts-screen.scss to a selected
  top-level elements reset to allow default formatting for user notes.
- Restructured the #entry-list and entry displays.
- Restructured notes div, now has a sub-div for text and a textarea
  element for input.
- Added Showdown.js, a JavaScript Markdown library for formatting comments.
- Moved EntryView blur events to the View events map.
- Added images for expansion of notes.
- Added the ability to edit notes.
- Split EntryListView.addOne into renderOne and addOne so that renderOne
  can be called with a new entry (fixes duration glitch)
2011-05-16 04:09:37 -05:00
Jonathan Bernard 65a9a517f9 Updated test data. 2011-05-09 10:54:24 -05:00
Jonathan Bernard 808492154d Adding hover-able icons to timeline entries.
- Added notes and delete icons right and left entry marks respectively.
- Notes icon slide toggles the notes display (hidden by default).
2011-05-09 10:52:21 -05:00
Jonathan Bernard 74d8a7f015 Duration display, time formatting, UI tweaks.
Client Behaviour (ts.js)
========================

- Created EntryView.getViewModel: translates model data to view data,
  specifically synthesizes the start time and duration from the timestamp.
- Added nextModel option to EntryView, needed for calculating the entry
  duration.
- Created EntryView.formatStart: given the timestamp, return the start time,
  in HH:MM format. Code is written for both 24hr and 12hr format, still need
  to write a selector mechanism. For now, uses 12hr format.
- Created EntryView.formatDuration: Get the duration of the entry based on
  this entry's timestamp and and the next entry's timestamp in a display-able
  form. If nextModel is `null` or `undefined` it is assumed that `model`
  is the most recent model and duration is calculated against the current time.
- Changed EntryView.render to use getViewModel.
- Added 'blur' listeners to the mark and timestamp input fields to close them
  without persisting the changes.
- Created EntryView.update: Refresh the display based on the model using the
  existing DOM elements.
- EntryView.save() now uses EntryView.update() instead of EntryView.render()
  and no longer includes an implicit close()
- EntryView.close() has been split into seperate save() and close() functions,
  to persist the changes and hide the input dialogs, respectively.
- EntryListView.addOne now passes the nextModel to EntryViews is creates.
- EntryListView.createNewEntryOnEnter() now clear the new intry input after
  creating a new entry.
- EntryListView.render() now uses a for-structure to traverse the entry
  collection and passes the nextModel (if there is one) to EntryListView.addOne.

Client UI (ts-screen.scss)
==========================

- Font size, family, and color adjusted on timeline and user input fields.
- Day seperator secondary header colors adjusted.
- Mark column width shortened, timestamp and duration columns widened.
- Styles added for notes UI

Client UI (index.yaws)
======================

- Markup changes needed for getViewModel chanes.
- Expanded day seperator.
2011-05-07 22:03:02 -05:00
Jonathan Bernard 036177cfed Duration display, time formatting, UI tweaks.
Client Behaviour (ts.js)
========================

- Created EntryView.getViewModel: translates model data to view data,
  specifically synthesizes the start time and duration from the timestamp.
- Added nextModel option to EntryView, needed for calculating the entry
  duration.
- Created EntryView.formatStart: given the timestamp, return the start time,
  in HH:MM format. Code is written for both 24hr and 12hr format, still need
  to write a selector mechanism. For now, uses 12hr format.
- Created EntryView.formatDuration: Get the duration of the entry based on
  this entry's timestamp and and the next entry's timestamp in a display-able
  form. If nextModel is `null` or `undefined` it is assumed that `model`
  is the most recent model and duration is calculated against the current time.
- Changed EntryView.render to use getViewModel.
- Added 'blur' listeners to the mark and timestamp input fields to close them
  without persisting the changes.
- Created EntryView.update: Refresh the display based on the model using the
  existing DOM elements.
- EntryView.save() now uses EntryView.update() instead of EntryView.render()
  and no longer includes an implicit close()
- EntryView.close() has been split into seperate save() and close() functions,
  to persist the changes and hide the input dialogs, respectively.
- EntryListView.addOne now passes the nextModel to EntryViews is creates.
- EntryListView.createNewEntryOnEnter() now clear the new intry input after
  creating a new entry.
- EntryListView.render() now uses a for-structure to traverse the entry
  collection and passes the nextModel (if there is one) to EntryListView.addOne.

Client UI (ts-screen.scss)
==========================

- Font size, family, and color adjusted on timeline and user input fields.
- Day seperator secondary header colors adjusted.
- Mark column width shortened, timestamp and duration columns widened.
- Styles added for notes UI

Client UI (index.yaws)
======================

- Markup changes needed for getViewModel chanes.
- Expanded day seperator.
2011-05-07 21:31:30 -05:00
Jonathan Bernard b22c10c6c2 Created todo documentation. 2011-05-07 21:30:32 -05:00
Jonathan Bernard 850edf9e25 Updated test data. 2011-05-07 21:30:00 -05:00
Jonathan Bernard dd3387a0f1 Trying to tighten up the design. More functionality implemented. 2011-05-03 12:50:03 -05:00
Jonathan Bernard cf5153c90b Merge branch 'api-redesign' into client-redesign 2011-05-03 12:40:06 -05:00
Jonathan Bernard ac80d57cd3 Updated dev conf to reflect the new location of the Timestamper project. 2011-05-03 12:37:15 -05:00
Jonathan Bernard 3d89477f7e Added ext_data field to ts_user. 2011-05-03 12:27:39 -05:00
Jonathan Bernard ebd4b117c9 Updated database to use lists instead of atoms for table keys. 2011-05-03 12:27:13 -05:00
Jonathan Bernard 9b3f587974 Changed record keys to use lists instead of atoms.
Using atoms will not scale in the large. Also, using atoms as keys forced the
API to convert arbitrary end-user input to atoms, adding another potential
drain of the finite atom-space available.

- ts_api: url paths are now treated and matched as lists, not atoms.
  Usernames and API calls all use lists now.
- ts_json: key items (username, timeline ids) are now expected to be lists,
  not atoms.
2011-05-03 12:24:23 -05:00
Jonathan Bernard 77fc3f2a07 Created prototype HTML. 2011-05-03 12:00:27 -05:00
Jonathan Bernard 302bc9ccdd Trying to gather thoughts and code coherently.
Added client-side architecture model.
Playing with UI code.
2011-04-27 14:11:54 -05:00
Jonathan Bernard 9025a2f8f6 Trying a view for user, timeline(s), entry(ies). 2011-04-20 09:40:54 -05:00
Jonathan Bernard aec172536e Merge branch 'api-redesign' into client-redesign 2011-04-15 14:30:28 -05:00
Jonathan Bernard 5b267ec67b Switched usage of POST and PUT verbs.
- POST and PUT were being used counter to typical usage, POST updating existing
  records and PUT creating new ones. Changed to PUT updating existing records
  and POST creating records.
2011-04-15 13:53:24 -05:00
Jonathan Bernard 17c5b9cbd1 API now returns just the content in the body.
- Instead of returning Meta-Data (status) in the header and the body, we now
  only return the content in the body, except in error when we return the error
  message.

- JSON entries use the 'id' name for entity ids (instead of 'username',
  'timeline_id', and 'entry_id')
2011-04-15 13:51:01 -05:00
Jonathan Bernard e10ec26a21 Implementing new client design using Backbone.js. 2011-04-15 13:26:55 -05:00
Jonathan Bernard d0aab2d0c6 merge. 2011-04-10 17:20:43 -05:00
Jonathan Bernard b6d05665bf Moved timestamper to root of server. 2011-04-10 17:16:30 -05:00
Jonathan Bernard 81fb56022c Merge branch 'stable' 2011-03-17 04:17:26 +00:00
Jonathan Bernard 76f32ac834 Moved timestamper under JDB Labs. 2011-03-17 04:17:10 +00:00
Jonathan Bernard 4d124ffeba Fixing dev config. Starting to implement sign-up.
Added 'default' make target to only compile.
Reset development configuration.
Commented out starts of tests.
Added sign-up GUI to login panel.
Moved application from /ts/ to /
2011-03-16 07:39:09 -05:00
Jonathan Bernard 1b981b206c Created timestamper_dev module, logging. 2011-03-11 15:08:18 +00:00
Jonathan Bernard c185c8cd81 Deciding on UI for entry list. 2011-03-06 13:46:18 -06:00
Jonathan Bernard 439a080f14 Started adding implementation of client-side functionality.
- Changed ts_api:dispatch_user/3 to return information for the user currently,
  authenticated if a valid session id is presented and no username is presented.
- Moved the generic styling of form > * elements to be specific to .bar > form.
- Added jQuery U 1.8.0.
- Created login dialog that will automatically load upon page load if the user
  is not logged in.
- Added styling for jQuery UI login dialog.
- Implemented login functionality on the client page.
- Implemented functionality to load user and timeline records on the client
  side.
2011-03-01 08:23:51 -06:00
Jonathan Bernard 4492f87a39 Added user_summary to api.
Added ts_api:dispatch_app/3
Added ts_api:get_user_summary/2
Fixed compile errors in ts_user.
Added comments.
2011-02-24 07:29:30 -06:00
Jonathan Bernard ddc12cec64 Further work on web interface. 2011-02-14 09:01:32 -06:00
Jonathan Bernard 19fc37c772 Working on new entry. 2011-02-13 11:38:50 -06:00
Jonathan Bernard d743635865 Added more JS event handler implementations. 2011-02-12 14:57:29 -06:00
Jonathan Bernard 6197363508 More progress on the application page.
Created and styled the forms for updating user/timeline information.
Wired the hidden forms to links that expose them using jQuery.
2011-02-12 07:48:19 -06:00
Jonathan Bernard dcd836ba8e Testing out design ideas. 2011-02-11 08:32:12 -06:00
Jonathan Bernard afca12ecc9 Started working on the client-side code. 2011-02-10 07:47:35 -06:00
Jonathan Bernard 0642c18a6e Implemented cookie-based authentication to the API.
Created timestamper module to start the application.
Added cookie-based authentication to ts_api.
Added utility methods to ts_api:
    * make_json_400/1 and make_json_400/1
    * make_json_401/1 and make_json_401/2
    * parse_json_body/1 reads a JSON object from a HTTP request body.
Implemented ts_api_session module to manage api user sessions.
Fixed ts_entry:list* methods to be 0-indexed.
Removed the ts_json:ejson_to_record/1 implementation for ts_user records.
    Decided that ts_user records are never trusted from the client,
    manipulation of fields such as pwd, username will be restricted to
    app pages.
Changed the password hashing algorithm. Now uses SHA1(pwd + 256bit salt).
    Want to use bcrypt, investingating cross-platform bcrypt implementation.
Fixed yaws.conf config file.
2011-02-07 08:56:07 -06:00
Jonathan Bernard 5809ed3959 Implementing API 2011-02-05 08:57:34 -06:00
Jonathan Bernard 098cd4cbb9 Continue to implement the API.
Started implementing ts_api:list_entries/3
Implemented ts_api:get_entry_by_id/4
2011-01-31 10:04:01 -06:00
Jonathan Bernard 309d6915fc Additional parts of the API, DB layer.
Implemented additional API functions:
    * dispatch_timeline/4
    * dispatch_event_by_id/4
    * get_timeline/3
    * put_timeline/3
    * post_timeline/3
    * make_json_404/2, make_json_405/2, make_json_500/1
Implemented ts_timeline:lookup/2
Implemented ts_entry:lookup/2
2011-01-30 08:28:56 -06:00
Jonathan Bernard b690326cf4 Small addition to ts_api. 2011-01-29 13:41:27 -06:00
Jonathan Bernard 0d96c26174 Started craeting API dispatch and implementation. Updated api doc. 2011-01-29 10:46:45 -06:00
Jonathan Bernard 495336fc58 Starting DB implementation.
Added Makefile, id_counter.erl, and yaws.conf.
Created ts_common module. Will contain common DB code. So far only list/3.
Created ts_timeline module. DB code for storing timeline entries.
Created ts_entry module, DB code for storing timelin entries.
2011-01-28 06:49:47 -06:00
Jonathan Bernard 111da51c73 Beginning API documentation. 2011-01-28 03:22:21 -06:00
Jonathan Bernard d08d054fbe Finished version 2.1.
Updated .gitignore, excluding vim temp filesn and build directories.
Promoted version number in application.properties.
Switched to SLF4J for logging from LOG4J.
Switched to jdb-util SmartConfig for configuration from  java.util.Properties
Added plugin architecture:
    * Plugins implement com.jdbernard.timestamper.gui.plugin.TimestamperPlugin
    * Provides five hooks into the application:
        - onStartup: called as the aaplication is starting.
        - onExit: called as the application is exiting.
        - onTimelineLoad: called when the application loads a timeline.
        - onNewTask: called when the user creates a new task.
        - onDeleteTask: called when the user deletes a task.
    * Plugins must be on the classpath to be enabled.
    * A new timestamperrc property allows the user to specify a plugin
      directory. That directory and any JAR files in it will be added to the
      classpath used to load plugins. This property is 'plugin.dir' and may
      contain the path, If no directory exists at that path, one will be
      created. The default path is './plugins'.
    * A new timestamperrc property allows the user to specify which plugins
      to load when the application is started: 'plugin.classes'. It expects
      a comma-seperated list of plugin class names. The default value is
      ''.
    * Two default plugins have been created:
        - 'com.jdbernard.timestamper.gui.plugin.HookLogger'. This plugin logs
          an info message every time one of the plugin hooks is called.
        - 'com.jdbernard.timestamper.gui.plugin.XMPPStatusUpdater'. This
          plugin updates a user's XMPP (Jabber) presence with their current
          task each time a new task is entered.
Various other changes on TimeStamperMainController:
    * Timeline loading is now broken out into a load() closure.
    * Plugin hooks described above added at appropriate places.
    * Added a general wrapPluginCall method to catch any exceptions from a
      plugin call and sanitize the return value.
    * The exitGracefully closure now hides the GUI before starting its shutdown
      sequence so the user and the OS are less likely to assume the app has
      hung.
    * Added the functionality for the 'persistOnUpdate' feature (introduced on
      TimelineProperties, below).
Removed the automatically generated logging functions, traceIfEnabled and
  debugIfEnabled--which were redundant and pointless overhead.
Added check box menu option on TimeStamperMainView for the 'persistOnUpdate'
  feature
Changes on TimelineProperties:
    * Switched to using SmartConfig and renamed several properties:
        - remote.timeline.<name>.push -> remote.timeline.<name>.push?
        - remote.timeline.<name>.pull -> remote.timeline.<name>.pull?
        - remote.timeline.<name>.save-on-exit -> remote.timeline.<name>.syncOnExit?
        - remote.timeline.<name>.update-interval -> remote.timeline.<name>.updateInterval
    * Added a feature, 'persistOnUpdate'. If set to true, this signals the
      application that it should persist the Timeline on each update.
    * Added a property 'timeline.persistOnUpdate?'.
2011-01-22 20:45:08 -06:00
Jonathan Bernard 652cc8703a Changes to Description categories, other fixes.
Description based category is now case-insensitive.
Fixed bug where description categories and plans were not agreeing on how
  to categories items.
Updated startscript.groovy to be aware of new changes with events.
Update build script properties.
2011-01-22 19:31:36 -06:00
Jonathan Bernard e4a3b967de Refactored to remove Entry and use Event everywhere. 2011-01-18 07:20:56 -06:00
Jonathan Bernard 24600b46d9 Put in CategorizationPlan architecture. 2011-01-12 06:54:03 -06:00
Jonathan Bernard ba04aae34e Fixed, expanded category implementations. Started chart work.
Added FilteredCategory, filters by arbitrary CategoryFilters.
Started on Util class with code to create charts based on categories.
Fixed ITHelp ticket matching to swallow optional space after "ITHelp:"
Fixed TicketCategory to use it's own addEvent logic instead of inheriting the
  default Category implementation.
Updated startscript.groovy to reflect test data for recent changes.
2011-01-11 08:21:41 -06:00
Jonathan Bernard 68b51640af Finised initial implementation. Need to test. 2011-01-10 00:24:08 -06:00
Jonathan Bernard 9f4008a775 Initial commit 2011-01-09 15:11:36 -06:00
Jonathan Bernard dbb2121525 Beginning update to add GUI logging. 2010-04-02 05:43:04 -05:00
Jonathan Bernard 5b3e2066a2 Upgraded Griffon to 0.2.1. 2010-04-01 22:29:07 -05:00
Jonathan Bernard 6d212ea771 Finished catching up to 1.7 functionality. 2009-12-26 14:49:46 -06:00
Jonathan Bernard bff340e910 Incremental GUI updates. Copied over code for TimelineDayDisplay. 2009-12-22 19:26:47 -06:00
Jonathan Bernard 02fc6b5bb7 Added NotesDialog MVC. Wired window movement. Added GUIUtil 2009-12-21 14:06:32 -06:00
Jonathan Bernard 5000d266fe Created showNotesAction and ShowPunchcardAction 2009-12-20 20:03:49 -06:00
Jonathan Bernard e08d6d6c5d Begin restructuring using Griffon 2009-12-17 23:12:09 -06:00
Jonathan Bernard 1ff581d4a5 Converted repo to mercurial.
Moved .gitignore to .hgignore
2009-02-05 22:51:40 -06:00
Jonathan Bernard e69faa148f Version 1.7 - Added 30-minute auto save
committer: Jonathan Bernard <jdbernard@gmail.com>
2008-11-11 19:29:58 -06:00
Jonathan Bernard efcb781ae4 Added .gitignore file
committer: Jonathan Bernard <jdbernard@gmail.com>
2008-10-19 20:03:05 -05:00
Jonathan Bernard 6d451c42fd Small changes to generalize build environment.
The jcalendar lib path in nbproject/project.properties was pointing to
  the absolute path rather than a relative one.

committer: Jonathan Bernard <jdbernard@gmail.com>
2008-10-19 20:01:33 -05:00
Jonathan Bernard 8d74a5a259 Added about dialog, bug fixes
Fixed edge cases in TimelineDayDisplay (first/last/no markers)
Fixed bug in PunchcardDisplayDialog - timeline not changed when loaded.

committer: Jonathan Bernard <jdbernard@gmail.com>
2008-10-19 19:00:34 -05:00