diff options
| author | Hsieh Chin Fan <pham@topo.tw> | 2024-10-01 13:12:39 +0800 |
|---|---|---|
| committer | Hsieh Chin Fan <pham@topo.tw> | 2024-10-01 13:50:06 +0800 |
| commit | 3da2e8b3fbfaf273d2100d4c4657bba0be888bdc (patch) | |
| tree | f4e9129914a0e88bfa6195756489ca6d869b487e /src | |
| parent | 239a39f1e5bb771bb2841c2aee41038b0b577e07 (diff) | |
feat: beautify result report
* add color for state string
* align extra info to right
* apply new mapclay rule, steps result about "prepare" has type="prepare"
Diffstat (limited to 'src')
| -rw-r--r-- | src/MenuItem.mjs | 35 | ||||
| -rw-r--r-- | src/css/dumbymap.css | 10 | ||||
| -rw-r--r-- | src/dumbymap.mjs | 4 |
3 files changed, 42 insertions, 7 deletions
diff --git a/src/MenuItem.mjs b/src/MenuItem.mjs index 56b935c..6c2a1d9 100644 --- a/src/MenuItem.mjs +++ b/src/MenuItem.mjs | |||
| @@ -155,13 +155,40 @@ export const renderResults = ({ modal, modalContent }, map) => | |||
| 155 | // HACK find another way to override inline style | 155 | // HACK find another way to override inline style |
| 156 | document.querySelector('.plainmodal-overlay-force').style.position = | 156 | document.querySelector('.plainmodal-overlay-force').style.position = |
| 157 | 'relative'; | 157 | 'relative'; |
| 158 | map.renderer.results.forEach(result => | 158 | |
| 159 | const printDetails = result => { | ||
| 160 | const funcBody = result.func.toString(); | ||
| 161 | const loc = funcBody.split('\n').length; | ||
| 162 | const color = | ||
| 163 | { | ||
| 164 | success: 'green', | ||
| 165 | fail: 'red', | ||
| 166 | skip: 'black', | ||
| 167 | stop: 'yellow', | ||
| 168 | }[result.state] ?? 'black'; | ||
| 159 | printObject( | 169 | printObject( |
| 160 | result, | 170 | result, |
| 161 | modalContent, | 171 | modalContent, |
| 162 | `${result.func.name} (${result.state})`, | 172 | `${result.func.name} <span class='align-right'>${loc}LOC\x20\x20\x20<span style='display: inline-block; width: 100px; color: ${color};'>${result.state}</span></span>`, |
| 163 | ), | 173 | ); |
| 174 | }; | ||
| 175 | |||
| 176 | // Add contents about prepare steps | ||
| 177 | const prepareHeading = document.createElement('h3'); | ||
| 178 | prepareHeading.textContent = 'Prepare Steps'; | ||
| 179 | modalContent.appendChild(prepareHeading); | ||
| 180 | const prepareSteps = map.renderer.results.filter( | ||
| 181 | r => r.type === 'prepare', | ||
| 164 | ); | 182 | ); |
| 183 | prepareSteps.forEach(printDetails); | ||
| 184 | |||
| 185 | // Add contents about render steps | ||
| 186 | const renderHeading = document.createElement('h3'); | ||
| 187 | renderHeading.textContent = 'Render Steps'; | ||
| 188 | renderHeading.style.marginTop = '1em'; | ||
| 189 | modalContent.appendChild(renderHeading); | ||
| 190 | const renderSteps = map.renderer.results.filter(r => r.type === 'render'); | ||
| 191 | renderSteps.forEach(printDetails); | ||
| 165 | }, | 192 | }, |
| 166 | }); | 193 | }); |
| 167 | 194 | ||
| @@ -172,7 +199,7 @@ function printObject(obj, parentElement, name) { | |||
| 172 | parentElement.appendChild(detailsEle); | 199 | parentElement.appendChild(detailsEle); |
| 173 | 200 | ||
| 174 | detailsEle.onclick = () => { | 201 | detailsEle.onclick = () => { |
| 175 | if (detailsEle.children.length > 1) return; | 202 | if (detailsEle.querySelector(':scope > :not(summary)')) return; |
| 176 | 203 | ||
| 177 | Object.entries(obj).forEach(([key, value]) => { | 204 | Object.entries(obj).forEach(([key, value]) => { |
| 178 | if (typeof value === 'object') { | 205 | if (typeof value === 'object') { |
diff --git a/src/css/dumbymap.css b/src/css/dumbymap.css index d84ec2b..7cb4d8c 100644 --- a/src/css/dumbymap.css +++ b/src/css/dumbymap.css | |||
| @@ -694,17 +694,20 @@ root { | |||
| 694 | 694 | ||
| 695 | transform: translate(-50%, -50%); | 695 | transform: translate(-50%, -50%); |
| 696 | overflow-y: scroll; | 696 | overflow-y: scroll; |
| 697 | white-space: pre; | ||
| 697 | 698 | ||
| 698 | details { | 699 | details { |
| 699 | margin-bottom: 0.5em; | 700 | margin-bottom: 0.5em; |
| 700 | } | 701 | } |
| 701 | 702 | ||
| 702 | summary { | 703 | summary { |
| 704 | max-width: 60%; | ||
| 705 | |||
| 703 | cursor: pointer; | 706 | cursor: pointer; |
| 704 | } | 707 | } |
| 705 | 708 | ||
| 706 | details > :not(summary) { | 709 | details > :not(summary) { |
| 707 | padding-left: 1em; | 710 | padding-left: 2em; |
| 708 | } | 711 | } |
| 709 | 712 | ||
| 710 | p { | 713 | p { |
| @@ -718,4 +721,9 @@ root { | |||
| 718 | 721 | ||
| 719 | background: #f0f0f0; | 722 | background: #f0f0f0; |
| 720 | } | 723 | } |
| 724 | |||
| 725 | .align-right { | ||
| 726 | display: inline-block; | ||
| 727 | float: right; | ||
| 728 | } | ||
| 721 | } | 729 | } |
diff --git a/src/dumbymap.mjs b/src/dumbymap.mjs index d77d49c..2a6f332 100644 --- a/src/dumbymap.mjs +++ b/src/dumbymap.mjs | |||
| @@ -379,11 +379,11 @@ export const generateMaps = (container, { delay, mapCallback }) => { | |||
| 379 | */ | 379 | */ |
| 380 | const updateAttributeByStep = ({ results, target, steps }) => { | 380 | const updateAttributeByStep = ({ results, target, steps }) => { |
| 381 | let passNum = results.filter( | 381 | let passNum = results.filter( |
| 382 | r => r.type === 'step' && r.state.match(/success|skip/), | 382 | r => r.type === 'render' && r.state.match(/success|skip/), |
| 383 | ).length; | 383 | ).length; |
| 384 | const total = steps.length; | 384 | const total = steps.length; |
| 385 | passNum += `/${total}`; | 385 | passNum += `/${total}`; |
| 386 | if (results.filter(r => r.type === 'step').length === total) { | 386 | if (results.filter(r => r.type === 'render').length === total) { |
| 387 | passNum += '\u0020'; | 387 | passNum += '\u0020'; |
| 388 | } | 388 | } |
| 389 | 389 | ||