@@ -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
@@ -3959,6 +3962,62 @@ function generateSignatureHtml(signature: GG.GitSignature) {
39593962 + '</span>' ;
39603963}
39613964
3965+ function generateSignatureIconHtml ( signature : GG . GitCommitSignature | null ) {
3966+ if ( ! signature || ! signature . status ) {
3967+ return '<span class="signature-icon signature-none">-</span>' ;
3968+ }
3969+ const status = signature . status ;
3970+ let icon = '' ;
3971+ let cssClass = '' ;
3972+ let title = '' ;
3973+ switch ( status ) {
3974+ case 'G' :
3975+ icon = '✓' ;
3976+ cssClass = 'signature-valid' ;
3977+ title = 'Good signature' ;
3978+ break ;
3979+ case 'B' :
3980+ icon = '✗' ;
3981+ cssClass = 'signature-invalid' ;
3982+ title = 'Bad signature' ;
3983+ break ;
3984+ case 'U' :
3985+ icon = '⚠' ;
3986+ cssClass = 'signature-warning' ;
3987+ title = 'Good signature, unknown validity' ;
3988+ break ;
3989+ case 'X' :
3990+ icon = '⚠' ;
3991+ cssClass = 'signature-warning' ;
3992+ title = 'Good signature, expired' ;
3993+ break ;
3994+ case 'Y' :
3995+ icon = '⚠' ;
3996+ cssClass = 'signature-warning' ;
3997+ title = 'Good signature, made by expired key' ;
3998+ break ;
3999+ case 'R' :
4000+ icon = '✗' ;
4001+ cssClass = 'signature-invalid' ;
4002+ title = 'Good signature, revoked' ;
4003+ break ;
4004+ case 'E' :
4005+ icon = '❓' ;
4006+ cssClass = 'signature-error' ;
4007+ title = 'Cannot check signature' ;
4008+ break ;
4009+ default :
4010+ icon = '-' ;
4011+ cssClass = 'signature-none' ;
4012+ title = '' ;
4013+ break ;
4014+ }
4015+ const tooltip = title && signature . signer
4016+ ? title + '. Signed by ' + escapeHtml ( signature . signer ) + ' (Key: ' + escapeHtml ( signature . keyId ) + ')'
4017+ : title ;
4018+ return '<span class="signature-icon ' + cssClass + '"' + ( tooltip ? ' title="' + tooltip + '"' : '' ) + '>' + icon + '</span>' ;
4019+ }
4020+
39624021function closeDialogAndContextMenu ( ) {
39634022 if ( dialog . isOpen ( ) ) dialog . close ( ) ;
39644023 if ( contextMenu . isOpen ( ) ) contextMenu . close ( ) ;
0 commit comments