diff --git a/src/ajax.php b/src/ajax.php
index 2eb28f7..d1555fa 100644
--- a/src/ajax.php
+++ b/src/ajax.php
@@ -510,13 +510,22 @@ function prepareTaskRow($r, $tz)
{
global $lang;
$dueA = prepare_duedate($r['duedate'], $tz);
+ $formatCreatedInline = $formatCompletedInline = 'M d';
+ if(date('Y') != date('Y',$r['d_created'])) $formatCreatedInline = 'M Y';
+ if($r['d_completed'] && date('Y') != date('Y',$r['d_completed'])) $formatCompletedInline = 'M Y';
+
$dCreated = timestampToDatetime($r['d_created'], $tz);
+ $dCompleted = $r['d_completed'] ? timestampToDatetime($r['d_completed'], $tz) : '';
+
return array(
'id' => $r['id'],
'title' => escapeTags($r['title']),
'date' => htmlarray($dCreated),
- 'dateInline' => htmlarray(sprintf($lang->get('taskdate_inline'), $dCreated)),
- 'dateCompleted' => $r['d_completed'] ? htmlarray(timestampToDatetime($r['d_completed'], $tz)) : '',
+ 'dateInline' => htmlarray(formatTime($formatCreatedInline, $r['d_created'], $tz)),
+ 'dateInlineTitle' => htmlarray(sprintf($lang->get('taskdate_inline_created'), $dCreated)),
+ 'dateCompleted' => htmlarray($dCompleted),
+ 'dateCompletedInline' => $r['d_completed'] ? htmlarray(formatTime($formatCompletedInline, $r['d_completed'], $tz)) : '',
+ 'dateCompletedInlineTitle' => htmlarray(sprintf($lang->get('taskdate_inline_completed'), $dCompleted)),
'compl' => (int)$r['compl'],
'prio' => $r['prio'],
'note' => nl2br(escapeTags($r['note'])),
@@ -526,8 +535,9 @@ function prepareTaskRow($r, $tz)
'tags_ids' => htmlarray($r['tags_ids']),
'duedate' => $dueA['formatted'],
'dueClass' => $dueA['class'],
- 'dueStr' => htmlarray($dueA['str']),
+ 'dueStr' => htmlarray($r['compl'] && $dueA['timestamp'] ? formatTime($formatCompletedInline, $dueA['timestamp'], $tz) : $dueA['str']),
'dueInt' => date2int($r['duedate']),
+ 'dueTitle' => htmlarray(sprintf($lang->get('taskdate_inline_duedate'), $dueA['formatted'])),
);
}
@@ -704,12 +714,13 @@ function prepare_duedate($duedate, $tz)
{
global $lang;
- $a = array( 'class'=>'', 'str'=>'', 'formatted'=>'' );
+ $a = array( 'class'=>'', 'str'=>'', 'formatted'=>'', 'timestamp'=>0 );
if($duedate == '') {
return $a;
}
$ad = explode('-', $duedate);
$at = explode('-', gmdate('Y-m-d', time() + $tz*60));
+ $a['timestamp'] = gmmktime(0,0,0,$ad[1],$ad[2],$ad[0]) + $tz*60;
$diff = mktime(0,0,0,$ad[1],$ad[2],$ad[0]) - mktime(0,0,0,$at[1],$at[2],$at[0]);
if($diff < -604800 && $ad[0] == $at[0]) { $a['class'] = 'past'; $a['str'] = formatDate3(Config::get('dateformatshort'), (int)$ad[0], (int)$ad[1], (int)$ad[2], $lang); }
diff --git a/src/lang/class.default.php b/src/lang/class.default.php
index 3debe89..fc22905 100644
--- a/src/lang/class.default.php
+++ b/src/lang/class.default.php
@@ -36,7 +36,9 @@ class DefaultLang
'advanced_add' => "Advanced",
'searching' => "Searching for",
'tasks' => "Tasks",
- 'taskdate_inline' => "added at %s",
+ 'taskdate_inline_created' => "Created: %s",
+ 'taskdate_inline_completed' => "Completed: %s",
+ 'taskdate_inline_duedate' => "Due: %s",
'taskdate_created' => "Date of creation",
'taskdate_completed' => "Date of completion",
'edit_task' => "Edit Task",
diff --git a/src/lang/en.php b/src/lang/en.php
index 516cae4..bee63c1 100644
--- a/src/lang/en.php
+++ b/src/lang/en.php
@@ -38,7 +38,9 @@ class Lang extends DefaultLang
'advanced_add' => "Advanced",
'searching' => "Searching for",
'tasks' => "Tasks",
- 'taskdate_inline' => "added at %s",
+ 'taskdate_inline_created' => "Created: %s",
+ 'taskdate_inline_completed' => "Completed: %s",
+ 'taskdate_inline_duedate' => "Due: %s",
'taskdate_created' => "Date of creation",
'taskdate_completed' => "Date of completion",
'edit_task' => "Edit Task",
diff --git a/src/mytinytodo.js b/src/mytinytodo.js
index 76e70eb..d682af6 100644
--- a/src/mytinytodo.js
+++ b/src/mytinytodo.js
@@ -590,9 +590,11 @@ function prepareTaskStr(item, noteExp)
'
'+"\n"+
''+"\n"+
- ''+prepareDuedate(item.duedate, item.dueClass, item.dueStr)+"\n"+
- '
'+preparePrio(prio,id)+''+prepareHtml(item.title)+' '+"\n"+
- prepareTagsStr(item)+''+item.dateInline+'
'+
+ '
'+prepareDuedate(item)+
+ ''+item.dateCompletedInline+'
'+"\n"+
+ '
'+item.dateInline+''+preparePrio(prio,id)+
+ ''+prepareHtml(item.title)+' '+"\n"+
+ prepareTagsStr(item)+'
'+
'
'+
'
'+prepareHtml(item.note)+'
'+
'
'+
@@ -642,10 +644,10 @@ function prepareTagsClass(ids)
return ' '+a.join(' ');
};
-function prepareDuedate(duedate, c, s)
+function prepareDuedate(item)
{
- if(!duedate) return '';
- return ''+s+'';
+ if(!item.duedate) return '';
+ return '→ '+item.dueStr+'';
};
diff --git a/src/themes/default/style.css b/src/themes/default/style.css
index 793f5e1..be7c00d 100644
--- a/src/themes/default/style.css
+++ b/src/themes/default/style.css
@@ -142,12 +142,15 @@ a { color:#0000ff; cursor:pointer; text-decoration:underline; }
li.task-has-note .task-toggle { visibility:visible; }
li.task-expanded .task-toggle { background-position:-48px 0; }
.task-middle { margin-left:40px; margin-right:25px; }
+.task-middle-right { float:right; }
#tasklist { list-style-type: none; margin: 0; padding: 0;}
#tasklist li { padding:6px 2px 6px 6px; border-bottom:1px solid #DEDEDE; min-height:18px; margin-bottom:1px; background-color:#fff; }
#tasklist li:hover { background-color:#f6f6f6; }
.task-actions { float:right; width:25px; text-align:right; }
-.task-date { color:#999999; font-size:8pt; margin-left:4px; display:none; }
-.show-inline-date .task-date { display:inline; }
+.task-date { display:inline-block; min-width:55px; color:#999999; margin-right:10px; display:none; }
+.task-date-completed { color:#999999; display:none; margin-left:5px; }
+.show-inline-date .task-date { display:inline-block; }
+.show-inline-date .task-completed .task-date-completed { display:inline-block; text-decoration:line-through; color:#777777; }
.task-through { overflow:hidden; }
.task-title a { color:#000000; }
.task-title a:hover { color:#af0000; }
@@ -155,11 +158,13 @@ li.task-expanded .task-toggle { background-position:-48px 0; }
.task-tags { padding:0px 2px; }
.task-tags .tag { font-size:8pt; font-weight:bold; color:#333333; text-decoration:underline; }
.task-tags .tag:hover { }
-.duedate { color:#333333; padding:0px; padding-left:1px; margin-left:5px; float:right; }
+.duedate { color:#333333; padding:0px; padding-left:1px; margin-left:5px; }
+li.task-completed .duedate { /*font-size:8pt;*/ display:none; }
#tasklist li.soon .duedate { color:#008000; border-color:#008000; }
#tasklist li.today .duedate { color:#FF0000; border-color:#FF0000; }
#tasklist li.past .duedate { color:#A52A2A; border-color:#A52A2A; }
li.task-completed .task-through { text-decoration:line-through; color:#777777; }
+li.task-completed .task-middle-right { text-decoration:line-through; color:#777777; }
li.task-completed .task-title a { color:#777777; }
#tasklist li.task-completed .duedate { color:#777777; border-color:#777777; }
li.task-completed { opacity:0.8; }
@@ -174,6 +179,7 @@ li:hover a.taskactionbtn, a.taskactionbtn.mtt-menu-button-active { background-po
#tasklist.filter-past li.task-completed, #tasklist.filter-today li.task-completed, #tasklist.filter-soon li.task-completed { display:none; }
.task-note-block { margin-left:2px; color:#777777; background:url(images/page_white_text.png) left 2px no-repeat; padding-left:19px; padding-top:2px; min-height:16px; margin-top:2px; display:none; }
+.show-inline-date .task-note-block { margin-left:65px; }
li.task-expanded .task-note-block { display:block; }
li.task-completed .task-note-block .task-note { text-decoration:line-through; }
.task-note-area { display:none; margin-bottom:5px; }
@@ -186,7 +192,7 @@ li.task-completed .task-note-block .task-note { text-decoration:line-through; }
.task-note span a { color:#777777; }
.task-note span a:hover { color:#af0000; }
-.task-prio { padding-left:2px; padding-right:2px; margin-left:0px; margin-right:4px; cursor:default; }
+.task-prio { padding-left:2px; padding-right:2px; margin-left:0px; margin-right:5px; cursor:default; }
.prio-neg { background-color:#3377ff; color:#ffffff; }
.prio-pos { background-color:#ff3333; color:#ffffff; }
.prio-pos-1 { background-color:#ff7700; color:#ffffff; }