public function render()
 {
     $this->requireResource('differential-changeset-view-css');
     $changesets = $this->changesets;
     Javelin::initBehavior('differential-toggle-files', array('pht' => array('undo' => pht('Undo'), 'collapsed' => pht('This file content has been collapsed.'))));
     Javelin::initBehavior('differential-dropdown-menus', array('pht' => array('Open in Editor' => pht('Open in Editor'), 'Show Entire File' => pht('Show Entire File'), 'Entire File Shown' => pht('Entire File Shown'), "Can't Toggle Unloaded File" => pht("Can't Toggle Unloaded File"), 'Expand File' => pht('Expand File'), 'Collapse File' => pht('Collapse File'), 'Browse in Diffusion' => pht('Browse in Diffusion'), 'View Standalone' => pht('View Standalone'), 'Show Raw File (Left)' => pht('Show Raw File (Left)'), 'Show Raw File (Right)' => pht('Show Raw File (Right)'), 'Configure Editor' => pht('Configure Editor'), 'Load Changes' => pht('Load Changes'), 'View Side-by-Side' => pht('View Side-by-Side'), 'View Unified' => pht('View Unified (Barely Works!)'), 'Change Text Encoding...' => pht('Change Text Encoding...'), 'Highlight As...' => pht('Highlight As...'))));
     $output = array();
     $ids = array();
     foreach ($changesets as $key => $changeset) {
         $file = $changeset->getFilename();
         $class = 'differential-changeset';
         if (!$this->inlineURI) {
             $class .= ' differential-changeset-noneditable';
         }
         $ref = $this->references[$key];
         $detail = new DifferentialChangesetDetailView();
         $uniq_id = 'diff-' . $changeset->getAnchorName();
         $detail->setID($uniq_id);
         $view_options = $this->renderViewOptionsDropdown($detail, $ref, $changeset);
         $detail->setChangeset($changeset);
         $detail->addButton($view_options);
         $detail->setSymbolIndex(idx($this->symbolIndexes, $key));
         $detail->setVsChangesetID(idx($this->vsMap, $changeset->getID()));
         $detail->setEditable(true);
         $detail->setRenderingRef($ref);
         $detail->setAutoload(isset($this->visibleChangesets[$key]));
         $detail->setRenderURI($this->renderURI);
         $detail->setWhitespace($this->whitespace);
         if (isset($this->visibleChangesets[$key])) {
             $load = 'Loading...';
         } else {
             $load = javelin_tag('a', array('href' => '#' . $uniq_id, 'sigil' => 'differential-load', 'meta' => array('id' => $detail->getID(), 'kill' => true), 'mustcapture' => true), pht('Load'));
         }
         $detail->appendChild(phutil_tag('div', array('id' => $uniq_id), phutil_tag('div', array('class' => 'differential-loading'), $load)));
         $output[] = $detail->render();
         $ids[] = $detail->getID();
     }
     $this->requireResource('aphront-tooltip-css');
     $this->initBehavior('differential-populate', array('changesetViewIDs' => $ids));
     $this->initBehavior('differential-show-more', array('uri' => $this->renderURI, 'whitespace' => $this->whitespace));
     $this->initBehavior('differential-comment-jump', array());
     if ($this->inlineURI) {
         $undo_templates = $this->renderUndoTemplates();
         Javelin::initBehavior('differential-edit-inline-comments', array('uri' => $this->inlineURI, 'undo_templates' => $undo_templates, 'stage' => 'differential-review-stage'));
     }
     $header = id(new PHUIHeaderView())->setHeader($this->getTitle());
     $content = phutil_tag('div', array('class' => 'differential-review-stage', 'id' => 'differential-review-stage'), $output);
     $object_box = id(new PHUIObjectBoxView())->setHeader($header)->appendChild($content);
     return $object_box;
 }