jenkins-bot has submitted this change and it was merged. (
https://gerrit.wikimedia.org/r/398622 )
Change subject: Move graph-creating and checking to the Tree class
......................................................................
Move graph-creating and checking to the Tree class
Also give a better error when GraphViz isn't installed.
Change-Id: I8289afe5d73a77e2ec92ff64ec8d5b1604b1861e
---
M i18n/en.json
M i18n/qqq.json
M src/Hooks.php
M src/Tree.php
4 files changed, 46 insertions(+), 14 deletions(-)
Approvals:
jenkins-bot: Verified
Samwilson: Looks good to me, approved
diff --git a/i18n/en.json b/i18n/en.json
index d1a9141..9e9e3d1 100644
--- a/i18n/en.json
+++ b/i18n/en.json
@@ -18,5 +18,6 @@
"genealogy-parser-function-not-found": "Genealogy parser function type
not recognised: $1",
"genealogy-existing-partners": "This person already has the following
{{PLURAL:$1|partner|partners}}: ",
"genealogy-invalid-parent-title": "Error: invalid parent page title:
'$1'",
- "genealogy-invalid-partner-title": "Error: invalid partner page title:
'$1'"
+ "genealogy-invalid-partner-title": "Error: invalid partner page title:
'$1'",
+ "genealogy-no-graphviz": "Graphic tree generation requires the GraphViz
extension to be installed"
}
diff --git a/i18n/qqq.json b/i18n/qqq.json
index a8783e8..9ae4f09 100644
--- a/i18n/qqq.json
+++ b/i18n/qqq.json
@@ -20,5 +20,6 @@
"genealogy-parser-function-not-found": "The error message shown when
the parser function is passed something it doesn't recognise.",
"genealogy-existing-partners": "The message that is shown above the
page-editing form, alerting the user to the fact that the person they're
editing has already got a defined partner from another page.",
"genealogy-invalid-parent-title": "The error message that is shown when
a user-supplied parent name is not a valid page title.",
- "genealogy-invalid-partner-title": "The error message that is shown
when a user-supplied partner name is not a valid page title."
+ "genealogy-invalid-partner-title": "The error message that is shown
when a user-supplied partner name is not a valid page title.",
+ "genealogy-no-graphviz": "An error message displayed when the GraphViz
extension isn't installed."
}
diff --git a/src/Hooks.php b/src/Hooks.php
index 1e2c3f3..83e8d68 100644
--- a/src/Hooks.php
+++ b/src/Hooks.php
@@ -131,11 +131,7 @@
if ( isset( $params['descendant depth'] ) ) {
$tree->setDescendantDepth(
$params['descendant depth'] );
}
- if ( $tree->hasAncestorsOrDescendants() ) {
- $graphviz = $tree->getGraphviz();
- $out .= $parser->recursiveTagParse(
"<graphviz>\n$graphviz\n</graphviz>" );
- // $out .= $parser->recursiveTagParse(
"<pre>$graphviz</pre>" );
- }
+ $out = $tree->getWikitext( $parser );
break;
default:
$msg = wfMessage(
'genealogy-parser-function-not-found', [ $type ] );
diff --git a/src/Tree.php b/src/Tree.php
index e8316f4..0a0cc73 100644
--- a/src/Tree.php
+++ b/src/Tree.php
@@ -2,6 +2,8 @@
namespace MediaWiki\Extensions\Genealogy;
+use Html;
+use Parser;
use Title;
class Tree {
@@ -77,15 +79,41 @@
}
/**
+ * Get the wikitext for the tree, containing the <graphviz> element and
dot-formatted contents.
+ * @param Parser $parser The parser.
+ * @return string Unsafe half-parsed HTML, as returned by
Parser::recursiveTagParse().
+ */
+ public function getWikitext( Parser $parser ) {
+ // If there's nothing to render, give up.
+ if ( !$this->hasAncestorsOrDescendants() ) {
+ return '';
+ }
+
+ // See if GraphViz is installed.
+ if ( !class_exists( '\MediaWiki\Extension\GraphViz\GraphViz' )
) {
+ $err = wfMessage( 'genealogy-no-graphviz' );
+ return Html::element( 'p', [ 'class' => 'error' ], $err
);
+ }
+
+ // Make sure the current user (even anonymous IP users) can
upload the image file.
+ // @todo Move to GraphViz
+ // $parser->getUser()->mRights[] = 'upload';
+
+ // Get the GraphViz source and run it through the GraphViz
extension.
+ $graphSource = $this->getGraphvizSource();
+ $out = $parser->recursiveTagParse(
"<graphviz>\n$graphSource\n</graphviz>" );
+
+ // Debugging.
+ // $out .= $parser->recursiveTagParse(
"<pre>$graphSource</pre>" );
+
+ return $out;
+ }
+
+ /**
* Get the Dot source code for the graph of this tree.
* @return string
*/
- public function getGraphviz() {
- $treeName = md5( join( '', $this->ancestors ) . join( '',
$this->descendants ) );
- $this->out( 'top', 'start', "digraph GenealogyTree_$treeName {"
);
- $this->out( 'top', 'graph-attrs', 'graph [rankdir=LR]' );
- $this->out( 'top', 'edge-attrs', 'edge [arrowhead=none]' );
-
+ public function getGraphvizSource() {
$traverser = new Traverser();
$traverser->register( [ $this, 'visit' ] );
@@ -102,9 +130,15 @@
return '<span class="error">No people found</span>';
}
+ // Start the tree.
+ $treeName = md5( join( '', $this->ancestors ) . join( '',
$this->descendants ) );
+ $this->out( 'top', 'start', "digraph GenealogyTree_$treeName {"
);
+ $this->out( 'top', 'graph-attrs', 'graph [rankdir=LR,
ranksep=0.55]' );
+ $this->out( 'top', 'edge-attrs', 'edge [arrowhead=none,
headport=w]' );
+ $this->out( 'top', 'node-attrs', 'node [shape=plaintext,
fontsize=12]' );
+
// Combine all parts of the graph output.
$out = join( "\n", $this->graph_source_code['top'] ) . "\n\n"
- . "node [ shape=plaintext ]\n"
. join( "\n", $this->graph_source_code['person'] ) .
"\n\n";
if ( isset( $this->graph_source_code['partner'] ) ) {
$out .= join( "\n", $this->graph_source_code['partner']
) . "\n\n";
--
To view, visit https://gerrit.wikimedia.org/r/398622
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I8289afe5d73a77e2ec92ff64ec8d5b1604b1861e
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Genealogy
Gerrit-Branch: master
Gerrit-Owner: Samwilson <[email protected]>
Gerrit-Reviewer: Samwilson <[email protected]>
Gerrit-Reviewer: Siebrand <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits