@@ -821,7 +821,8 @@ class GitGraphView {
821821 let html = '<tr id="tableColHeaders"><th id="tableHeaderGraphCol" class="tableColHeader" data-col="0">Graph</th><th class="tableColHeader" data-col="1">Description</th>' +
822822 ( colVisibility . date ? '<th class="tableColHeader dateCol" data-col="2">Date</th>' : '' ) +
823823 ( colVisibility . author ? '<th class="tableColHeader authorCol" data-col="3">Author</th>' : '' ) +
824- ( colVisibility . commit ? '<th class="tableColHeader" data-col="4">Commit</th>' : '' ) +
824+ ( colVisibility . signature ? '<th class="tableColHeader signatureCol" data-col="4">Signature</th>' : '' ) +
825+ ( colVisibility . commit ? '<th class="tableColHeader" data-col="' + ( 4 + ( colVisibility . signature ? 1 : 0 ) ) + '">Commit</th>' : '' ) +
825826 '</tr>' ;
826827
827828 for ( let i = 0 ; i < this . commits . length ; i ++ ) {
@@ -869,6 +870,7 @@ class GitGraphView {
869870 ( this . config . referenceLabels . branchLabelsAlignedToGraph ? '<td>' + ( refBranches !== '' ? '<span style="margin-left:' + ( widthsAtVertices [ i ] - 4 ) + 'px"' + refBranches . substring ( 5 ) : '' ) + '</td><td><span class="description">' + commitDot : '<td></td><td><span class="description">' + commitDot + refBranches ) + ( this . config . referenceLabels . tagLabelsOnRight ? message + refTags : refTags + message ) + '</span></td>' +
870871 ( colVisibility . date ? '<td class="dateCol text" title="' + date . title + '">' + date . formatted + '</td>' : '' ) +
871872 ( colVisibility . author ? '<td class="authorCol text" title="' + escapeHtml ( commit . author + ' <' + commit . email + '>' ) + '">' + ( this . config . fetchAvatars ? '<span class="avatar" data-email="' + escapeHtml ( commit . email ) + '">' + ( typeof this . avatars [ commit . email ] === 'string' ? '<img class="avatarImg" src="' + this . avatars [ commit . email ] + '">' : '' ) + '</span>' : '' ) + escapeHtml ( commit . author ) + '</td>' : '' ) +
873+ ( colVisibility . signature ? '<td class="signatureCol text">' + generateSignatureIconHtml ( commit . signature ) + '</td>' : '' ) +
872874 ( colVisibility . commit ? '<td class="text" title="' + escapeHtml ( commit . hash ) + '">' + abbrevCommit ( commit . hash ) + '</td>' : '' ) +
873875 '</tr>' ;
874876 }
@@ -927,6 +929,7 @@ class GitGraphView {
927929 document . getElementById ( 'uncommittedChanges' ) ! . innerHTML = '<td></td><td><b>' + escapeHtml ( this . commits [ 0 ] . message ) + '</b></td>' +
928930 ( colVisibility . date ? '<td class="dateCol text" title="' + date . title + '">' + date . formatted + '</td>' : '' ) +
929931 ( colVisibility . author ? '<td class="authorCol text" title="* <>">*</td>' : '' ) +
932+ ( colVisibility . signature ? '<td class="signatureCol text">' + generateSignatureIconHtml ( null ) + '</td>' : '' ) +
930933 ( colVisibility . commit ? '<td class="text" title="*">*</td>' : '' ) ;
931934 }
932935
@@ -3958,6 +3961,62 @@ function generateSignatureHtml(signature: GG.GitSignature) {
39583961 + '</span>' ;
39593962}
39603963
3964+ function generateSignatureIconHtml ( signature : GG . GitCommitSignature | null ) {
3965+ if ( ! signature || ! signature . status ) {
3966+ return '<span class="signature-icon signature-none">-</span>' ;
3967+ }
3968+ const status = signature . status ;
3969+ let icon = '' ;
3970+ let cssClass = '' ;
3971+ let title = '' ;
3972+ switch ( status ) {
3973+ case 'G' :
3974+ icon = '✓' ;
3975+ cssClass = 'signature-valid' ;
3976+ title = 'Good signature' ;
3977+ break ;
3978+ case 'B' :
3979+ icon = '✗' ;
3980+ cssClass = 'signature-invalid' ;
3981+ title = 'Bad signature' ;
3982+ break ;
3983+ case 'U' :
3984+ icon = '⚠' ;
3985+ cssClass = 'signature-warning' ;
3986+ title = 'Good signature, unknown validity' ;
3987+ break ;
3988+ case 'X' :
3989+ icon = '⚠' ;
3990+ cssClass = 'signature-warning' ;
3991+ title = 'Good signature, expired' ;
3992+ break ;
3993+ case 'Y' :
3994+ icon = '⚠' ;
3995+ cssClass = 'signature-warning' ;
3996+ title = 'Good signature, made by expired key' ;
3997+ break ;
3998+ case 'R' :
3999+ icon = '✗' ;
4000+ cssClass = 'signature-invalid' ;
4001+ title = 'Good signature, revoked' ;
4002+ break ;
4003+ case 'E' :
4004+ icon = '❓' ;
4005+ cssClass = 'signature-error' ;
4006+ title = 'Cannot check signature' ;
4007+ break ;
4008+ default :
4009+ icon = '-' ;
4010+ cssClass = 'signature-none' ;
4011+ title = '' ;
4012+ break ;
4013+ }
4014+ const tooltip = title && signature . signer
4015+ ? title + '. Signed by ' + escapeHtml ( signature . signer ) + ' (Key: ' + escapeHtml ( signature . keyId ) + ')'
4016+ : title ;
4017+ return '<span class="signature-icon ' + cssClass + '"' + ( tooltip ? ' title="' + tooltip + '"' : '' ) + '>' + icon + '</span>' ;
4018+ }
4019+
39614020function closeDialogAndContextMenu ( ) {
39624021 if ( dialog . isOpen ( ) ) dialog . close ( ) ;
39634022 if ( contextMenu . isOpen ( ) ) contextMenu . close ( ) ;
0 commit comments