From 303ad9399696ab91b147c21809a427c8ea77bf51 Mon Sep 17 00:00:00 2001 From: epriestley Date: Tue, 11 Sep 2012 09:56:40 -0700 Subject: [PATCH] Modernize UIExamples Summary: - Get rid of an AphrontSideNavView callsite. - Modernize and simplify the application implementation. - Doesn't work perfectly on tablet/phone but that's because not all the UI examples work there yet. Test Plan: Looked at /applications/ and /uiexample/. Reviewers: btrahan Reviewed By: btrahan CC: aran Differential Revision: https://secure.phabricator.com/D3431 --- scripts/celerity/generate_sprites.php | 1 + src/__celerity_resource_map__.php | 6 +-- src/__phutil_library_map__.php | 6 +-- ...AphrontDefaultApplicationConfiguration.php | 5 -- .../base/PhabricatorApplication.php | 27 +++++----- .../PhabricatorApplicationUIExamples.php | 46 ++++++++++++++++++ .../PhabricatorUIExampleController.php | 34 ------------- .../PhabricatorUIExampleRenderController.php | 35 +++++-------- .../examples/JavelinReactorExample.php | 3 +- webroot/rsrc/css/autosprite.css | 32 +++++++----- webroot/rsrc/image/autosprite.png | Bin 89649 -> 92554 bytes 11 files changed, 102 insertions(+), 93 deletions(-) create mode 100644 src/applications/uiexample/application/PhabricatorApplicationUIExamples.php delete mode 100644 src/applications/uiexample/controller/PhabricatorUIExampleController.php diff --git a/scripts/celerity/generate_sprites.php b/scripts/celerity/generate_sprites.php index 5bf389f9a7..be0de39f8f 100755 --- a/scripts/celerity/generate_sprites.php +++ b/scripts/celerity/generate_sprites.php @@ -140,6 +140,7 @@ $app_map = array( 'feed' => array(3, 11), 'paste' => array(9, 2), 'audit' => array(8, 19), + 'uiexample' => array(7, 28), ); $xadj = -1; diff --git a/src/__celerity_resource_map__.php b/src/__celerity_resource_map__.php index 962c603c99..72368d272c 100644 --- a/src/__celerity_resource_map__.php +++ b/src/__celerity_resource_map__.php @@ -65,8 +65,8 @@ celerity_register_resource_map(array( ), '/rsrc/image/autosprite.png' => array( - 'hash' => 'bd70ca6308d6f80a87a10068a04867f8', - 'uri' => '/res/bd70ca63/rsrc/image/autosprite.png', + 'hash' => '0b78a23fb4cec90e3a35ba1b9ce20f0c', + 'uri' => '/res/0b78a23f/rsrc/image/autosprite.png', 'disk' => '/rsrc/image/autosprite.png', 'type' => 'png', ), @@ -671,7 +671,7 @@ celerity_register_resource_map(array( ), 'autosprite-css' => array( - 'uri' => '/res/114f6e40/rsrc/css/autosprite.css', + 'uri' => '/res/cb9c82fd/rsrc/css/autosprite.css', 'type' => 'css', 'requires' => array( diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php index 9cc36962a7..e73163dd4f 100644 --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -570,6 +570,7 @@ phutil_register_library_map(array( 'PhabricatorApplicationProject' => 'applications/project/application/PhabricatorApplicationProject.php', 'PhabricatorApplicationSettings' => 'applications/settings/application/PhabricatorApplicationSettings.php', 'PhabricatorApplicationStatusView' => 'applications/meta/view/PhabricatorApplicationStatusView.php', + 'PhabricatorApplicationUIExamples' => 'applications/uiexample/application/PhabricatorApplicationUIExamples.php', 'PhabricatorApplicationsListController' => 'applications/meta/controller/PhabricatorApplicationsListController.php', 'PhabricatorAuditActionConstants' => 'applications/audit/constants/PhabricatorAuditActionConstants.php', 'PhabricatorAuditAddCommentController' => 'applications/audit/controller/PhabricatorAuditAddCommentController.php', @@ -1076,7 +1077,6 @@ phutil_register_library_map(array( 'PhabricatorTypeaheadDatasourceController' => 'applications/typeahead/controller/PhabricatorTypeaheadDatasourceController.php', 'PhabricatorTypeaheadResult' => 'applications/typeahead/storage/PhabricatorTypeaheadResult.php', 'PhabricatorUIExample' => 'applications/uiexample/examples/PhabricatorUIExample.php', - 'PhabricatorUIExampleController' => 'applications/uiexample/controller/PhabricatorUIExampleController.php', 'PhabricatorUIExampleRenderController' => 'applications/uiexample/controller/PhabricatorUIExampleRenderController.php', 'PhabricatorUIListFilterExample' => 'applications/uiexample/examples/PhabricatorUIListFilterExample.php', 'PhabricatorUINotificationExample' => 'applications/uiexample/examples/PhabricatorUINotificationExample.php', @@ -1710,6 +1710,7 @@ phutil_register_library_map(array( 'PhabricatorApplicationProject' => 'PhabricatorApplication', 'PhabricatorApplicationSettings' => 'PhabricatorApplication', 'PhabricatorApplicationStatusView' => 'AphrontView', + 'PhabricatorApplicationUIExamples' => 'PhabricatorApplication', 'PhabricatorApplicationsListController' => 'PhabricatorController', 'PhabricatorAuditAddCommentController' => 'PhabricatorAuditController', 'PhabricatorAuditComment' => 'PhabricatorAuditDAO', @@ -2155,8 +2156,7 @@ phutil_register_library_map(array( 'PhabricatorTrivialTestCase' => 'PhabricatorTestCase', 'PhabricatorTypeaheadCommonDatasourceController' => 'PhabricatorTypeaheadDatasourceController', 'PhabricatorTypeaheadDatasourceController' => 'PhabricatorController', - 'PhabricatorUIExampleController' => 'PhabricatorController', - 'PhabricatorUIExampleRenderController' => 'PhabricatorUIExampleController', + 'PhabricatorUIExampleRenderController' => 'PhabricatorController', 'PhabricatorUIListFilterExample' => 'PhabricatorUIExample', 'PhabricatorUINotificationExample' => 'PhabricatorUIExample', 'PhabricatorUIPagerExample' => 'PhabricatorUIExample', diff --git a/src/aphront/configuration/AphrontDefaultApplicationConfiguration.php b/src/aphront/configuration/AphrontDefaultApplicationConfiguration.php index a665f40c20..9db2809c51 100644 --- a/src/aphront/configuration/AphrontDefaultApplicationConfiguration.php +++ b/src/aphront/configuration/AphrontDefaultApplicationConfiguration.php @@ -166,11 +166,6 @@ class AphrontDefaultApplicationConfiguration => 'HeraldTranscriptController', ), - '/uiexample/' => array( - '' => 'PhabricatorUIExampleRenderController', - 'view/(?P[^/]+)/' => 'PhabricatorUIExampleRenderController', - ), - '/owners/' => array( '' => 'PhabricatorOwnersListController', 'view/(?P[^/]+)/' => 'PhabricatorOwnersListController', diff --git a/src/applications/base/PhabricatorApplication.php b/src/applications/base/PhabricatorApplication.php index 2bea83af0e..547e0f66fa 100644 --- a/src/applications/base/PhabricatorApplication.php +++ b/src/applications/base/PhabricatorApplication.php @@ -138,21 +138,26 @@ abstract class PhabricatorApplication { public static function getAllInstalledApplications() { - $classes = id(new PhutilSymbolLoader()) - ->setAncestorClass(__CLASS__) - ->setConcreteOnly(true) - ->selectAndLoadSymbols(); + static $applications; - $apps = array(); - foreach ($classes as $class) { - $app = newv($class['name'], array()); - if (!$app->isEnabled()) { - continue; + if (empty($applications)) { + $classes = id(new PhutilSymbolLoader()) + ->setAncestorClass(__CLASS__) + ->setConcreteOnly(true) + ->selectAndLoadSymbols(); + + $apps = array(); + foreach ($classes as $class) { + $app = newv($class['name'], array()); + if (!$app->isEnabled()) { + continue; + } + $apps[] = $app; } - $apps[] = $app; + $applications = $apps; } - return $apps; + return $applications; } diff --git a/src/applications/uiexample/application/PhabricatorApplicationUIExamples.php b/src/applications/uiexample/application/PhabricatorApplicationUIExamples.php new file mode 100644 index 0000000000..c9547169f1 --- /dev/null +++ b/src/applications/uiexample/application/PhabricatorApplicationUIExamples.php @@ -0,0 +1,46 @@ + array( + '' => 'PhabricatorUIExampleRenderController', + 'view/(?P[^/]+)/' => 'PhabricatorUIExampleRenderController', + ), + ); + } + +} diff --git a/src/applications/uiexample/controller/PhabricatorUIExampleController.php b/src/applications/uiexample/controller/PhabricatorUIExampleController.php deleted file mode 100644 index 7e47ca9b75..0000000000 --- a/src/applications/uiexample/controller/PhabricatorUIExampleController.php +++ /dev/null @@ -1,34 +0,0 @@ -buildStandardPageView(); - - $page->setApplicationName('UI Examples'); - $page->setBaseURI('/uiexample/'); - $page->setTitle(idx($data, 'title')); - $page->setGlyph("\xE2\x8F\x9A"); - $page->appendChild($view); - - $response = new AphrontWebpageResponse(); - return $response->setContent($page->render()); - } - -} diff --git a/src/applications/uiexample/controller/PhabricatorUIExampleRenderController.php b/src/applications/uiexample/controller/PhabricatorUIExampleRenderController.php index 3cd4165565..2fc92bfaf5 100644 --- a/src/applications/uiexample/controller/PhabricatorUIExampleRenderController.php +++ b/src/applications/uiexample/controller/PhabricatorUIExampleRenderController.php @@ -16,8 +16,7 @@ * limitations under the License. */ -final class PhabricatorUIExampleRenderController - extends PhabricatorUIExampleController { +final class PhabricatorUIExampleRenderController extends PhabricatorController { private $class; @@ -29,44 +28,31 @@ final class PhabricatorUIExampleRenderController $classes = id(new PhutilSymbolLoader()) ->setAncestorClass('PhabricatorUIExample') + ->setConcreteOnly(true) ->selectAndLoadSymbols(); $classes = ipull($classes, 'name', 'name'); - $selected = null; foreach ($classes as $class => $ignored) { $classes[$class] = newv($class, array()); - if ($this->class == $classes[$class]->getName()) { - $selected = $class; - } } - if (!$selected) { - $selected = head_key($classes); - } + $classes = msort($classes, 'getName'); - $nav = new AphrontSideNavView(); + $nav = new AphrontSideNavFilterView(); + $nav->setBaseURI(new PhutilURI($this->getApplicationURI('view/'))); foreach ($classes as $class => $obj) { $name = $obj->getName(); - - $nav->addNavItem( - phutil_render_tag( - 'a', - array( - 'href' => '/uiexample/view/'.$name.'/', - 'class' => ($selected == $class) - ? 'aphront-side-nav-selected' - : null, - ), - phutil_escape_html($obj->getName()))); + $nav->addFilter($class, $name); } + $selected = $nav->selectFilter($this->class, head_key($classes)); + require_celerity_resource('phabricator-ui-example-css'); $example = $classes[$selected]; $example->setRequest($this->getRequest()); - $nav->appendChild( '
'. '

