From c6318f4785c86103503611fb014f72a3d5281cef Mon Sep 17 00:00:00 2001 From: Daniel Weck Date: Thu, 6 Feb 2025 09:18:07 +0000 Subject: [PATCH] fix(GUI): improved table layout (tested with Japanese and other locales) with better column width distribution, per-table row height --- src/renderer/components/Report.js | 2 +- .../components/ReportSections/Images.js | 28 +++++++++-------- .../components/ReportSections/Metadata.js | 14 +++++---- .../components/ReportSections/Violations.js | 30 +++++++++---------- .../components/Table/EnhancedTable.js | 18 +++++++++-- src/renderer/styles/Report.scss | 14 +++++++-- 6 files changed, 65 insertions(+), 41 deletions(-) diff --git a/src/renderer/components/Report.js b/src/renderer/components/Report.js index 11ae6f5..5a4cec6 100644 --- a/src/renderer/components/Report.js +++ b/src/renderer/components/Report.js @@ -36,7 +36,7 @@ export default class Report extends React.Component { ref={ref => { this.domRef = ReactDOM.findDOMNode(ref) }}>

{localize("report.title")}

- selectTab(idx)} value={selectedTab}> + selectTab(idx)} value={selectedTab}> diff --git a/src/renderer/components/ReportSections/Images.js b/src/renderer/components/ReportSections/Images.js index 1c3dfd8..5107cdd 100644 --- a/src/renderer/components/ReportSections/Images.js +++ b/src/renderer/components/ReportSections/Images.js @@ -9,6 +9,8 @@ const { localize } = localizer; import { ipcRenderer } from 'electron'; +const rowHeight = 150; + // the images page of the report export default class Images extends React.Component { @@ -54,7 +56,7 @@ export default class Images extends React.Component { { // shell.openExternal(src); ipcRenderer.send('ELECTRON_SHELL_OPEN_EXTERNAL', `file://${decodeURIComponent(src).replace(/\\/g, "/")}`); - }} style={{ objectFit: "contain", cursor: "pointer" }} src={`fileproto://host/${src}`}/> + }} style={{ maxHeight: rowHeight, objectFit: "contain", cursor: "pointer" }} src={`fileproto://host/${src}`}/> } }, @@ -73,8 +75,8 @@ export default class Images extends React.Component { overflowY: "auto", padding: 6, margin: 0, - height: 98, - maxheight: 98, + height: rowHeight, + maxHeight: rowHeight, whiteSpace: "break-spaces", textOverflow: "ellipsis" }} > @@ -97,8 +99,8 @@ export default class Images extends React.Component { overflowY: "auto", padding: 6, margin: 0, - height: 98, - maxheight: 98, + height: rowHeight, + maxHeight: rowHeight, whiteSpace: "break-spaces", textOverflow: "ellipsis" }}> @@ -121,8 +123,8 @@ export default class Images extends React.Component { overflowY: "auto", padding: 6, margin: 0, - height: 98, - maxheight: 98, + height: rowHeight, + maxHeight: rowHeight, whiteSpace: "break-spaces", textOverflow: "ellipsis" }}> @@ -145,8 +147,8 @@ export default class Images extends React.Component { overflowY: "auto", padding: 6, margin: 0, - height: 98, - maxheight: 98, + height: rowHeight, + maxHeight: rowHeight, whiteSpace: "break-spaces", textOverflow: "ellipsis" }}> @@ -170,8 +172,8 @@ export default class Images extends React.Component { overflowY: "auto", padding: 6, margin: 0, - height: 98, - maxheight: 98, + height: rowHeight, + maxHeight: rowHeight, textOverflow: "ellipsis", overflowWrap: "break-word", }} className="location"> @@ -205,8 +207,8 @@ export default class Images extends React.Component { overflowY: "auto", padding: 6, margin: 0, - height: 98, - maxheight: 98, + height: rowHeight, + maxHeight: rowHeight, whiteSpace: "break-spaces", textOverflow: "ellipsis" }}> diff --git a/src/renderer/components/ReportSections/Metadata.js b/src/renderer/components/ReportSections/Metadata.js index 9b733c3..10c06b4 100644 --- a/src/renderer/components/ReportSections/Metadata.js +++ b/src/renderer/components/ReportSections/Metadata.js @@ -21,6 +21,8 @@ import classNames from 'classnames'; import CircularProgress from '@material-ui/core/CircularProgress' +const rowHeight = 60; + const styles = theme => ({ buttonProcessing: { @@ -127,8 +129,8 @@ class Metadata extends React.Component { overflowY: "auto", padding: 6, margin: 0, - height: 98, - maxheight: 98, + height: rowHeight, + maxHeight: rowHeight, whiteSpace: "break-spaces", textOverflow: "ellipsis" }} > @@ -151,8 +153,8 @@ class Metadata extends React.Component { overflowY: "auto", padding: 6, margin: 0, - height: 98, - maxheight: 98, + height: rowHeight, + maxHeight: rowHeight, whiteSpace: "break-spaces", textOverflow: "ellipsis" }} > @@ -185,8 +187,8 @@ class Metadata extends React.Component { overflowY: "auto", padding: 6, margin: 0, - height: 98, - maxheight: 98, + height: rowHeight, + maxHeight: rowHeight, whiteSpace: "break-spaces", textOverflow: "ellipsis" }} > diff --git a/src/renderer/components/ReportSections/Violations.js b/src/renderer/components/ReportSections/Violations.js index 1aa639d..9090312 100644 --- a/src/renderer/components/ReportSections/Violations.js +++ b/src/renderer/components/ReportSections/Violations.js @@ -7,6 +7,8 @@ const {ipcRenderer} = require('electron'); import { localizer } from './../../../shared/l10n/localize'; const { localize, getCurrentLanguage } = localizer; +const rowHeight = 150; + // the violations page of the report export default class Violations extends React.Component { @@ -61,8 +63,8 @@ export default class Violations extends React.Component { overflowY: "auto", padding: 6, margin: 0, - height: 98, - maxheight: 98, + height: rowHeight, + maxheight: rowHeight, whiteSpace: "break-spaces", textOverflow: "ellipsis" }} > @@ -91,8 +93,8 @@ export default class Violations extends React.Component { overflowY: "auto", padding: 6, margin: 0, - height: 98, - maxheight: 98, + height: rowHeight, + maxheight: rowHeight, whiteSpace: "break-spaces", textOverflow: "ellipsis" }} > @@ -117,12 +119,12 @@ export default class Violations extends React.Component { overflowY: "auto", padding: 6, margin: 0, - height: 98, - maxheight: 98, + height: rowHeight, + maxheight: rowHeight, whiteSpace: "break-spaces", textOverflow: "ellipsis" }} > -

