public function render()
 {
     require_celerity_resource('differential-core-view-css');
     require_celerity_resource('differential-revision-detail-css');
     $revision = $this->revision;
     $rows = array();
     foreach ($this->auxiliaryFields as $field) {
         $value = $field->renderValueForRevisionView();
         if (strlen($value)) {
             $label = $field->renderLabelForRevisionView();
             $rows[] = '<tr>' . '<th>' . $label . '</th>' . '<td>' . $value . '</td>' . '</tr>';
         }
     }
     $properties = '<table class="differential-revision-properties">' . implode("\n", $rows) . '</table>';
     $actions = array();
     foreach ($this->actions as $action) {
         $obj = new AphrontHeadsupActionView();
         $obj->setName($action['name']);
         $obj->setURI(idx($action, 'href'));
         $obj->setWorkflow(idx($action, 'sigil') == 'workflow');
         $obj->setClass(idx($action, 'class'));
         $obj->setInstant(idx($action, 'instant'));
         $obj->setUser($this->user);
         $actions[] = $obj;
     }
     $action_list = new AphrontHeadsupActionListView();
     $action_list->setActions($actions);
     return '<div class="differential-revision-detail differential-panel">' . $action_list->render() . '<div class="differential-keyboard-shortcuts">' . id(new AphrontKeyboardShortcutsAvailableView())->render() . '</div>' . '<div class="differential-revision-detail-core">' . '<h1>' . '<span class="aphront-headsup-object-name">' . phutil_escape_html('D' . $revision->getID()) . '</span>' . ' ' . phutil_escape_html($revision->getTitle()) . '</h1>' . $properties . '</div>' . '<div style="clear: both;"></div>' . '</div>';
 }
 public function render()
 {
     require_celerity_resource('differential-core-view-css');
     require_celerity_resource('differential-revision-detail-css');
     $revision = $this->revision;
     $dict = array();
     foreach ($this->auxiliaryFields as $field) {
         $value = $field->renderValueForRevisionView();
         if (strlen($value)) {
             $label = rtrim($field->renderLabelForRevisionView(), ':');
             $dict[$label] = $value;
         }
     }
     $actions = array();
     foreach ($this->actions as $action) {
         $obj = new AphrontHeadsupActionView();
         $obj->setName($action['name']);
         $obj->setURI(idx($action, 'href'));
         $obj->setWorkflow(idx($action, 'sigil') == 'workflow');
         $obj->setClass(idx($action, 'class'));
         $obj->setInstant(idx($action, 'instant'));
         $obj->setUser($this->user);
         $actions[] = $obj;
     }
     $action_list = new AphrontHeadsupActionListView();
     $action_list->setActions($actions);
     $action_panel = new AphrontHeadsupView();
     $action_panel->setActionList($action_list);
     $action_panel->setHasKeyboardShortcuts(true);
     $action_panel->setProperties($dict);
     $action_panel->setObjectName('D' . $revision->getID());
     $action_panel->setHeader($revision->getTitle());
     return $action_panel->render();
 }