'. @@ -80,10 +66,11 @@ final class PhabricatorUIExampleRenderController $nav->appendChild($example->renderExample()); - return $this->buildStandardPageResponse( + return $this->buildApplicationPage( $nav, array( - 'title' => 'UI Example', + 'title' => 'UI Example', + 'device' => true, )); } diff --git a/src/applications/uiexample/examples/JavelinReactorExample.php b/src/applications/uiexample/examples/JavelinReactorExample.php index bd005814df..d0ae394fa5 100644 --- a/src/applications/uiexample/examples/JavelinReactorExample.php +++ b/src/applications/uiexample/examples/JavelinReactorExample.php @@ -17,8 +17,9 @@ */ final class JavelinReactorExample extends PhabricatorUIExample { + public function getName() { - return 'Javelin Reactor Examples'; + return 'Javelin Reactor'; } public function getDescription() { diff --git a/webroot/rsrc/css/autosprite.css b/webroot/rsrc/css/autosprite.css index ed5d10a23a..f0780c0313 100644 --- a/webroot/rsrc/css/autosprite.css +++ b/webroot/rsrc/css/autosprite.css @@ -251,50 +251,58 @@ background-position: 0px -2490px; } -.action-file { +.app-uiexample-full { background-position: 0px -2521px; } +.app-uiexample { + background-position: 0px -2582px; +} + +.action-file { + background-position: 0px -2613px; +} + .action-fork { - background-position: 0px -2538px; + background-position: 0px -2630px; } .action-edit { - background-position: 0px -2555px; + background-position: 0px -2647px; } .action-flag-0 { - background-position: 0px -2572px; + background-position: 0px -2664px; } .action-flag-1 { - background-position: 0px -2589px; + background-position: 0px -2681px; } .action-flag-2 { - background-position: 0px -2606px; + background-position: 0px -2698px; } .action-flag-3 { - background-position: 0px -2623px; + background-position: 0px -2715px; } .action-flag-4 { - background-position: 0px -2640px; + background-position: 0px -2732px; } .action-flag-5 { - background-position: 0px -2657px; + background-position: 0px -2749px; } .action-flag-6 { - background-position: 0px -2674px; + background-position: 0px -2766px; } .action-flag-7 { - background-position: 0px -2691px; + background-position: 0px -2783px; } .action-flag-ghost { - background-position: 0px -2708px; + background-position: 0px -2800px; } diff --git a/webroot/rsrc/image/autosprite.png b/webroot/rsrc/image/autosprite.png index 4366ac3c2e74927c237df678aef802c4b19705ac..c866558fb9b6cea421be4b36f226fd59ed55445a 100644 GIT binary patch delta 13893 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 D(3c+A