@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
at recaptime-dev/main 62 lines 1.7 kB view raw
1<?php 2 3final class PhabricatorUIExampleRenderController extends PhabricatorController { 4 5 public function shouldAllowPublic() { 6 return true; 7 } 8 9 public function handleRequest(AphrontRequest $request) { 10 $id = $request->getURIData('class'); 11 12 $classes = id(new PhutilClassMapQuery()) 13 ->setAncestorClass(PhabricatorUIExample::class) 14 ->setSortMethod('getName') 15 ->execute(); 16 17 $nav = new AphrontSideNavFilterView(); 18 $nav->setBaseURI(new PhutilURI($this->getApplicationURI('view/'))); 19 20 $groups = mgroup($classes, 'getCategory'); 21 ksort($groups); 22 foreach ($groups as $group => $group_classes) { 23 $nav->addLabel($group); 24 foreach ($group_classes as $class => $obj) { 25 $name = $obj->getName(); 26 $nav->addFilter($class, $name); 27 } 28 } 29 30 $selected = $nav->selectFilter($id, head_key($classes)); 31 32 $example = $classes[$selected]; 33 $example->setRequest($this->getRequest()); 34 35 $result = $example->renderExample(); 36 if ($result instanceof AphrontResponse) { 37 // This allows examples to generate dialogs, etc., for demonstration. 38 return $result; 39 } 40 41 require_celerity_resource('phabricator-ui-example-css'); 42 43 $crumbs = $this->buildApplicationCrumbs(); 44 $crumbs->addTextCrumb($example->getName()); 45 46 $note = id(new PHUIInfoView()) 47 ->setTitle(pht('%s (%s)', $example->getName(), get_class($example))) 48 ->appendChild($example->getDescription()) 49 ->setSeverity(PHUIInfoView::SEVERITY_NODATA); 50 51 return $this->newPage() 52 ->setTitle($example->getName()) 53 ->setNavigation($nav) 54 ->appendChild( 55 array( 56 $crumbs, 57 $note, 58 $result, 59 )); 60 } 61 62}