{row.rule.rule}

+ {row.rule.rule}

{localize("report.violationsSection.via")} {row.rule.engine}

@@ -145,24 +147,22 @@ export default class Violations extends React.Component { overflowY: "auto", padding: 6, margin: 0, - height: 98, - maxheight: 98, + height: rowHeight, + maxheight: rowHeight, textOverflow: "ellipsis", overflowWrap: "break-word", }} > -

{row.location.filename}
-

{row.location.snippet != '' ? -

{unescape(row.location.snippet)}

+ }}>{unescape(row.location.snippet)} : ''} @@ -183,8 +183,8 @@ export default class Violations extends React.Component { overflowY: "auto", padding: 6, margin: 0, - height: 98, - maxheight: 98, + height: rowHeight, + maxheight: rowHeight, whiteSpace: "break-spaces", textOverflow: "ellipsis" }} > diff --git a/src/renderer/components/Table/EnhancedTable.js b/src/renderer/components/Table/EnhancedTable.js index 8fec807..74ad079 100644 --- a/src/renderer/components/Table/EnhancedTable.js +++ b/src/renderer/components/Table/EnhancedTable.js @@ -19,6 +19,8 @@ import { lighten } from '@material-ui/core/styles/colorManipulator'; import { localizer } from './../../../shared/l10n/localize'; const { localize } = localizer; +const tableLayoutFixed = false; + function desc(a, b, orderBy, head) { // console.log("----------", JSON.stringify(a), " ================ ", JSON.stringify(b), " ############### ", orderBy, " ***** ", JSON.stringify(head)); let aValue = head.hasOwnProperty('sortOn') ? head.sortOn(a[orderBy]) : a[orderBy]; @@ -294,7 +296,7 @@ export default class EnhancedTable extends React.Component { }); return ( -
+
{filters.length > 0 ? : ''} - +
@@ -330,6 +336,7 @@ export default class EnhancedTable extends React.Component { {heads.map(head => { return ( @@ -380,6 +387,10 @@ export default class EnhancedTable extends React.Component { : '' }
+
); } diff --git a/src/renderer/styles/Report.scss b/src/renderer/styles/Report.scss index fbfadfa..a58d600 100644 --- a/src/renderer/styles/Report.scss +++ b/src/renderer/styles/Report.scss @@ -11,10 +11,16 @@ } .ace-report { - margin-left: 20px; - overflow: scroll; + padding-left: 10px; + padding-right: 10px; + overflow-x: auto; + overflow-y: auto; width: 100%; +.tablePaginationSpacerClass { +display: none; +} + .location { pre { /* white-space: pre-wrap; */ @@ -40,6 +46,9 @@ } .report-section { + .table-filters-panel { + border: silver dotted 2px; + } .table-filters-panel.expanded{ // special hack for table filters expansion panel // it makes the menus visible z-order wise @@ -124,7 +133,6 @@ .images { img { - max-height: 100px; object-fit: contain; } }