Changeset View
Changeset View
Standalone View
Standalone View
src/applications/files/controller/PhabricatorFileInfoController.php
Show First 20 Lines • Show All 398 Lines • ▼ Show 20 Lines | try { | ||||
// Don't bother raising this anywhere for now. | // Don't bother raising this anywhere for now. | ||||
} | } | ||||
return $engine; | return $engine; | ||||
} | } | ||||
private function newFileContent(PhabricatorFile $file) { | private function newFileContent(PhabricatorFile $file) { | ||||
$viewer = $this->getViewer(); | $viewer = $this->getViewer(); | ||||
$engines = PhabricatorDocumentEngine::getAllEngines(); | |||||
$ref = id(new PhabricatorDocumentRef()) | $ref = id(new PhabricatorDocumentRef()) | ||||
->setFile($file); | ->setFile($file); | ||||
foreach ($engines as $key => $engine) { | $engines = PhabricatorDocumentEngine::getEnginesForRef($viewer, $ref); | ||||
$engine = id(clone $engine) | $engine = head($engines); | ||||
->setViewer($viewer); | |||||
if (!$engine->canRenderDocument($ref)) { | $content = $engine->newDocument($ref); | ||||
unset($engines[$key]); | |||||
$icon = $engine->newDocumentIcon($ref); | |||||
$views = array(); | |||||
foreach ($engines as $candidate_engine) { | |||||
$label = $candidate_engine->getViewAsLabel($ref); | |||||
if ($label === null) { | |||||
continue; | continue; | ||||
} | } | ||||
$engines[$key] = $engine; | $view_icon = $candidate_engine->getViewAsIconIcon($ref); | ||||
} | |||||
if (!$engines) { | $views[] = array( | ||||
throw new Exception(pht('No engine can render this document.')); | 'viewKey' => $candidate_engine->getDocumentEngineKey(), | ||||
'icon' => $view_icon, | |||||
'name' => $label, | |||||
'engineURI' => $candidate_engine->getRenderURI($ref), | |||||
); | |||||
} | } | ||||
$vectors = array(); | Javelin::initBehavior('document-engine'); | ||||
foreach ($engines as $key => $usable_engine) { | |||||
$vectors[$key] = $usable_engine->newSortVector($ref); | |||||
} | |||||
$vectors = msortv($vectors, 'getSelf'); | |||||
$engine = $engines[head_key($vectors)]; | $viewport_id = celerity_generate_unique_node_id(); | ||||
$content = $engine->newDocument($ref); | $viewport = phutil_tag( | ||||
if (!$content) { | 'div', | ||||
return null; | array( | ||||
} | 'id' => $viewport_id, | ||||
), | |||||
$content); | |||||
$meta = array( | |||||
'viewportID' => $viewport_id, | |||||
'viewKey' => $engine->getDocumentEngineKey(), | |||||
'views' => $views, | |||||
'standaloneURI' => $engine->getRenderURI($ref), | |||||
); | |||||
$icon = $engine->newDocumentIcon($ref); | $view_button = id(new PHUIButtonView()) | ||||
->setTag('a') | |||||
->setText(pht('View Options')) | |||||
->setIcon('fa-file-image-o') | |||||
->setColor(PHUIButtonView::GREY) | |||||
->setMetadata($meta) | |||||
->setDropdown(true) | |||||
->addSigil('document-engine-view-dropdown'); | |||||
$header = id(new PHUIHeaderView()) | $header = id(new PHUIHeaderView()) | ||||
->setHeaderIcon($icon) | ->setHeaderIcon($icon) | ||||
->setHeader($ref->getName()); | ->setHeader($ref->getName()) | ||||
->addActionLink($view_button); | |||||
return id(new PHUIObjectBoxView()) | return id(new PHUIObjectBoxView()) | ||||
->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) | ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) | ||||
->setHeader($header) | ->setHeader($header) | ||||
->appendChild($content); | ->appendChild($viewport); | ||||
} | } | ||||
} | } |