Skip to content

Commit e53a40d

Browse files
Fix graph field value handling and optimize field layout (#993)
1 parent c38201b commit e53a40d

5 files changed

Lines changed: 67 additions & 59 deletions

File tree

build

Submodule build updated 1 file

src/Graph/GraphFormatter.php

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -120,21 +120,25 @@ public function buildGraph( $nodes ) {
120120
$nodeTooltip = str_replace( '<br />', '', $nodeTooltip );
121121
}
122122
// Label in HTML form enclosed with <>.
123-
$nodeLabel = "<\n" . '<table border="0" cellborder="0" cellspacing="1" columns="*" rows="*">' . "\n"
124-
. '<tr><td colspan="2" href="' . $nodeLinkURL . '">' . $label . "</td></tr><hr/>\n"
123+
$nodeLabel = "<\n" . '<table color="white" border="0" cellborder="0" cellspacing="2" columns="*" rows="*">' . "\n"
124+
. '<tr><td colspan="2" href="' . $nodeLinkURL . '">' . $label . "</td></tr>\n"
125+
. '<tr><td colspan="2" border="1" color="black" sides="T" cellpadding="0" cellspacing="0"></td></tr>\n'
125126
. implode( "\n", array_map( static function ( $field ) use ( $instance ) {
126-
$alignment = in_array( $field['type'], [ '_num', '_qty', '_dat', '_tem' ] )
127-
? 'right'
128-
: 'left';
127+
// 260209-GEA: all values are left aligned now. In case we want to change this later,
128+
// we should think about adding an alignment option
129+
// $alignment = in_array( $field['type'], [ '_num', '_qty', '_dat', '_tem' ] )
130+
// ? 'left'
131+
// : 'left';
132+
$alignment = 'left';
129133
$valueLink = $field['valueLink'];
130134
if ( $valueLink !== null ) {
131135
$valueLink = $field['valueLink'];
132136
} else {
133137
$valueLink = $field['value'];
134138
}
135-
return '<tr><td align="left" href="[[Property:' . $field['page'] . ']]">'
136-
. $field['name'] . '</td>'
137-
. '<td align="' . $alignment . '"'
139+
return '<tr><td align="right" href="[[Property:' . $field['page'] . ']]">'
140+
. $field['name'] . ': </td>'
141+
. '<td align="' . $alignment . '"'
138142
. (
139143
$field['type'] === '_wpg'
140144
? ' href="[[' . htmlspecialchars( $field['valueLink'] ) . ']]">'

src/Graph/GraphOptions.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ class GraphOptions {
2929
private $showGraphLegend;
3030
/** @var bool Show non-Page properties as fields within nodes rather than edges. */
3131
private $showGraphFields;
32+
/** @var bool Show property pages in fields within nodes rather than just values. */
3233
private $showGraphFieldsPages;
3334

3435
public function __construct( $options ) {
@@ -107,7 +108,7 @@ public function showGraphFields(): bool {
107108
return $this->showGraphFields;
108109
}
109110

110-
public function showGraphFieldsPages(): string {
111+
public function showGraphFieldsPages(): bool {
111112
return $this->showGraphFieldsPages;
112113
}
113114
}

src/Graph/GraphPrinter.php

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -209,15 +209,16 @@ protected function processResultRow( array $row ) {
209209
|| $isPageType
210210
|| $request->isMode( PrintRequest::PRINT_CHAIN );
211211

212-
$showGraphFieldsPages = $this->options->showGraphFieldsPages() === 'yes';
212+
$showGraphFieldsPages = $this->options->showGraphFieldsPages();
213213
$showGraphFields = $this->options->showGraphFields();
214214

215215
while ( ( $object = $result_array->getNextDataValue() ) !== false ) {
216216
$hasProperty = $object->getProperty();
217-
if ( $object instanceof \SMW\DataValues\StringValue ) {
218-
$objectText = $object->getShortWikiText();
219-
} else {
217+
218+
if ( $isPageType ) {
220219
$objectText = $object->getDisplayTitle();
220+
} else {
221+
$objectText = $object->getWikiValue();
221222
}
222223

223224
$includeAsEdge = !$showGraphFields || $isPageType || $request->isMode( PrintRequest::PRINT_CHAIN );
@@ -254,22 +255,24 @@ protected function processResultRow( array $row ) {
254255
continue;
255256
}
256257

257-
// Handle field
258+
// Handle field in info box for node
258259
if ( $showGraphFieldsPages && $includeAsField ) {
259260
if ( $hasProperty || !$isPageType ) {
260-
// non-page or property field
261-
if ( $pageTypeSeen !== 2 && !$isPageType ) {
261+
// if is Page type, only add if seen more than once
262+
if ( $isPageType && $pageTypeSeen > 2 ) {
262263
$fields[] = [
263264
'name' => $label,
264-
'value' => $objectText,
265+
'value' => $object->getDisplayTitle(),
266+
'valueLink' => $object->getShortWikiText(),
265267
'type' => $type,
266268
'page' => $canonicalLabel,
267269
];
268-
} elseif ( $pageTypeSeen !== 2 && $isPageType ) {
270+
}
271+
// if is not Page type, always add
272+
if ( !$isPageType ) {
269273
$fields[] = [
270274
'name' => $label,
271-
'value' => $object->getDisplayTitle(),
272-
'valueLink' => $object->getShortWikiText(),
275+
'value' => $objectText,
273276
'type' => $type,
274277
'page' => $canonicalLabel,
275278
];
@@ -410,9 +413,9 @@ public function getParamDefinitions( array $definitions ) {
410413
];
411414

412415
$params['graphfieldspages'] = [
413-
'default' => 'no',
416+
'default' => false,
414417
'message' => 'srf-paramdesc-graphfieldspages',
415-
'type' => 'string'
418+
'type' => 'boolean'
416419
];
417420

418421
return $params;

tests/phpunit/Unit/Graph/GraphFormatterTest.php

Lines changed: 36 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -76,15 +76,15 @@ class GraphFormatterTest extends \PHPUnit\Framework\TestCase {
7676
edge [fontsize=10, fontname="Verdana"];
7777
size="100";node [shape=rect];rankdir=LR;
7878
"Team:Alpha" [label = <
79-
<table border="0" cellborder="0" cellspacing="1" columns="*" rows="*">
80-
<tr><td colspan="2" href="[[Team:Alpha]]">Alpha</td></tr><hr/>
81-
<tr><td align="left" href="[[Property:Rating]]">Rated as</td><td align="right">10</td></tr>
79+
<table color="white" border="0" cellborder="0" cellspacing="2" columns="*" rows="*">
80+
<tr><td colspan="2" href="[[Team:Alpha]]">Alpha</td></tr>
81+
<tr><td colspan="2" border="1" color="black" sides="T" cellpadding="0" cellspacing="0"></td></tr>\n<tr><td align="right" href="[[Property:Rating]]">Rated as: </td><td align="left">10</td></tr>
8282
</table>
8383
>, tooltip = "Alpha"];
8484
"Team:Beta" [label = <
85-
<table border="0" cellborder="0" cellspacing="1" columns="*" rows="*">
86-
<tr><td colspan="2" href="[[Team:Beta]]">Beta</td></tr><hr/>
87-
<tr><td align="left" href="[[Property:Rating]]">Rated as</td><td align="right">20</td></tr>
85+
<table color="white" border="0" cellborder="0" cellspacing="2" columns="*" rows="*">
86+
<tr><td colspan="2" href="[[Team:Beta]]">Beta</td></tr>
87+
<tr><td colspan="2" border="1" color="black" sides="T" cellpadding="0" cellspacing="0"></td></tr>\n<tr><td align="right" href="[[Property:Rating]]">Rated as: </td><td align="left">20</td></tr>
8888
</table>
8989
>, tooltip = "Beta"];
9090
"Person:Alexander Gesinn" -> "Team:Alpha" [label="Casted",fontcolor=black,arrowhead=diamond,color=black];
@@ -110,11 +110,11 @@ class GraphFormatterTest extends \PHPUnit\Framework\TestCase {
110110
edge [fontsize=10, fontname="Verdana"];
111111
size="100";node [shape=rect];rankdir=LR;
112112
"Team:Gamma" [label = <
113-
<table border="0" cellborder="0" cellspacing="1" columns="*" rows="*">
114-
<tr><td colspan="2" href="[[Team:Gamma]]">Gamma</td></tr><hr/>
115-
<tr><td align="left" href="[[Property:Main Category]]">Main Category</td><td align="left" href="[[Team]]">Team</td></tr>
116-
<tr><td align="left" href="[[Property:Casted]]">Casted</td><td align="left" href="[[Sebastian Schmid]]">Sebastian Schmid</td></tr>
117-
<tr><td align="left" href="[[Property:Team Code]]">Team Code</td><td align="left">ES</td></tr>
113+
<table color="white" border="0" cellborder="0" cellspacing="2" columns="*" rows="*">
114+
<tr><td colspan="2" href="[[Team:Gamma]]">Gamma</td></tr>
115+
<tr><td colspan="2" border="1" color="black" sides="T" cellpadding="0" cellspacing="0"></td></tr>\n<tr><td align="right" href="[[Property:Main Category]]">Main Category: </td><td align="left" href="[[Team]]">Team</td></tr>
116+
<tr><td align="right" href="[[Property:Casted]]">Casted: </td><td align="left" href="[[Sebastian Schmid]]">Sebastian Schmid</td></tr>
117+
<tr><td align="right" href="[[Property:Team Code]]">Team Code: </td><td align="left">ES</td></tr>
118118
</table>
119119
>, tooltip = "Gamma"];
120120
}
@@ -167,43 +167,43 @@ class GraphFormatterTest extends \PHPUnit\Framework\TestCase {
167167
edge [fontsize=10, fontname="Verdana"];
168168
size="100";node [shape=rect];rankdir=LR;
169169
"Team:Delta" [label = <
170-
<table border="0" cellborder="0" cellspacing="1" columns="*" rows="*">
171-
<tr><td colspan="2" href="[[Team:Delta]]">Delta</td></tr><hr/>
172-
<tr><td align="left" href="[[Property:Main Category]]">Main Category</td><td align="left" href="[[Team]]">Team</td></tr>
173-
<tr><td align="left" href="[[Property:Casted]]">Casted</td><td align="left" href="[[Sebastian Schmid]]">Sebastian Schmid</td></tr>
174-
<tr><td align="left" href="[[Property:Team Code]]">Team Code</td><td align="left">ES</td></tr>
170+
<table color="white" border="0" cellborder="0" cellspacing="2" columns="*" rows="*">
171+
<tr><td colspan="2" href="[[Team:Delta]]">Delta</td></tr>
172+
<tr><td colspan="2" border="1" color="black" sides="T" cellpadding="0" cellspacing="0"></td></tr>\n<tr><td align="right" href="[[Property:Main Category]]">Main Category: </td><td align="left" href="[[Team]]">Team</td></tr>
173+
<tr><td align="right" href="[[Property:Casted]]">Casted: </td><td align="left" href="[[Sebastian Schmid]]">Sebastian Schmid</td></tr>
174+
<tr><td align="right" href="[[Property:Team Code]]">Team Code: </td><td align="left">ES</td></tr>
175175
</table>
176176
>, tooltip = "Delta"];
177177
"Team:Epsilon" [label = <
178-
<table border="0" cellborder="0" cellspacing="1" columns="*" rows="*">
179-
<tr><td colspan="2" href="[[Team:Epsilon]]">Epsilon</td></tr><hr/>
180-
<tr><td align="left" href="[[Property:Main Category]]">Main Category</td><td align="left" href="[[Team]]">Team</td></tr>
181-
<tr><td align="left" href="[[Property:Casted]]">Casted</td><td align="left" href="[[Sebastian Schmid]]">Sebastian Schmid</td></tr>
182-
<tr><td align="left" href="[[Property:Team Code]]">Team Code</td><td align="left">ES</td></tr>
178+
<table color="white" border="0" cellborder="0" cellspacing="2" columns="*" rows="*">
179+
<tr><td colspan="2" href="[[Team:Epsilon]]">Epsilon</td></tr>
180+
<tr><td colspan="2" border="1" color="black" sides="T" cellpadding="0" cellspacing="0"></td></tr>\n<tr><td align="right" href="[[Property:Main Category]]">Main Category: </td><td align="left" href="[[Team]]">Team</td></tr>
181+
<tr><td align="right" href="[[Property:Casted]]">Casted: </td><td align="left" href="[[Sebastian Schmid]]">Sebastian Schmid</td></tr>
182+
<tr><td align="right" href="[[Property:Team Code]]">Team Code: </td><td align="left">ES</td></tr>
183183
</table>
184184
>, tooltip = "Epsilon"];
185185
"Team:Zeta" [label = <
186-
<table border="0" cellborder="0" cellspacing="1" columns="*" rows="*">
187-
<tr><td colspan="2" href="[[Team:Zeta]]">Zeta</td></tr><hr/>
188-
<tr><td align="left" href="[[Property:Main Category]]">Main Category</td><td align="left" href="[[Team]]">Team</td></tr>
189-
<tr><td align="left" href="[[Property:Casted]]">Casted</td><td align="left" href="[[Sebastian Schmid]]">Sebastian Schmid</td></tr>
190-
<tr><td align="left" href="[[Property:Team Code]]">Team Code</td><td align="left">ES</td></tr>
186+
<table color="white" border="0" cellborder="0" cellspacing="2" columns="*" rows="*">
187+
<tr><td colspan="2" href="[[Team:Zeta]]">Zeta</td></tr>
188+
<tr><td colspan="2" border="1" color="black" sides="T" cellpadding="0" cellspacing="0"></td></tr>\n<tr><td align="right" href="[[Property:Main Category]]">Main Category: </td><td align="left" href="[[Team]]">Team</td></tr>
189+
<tr><td align="right" href="[[Property:Casted]]">Casted: </td><td align="left" href="[[Sebastian Schmid]]">Sebastian Schmid</td></tr>
190+
<tr><td align="right" href="[[Property:Team Code]]">Team Code: </td><td align="left">ES</td></tr>
191191
</table>
192192
>, tooltip = "Zeta"];
193193
"Team:Eta" [label = <
194-
<table border="0" cellborder="0" cellspacing="1" columns="*" rows="*">
195-
<tr><td colspan="2" href="[[Team:Eta]]">Eta</td></tr><hr/>
196-
<tr><td align="left" href="[[Property:Main Category]]">Main Category</td><td align="left" href="[[Team]]">Team</td></tr>
197-
<tr><td align="left" href="[[Property:Casted]]">Casted</td><td align="left" href="[[Sebastian Schmid]]">Sebastian Schmid</td></tr>
198-
<tr><td align="left" href="[[Property:Team Code]]">Team Code</td><td align="left">ES</td></tr>
194+
<table color="white" border="0" cellborder="0" cellspacing="2" columns="*" rows="*">
195+
<tr><td colspan="2" href="[[Team:Eta]]">Eta</td></tr>
196+
<tr><td colspan="2" border="1" color="black" sides="T" cellpadding="0" cellspacing="0"></td></tr>\n<tr><td align="right" href="[[Property:Main Category]]">Main Category: </td><td align="left" href="[[Team]]">Team</td></tr>
197+
<tr><td align="right" href="[[Property:Casted]]">Casted: </td><td align="left" href="[[Sebastian Schmid]]">Sebastian Schmid</td></tr>
198+
<tr><td align="right" href="[[Property:Team Code]]">Team Code: </td><td align="left">ES</td></tr>
199199
</table>
200200
>, tooltip = "Eta"];
201201
"Team:Theta" [label = <
202-
<table border="0" cellborder="0" cellspacing="1" columns="*" rows="*">
203-
<tr><td colspan="2" href="[[Team:Theta]]">Theta</td></tr><hr/>
204-
<tr><td align="left" href="[[Property:Main Category]]">Main Category</td><td align="left" href="[[Team]]">Team</td></tr>
205-
<tr><td align="left" href="[[Property:Casted]]">Casted</td><td align="left" href="[[Sebastian Schmid]]">Sebastian Schmid</td></tr>
206-
<tr><td align="left" href="[[Property:Team Code]]">Team Code</td><td align="left">ES</td></tr>
202+
<table color="white" border="0" cellborder="0" cellspacing="2" columns="*" rows="*">
203+
<tr><td colspan="2" href="[[Team:Theta]]">Theta</td></tr>
204+
<tr><td colspan="2" border="1" color="black" sides="T" cellpadding="0" cellspacing="0"></td></tr>\n<tr><td align="right" href="[[Property:Main Category]]">Main Category: </td><td align="left" href="[[Team]]">Team</td></tr>
205+
<tr><td align="right" href="[[Property:Casted]]">Casted: </td><td align="left" href="[[Sebastian Schmid]]">Sebastian Schmid</td></tr>
206+
<tr><td align="right" href="[[Property:Team Code]]">Team Code: </td><td align="left">ES</td></tr>
207207
</table>
208208
>, tooltip = "Theta"];
209209
"Solar &amp; Hydro" -> "Team:Delta" [label="Part of Team",fontcolor=black,arrowhead=diamond,color=black];

0 commit comments

Comments
 (0)