private function buildObjectTranscriptPanel($xscript)
 {
     $field_names = HeraldFieldConfig::getFieldMap();
     $object_xscript = $xscript->getObjectTranscript();
     $data = array();
     if ($object_xscript) {
         $phid = $object_xscript->getPHID();
         $handles = $this->loadViewerHandles(array($phid));
         $data += array('Object Name' => $object_xscript->getName(), 'Object Type' => $object_xscript->getType(), 'Object PHID' => $phid, 'Object Link' => $handles[$phid]->renderLink());
     }
     $data += $xscript->getMetadataMap();
     if ($object_xscript) {
         foreach ($object_xscript->getFields() as $field => $value) {
             $field = idx($field_names, $field, '[' . $field . '?]');
             $data['Field: ' . $field] = $value;
         }
     }
     $rows = array();
     foreach ($data as $name => $value) {
         if (!is_scalar($value) && !is_null($value)) {
             $value = implode("\n", $value);
         }
         if (strlen($value) > 256) {
             $value = phutil_render_tag('textarea', array('class' => 'herald-field-value-transcript'), phutil_escape_html($value));
         } else {
             if ($name === 'Object Link') {
                 // The link cannot be escaped
             } else {
                 $value = phutil_escape_html($value);
             }
         }
         $rows[] = array(phutil_escape_html($name), $value);
     }
     $table = new AphrontTableView($rows);
     $table->setColumnClasses(array('header', 'wide'));
     $panel = new AphrontPanelView();
     $panel->setHeader('Object Transcript');
     $panel->appendChild($table);
     return $panel;
 }