MCPcopy Create free account
hub / github.com/adobe/leonardo / createPanelReportTable

Function createPanelReportTable

docs/ui/src/js/createPanelReportTable.js:17–187  ·  view source on GitHub ↗
(colors, background, scaleType, level)

Source from the content-addressed store, hash-verified

15import chroma from 'chroma-js';
16
17function createPanelReportTable(colors, background, scaleType, level) {
18 if (!colors) {
19 const colorClass = scaleType === 'sequential' ? _sequentialScale : _divergingScale;
20 let scaleColors = colorClass.colors;
21 if (scaleType === 'sequential') {
22 colors = [scaleColors[0], scaleColors[scaleColors.length - 1]];
23 } else {
24 colors = [scaleColors[0], colorClass.middleKey, scaleColors[scaleColors.length - 1]];
25 }
26 }
27 if (!background) {
28 background = document.getElementById(`scales_bgColor`).value;
29 }
30 if (scaleType && !level) {
31 let compliancePicker = document.getElementById(`scales_complianceLevel`);
32 level = compliancePicker.value;
33 }
34
35 let bgArray = chroma(background).rgb();
36 const minimumThreshold = 11;
37 const WCAGmin = level === 'AA' ? 3 : 4.5;
38
39 let reportWrapper = document.getElementById(`${scaleType}_a11yTable`);
40 reportWrapper.innerHTML = ' ';
41
42 let headers = ['Compared colors', 'Preview', 'Status', 'Contrast', 'Color difference'];
43 let rows = [];
44
45 for (let i = 0; i < colors.length; i++) {
46 let fgArray = chroma(colors[i]).rgb();
47 let contrast = Leo.contrast(fgArray, bgArray);
48 if (contrast < 0) contrast = contrast * -1;
49
50 let deltaE = getDifference(colors[i], background);
51 let meterPercent = round(deltaE, 2);
52
53 let uiClass = contrast < WCAGmin || deltaE < minimumThreshold ? 'negative' : 'positive';
54 let uiStatus = contrast < WCAGmin || deltaE < minimumThreshold ? 'Fail' : 'Pass';
55
56 let meterClass = deltaE < minimumThreshold ? 'is-negative' : 'is-positive';
57 let color1;
58 if (scaleType === 'sequential') {
59 color1 = i === 0 ? 'Start color' : 'End color';
60 } else {
61 color1 = i === 0 ? 'Start color' : i === 1 ? 'Middle color' : 'End color';
62 }
63 let color2 = 'Background';
64
65 let rowItem = [
66 `${color1} vs ${color2}`,
67 `<div class="dualSwatch">
68 <div class="swatch" style="background-color: ${colors[i]}"></div>
69 <div class="swatch" style="background-color: ${background}"></div>
70 </div>`,
71 `<span class="spectrum-Badge spectrum-Badge--sizeS spectrum-Badge--${uiClass}">${uiStatus}</span>`,
72 `<span class="spectrum-Body spectrum-Body--sizeM">${round(contrast, 2)}:1</span>`,
73 `<div">
74 <div class="spectrum-ProgressBar spectrum-ProgressBar--sizeM deltaE-meter ${meterClass}" value="${meterPercent}" role="progressbar" aria-valuenow="50" aria-valuemin="0" aria-valuemax="100">

Callers 4

addScaleKeyColorInputFunction · 0.90
bulkScaleItemColorInputFunction · 0.90
colorScaleDivergingFunction · 0.90
colorScaleSequentialFunction · 0.90

Calls 4

getDifferenceFunction · 0.90
roundFunction · 0.90
createTableFunction · 0.90
contrastMethod · 0.80

Tested by

no test coverage detected