 941ee630d8
			
		
	
	941ee630d8
	
	
	
		
			
			Gerrit.css doesn't work with ShadowDom, because it adds styles to a document. This fix provides a replacement for Gerrit.css. The replacement allows to apply the same styles to any element inside document. Bug: Issue 11298 Change-Id: Ide325a889a69bd267382a9664ed6f8d25ed67a3b
		
			
				
	
	
		
			80 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| <dom-module id="coverage-plugin">
 | |
|   <script>
 | |
| 
 | |
|     function populateWithDummyData(coverageData) {
 | |
|       coverageData['NewFile'] = {
 | |
|         linesMissingCoverage: [1, 2, 3],
 | |
|         totalLines: 5,
 | |
|         changeNum: 94,
 | |
|         patchNum: 2,
 | |
|       };
 | |
|       coverageData['/COMMIT_MSG'] = {
 | |
|         linesMissingCoverage: [3, 4, 7, 14],
 | |
|         totalLines: 14,
 | |
|         changeNum: 94,
 | |
|         patchNum: 2,
 | |
|       };
 | |
|       coverageData['DEPS'] = {
 | |
|         linesMissingCoverage: [3, 4, 7, 14],
 | |
|         totalLines: 16,
 | |
|         changeNum: 77001,
 | |
|         patchNum: 1,
 | |
|       };
 | |
|       coverageData['go/sklog/sklog.go'] = {
 | |
|         linesMissingCoverage: [3, 322, 323, 324],
 | |
|         totalLines: 350,
 | |
|         changeNum: 85963,
 | |
|         patchNum: 13,
 | |
|       };
 | |
|     }
 | |
| 
 | |
|     Gerrit.install(plugin => {
 | |
|       const coverageData = {};
 | |
|       let displayCoverage = false;
 | |
|       const annotationApi = plugin.annotationApi();
 | |
|       const styleApi = plugin.styles();
 | |
| 
 | |
|       const coverageStyle = styleApi.css('background-color: #EF9B9B !important');
 | |
|       const emptyStyle = styleApi.css('');
 | |
| 
 | |
|       annotationApi.addLayer(context => {
 | |
|         if (Object.keys(coverageData).length === 0) {
 | |
|            // Coverage data is not ready yet.
 | |
|           return;
 | |
|         }
 | |
|         const path = context.path;
 | |
|         const line = context.line;
 | |
|           // Highlight lines missing coverage with this background color if
 | |
|           // coverage should be displayed, else do nothing.
 | |
|         const annotationStyle = displayCoverage
 | |
|                          ? coverageStyle
 | |
|                          : emptyStyle;
 | |
|         if (coverageData[path] &&
 | |
|               coverageData[path].changeNum === context.changeNum &&
 | |
|               coverageData[path].patchNum === context.patchNum) {
 | |
|           const linesMissingCoverage = coverageData[path].linesMissingCoverage;
 | |
|           if (linesMissingCoverage.includes(line.afterNumber)) {
 | |
|             context.annotateRange(0, line.text.length, annotationStyle, 'right');
 | |
|             context.annotateLineNumber(annotationStyle, 'right');
 | |
|           }
 | |
|         }
 | |
|       }).enableToggleCheckbox('Display Coverage', checkbox => {
 | |
|         // Checkbox is attached so now add the notifier that will be controlled
 | |
|         // by the checkbox.
 | |
|         annotationApi.addNotifier(notifyFunc => {
 | |
|           new Promise(resolve => setTimeout(resolve, 3000)).then(() => {
 | |
|             populateWithDummyData(coverageData);
 | |
|             checkbox.disabled = false;
 | |
|             checkbox.onclick = e => {
 | |
|               displayCoverage = e.target.checked;
 | |
|               Object.keys(coverageData).forEach(file => {
 | |
|                 notifyFunc(file, 0, coverageData[file].totalLines, 'right');
 | |
|               });
 | |
|             };
 | |
|           });
 | |
|         });
 | |
|       });
 | |
|     });
 | |
|   </script>
 | |
| </dom-module>
 |