1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-11-22 14:52:41 +01:00

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

@ -31,7 +31,8 @@ $sheets = array(
'menu' => $generator->buildMenuSheet(), 'menu' => $generator->buildMenuSheet(),
'apps' => $generator->buildAppsSheet(), 'apps' => $generator->buildAppsSheet(),
'apps-large' => $generator->buildAppsLargeSheet(), 'apps-large' => $generator->buildAppsLargeSheet(),
'apps-xlarge' => $generator->buildAppsXLargeSheet(), // TODO: @chad: should we actually remove this?
// 'apps-xlarge' => $generator->buildAppsXLargeSheet(),
'gradient' => $generator->buildGradientSheet(), 'gradient' => $generator->buildGradientSheet(),
); );

View file

@ -74,7 +74,6 @@ $package_spec = array(
'phabricator-directory-css', 'phabricator-directory-css',
'phabricator-jump-nav', 'phabricator-jump-nav',
'phabricator-app-buttons-css',
'phabricator-remarkup-css', 'phabricator-remarkup-css',
'syntax-highlighting-css', 'syntax-highlighting-css',

View file

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

View file

@ -648,7 +648,6 @@ phutil_register_library_map(array(
'PhabricatorApplicationTransactionView' => 'applications/transactions/view/PhabricatorApplicationTransactionView.php', 'PhabricatorApplicationTransactionView' => 'applications/transactions/view/PhabricatorApplicationTransactionView.php',
'PhabricatorApplicationTransactions' => 'applications/transactions/application/PhabricatorApplicationTransactions.php', 'PhabricatorApplicationTransactions' => 'applications/transactions/application/PhabricatorApplicationTransactions.php',
'PhabricatorApplicationUIExamples' => 'applications/uiexample/application/PhabricatorApplicationUIExamples.php', 'PhabricatorApplicationUIExamples' => 'applications/uiexample/application/PhabricatorApplicationUIExamples.php',
'PhabricatorApplicationsListController' => 'applications/meta/controller/PhabricatorApplicationsListController.php',
'PhabricatorAuditActionConstants' => 'applications/audit/constants/PhabricatorAuditActionConstants.php', 'PhabricatorAuditActionConstants' => 'applications/audit/constants/PhabricatorAuditActionConstants.php',
'PhabricatorAuditAddCommentController' => 'applications/audit/controller/PhabricatorAuditAddCommentController.php', 'PhabricatorAuditAddCommentController' => 'applications/audit/controller/PhabricatorAuditAddCommentController.php',
'PhabricatorAuditComment' => 'applications/audit/storage/PhabricatorAuditComment.php', 'PhabricatorAuditComment' => 'applications/audit/storage/PhabricatorAuditComment.php',
@ -2022,7 +2021,6 @@ phutil_register_library_map(array(
'PhabricatorApplicationTransactionView' => 'AphrontView', 'PhabricatorApplicationTransactionView' => 'AphrontView',
'PhabricatorApplicationTransactions' => 'PhabricatorApplication', 'PhabricatorApplicationTransactions' => 'PhabricatorApplication',
'PhabricatorApplicationUIExamples' => 'PhabricatorApplication', 'PhabricatorApplicationUIExamples' => 'PhabricatorApplication',
'PhabricatorApplicationsListController' => 'PhabricatorController',
'PhabricatorAuditAddCommentController' => 'PhabricatorAuditController', 'PhabricatorAuditAddCommentController' => 'PhabricatorAuditController',
'PhabricatorAuditComment' => 'PhabricatorAuditComment' =>
array( array(

View file

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

View file

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

View file

@ -21,11 +21,51 @@ abstract class PhabricatorDirectoryController extends PhabricatorController {
$nav = new AphrontSideNavFilterView(); $nav = new AphrontSideNavFilterView();
$nav->setBaseURI(new PhutilURI('/')); $nav->setBaseURI(new PhutilURI('/'));
$nav->addLabel('Phabricator'); $applications = PhabricatorApplication::getAllInstalledApplications();
$nav->addFilter('home', 'Tactical Command', '/');
$nav->addFilter('jump', 'Jump Nav'); foreach ($applications as $key => $application) {
$nav->addFilter('feed', 'Feed'); if (!$application->shouldAppearInLaunchView()) {
$nav->addFilter('applications', 'More Stuff'); 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; return $nav;
} }

View file

@ -4,39 +4,26 @@ final class PhabricatorDirectoryMainController
extends PhabricatorDirectoryController { extends PhabricatorDirectoryController {
private $filter; private $filter;
private $subfilter;
public function willProcessRequest(array $data) { public function willProcessRequest(array $data) {
$this->filter = idx($data, 'filter'); $this->filter = idx($data, 'filter');
$this->subfilter = idx($data, 'subfilter');
} }
public function processRequest() { public function processRequest() {
$user = $this->getRequest()->getUser(); $user = $this->getRequest()->getUser();
if ($this->filter == 'jump') {
return $this->buildJumpResponse();
}
$nav = $this->buildNav(); $nav = $this->buildNav();
$this->filter = $nav->selectFilter($this->filter, 'home');
switch ($this->filter) { $project_query = new PhabricatorProjectQuery();
case 'jump': $project_query->setViewer($user);
break; $project_query->withMemberPHIDs(array($user->getPHID()));
case 'home': $projects = $project_query->execute();
$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);
}
return $this->buildMainResponse($nav, $projects);
} }
private function buildMainResponse($nav, array $projects) { private function buildMainResponse($nav, array $projects) {
@ -56,12 +43,10 @@ final class PhabricatorDirectoryMainController
$jump_panel = $this->buildJumpPanel(); $jump_panel = $this->buildJumpPanel();
$revision_panel = $this->buildRevisionPanel(); $revision_panel = $this->buildRevisionPanel();
$app_panel = $this->buildAppPanel();
$audit_panel = $this->buildAuditPanel(); $audit_panel = $this->buildAuditPanel();
$commit_panel = $this->buildCommitPanel(); $commit_panel = $this->buildCommitPanel();
$content = array( $content = array(
$app_panel,
$jump_panel, $jump_panel,
$unbreak_panel, $unbreak_panel,
$triage_panel, $triage_panel,
@ -82,7 +67,7 @@ final class PhabricatorDirectoryMainController
)); ));
} }
private function buildJumpResponse($nav) { private function buildJumpResponse() {
$request = $this->getRequest(); $request = $this->getRequest();
$jump = $request->getStr('jump'); $jump = $request->getStr('jump');
@ -97,15 +82,9 @@ final class PhabricatorDirectoryMainController
return id(new AphrontRedirectResponse()) return id(new AphrontRedirectResponse())
->setURI('/search/'.$query->getQueryKey().'/'); ->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() { private function buildUnbreakNowPanel() {
@ -389,105 +368,6 @@ final class PhabricatorDirectoryMainController
return $panel; 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) { private function renderMiniPanel($title, $body) {
$panel = new AphrontMiniPanelView(); $panel = new AphrontMiniPanelView();
$panel->appendChild( $panel->appendChild(

View file

@ -15,11 +15,7 @@ final class PhabricatorApplicationApplications extends PhabricatorApplication {
} }
public function getRoutes() { public function getRoutes() {
return array( return array();
'/applications/' => array(
'' => 'PhabricatorApplicationsListController'
),
);
} }
public function getTitleGlyph() { 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; $application = $this->application;
require_celerity_resource('phabricator-application-launch-view-css'); 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 = array();
$content[] = phutil_render_tag( $icon = null;
'span', if ($application) {
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) {
$content[] = phutil_render_tag( $content[] = phutil_render_tag(
'span', 'span',
array( 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( return phutil_render_tag(
'a', $application ? 'a' : 'div',
array( array(
'class' => 'phabricator-application-launch-container', 'class' => 'phabricator-application-launch-container',
'href' => $application->getBaseURI(), 'href' => $application ? $application->getBaseURI() : null,
), ),
$icon. $icon.
$this->renderSingleView($content)); $this->renderSingleView($content));

View file

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

View file

@ -24,6 +24,12 @@ final class AphrontSideNavFilterView extends AphrontView {
private $active; private $active;
private $menu; private $menu;
private $crumbs; private $crumbs;
private $classes = array();
public function addClass($class) {
$this->classes[] = $class;
return $this;
}
public function __construct() { public function __construct() {
$this->menu = new PhabricatorMenuView(); $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( return phutil_render_tag(
'div', 'div',
array( array(

View file

@ -6,13 +6,21 @@
cursor: col-resize; cursor: col-resize;
} }
.phabricator-nav {
/* Force top margins in page content not to collapse with the top margin of
the navigation container by giving it padding. Then put it in the right
position by undoing the padding with a margin. */
padding-top: 1px;
margin-top: -1px;
}
.phabricator-nav-column-background { .phabricator-nav-column-background {
position: fixed; position: fixed;
top: 0; top: 0;
left: 0; left: 0;
bottom: 0; bottom: 0;
width: 205px; width: 205px;
background: #ececec; background: #252b2d;
box-shadow: inset -3px 0 4px rgba(0, 0, 0, 0.05); box-shadow: inset -3px 0 4px rgba(0, 0, 0, 0.05);
background-image: url(/rsrc/image/menu_texture.png); background-image: url(/rsrc/image/menu_texture.png);
} }
@ -66,3 +74,12 @@
.device-desktop .has-local-nav .phabricator-nav-content { .device-desktop .has-local-nav .phabricator-nav-content {
margin-left: 205px; margin-left: 205px;
} }
.phabricator-side-menu-home .phabricator-nav-column-background,
.phabricator-side-menu-home .phabricator-nav-local {
width: 320px;
}
.device-desktop .phabricator-side-menu-home .phabricator-nav-content {
margin-left: 320px;
}

View file

@ -9,16 +9,9 @@
*/ */
/* On desktops, put some space around the whole grid. */
.device-desktop .phabricator-application-list {
padding: 0 0 20px 20px;
}
/* On tablets, show two columns in the center. */ .application-tile-group {
.device-tablet .phabricator-application-list { overflow: hidden;
width: 660px;
margin: auto;
padding: .5em 0;
} }
@ -28,31 +21,25 @@
*/ */
a.phabricator-application-launch-container { a.phabricator-application-launch-container,
display: inline-block; div.phabricator-application-launch-container {
width: 220px; display: block;
min-height: 90px; float: left;
padding: 12px 15px 10px 75px; width: 78px;
margin: 3px 6px; height: 78px;
overflow: hidden; overflow: hidden;
position: relative; position: relative;
text-decoration: none; text-decoration: none;
border: 1px solid #a7a8aa;
background-color: #f3f3f3;
border-radius: 3px; border: 1px solid #080909;
box-shadow: 0px 1px 2px #ccc;
} }
a.phabricator-application-launch-container:hover { a.phabricator-application-launch-container:hover {
text-decoration: none; text-decoration: none;
} }
a.phabricator-application-launch-container:active {
box-shadow: inset 0 0px 3px rgba(0, 0, 0, 0.9);
}
/* The hover effect looks awful on phones/tablets when scrolling. */ /* The hover effect looks awful on phones/tablets when scrolling. */
.device-desktop a.phabricator-application-launch-container:hover { .device-desktop a.phabricator-application-launch-container:hover {
background-color: #638ed3; background-color: #638ed3;
@ -60,92 +47,34 @@ a.phabricator-application-launch-container:active {
color: #fff; color: #fff;
} }
.phabricator-application-launch-name,
.phabricator-application-launch-description,
.phabricator-application-launch-status {
display: block;
}
.phabricator-application-launch-icon { .phabricator-application-launch-icon {
display: block; display: block;
position: absolute; position: absolute;
left: 10px; left: 25px;
top: 10px; top: 15px;
width: 56px; width: 28px;
height: 56px; height: 28px;
background-repeat: no-repeat;
} }
.phabricator-application-launch-name { .phabricator-application-launch-name {
display: block;
margin-top: 50px;
font-weight: bold; font-weight: bold;
font-size: 14px; font-size: 11px;
padding-bottom: 2px text-align: center;
} color: #ffffff;
text-shadow: 0px 1px 1px #000000;
.phabricator-application-launch-description {
color: #888;
font-size: 12px
}
.device-desktop a.phabricator-application-launch-container:hover
.phabricator-application-launch-description {
color: #dddddd;
} }
.phabricator-application-launch-attention { .phabricator-application-launch-attention {
position: absolute; position: absolute;
left: 45px; right: 4px;
top: 10px; top: 4px;
background: #ff0000; background: #ff0000;
border-radius: 10px; border-radius: 10px;
color: white; color: white;
font-weight: normal; font-weight: bold;
padding: 2px 6px; padding: 1px 6px 2px;
border: 1px solid #aa0000; border: 1px solid #aa0000;
box-shadow: 0px 0px 3px rgba(255, 255, 255, 0.5), font-size: 12px;
inset 0 0 3px #aa0000;
}
.phabricator-application-status-block {
margin-top: 0.5em;
padding-top: 0.5em;
border-top: 1px solid #dfdfdf;
display: block;
}
.phabricator-application-flavor-text,
.phabricator-application-status {
float: left;
display: block;
position: relative;
font-size: 11px;
color: #666666;
}
.phabricator-application-status {
height: 20px;
padding-left: 22px;
background-repeat: no-repeat;
background-size: 16px auto;
padding-top: 1px;
}
.device-desktop a.phabricator-application-launch-container:hover
.phabricator-application-status,
.device-desktop a.phabricator-application-launch-container:hover
.phabricator-application-flavor-text {
color: #eeeeee;
}
.phabricator-application-status-type-needs {
background-image: url(/rsrc/image/appstatus_needs.png);
}
.phabricator-application-status-type-empty {
background-image: url(/rsrc/image/appstatus_empty.png);
}
.phabricator-application-status-type-info {
background-image: url(/rsrc/image/appstatus_info.png);
} }

View file

@ -1,97 +0,0 @@
/**
* @provides phabricator-app-buttons-css
*/
.phabricator-app-buttons {
padding: 2em 3em 0em;
}
.phabricator-app-button {
display: block;
float: left;
margin-right: 8px;
margin-bottom: 8px;
text-align: center;
}
.phabricator-app-button .app-button {
display: block;
margin: 0px 10px 4px;
background: #5e77aa;
cursor: pointer;
background-color: #e9ecec;
border: 1px solid #999;
border-bottom-color: #888;
box-shadow: 0px 1px 0px rgba(0, 0, 0, 0.07),
inset 1px 1px 2px rgba(255, 255, 255, 0.80),
inset -1px -1px 3px rgba(0, 0, 0, 0.20);
border-radius: 6px;
}
.phabricator-app-button .app-button:active {
background-color: #dddddd;
background-image: none;
border-bottom-color: #999;
}
a.phabricator-button-caption,
a.phabricator-button-caption:link,
a.phabricator-button-caption:active,
a.phabricator-button-caption:hover,
a.phabricator-button-caption:visited {
white-space: nowrap;
overflow: hidden;
text-align: center;
font-size: 11px;
padding: 3px 0;
font-weight: bold;
}
.phabricator-app-subtitle {
color: #888888;
font-weight: normal;
}
.app-icon {
position: relative;
width: 50px;
height: 50px;
margin: 5px;
background: url('/rsrc/image/apps.png') 0 0 no-repeat;
}
.icon-differential {
background-position: 0 0;
}
.icon-maniphest {
background-position: 0 -50px;
}
.icon-create-task {
background-position: 0 -100px;
}
.icon-upload-file {
background-position: 0 -150px;
}
.icon-create-paste {
background-position: 0 -200px;
}
.icon-phriction {
background-position: 0 -250px;
}
.icon-diffusion {
background-position: 0 -300px;
}
.icon-audit {
background-position: 0 -350px;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 774 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 690 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 719 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 476 B