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; }