Fossil SCM
Added complete timestamps (local and GMT) as title attribute of message headers.
Commit
696135b65e77b36603dbb0bbce761c203466f40deafd06b0bec498a1efeb5d69
Parent
aefa8e5d1f89efd…
2 files changed
+21
+1
-1
+21
| --- src/chat.js | ||
| +++ src/chat.js | ||
| @@ -25,10 +25,24 @@ | ||
| 25 | 25 | }else{ |
| 26 | 26 | f.injectPoint.parentNode.appendChild(e); |
| 27 | 27 | } |
| 28 | 28 | }; |
| 29 | 29 | const textNode = (T)=>document.createTextNode(T); |
| 30 | + /** Returns the local time string of Date object d, defaulting | |
| 31 | + to the current time. */ | |
| 32 | + const localTimeString = function ff(d){ | |
| 33 | + if(!ff.pad){ | |
| 34 | + ff.pad = (x)=>(''+x).length>1 ? x : '0'+x; | |
| 35 | + } | |
| 36 | + d || (d = new Date()); | |
| 37 | + return [ | |
| 38 | + d.getFullYear(),'-',ff.pad(d.getMonth()+1/*sigh*/), | |
| 39 | + '-',ff.pad(d.getDate()), | |
| 40 | + ' ',ff.pad(d.getHours()),':',ff.pad(d.getMinutes()), | |
| 41 | + ':',ff.pad(d.getSeconds()) | |
| 42 | + ].join(''); | |
| 43 | + }; | |
| 30 | 44 | function newcontent(jx){ |
| 31 | 45 | var i; |
| 32 | 46 | for(i=0; i<jx.msgs.length; ++i){ |
| 33 | 47 | let m = jx.msgs[i]; |
| 34 | 48 | let row = document.createElement("fieldset"); |
| @@ -46,10 +60,17 @@ | ||
| 46 | 60 | row.classList.add('user-is-me'); |
| 47 | 61 | }else{ |
| 48 | 62 | whoName = m.xfrom; |
| 49 | 63 | } |
| 50 | 64 | var d = new Date(m.mtime + "Z"); |
| 65 | + eWho.setAttribute('title',localTimeString(d) | |
| 66 | + +' client-local\n' | |
| 67 | + +d.toISOString() | |
| 68 | + .replace('T',' ') | |
| 69 | + .replace(/\.\d+/,'') | |
| 70 | + .replace('Z', ' GMT') | |
| 71 | + ); | |
| 51 | 72 | if( d.getMinutes().toString()!="NaN" ){ |
| 52 | 73 | /* Show local time when we can compute it */ |
| 53 | 74 | eWho.append(textNode(whoName+' @ '+ |
| 54 | 75 | d.getHours()+":"+(d.getMinutes()+100).toString().slice(1,3) |
| 55 | 76 | )) |
| 56 | 77 |
| --- src/chat.js | |
| +++ src/chat.js | |
| @@ -25,10 +25,24 @@ | |
| 25 | }else{ |
| 26 | f.injectPoint.parentNode.appendChild(e); |
| 27 | } |
| 28 | }; |
| 29 | const textNode = (T)=>document.createTextNode(T); |
| 30 | function newcontent(jx){ |
| 31 | var i; |
| 32 | for(i=0; i<jx.msgs.length; ++i){ |
| 33 | let m = jx.msgs[i]; |
| 34 | let row = document.createElement("fieldset"); |
| @@ -46,10 +60,17 @@ | |
| 46 | row.classList.add('user-is-me'); |
| 47 | }else{ |
| 48 | whoName = m.xfrom; |
| 49 | } |
| 50 | var d = new Date(m.mtime + "Z"); |
| 51 | if( d.getMinutes().toString()!="NaN" ){ |
| 52 | /* Show local time when we can compute it */ |
| 53 | eWho.append(textNode(whoName+' @ '+ |
| 54 | d.getHours()+":"+(d.getMinutes()+100).toString().slice(1,3) |
| 55 | )) |
| 56 |
| --- src/chat.js | |
| +++ src/chat.js | |
| @@ -25,10 +25,24 @@ | |
| 25 | }else{ |
| 26 | f.injectPoint.parentNode.appendChild(e); |
| 27 | } |
| 28 | }; |
| 29 | const textNode = (T)=>document.createTextNode(T); |
| 30 | /** Returns the local time string of Date object d, defaulting |
| 31 | to the current time. */ |
| 32 | const localTimeString = function ff(d){ |
| 33 | if(!ff.pad){ |
| 34 | ff.pad = (x)=>(''+x).length>1 ? x : '0'+x; |
| 35 | } |
| 36 | d || (d = new Date()); |
| 37 | return [ |
| 38 | d.getFullYear(),'-',ff.pad(d.getMonth()+1/*sigh*/), |
| 39 | '-',ff.pad(d.getDate()), |
| 40 | ' ',ff.pad(d.getHours()),':',ff.pad(d.getMinutes()), |
| 41 | ':',ff.pad(d.getSeconds()) |
| 42 | ].join(''); |
| 43 | }; |
| 44 | function newcontent(jx){ |
| 45 | var i; |
| 46 | for(i=0; i<jx.msgs.length; ++i){ |
| 47 | let m = jx.msgs[i]; |
| 48 | let row = document.createElement("fieldset"); |
| @@ -46,10 +60,17 @@ | |
| 60 | row.classList.add('user-is-me'); |
| 61 | }else{ |
| 62 | whoName = m.xfrom; |
| 63 | } |
| 64 | var d = new Date(m.mtime + "Z"); |
| 65 | eWho.setAttribute('title',localTimeString(d) |
| 66 | +' client-local\n' |
| 67 | +d.toISOString() |
| 68 | .replace('T',' ') |
| 69 | .replace(/\.\d+/,'') |
| 70 | .replace('Z', ' GMT') |
| 71 | ); |
| 72 | if( d.getMinutes().toString()!="NaN" ){ |
| 73 | /* Show local time when we can compute it */ |
| 74 | eWho.append(textNode(whoName+' @ '+ |
| 75 | d.getHours()+":"+(d.getMinutes()+100).toString().slice(1,3) |
| 76 | )) |
| 77 |
+1
-1
| --- src/default.css | ||
| +++ src/default.css | ||
| @@ -1498,11 +1498,11 @@ | ||
| 1498 | 1498 | /* User name for the post (a LEGEND element) */ |
| 1499 | 1499 | .message-row .message-user { |
| 1500 | 1500 | border-radius: 0.25em 0.25em 0 0; |
| 1501 | 1501 | padding: 0 0.5em; |
| 1502 | 1502 | /*text-align: left; Firefox requires the 'align' attribute */ |
| 1503 | - margin-left: 0.25em; | |
| 1503 | + margin-left: 0.15em; | |
| 1504 | 1504 | padding: 0 0.5em 0em 0.5em; |
| 1505 | 1505 | margin-bottom: 0.4em; |
| 1506 | 1506 | } |
| 1507 | 1507 | /* Reposition "my" posts to the right */ |
| 1508 | 1508 | .message-row.user-is-me .message-user { |
| 1509 | 1509 |
| --- src/default.css | |
| +++ src/default.css | |
| @@ -1498,11 +1498,11 @@ | |
| 1498 | /* User name for the post (a LEGEND element) */ |
| 1499 | .message-row .message-user { |
| 1500 | border-radius: 0.25em 0.25em 0 0; |
| 1501 | padding: 0 0.5em; |
| 1502 | /*text-align: left; Firefox requires the 'align' attribute */ |
| 1503 | margin-left: 0.25em; |
| 1504 | padding: 0 0.5em 0em 0.5em; |
| 1505 | margin-bottom: 0.4em; |
| 1506 | } |
| 1507 | /* Reposition "my" posts to the right */ |
| 1508 | .message-row.user-is-me .message-user { |
| 1509 |
| --- src/default.css | |
| +++ src/default.css | |
| @@ -1498,11 +1498,11 @@ | |
| 1498 | /* User name for the post (a LEGEND element) */ |
| 1499 | .message-row .message-user { |
| 1500 | border-radius: 0.25em 0.25em 0 0; |
| 1501 | padding: 0 0.5em; |
| 1502 | /*text-align: left; Firefox requires the 'align' attribute */ |
| 1503 | margin-left: 0.15em; |
| 1504 | padding: 0 0.5em 0em 0.5em; |
| 1505 | margin-bottom: 0.4em; |
| 1506 | } |
| 1507 | /* Reposition "my" posts to the right */ |
| 1508 | .message-row.user-is-me .message-user { |
| 1509 |