diff --git a/src/applications/diviner/renderer/DivinerDefaultRenderer.php b/src/applications/diviner/renderer/DivinerDefaultRenderer.php index 459095864f..cbe7eae3b8 100644 --- a/src/applications/diviner/renderer/DivinerDefaultRenderer.php +++ b/src/applications/diviner/renderer/DivinerDefaultRenderer.php @@ -3,11 +3,124 @@ final class DivinerDefaultRenderer extends DivinerRenderer { public function renderAtom(DivinerAtom $atom) { - return "ATOM: ".$atom->getType()." ".$atom->getName()."!"; + $out = array( + $this->renderAtomTitle($atom), + $this->renderAtomProperties($atom), + $this->renderAtomDescription($atom), + ); + + return phutil_tag( + 'div', + array( + 'class' => 'diviner-atom', + ), + $out); + } + + protected function renderAtomTitle(DivinerAtom $atom) { + $name = $this->renderAtomName($atom); + $type = $this->renderAtomType($atom); + + return phutil_tag( + 'h1', + array( + 'class' => 'atom-title', + ), + array($name, ' ', $type)); + } + + protected function renderAtomName(DivinerAtom $atom) { + return phutil_tag( + 'div', + array( + 'class' => 'atom-name', + ), + $this->getAtomName($atom)); + } + + protected function getAtomName(DivinerAtom $atom) { + if ($atom->getDocblockMetaValue('title')) { + return $atom->getDocblockMetaValue('title'); + } + + return $atom->getName(); + } + + protected function renderAtomType(DivinerAtom $atom) { + return phutil_tag( + 'div', + array( + 'class' => 'atom-name', + ), + $this->getAtomType($atom)); + } + + protected function getAtomType(DivinerAtom $atom) { + return ucwords($atom->getType()); + } + + protected function renderAtomProperties(DivinerAtom $atom) { + $props = $this->getAtomProperties($atom); + + $out = array(); + foreach ($props as $prop) { + list($key, $value) = $prop; + + $out[] = phutil_tag('dt', array(), $key); + $out[] = phutil_tag('dd', array(), $value); + } + + return phutil_tag( + 'dl', + array( + 'class' => 'atom-properties', + ), + $out); + } + + protected function getAtomProperties(DivinerAtom $atom) { + $properties = array(); + $properties[] = array( + pht('Defined'), + $atom->getFile().':'.$atom->getLine(), + ); + + return $properties; + } + + protected function renderAtomDescription(DivinerAtom $atom) { + $text = $this->getAtomDescription($atom); + $engine = $this->getBlockMarkupEngine(); + return phutil_tag( + 'div', + array( + 'class' => 'atom-description', + ), + $engine->markupText($text)); + } + + protected function getAtomDescription(DivinerAtom $atom) { + return $atom->getDocblockText(); } public function renderAtomSummary(DivinerAtom $atom) { - return "A lovely atom named ".$atom->getName(); + $text = $this->getAtomSummary($atom); + $engine = $this->getInlineMarkupEngine(); + return phutil_tag( + 'span', + array( + 'class' => 'atom-summary', + ), + $engine->markupText($text)); + } + + protected function getAtomSummary(DivinerAtom $atom) { + if ($atom->getDocblockMetaValue('summary')) { + return $atom->getDocblockMetaValue('summary'); + } + + $text = $this->getAtomDescription($atom); + return PhabricatorMarkupEngine::summarize($text); } public function renderAtomIndex(array $refs) { @@ -17,16 +130,53 @@ final class DivinerDefaultRenderer extends DivinerRenderer { $out = array(); foreach ($groups as $group_key => $refs) { - $out[] = '