diff --git a/src/ts_common.erl b/src/ts_common.erl index 157f2c4..ee33efd 100644 --- a/src/ts_common.erl +++ b/src/ts_common.erl @@ -1,5 +1,5 @@ -module(ts_common). --export([new/1, update/1, list/3, order_datetimes/2]). +-export([new/1, update/1, update_record/2, list/3, order_datetimes/2]). -include_lib("stdlib/include/qlc.hrl"). @@ -25,9 +25,22 @@ update(Record) -> % record does not exist, cannot update [] -> no_record; % record does exist, update - [_ExistingRecord] -> mnesia:dirty_write(Record) + [ExistingRecord] -> + mnesia:dirty_write(update_record(ExistingRecord, Record)) end. +update_record(Record, UpdateData) -> + update_record(tuple_to_list(Record), tuple_to_list(UpdateData), []). + +update_record([], [], Updated) -> list_to_tuple(lists:reverse(Updated)); +update_record([Field|RecordFields], [FieldReplacement|UpdateData], Acc) -> + UpdatedField = case FieldReplacement of + undefined -> Field; + NewValue -> NewValue + end, + + update_record(RecordFields, UpdateData, [UpdatedField|Acc]). + %% list number of records, skipping the first list(Table, Start, Length) when is_atom(Table) and is_integer(Start) and is_integer(Length) -> diff --git a/src/ts_entry.erl b/src/ts_entry.erl index beaf2d9..e326202 100644 --- a/src/ts_entry.erl +++ b/src/ts_entry.erl @@ -25,7 +25,8 @@ update(ER = #ts_entry{}) -> % record does not exist [] -> no_record; % record exists, update it - [_Record] -> mnesia:dirty_write(ER) + [ExistingRecord] -> + mnesia:dirty_write(ts_common:update_record(ExistingRecord, ER)) end. lookup(Username, TimelineId, EntryId) -> diff --git a/src/ts_json.erl b/src/ts_json.erl index 2e25576..024ee1e 100644 --- a/src/ts_json.erl +++ b/src/ts_json.erl @@ -47,7 +47,7 @@ ejson_to_record(_Empty=#ts_timeline{}, EJSON) -> {struct, Fields} = EJSON, #ts_timeline{ - ref = {undef, undef}, + ref = {undefined, undefined}, created = decode_datetime(element(2, lists:keyfind(created, 1, Fields))), desc = element(2, lists:keyfind(description, 1, Fields))}; @@ -55,7 +55,7 @@ ejson_to_record(_Empty=#ts_entry{}, EJSON) -> {struct, Fields} = EJSON, #ts_entry{ - ref = {undef, undef, undef}, + ref = {undefined, undefined, undefined}, timestamp = calendar:datetime_to_gregorian_seconds(decode_datetime( element(2, lists:keyfind(timestamp, 1, Fields)))), mark = element(2, lists:keyfind(mark, 1, Fields)), diff --git a/www/css/ts-screen.css b/www/css/ts-screen.css index a38147f..a96fea1 100644 --- a/www/css/ts-screen.css +++ b/www/css/ts-screen.css @@ -102,7 +102,16 @@ form { form div.form-submit { float: left; width: 100%; - overflow: hidden; } + overflow: hidden; + padding: 0.5em 2em 0.5em 2em; + position: relative; } + form div.form-submit div { + position: relative; + float: right; + left: -50%; } + form div.form-submit div input { + position: relative; + left: 50%; } form div.form-submit input, form input.form-submit { border: 1px solid #979681; background: #f6f3ea; } @@ -125,16 +134,6 @@ form { color: #626150; } #user #change-pwd { display: none; } - #user #user-info .form-submit { - padding: 0.5em 2em 0.5em 2em; - position: relative; } - #user #user-info .form-submit div { - position: relative; - float: right; - left: -50%; } - #user #user-info .form-submit div input { - position: relative; - left: 50%; } #timeline #timeline-name, #timeline #timeline-desc { font-weight: bold; } @@ -142,10 +141,6 @@ form { color: #626150; } #timeline .control-links { padding-top: 0.2em; } -#timeline #timeline-info .form-submit { - width: auto; - float: right; - overflow: inline; } #user-info, #timeline-info { display: none; @@ -159,6 +154,7 @@ form { #new-entry input { color: #626150; } #new-entry #add-notes { - display: none; } + display: none; + padding: 0.5em 0 0.5em 2em; } #new-entry #new-entry-input { margin-right: 1em; } diff --git a/www/css/ts-screen.scss b/www/css/ts-screen.scss index 97fcca9..681ad2c 100644 --- a/www/css/ts-screen.scss +++ b/www/css/ts-screen.scss @@ -127,8 +127,22 @@ form { float: left; width: 100%; overflow: hidden; + padding: 0.5em 2em 0.5em 2em; + position: relative; + + div { + position: relative; + float: right; + left: -50%; + + input { + position: relative; + left: 50%; + } + } } + div.form-submit input, input.form-submit { border: 1px solid $bbor; background: lighten($bbg, 10%); @@ -156,19 +170,6 @@ form { #change-pwd { display: none; } #user-info .form-submit { - padding: 0.5em 2em 0.5em 2em; - position: relative; - - div { - position: relative; - float: right; - left: -50%; - - input { - position: relative; - left: 50%; - } - } } } @@ -180,12 +181,6 @@ form { .control-links { padding-top: 0.2em; } - #timeline-info .form-submit { - width: auto; - float: right; - overflow: inline; - } - } #user-info, #timeline-info { @@ -204,6 +199,10 @@ form { input { color: $greyTxt; } - #add-notes { display: none; } + #add-notes { + display: none; + padding: 0.5em 0 0.5em 2em; + } + #new-entry-input { margin-right: 1em; } } diff --git a/www/ts/index.yaws b/www/ts/index.yaws index d933b79..6314efb 100644 --- a/www/ts/index.yaws +++ b/www/ts/index.yaws @@ -2,9 +2,11 @@ + TimeStamper - Simple Time Tracking + @@ -21,32 +23,33 @@
-
-
-