pathChanges = $path_changes; return $this; } public function render() { $rows = array(); // TODO: Experiment with path stack rendering. // TODO: Copy Away and Move Away are rendered junkily still. foreach ($this->pathChanges as $change) { $path = $change->getPath(); $hash = substr(md5($path), 0, 8); if ($change->getFileType() == DifferentialChangeType::FILE_DIRECTORY) { $path .= '/'; } $path_column = phutil_render_tag( 'a', array( 'href' => '#'.$hash, ), phutil_escape_html($path)); $rows[] = array( $this->linkHistory($change->getPath()), $this->linkBrowse($change->getPath()), $this->linkChange( $change->getChangeType(), $change->getFileType(), $change->getPath()), $path_column, ); } $view = new AphrontTableView($rows); $view->setHeaders( array( 'History', 'Browse', 'Change', 'Path', )); $view->setColumnClasses( array( '', '', '', 'wide', )); $view->setNoDataString('This change has not been fully parsed yet.'); return $view->render(); } }