Implement very basic uberhome

Summary:
No fancy-pants smarty stuff yet, but merges /applications/ and the awful application buttons into the dark navigation.

Hover state is maybe a little weird.

Test Plan: {F29324}

Reviewers: chad, btrahan

Reviewed By: btrahan

CC: aran, btrahan, codeblock

Differential Revision: https://secure.phabricator.com/D4431
This commit is contained in:
epriestley
2013-01-15 15:41:22 -08:00
parent 55072a2640
commit c506cfe8d9
21 changed files with 246 additions and 595 deletions

View File

@@ -7,41 +7,6 @@
*/
celerity_register_resource_map(array(
'/rsrc/image/apps.png' =>
array(
'hash' => 'f7cb4abeb73245fea4098a02fd784653',
'uri' => '/res/f7cb4abe/rsrc/image/apps.png',
'disk' => '/rsrc/image/apps.png',
'type' => 'png',
),
'/rsrc/image/appstatus_empty.png' =>
array(
'hash' => '2f8102e0a0f5a0980d87d4ab4ba8c8fd',
'uri' => '/res/2f8102e0/rsrc/image/appstatus_empty.png',
'disk' => '/rsrc/image/appstatus_empty.png',
'type' => 'png',
),
'/rsrc/image/appstatus_info.png' =>
array(
'hash' => '407de6daf2edc4a8b68e2e369f4fc8cb',
'uri' => '/res/407de6da/rsrc/image/appstatus_info.png',
'disk' => '/rsrc/image/appstatus_info.png',
'type' => 'png',
),
'/rsrc/image/appstatus_needs.png' =>
array(
'hash' => '2c1e193bc786ca4fca0b851ed9cd3d92',
'uri' => '/res/2c1e193b/rsrc/image/appstatus_needs.png',
'disk' => '/rsrc/image/appstatus_needs.png',
'type' => 'png',
),
'/rsrc/image/appstatus_okay.png' =>
array(
'hash' => 'd00e683ee1c61d0ccced1200775cdbb5',
'uri' => '/res/d00e683e/rsrc/image/appstatus_okay.png',
'disk' => '/rsrc/image/appstatus_okay.png',
'type' => 'png',
),
'/rsrc/image/avatar.png' =>
array(
'hash' => '1c5f255071537f05406adee86717ff27',
@@ -653,7 +618,7 @@ celerity_register_resource_map(array(
),
'aphront-form-view-css' =>
array(
'uri' => '/res/bdc0b393/rsrc/css/aphront/form-view.css',
'uri' => '/res/ff83e503/rsrc/css/aphront/form-view.css',
'type' => 'css',
'requires' =>
array(
@@ -680,7 +645,7 @@ celerity_register_resource_map(array(
),
'aphront-list-filter-view-css' =>
array(
'uri' => '/res/f6d419df/rsrc/css/aphront/list-filter-view.css',
'uri' => '/res/0f5ddaba/rsrc/css/aphront/list-filter-view.css',
'type' => 'css',
'requires' =>
array(
@@ -849,7 +814,7 @@ celerity_register_resource_map(array(
),
'differential-revision-list-css' =>
array(
'uri' => '/res/fe6c4721/rsrc/css/application/differential/revision-list.css',
'uri' => '/res/7659ad8d/rsrc/css/application/differential/revision-list.css',
'type' => 'css',
'requires' =>
array(
@@ -2428,18 +2393,9 @@ celerity_register_resource_map(array(
),
'disk' => '/rsrc/css/layout/phabricator-action-list-view.css',
),
'phabricator-app-buttons-css' =>
array(
'uri' => '/res/1a1f926e/rsrc/css/application/directory/phabricator-app-buttons.css',
'type' => 'css',
'requires' =>
array(
),
'disk' => '/rsrc/css/application/directory/phabricator-app-buttons.css',
),
'phabricator-application-launch-view-css' =>
array(
'uri' => '/res/464720b1/rsrc/css/application/base/phabricator-application-launch-view.css',
'uri' => '/res/ddfc3af4/rsrc/css/application/base/phabricator-application-launch-view.css',
'type' => 'css',
'requires' =>
array(
@@ -2664,7 +2620,7 @@ celerity_register_resource_map(array(
),
'phabricator-nav-view-css' =>
array(
'uri' => '/res/00ba5b11/rsrc/css/aphront/phabricator-nav-view.css',
'uri' => '/res/44a2e453/rsrc/css/aphront/phabricator-nav-view.css',
'type' => 'css',
'requires' =>
array(
@@ -3078,7 +3034,7 @@ celerity_register_resource_map(array(
),
'phabricator-zindex-css' =>
array(
'uri' => '/res/99eb34fd/rsrc/css/core/z-index.css',
'uri' => '/res/81ca67ef/rsrc/css/core/z-index.css',
'type' => 'css',
'requires' =>
array(
@@ -3268,7 +3224,7 @@ celerity_register_resource_map(array(
), array(
'packages' =>
array(
'6d57aed2' =>
'38f5403c' =>
array(
'name' => 'core.pkg.css',
'symbols' =>
@@ -3287,33 +3243,32 @@ celerity_register_resource_map(array(
11 => 'aphront-list-filter-view-css',
12 => 'phabricator-directory-css',
13 => 'phabricator-jump-nav',
14 => 'phabricator-app-buttons-css',
15 => 'phabricator-remarkup-css',
16 => 'syntax-highlighting-css',
17 => 'aphront-pager-view-css',
18 => 'phabricator-transaction-view-css',
19 => 'aphront-tooltip-css',
20 => 'aphront-headsup-view-css',
21 => 'phabricator-flag-css',
22 => 'aphront-error-view-css',
23 => 'sprite-icon-css',
24 => 'sprite-gradient-css',
25 => 'sprite-menu-css',
26 => 'sprite-apps-large-css',
27 => 'phabricator-main-menu-view',
28 => 'phabricator-notification-css',
29 => 'phabricator-notification-menu-css',
30 => 'lightbox-attachment-css',
31 => 'phabricator-header-view-css',
32 => 'phabricator-form-view-css',
33 => 'phabricator-filetree-view-css',
34 => 'phabricator-nav-view-css',
35 => 'phabricator-side-menu-view-css',
36 => 'phabricator-crumbs-view-css',
37 => 'phabricator-object-item-list-view-css',
38 => 'global-drag-and-drop-css',
14 => 'phabricator-remarkup-css',
15 => 'syntax-highlighting-css',
16 => 'aphront-pager-view-css',
17 => 'phabricator-transaction-view-css',
18 => 'aphront-tooltip-css',
19 => 'aphront-headsup-view-css',
20 => 'phabricator-flag-css',
21 => 'aphront-error-view-css',
22 => 'sprite-icon-css',
23 => 'sprite-gradient-css',
24 => 'sprite-menu-css',
25 => 'sprite-apps-large-css',
26 => 'phabricator-main-menu-view',
27 => 'phabricator-notification-css',
28 => 'phabricator-notification-menu-css',
29 => 'lightbox-attachment-css',
30 => 'phabricator-header-view-css',
31 => 'phabricator-form-view-css',
32 => 'phabricator-filetree-view-css',
33 => 'phabricator-nav-view-css',
34 => 'phabricator-side-menu-view-css',
35 => 'phabricator-crumbs-view-css',
36 => 'phabricator-object-item-list-view-css',
37 => 'global-drag-and-drop-css',
),
'uri' => '/res/pkg/6d57aed2/core.pkg.css',
'uri' => '/res/pkg/38f5403c/core.pkg.css',
'type' => 'css',
),
'b239ff06' =>
@@ -3369,7 +3324,7 @@ celerity_register_resource_map(array(
'uri' => '/res/pkg/8edbada5/darkconsole.pkg.js',
'type' => 'js',
),
'ec01d039' =>
'20933a11' =>
array(
'name' => 'differential.pkg.css',
'symbols' =>
@@ -3389,7 +3344,7 @@ celerity_register_resource_map(array(
12 => 'differential-local-commits-view-css',
13 => 'inline-comment-summary-css',
),
'uri' => '/res/pkg/ec01d039/differential.pkg.css',
'uri' => '/res/pkg/20933a11/differential.pkg.css',
'type' => 'css',
),
'bbd79ca2' =>
@@ -3502,34 +3457,34 @@ celerity_register_resource_map(array(
'reverse' =>
array(
'aphront-attached-file-view-css' => 'ac211174',
'aphront-crumbs-view-css' => '6d57aed2',
'aphront-dialog-view-css' => '6d57aed2',
'aphront-error-view-css' => '6d57aed2',
'aphront-form-view-css' => '6d57aed2',
'aphront-headsup-action-list-view-css' => 'ec01d039',
'aphront-headsup-view-css' => '6d57aed2',
'aphront-list-filter-view-css' => '6d57aed2',
'aphront-pager-view-css' => '6d57aed2',
'aphront-panel-view-css' => '6d57aed2',
'aphront-table-view-css' => '6d57aed2',
'aphront-tokenizer-control-css' => '6d57aed2',
'aphront-tooltip-css' => '6d57aed2',
'aphront-typeahead-control-css' => '6d57aed2',
'differential-changeset-view-css' => 'ec01d039',
'differential-core-view-css' => 'ec01d039',
'aphront-crumbs-view-css' => '38f5403c',
'aphront-dialog-view-css' => '38f5403c',
'aphront-error-view-css' => '38f5403c',
'aphront-form-view-css' => '38f5403c',
'aphront-headsup-action-list-view-css' => '20933a11',
'aphront-headsup-view-css' => '38f5403c',
'aphront-list-filter-view-css' => '38f5403c',
'aphront-pager-view-css' => '38f5403c',
'aphront-panel-view-css' => '38f5403c',
'aphront-table-view-css' => '38f5403c',
'aphront-tokenizer-control-css' => '38f5403c',
'aphront-tooltip-css' => '38f5403c',
'aphront-typeahead-control-css' => '38f5403c',
'differential-changeset-view-css' => '20933a11',
'differential-core-view-css' => '20933a11',
'differential-inline-comment-editor' => 'bbd79ca2',
'differential-local-commits-view-css' => 'ec01d039',
'differential-results-table-css' => 'ec01d039',
'differential-revision-add-comment-css' => 'ec01d039',
'differential-revision-comment-css' => 'ec01d039',
'differential-revision-comment-list-css' => 'ec01d039',
'differential-revision-history-css' => 'ec01d039',
'differential-revision-list-css' => 'ec01d039',
'differential-table-of-contents-css' => 'ec01d039',
'differential-local-commits-view-css' => '20933a11',
'differential-results-table-css' => '20933a11',
'differential-revision-add-comment-css' => '20933a11',
'differential-revision-comment-css' => '20933a11',
'differential-revision-comment-list-css' => '20933a11',
'differential-revision-history-css' => '20933a11',
'differential-revision-list-css' => '20933a11',
'differential-table-of-contents-css' => '20933a11',
'diffusion-commit-view-css' => 'c8ce2d88',
'diffusion-icons-css' => 'c8ce2d88',
'global-drag-and-drop-css' => '6d57aed2',
'inline-comment-summary-css' => 'ec01d039',
'global-drag-and-drop-css' => '38f5403c',
'inline-comment-summary-css' => '20933a11',
'javelin-aphlict' => 'b239ff06',
'javelin-behavior' => 'fbeded59',
'javelin-behavior-aphlict-dropdown' => 'b239ff06',
@@ -3597,49 +3552,48 @@ celerity_register_resource_map(array(
'javelin-util' => 'fbeded59',
'javelin-vector' => 'fbeded59',
'javelin-workflow' => 'fbeded59',
'lightbox-attachment-css' => '6d57aed2',
'lightbox-attachment-css' => '38f5403c',
'maniphest-task-summary-css' => 'ac211174',
'maniphest-transaction-detail-css' => 'ac211174',
'phabricator-app-buttons-css' => '6d57aed2',
'phabricator-busy' => 'b239ff06',
'phabricator-content-source-view-css' => 'ec01d039',
'phabricator-core-buttons-css' => '6d57aed2',
'phabricator-core-css' => '6d57aed2',
'phabricator-crumbs-view-css' => '6d57aed2',
'phabricator-directory-css' => '6d57aed2',
'phabricator-content-source-view-css' => '20933a11',
'phabricator-core-buttons-css' => '38f5403c',
'phabricator-core-css' => '38f5403c',
'phabricator-crumbs-view-css' => '38f5403c',
'phabricator-directory-css' => '38f5403c',
'phabricator-drag-and-drop-file-upload' => 'bbd79ca2',
'phabricator-dropdown-menu' => 'b239ff06',
'phabricator-file-upload' => 'b239ff06',
'phabricator-filetree-view-css' => '6d57aed2',
'phabricator-flag-css' => '6d57aed2',
'phabricator-form-view-css' => '6d57aed2',
'phabricator-header-view-css' => '6d57aed2',
'phabricator-jump-nav' => '6d57aed2',
'phabricator-filetree-view-css' => '38f5403c',
'phabricator-flag-css' => '38f5403c',
'phabricator-form-view-css' => '38f5403c',
'phabricator-header-view-css' => '38f5403c',
'phabricator-jump-nav' => '38f5403c',
'phabricator-keyboard-shortcut' => 'b239ff06',
'phabricator-keyboard-shortcut-manager' => 'b239ff06',
'phabricator-main-menu-view' => '6d57aed2',
'phabricator-main-menu-view' => '38f5403c',
'phabricator-menu-item' => 'b239ff06',
'phabricator-nav-view-css' => '6d57aed2',
'phabricator-nav-view-css' => '38f5403c',
'phabricator-notification' => 'b239ff06',
'phabricator-notification-css' => '6d57aed2',
'phabricator-notification-menu-css' => '6d57aed2',
'phabricator-object-item-list-view-css' => '6d57aed2',
'phabricator-object-selector-css' => 'ec01d039',
'phabricator-notification-css' => '38f5403c',
'phabricator-notification-menu-css' => '38f5403c',
'phabricator-object-item-list-view-css' => '38f5403c',
'phabricator-object-selector-css' => '20933a11',
'phabricator-paste-file-upload' => 'b239ff06',
'phabricator-prefab' => 'b239ff06',
'phabricator-project-tag-css' => 'ac211174',
'phabricator-remarkup-css' => '6d57aed2',
'phabricator-remarkup-css' => '38f5403c',
'phabricator-shaped-request' => 'bbd79ca2',
'phabricator-side-menu-view-css' => '6d57aed2',
'phabricator-standard-page-view' => '6d57aed2',
'phabricator-side-menu-view-css' => '38f5403c',
'phabricator-standard-page-view' => '38f5403c',
'phabricator-textareautils' => 'b239ff06',
'phabricator-tooltip' => 'b239ff06',
'phabricator-transaction-view-css' => '6d57aed2',
'phabricator-zindex-css' => '6d57aed2',
'sprite-apps-large-css' => '6d57aed2',
'sprite-gradient-css' => '6d57aed2',
'sprite-icon-css' => '6d57aed2',
'sprite-menu-css' => '6d57aed2',
'syntax-highlighting-css' => '6d57aed2',
'phabricator-transaction-view-css' => '38f5403c',
'phabricator-zindex-css' => '38f5403c',
'sprite-apps-large-css' => '38f5403c',
'sprite-gradient-css' => '38f5403c',
'sprite-icon-css' => '38f5403c',
'sprite-menu-css' => '38f5403c',
'syntax-highlighting-css' => '38f5403c',
),
));

View File

@@ -648,7 +648,6 @@ phutil_register_library_map(array(
'PhabricatorApplicationTransactionView' => 'applications/transactions/view/PhabricatorApplicationTransactionView.php',
'PhabricatorApplicationTransactions' => 'applications/transactions/application/PhabricatorApplicationTransactions.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',
'PhabricatorAuditComment' => 'applications/audit/storage/PhabricatorAuditComment.php',
@@ -2022,7 +2021,6 @@ phutil_register_library_map(array(
'PhabricatorApplicationTransactionView' => 'AphrontView',
'PhabricatorApplicationTransactions' => 'PhabricatorApplication',
'PhabricatorApplicationUIExamples' => 'PhabricatorApplication',
'PhabricatorApplicationsListController' => 'PhabricatorController',
'PhabricatorAuditAddCommentController' => 'PhabricatorAuditController',
'PhabricatorAuditComment' =>
array(

View File

@@ -20,6 +20,10 @@ final class PhabricatorApplicationCalendar extends PhabricatorApplication {
return "\xE2\x8C\xA8";
}
public function getApplicationGroup() {
return self::GROUP_COMMUNICATION;
}
public function getRoutes() {
return array(
'/calendar/' => array(

View File

@@ -3,7 +3,7 @@
final class PhabricatorApplicationDaemons extends PhabricatorApplication {
public function getName() {
return 'Daemon Console';
return 'Daemons';
}
public function getShortDescription() {

View File

@@ -21,11 +21,51 @@ abstract class PhabricatorDirectoryController extends PhabricatorController {
$nav = new AphrontSideNavFilterView();
$nav->setBaseURI(new PhutilURI('/'));
$nav->addLabel('Phabricator');
$nav->addFilter('home', 'Tactical Command', '/');
$nav->addFilter('jump', 'Jump Nav');
$nav->addFilter('feed', 'Feed');
$nav->addFilter('applications', 'More Stuff');
$applications = PhabricatorApplication::getAllInstalledApplications();
foreach ($applications as $key => $application) {
if (!$application->shouldAppearInLaunchView()) {
unset($applications[$key]);
}
}
$groups = PhabricatorApplication::getApplicationGroups();
$applications = msort($applications, 'getApplicationOrder');
$applications = mgroup($applications, 'getApplicationGroup');
$applications = array_select_keys($applications, array_keys($groups));
$view = array();
foreach ($applications as $group => $application_list) {
$status = array();
foreach ($application_list as $key => $application) {
$status[$key] = $application->loadStatus($user);
}
$views = array();
foreach ($application_list as $key => $application) {
$views[] = id(new PhabricatorApplicationLaunchView())
->setApplication($application)
->setApplicationStatus(idx($status, $key, array()))
->setUser($user);
}
while (count($views) % 4) {
$views[] = id(new PhabricatorApplicationLaunchView());
}
$nav->addLabel($groups[$group]);
$nav->addCustomBlock(
phutil_render_tag(
'div',
array(
'class' => 'application-tile-group',
),
id(new AphrontNullView())->appendChild($views)->render()));
}
$nav->addClass('phabricator-side-menu-home');
$nav->selectFilter(null);
return $nav;
}

View File

@@ -4,39 +4,26 @@ final class PhabricatorDirectoryMainController
extends PhabricatorDirectoryController {
private $filter;
private $subfilter;
public function willProcessRequest(array $data) {
$this->filter = idx($data, 'filter');
$this->subfilter = idx($data, 'subfilter');
}
public function processRequest() {
$user = $this->getRequest()->getUser();
if ($this->filter == 'jump') {
return $this->buildJumpResponse();
}
$nav = $this->buildNav();
$this->filter = $nav->selectFilter($this->filter, 'home');
switch ($this->filter) {
case 'jump':
break;
case 'home':
$project_query = new PhabricatorProjectQuery();
$project_query->setViewer($user);
$project_query->withMemberPHIDs(array($user->getPHID()));
$projects = $project_query->execute();
break;
default:
throw new Exception("Unknown filter '{$this->filter}'!");
}
switch ($this->filter) {
case 'jump':
return $this->buildJumpResponse($nav);
default:
return $this->buildMainResponse($nav, $projects);
}
$project_query = new PhabricatorProjectQuery();
$project_query->setViewer($user);
$project_query->withMemberPHIDs(array($user->getPHID()));
$projects = $project_query->execute();
return $this->buildMainResponse($nav, $projects);
}
private function buildMainResponse($nav, array $projects) {
@@ -56,12 +43,10 @@ final class PhabricatorDirectoryMainController
$jump_panel = $this->buildJumpPanel();
$revision_panel = $this->buildRevisionPanel();
$app_panel = $this->buildAppPanel();
$audit_panel = $this->buildAuditPanel();
$commit_panel = $this->buildCommitPanel();
$content = array(
$app_panel,
$jump_panel,
$unbreak_panel,
$triage_panel,
@@ -82,7 +67,7 @@ final class PhabricatorDirectoryMainController
));
}
private function buildJumpResponse($nav) {
private function buildJumpResponse() {
$request = $this->getRequest();
$jump = $request->getStr('jump');
@@ -97,15 +82,9 @@ final class PhabricatorDirectoryMainController
return id(new AphrontRedirectResponse())
->setURI('/search/'.$query->getQueryKey().'/');
} else {
return id(new AphrontRedirectResponse())->setURI('/');
}
$nav->appendChild($this->buildJumpPanel($jump));
return $this->buildStandardPageResponse(
$nav,
array(
'title' => 'Jump Nav',
));
}
private function buildUnbreakNowPanel() {
@@ -389,105 +368,6 @@ final class PhabricatorDirectoryMainController
return $panel;
}
private function buildAppPanel() {
require_celerity_resource('phabricator-app-buttons-css');
$nav_buttons = array();
$nav_buttons[] = array(
'Differential',
'/differential/',
'differential',
'Code Reviews');
if (PhabricatorEnv::getEnvConfig('maniphest.enabled')) {
$nav_buttons[] = array(
'Maniphest',
'/maniphest/',
'maniphest',
'Tasks');
$nav_buttons[] = array(
'Create Task',
'/maniphest/task/create/',
'create-task');
}
$nav_buttons[] = array(
'Upload File',
'/file/upload/',
'upload-file',
'Share Files');
$nav_buttons[] = array(
'Create Paste',
'/paste/create/',
'create-paste',
'Share Text');
if (PhabricatorEnv::getEnvConfig('phriction.enabled')) {
$nav_buttons[] = array(
'Phriction',
'/w/',
'phriction',
'Browse Wiki');
}
$nav_buttons[] = array(
'Diffusion',
'/diffusion/',
'diffusion',
'Browse Code');
$nav_buttons[] = array(
'Audit',
'/audit/',
'audit',
'Audit Code');
$view = new AphrontNullView();
$view->appendChild('<div class="phabricator-app-buttons">');
foreach ($nav_buttons as $info) {
// Subtitle is optional.
list($name, $uri, $icon, $subtitle) = array_merge($info, array(null));
if ($subtitle) {
$subtitle =
'<div class="phabricator-app-subtitle">'.
phutil_escape_html($subtitle).
'</div>';
}
$button = phutil_render_tag(
'a',
array(
'href' => $uri,
'class' => 'app-button icon-'.$icon,
),
phutil_render_tag(
'div',
array(
'class' => 'app-icon icon-'.$icon,
),
''));
$caption = phutil_render_tag(
'a',
array(
'href' => $uri,
'class' => 'phabricator-button-caption',
),
phutil_escape_html($name).$subtitle);
$view->appendChild(
'<div class="phabricator-app-button">'.
$button.
$caption.
'</div>');
}
$view->appendChild('<div style="clear: both;"></div></div>');
return $view;
}
private function renderMiniPanel($title, $body) {
$panel = new AphrontMiniPanelView();
$panel->appendChild(

View File

@@ -15,11 +15,7 @@ final class PhabricatorApplicationApplications extends PhabricatorApplication {
}
public function getRoutes() {
return array(
'/applications/' => array(
'' => 'PhabricatorApplicationsListController'
),
);
return array();
}
public function getTitleGlyph() {

View File

@@ -1,59 +0,0 @@
<?php
final class PhabricatorApplicationsListController
extends PhabricatorController {
public function processRequest() {
$request = $this->getRequest();
$user = $request->getUser();
$applications = PhabricatorApplication::getAllInstalledApplications();
foreach ($applications as $key => $application) {
if (!$application->shouldAppearInLaunchView()) {
unset($applications[$key]);
}
}
$groups = PhabricatorApplication::getApplicationGroups();
$applications = msort($applications, 'getApplicationOrder');
$applications = mgroup($applications, 'getApplicationGroup');
$applications = array_select_keys($applications, array_keys($groups));
$view = array();
foreach ($applications as $group => $application_list) {
$status = array();
foreach ($application_list as $key => $application) {
$status[$key] = $application->loadStatus($user);
}
$views = array();
foreach ($application_list as $key => $application) {
$views[] = id(new PhabricatorApplicationLaunchView())
->setApplication($application)
->setApplicationStatus(idx($status, $key, array()))
->setUser($user);
}
$view[] = id(new PhabricatorHeaderView())
->setHeader($groups[$group]);
$view[] = phutil_render_tag(
'div',
array(
'class' => 'phabricator-application-list',
),
id(new AphrontNullView())->appendChild($views)->render());
}
return $this->buildApplicationPage(
$view,
array(
'title' => 'Applications',
'device' => true,
));
}
}

View File

@@ -19,79 +19,60 @@ final class PhabricatorApplicationLaunchView extends AphrontView {
$application = $this->application;
require_celerity_resource('phabricator-application-launch-view-css');
require_celerity_resource('sprite-apps-xlarge-css');
require_celerity_resource('sprite-apps-large-css');
$content = array();
$content[] = phutil_render_tag(
'span',
array(
'class' => 'phabricator-application-launch-name',
),
phutil_escape_html($application->getName()));
$content[] = phutil_render_tag(
'span',
array(
'class' => 'phabricator-application-launch-description',
),
phutil_escape_html($application->getShortDescription()));
$count = 0;
$content[] = '<span class="phabricator-application-status-block">';
if ($this->status) {
foreach ($this->status as $status) {
$count += $status->getCount();
$content[] = $status;
}
} else {
$flavor = $application->getFlavorText();
if ($flavor !== null) {
$content[] = phutil_render_tag(
'span',
array(
'class' => 'phabricator-application-flavor-text',
),
phutil_escape_html($flavor));
}
}
$content[] = '</span>';
if ($count) {
$icon = null;
if ($application) {
$content[] = phutil_render_tag(
'span',
array(
'class' => 'phabricator-application-launch-attention',
'class' => 'phabricator-application-launch-name',
),
phutil_escape_html($count));
phutil_escape_html($application->getName()));
$count = 0;
if ($this->status) {
foreach ($this->status as $status) {
$count += $status->getCount();
}
}
if ($count) {
$content[] = phutil_render_tag(
'span',
array(
'class' => 'phabricator-application-launch-attention',
),
phutil_escape_html($count));
}
$classes = array();
$classes[] = 'phabricator-application-launch-icon';
$styles = array();
if ($application->getIconURI()) {
$styles[] = 'background-image: url('.$application->getIconURI().')';
} else {
$icon = $application->getIconName();
$classes[] = 'sprite-apps-large';
$classes[] = 'app-'.$icon.'-light-large';
}
$icon = phutil_render_tag(
'span',
array(
'class' => implode(' ', $classes),
'style' => nonempty(implode('; ', $styles), null),
),
'');
}
$classes = array();
$classes[] = 'phabricator-application-launch-icon';
$styles = array();
if ($application->getIconURI()) {
$styles[] = 'background-image: url('.$application->getIconURI().')';
} else {
$icon = $application->getIconName();
$classes[] = 'sprite-apps-xlarge';
$classes[] = 'app-'.$icon.'-dark-xlarge';
}
$icon = phutil_render_tag(
'span',
array(
'class' => implode(' ', $classes),
'style' => nonempty(implode('; ', $styles), null),
),
'');
return phutil_render_tag(
'a',
$application ? 'a' : 'div',
array(
'class' => 'phabricator-application-launch-container',
'href' => $application->getBaseURI(),
'href' => $application ? $application->getBaseURI() : null,
),
$icon.
$this->renderSingleView($content));

View File

@@ -3,7 +3,7 @@
final class PhabricatorApplicationPHID extends PhabricatorApplication {
public function getName() {
return 'PHID Manager';
return 'PHIDs';
}
public function getBaseURI() {

View File

@@ -24,6 +24,12 @@ final class AphrontSideNavFilterView extends AphrontView {
private $active;
private $menu;
private $crumbs;
private $classes = array();
public function addClass($class) {
$this->classes[] = $class;
return $this;
}
public function __construct() {
$this->menu = new PhabricatorMenuView();
@@ -230,6 +236,8 @@ final class AphrontSideNavFilterView extends AphrontView {
}
}
$nav_classes = array_merge($nav_classes, $this->classes);
return phutil_render_tag(
'div',
array(