Page MenuHomePhabricator

D17259.id41544.diff
No OneTemporary

D17259.id41544.diff

diff --git a/resources/celerity/map.php b/resources/celerity/map.php
--- a/resources/celerity/map.php
+++ b/resources/celerity/map.php
@@ -9,8 +9,8 @@
'names' => array(
'conpherence.pkg.css' => 'e25569a9',
'conpherence.pkg.js' => '6249a1cf',
- 'core.pkg.css' => 'ea0e9c0c',
- 'core.pkg.js' => '2291d3b2',
+ 'core.pkg.css' => '7c03a3b0',
+ 'core.pkg.js' => 'f1e0e26f',
'darkconsole.pkg.js' => 'e7393ebb',
'differential.pkg.css' => '4815647b',
'differential.pkg.js' => 'ddfeb49b',
@@ -29,15 +29,14 @@
'rsrc/css/aphront/phabricator-nav-view.css' => 'b29426e9',
'rsrc/css/aphront/table-view.css' => '3225137a',
'rsrc/css/aphront/tokenizer.css' => '9a8cb501',
- 'rsrc/css/aphront/tooltip.css' => '1a07aea8',
+ 'rsrc/css/aphront/tooltip.css' => '3f325821',
'rsrc/css/aphront/typeahead-browse.css' => '8904346a',
'rsrc/css/aphront/typeahead.css' => 'd4f16145',
'rsrc/css/application/almanac/almanac.css' => 'dbb9b3af',
'rsrc/css/application/auth/auth.css' => '0877ed6e',
- 'rsrc/css/application/base/main-menu-view.css' => '8eac4166',
+ 'rsrc/css/application/base/main-menu-view.css' => '93519cb0',
'rsrc/css/application/base/notification-menu.css' => '6a697e43',
- 'rsrc/css/application/base/phabricator-application-launch-view.css' => '95351601',
- 'rsrc/css/application/base/phui-theme.css' => '798c69b8',
+ 'rsrc/css/application/base/phui-theme.css' => '9f261c6b',
'rsrc/css/application/base/standard-page-view.css' => '894d8a25',
'rsrc/css/application/chatlog/chatlog.css' => 'd295b020',
'rsrc/css/application/conduit/conduit-api.css' => '7bc725c4',
@@ -102,7 +101,7 @@
'rsrc/css/application/releeph/releeph-preview-branch.css' => 'b7a6f4a5',
'rsrc/css/application/releeph/releeph-request-differential-create-dialog.css' => '8d8b92cd',
'rsrc/css/application/releeph/releeph-request-typeahead.css' => '667a48ae',
- 'rsrc/css/application/search/application-search-view.css' => '8452c849',
+ 'rsrc/css/application/search/application-search-view.css' => '20ae9d85',
'rsrc/css/application/search/search-results.css' => '64ad079a',
'rsrc/css/application/slowvote/slowvote.css' => 'a94b7230',
'rsrc/css/application/tokens/tokens.css' => '3d0f239e',
@@ -131,9 +130,9 @@
'rsrc/css/phui/phui-action-list.css' => '5679229f',
'rsrc/css/phui/phui-action-panel.css' => '91c7b835',
'rsrc/css/phui/phui-badge.css' => '3baef8db',
- 'rsrc/css/phui/phui-basic-nav-view.css' => '7093573b',
+ 'rsrc/css/phui/phui-basic-nav-view.css' => 'cb4d5161',
'rsrc/css/phui/phui-big-info-view.css' => 'bd903741',
- 'rsrc/css/phui/phui-box.css' => '33b629f8',
+ 'rsrc/css/phui/phui-box.css' => '3df736e5',
'rsrc/css/phui/phui-button.css' => '00ddac15',
'rsrc/css/phui/phui-chart.css' => '6bf6f78e',
'rsrc/css/phui/phui-cms.css' => 'be43c8a8',
@@ -162,17 +161,16 @@
'rsrc/css/phui/phui-object-box.css' => '8b289e3d',
'rsrc/css/phui/phui-pager.css' => 'bea33d23',
'rsrc/css/phui/phui-pinboard-view.css' => '2495140e',
- 'rsrc/css/phui/phui-profile-menu.css' => 'c71ecdcd',
'rsrc/css/phui/phui-property-list-view.css' => '6d8e58ac',
'rsrc/css/phui/phui-remarkup-preview.css' => '1a8f2591',
- 'rsrc/css/phui/phui-segment-bar-view.css' => '46342871',
+ 'rsrc/css/phui/phui-segment-bar-view.css' => 'b1d1b892',
'rsrc/css/phui/phui-spacing.css' => '042804d6',
'rsrc/css/phui/phui-status.css' => 'd5263e49',
'rsrc/css/phui/phui-tag-view.css' => '84d65f26',
'rsrc/css/phui/phui-timeline-view.css' => 'bc523970',
'rsrc/css/phui/phui-two-column-view.css' => 'f63cad3c',
- 'rsrc/css/phui/workboards/phui-workboard-color.css' => 'b60ef38a',
- 'rsrc/css/phui/workboards/phui-workboard.css' => 'c88912ee',
+ 'rsrc/css/phui/workboards/phui-workboard-color.css' => 'f0551a33',
+ 'rsrc/css/phui/workboards/phui-workboard.css' => '3bc85455',
'rsrc/css/phui/workboards/phui-workcard.css' => 'cca5fa92',
'rsrc/css/phui/workboards/phui-workpanel.css' => 'a3a63478',
'rsrc/css/sprite-login.css' => '587d92d7',
@@ -488,7 +486,7 @@
'rsrc/js/core/ShapedRequest.js' => '7cbe244b',
'rsrc/js/core/TextAreaUtils.js' => '320810c8',
'rsrc/js/core/Title.js' => '485aaa6c',
- 'rsrc/js/core/ToolTip.js' => 'b5c62c3b',
+ 'rsrc/js/core/ToolTip.js' => 'd02f7181',
'rsrc/js/core/behavior-active-nav.js' => 'e379b58e',
'rsrc/js/core/behavior-audio-source.js' => '59b251eb',
'rsrc/js/core/behavior-autofocus.js' => '7319e029',
@@ -529,7 +527,7 @@
'rsrc/js/core/behavior-time-typeahead.js' => '522431f7',
'rsrc/js/core/behavior-toggle-class.js' => '92b9ec77',
'rsrc/js/core/behavior-tokenizer.js' => 'b3a4b884',
- 'rsrc/js/core/behavior-tooltip.js' => '42fcb747',
+ 'rsrc/js/core/behavior-tooltip.js' => 'c420b0b9',
'rsrc/js/core/behavior-user-menu.js' => '31420f77',
'rsrc/js/core/behavior-watch-anchor.js' => '9f36c42d',
'rsrc/js/core/behavior-workflow.js' => '0a3f3021',
@@ -555,9 +553,9 @@
'aphront-panel-view-css' => '8427b78d',
'aphront-table-view-css' => '3225137a',
'aphront-tokenizer-control-css' => '9a8cb501',
- 'aphront-tooltip-css' => '1a07aea8',
+ 'aphront-tooltip-css' => '3f325821',
'aphront-typeahead-control-css' => 'd4f16145',
- 'application-search-view-css' => '8452c849',
+ 'application-search-view-css' => '20ae9d85',
'auth-css' => '0877ed6e',
'bulk-job-css' => 'df9c1d4a',
'changeset-view-manager' => 'a2828756',
@@ -681,7 +679,7 @@
'javelin-behavior-phabricator-reveal-content' => '60821bc7',
'javelin-behavior-phabricator-search-typeahead' => '06c32383',
'javelin-behavior-phabricator-show-older-transactions' => '94c65b72',
- 'javelin-behavior-phabricator-tooltips' => '42fcb747',
+ 'javelin-behavior-phabricator-tooltips' => 'c420b0b9',
'javelin-behavior-phabricator-transaction-comment-form' => 'b23b49e6',
'javelin-behavior-phabricator-transaction-list' => '13c739ea',
'javelin-behavior-phabricator-watch-anchor' => '9f36c42d',
@@ -781,7 +779,6 @@
'path-typeahead' => 'f7fc67ec',
'people-profile-css' => '2473d929',
'phabricator-action-list-view-css' => '5679229f',
- 'phabricator-application-launch-view-css' => '95351601',
'phabricator-busy' => '59a7976a',
'phabricator-chatlog-css' => 'd295b020',
'phabricator-content-source-view-css' => '4b8b05d4',
@@ -798,7 +795,7 @@
'phabricator-flag-css' => 'bba8f811',
'phabricator-keyboard-shortcut' => '1ae869f2',
'phabricator-keyboard-shortcut-manager' => '4a021c10',
- 'phabricator-main-menu-view' => '8eac4166',
+ 'phabricator-main-menu-view' => '93519cb0',
'phabricator-nav-view-css' => 'b29426e9',
'phabricator-notification' => 'ccf1cbf8',
'phabricator-notification-css' => '3f6c89c9',
@@ -814,7 +811,7 @@
'phabricator-standard-page-view' => '894d8a25',
'phabricator-textareautils' => '320810c8',
'phabricator-title' => '485aaa6c',
- 'phabricator-tooltip' => 'b5c62c3b',
+ 'phabricator-tooltip' => 'd02f7181',
'phabricator-ui-example-css' => '528b19de',
'phabricator-uiexample-javelin-view' => 'd4a14807',
'phabricator-uiexample-reactor-button' => 'd19198c8',
@@ -839,9 +836,9 @@
'phriction-document-css' => '4282e4ad',
'phui-action-panel-css' => '91c7b835',
'phui-badge-view-css' => '3baef8db',
- 'phui-basic-nav-view-css' => '7093573b',
+ 'phui-basic-nav-view-css' => 'cb4d5161',
'phui-big-info-view-css' => 'bd903741',
- 'phui-box-css' => '33b629f8',
+ 'phui-box-css' => '3df736e5',
'phui-button-css' => '00ddac15',
'phui-calendar-css' => '477acfaa',
'phui-calendar-day-css' => '572b1893',
@@ -883,18 +880,17 @@
'phui-oi-simple-ui-css' => 'a8beebea',
'phui-pager-css' => 'bea33d23',
'phui-pinboard-view-css' => '2495140e',
- 'phui-profile-menu-css' => 'c71ecdcd',
'phui-property-list-view-css' => '6d8e58ac',
'phui-remarkup-preview-css' => '1a8f2591',
- 'phui-segment-bar-view-css' => '46342871',
+ 'phui-segment-bar-view-css' => 'b1d1b892',
'phui-spacing-css' => '042804d6',
'phui-status-list-view-css' => 'd5263e49',
'phui-tag-view-css' => '84d65f26',
- 'phui-theme-css' => '798c69b8',
+ 'phui-theme-css' => '9f261c6b',
'phui-timeline-view-css' => 'bc523970',
'phui-two-column-view-css' => 'f63cad3c',
- 'phui-workboard-color-css' => 'b60ef38a',
- 'phui-workboard-view-css' => 'c88912ee',
+ 'phui-workboard-color-css' => 'f0551a33',
+ 'phui-workboard-view-css' => '3bc85455',
'phui-workcard-view-css' => 'cca5fa92',
'phui-workpanel-view-css' => 'a3a63478',
'phuix-action-list-view' => 'b5c256b8',
@@ -1178,12 +1174,6 @@
'javelin-dom',
'javelin-request',
),
- '42fcb747' => array(
- 'javelin-behavior',
- 'javelin-behavior-device',
- 'javelin-stratcom',
- 'phabricator-tooltip',
- ),
'44959b73' => array(
'javelin-util',
'javelin-uri',
@@ -1612,9 +1602,6 @@
'javelin-stratcom',
'javelin-util',
),
- '8eac4166' => array(
- 'phui-theme-css',
- ),
'8ff5e24c' => array(
'javelin-behavior',
'javelin-stratcom',
@@ -1636,6 +1623,9 @@
'javelin-stratcom',
'javelin-dom',
),
+ '93519cb0' => array(
+ 'phui-theme-css',
+ ),
'93ae974f' => array(
'javelin-behavior',
'javelin-dom',
@@ -1888,12 +1878,6 @@
'javelin-install',
'javelin-dom',
),
- 'b5c62c3b' => array(
- 'javelin-install',
- 'javelin-util',
- 'javelin-dom',
- 'javelin-vector',
- ),
'b5d57730' => array(
'javelin-install',
'javelin-stratcom',
@@ -1969,6 +1953,12 @@
'javelin-install',
'javelin-dom',
),
+ 'c420b0b9' => array(
+ 'javelin-behavior',
+ 'javelin-behavior-device',
+ 'javelin-stratcom',
+ 'phabricator-tooltip',
+ ),
'c587b80f' => array(
'javelin-install',
),
@@ -2026,6 +2016,12 @@
'cd2b9b77' => array(
'phui-oi-list-view-css',
),
+ 'd02f7181' => array(
+ 'javelin-install',
+ 'javelin-util',
+ 'javelin-dom',
+ 'javelin-vector',
+ ),
'd0c516d5' => array(
'javelin-behavior',
'javelin-dom',
@@ -2318,8 +2314,6 @@
'phui-spacing-css',
'phui-form-css',
'phui-icon-view-css',
- 'phui-profile-menu-css',
- 'phabricator-application-launch-view-css',
'phabricator-action-list-view-css',
'phui-property-list-view-css',
'phui-tag-view-css',
diff --git a/resources/celerity/packages.php b/resources/celerity/packages.php
--- a/resources/celerity/packages.php
+++ b/resources/celerity/packages.php
@@ -130,9 +130,7 @@
'phui-spacing-css',
'phui-form-css',
'phui-icon-view-css',
- 'phui-profile-menu-css',
- 'phabricator-application-launch-view-css',
'phabricator-action-list-view-css',
'phui-property-list-view-css',
'phui-tag-view-css',
diff --git a/resources/sql/autopatches/20170131.dashboard.personal.01.php b/resources/sql/autopatches/20170131.dashboard.personal.01.php
new file mode 100644
--- /dev/null
+++ b/resources/sql/autopatches/20170131.dashboard.personal.01.php
@@ -0,0 +1,46 @@
+<?php
+
+$table = new PhabricatorDashboard();
+$conn = $table->establishConnection('r');
+$table_name = 'dashboard_install';
+
+$search_table = new PhabricatorProfileMenuItemConfiguration();
+$search_conn = $table->establishConnection('w');
+
+$viewer = PhabricatorUser::getOmnipotentUser();
+$profile_phid = id(new PhabricatorHomeApplication())->getPHID();
+$menu_item_key = PhabricatorDashboardProfileMenuItem::MENUITEMKEY;
+
+foreach (new LiskRawMigrationIterator($conn, $table_name) as $install) {
+
+ $dashboard = id(new PhabricatorDashboardQuery())
+ ->setViewer($viewer)
+ ->withPHIDs(array($install->getDashboardPHID()))
+ ->executeOne();
+
+ if (!$dashboard) {
+ continue;
+ }
+
+ $new_phid = id(new PhabricatorProfileMenuItemConfiguration())->generatePHID();
+ $dashboardPHID = $install['dashboardPHID'];
+ $menu_item_properties = json_encode(
+ array('dashboardPHID' => $dashboard_phid, 'name' => ''));
+
+ $custom_phid = $install['objectPHID'];
+ if ($custom_phid == 'dashboard:default') {
+ $custom_phid = null;
+ }
+
+ queryfx(
+ $search_conn,
+ 'INSERT INTO %T SET phid = %s, profilePHID = %s, menuItemKey = %s,'.
+ 'menuItemProperties = %s, customPHID = %s',
+ $table->getTableName(),
+ $new_phid,
+ $profile_phid,
+ $menu_item_key,
+ $menu_item_properties,
+ $custom_phid);
+
+}
diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php
--- a/src/__phutil_library_map__.php
+++ b/src/__phutil_library_map__.php
@@ -1824,7 +1824,6 @@
'PhabricatorApplicationEditController' => 'applications/meta/controller/PhabricatorApplicationEditController.php',
'PhabricatorApplicationEditHTTPParameterHelpView' => 'applications/transactions/view/PhabricatorApplicationEditHTTPParameterHelpView.php',
'PhabricatorApplicationEmailCommandsController' => 'applications/meta/controller/PhabricatorApplicationEmailCommandsController.php',
- 'PhabricatorApplicationLaunchView' => 'applications/meta/view/PhabricatorApplicationLaunchView.php',
'PhabricatorApplicationPanelController' => 'applications/meta/controller/PhabricatorApplicationPanelController.php',
'PhabricatorApplicationProfileMenuItem' => 'applications/search/menuitem/PhabricatorApplicationProfileMenuItem.php',
'PhabricatorApplicationQuery' => 'applications/meta/query/PhabricatorApplicationQuery.php',
@@ -2835,12 +2834,13 @@
'PhabricatorHomeApplication' => 'applications/home/application/PhabricatorHomeApplication.php',
'PhabricatorHomeConstants' => 'applications/home/constants/PhabricatorHomeConstants.php',
'PhabricatorHomeController' => 'applications/home/controller/PhabricatorHomeController.php',
+ 'PhabricatorHomeLauncherProfileMenuItem' => 'applications/home/menuitem/PhabricatorHomeLauncherProfileMenuItem.php',
'PhabricatorHomeMainController' => 'applications/home/controller/PhabricatorHomeMainController.php',
'PhabricatorHomeManageProfileMenuItem' => 'applications/home/menuitem/PhabricatorHomeManageProfileMenuItem.php',
'PhabricatorHomeMenuController' => 'applications/home/controller/PhabricatorHomeMenuController.php',
'PhabricatorHomeMenuItemController' => 'applications/home/controller/PhabricatorHomeMenuItemController.php',
- 'PhabricatorHomePreferencesSettingsPanel' => 'applications/settings/panel/PhabricatorHomePreferencesSettingsPanel.php',
'PhabricatorHomeProfileMenuEngine' => 'applications/home/engine/PhabricatorHomeProfileMenuEngine.php',
+ 'PhabricatorHomeProfileMenuItem' => 'applications/home/menuitem/PhabricatorHomeProfileMenuItem.php',
'PhabricatorHovercardEngineExtension' => 'applications/search/engineextension/PhabricatorHovercardEngineExtension.php',
'PhabricatorHovercardEngineExtensionModule' => 'applications/search/engineextension/PhabricatorHovercardEngineExtensionModule.php',
'PhabricatorIDsSearchEngineExtension' => 'applications/search/engineextension/PhabricatorIDsSearchEngineExtension.php',
@@ -6708,7 +6708,6 @@
'PhabricatorApplicationEditController' => 'PhabricatorApplicationsController',
'PhabricatorApplicationEditHTTPParameterHelpView' => 'AphrontView',
'PhabricatorApplicationEmailCommandsController' => 'PhabricatorApplicationsController',
- 'PhabricatorApplicationLaunchView' => 'AphrontTagView',
'PhabricatorApplicationPanelController' => 'PhabricatorApplicationsController',
'PhabricatorApplicationProfileMenuItem' => 'PhabricatorProfileMenuItem',
'PhabricatorApplicationQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
@@ -7889,12 +7888,13 @@
'PhabricatorHomeApplication' => 'PhabricatorApplication',
'PhabricatorHomeConstants' => 'PhabricatorHomeController',
'PhabricatorHomeController' => 'PhabricatorController',
+ 'PhabricatorHomeLauncherProfileMenuItem' => 'PhabricatorProfileMenuItem',
'PhabricatorHomeMainController' => 'PhabricatorHomeController',
'PhabricatorHomeManageProfileMenuItem' => 'PhabricatorProfileMenuItem',
'PhabricatorHomeMenuController' => 'PhabricatorHomeController',
'PhabricatorHomeMenuItemController' => 'PhabricatorHomeController',
- 'PhabricatorHomePreferencesSettingsPanel' => 'PhabricatorSettingsPanel',
'PhabricatorHomeProfileMenuEngine' => 'PhabricatorProfileMenuEngine',
+ 'PhabricatorHomeProfileMenuItem' => 'PhabricatorProfileMenuItem',
'PhabricatorHovercardEngineExtension' => 'Phobject',
'PhabricatorHovercardEngineExtensionModule' => 'PhabricatorConfigModule',
'PhabricatorIDsSearchEngineExtension' => 'PhabricatorSearchEngineExtension',
diff --git a/src/applications/celerity/postprocessor/CelerityDefaultPostprocessor.php b/src/applications/celerity/postprocessor/CelerityDefaultPostprocessor.php
--- a/src/applications/celerity/postprocessor/CelerityDefaultPostprocessor.php
+++ b/src/applications/celerity/postprocessor/CelerityDefaultPostprocessor.php
@@ -209,10 +209,7 @@
'menu.profile.icon.disabled' => 'rgba(255,255,255,.4)',
'menu.main.height' => '44px',
-
'menu.profile.width' => '240px',
- 'menu.profile.width.collapsed' => '88px',
- 'menu.profile.item.height' => '46px',
);
}
diff --git a/src/applications/home/constants/PhabricatorHomeConstants.php b/src/applications/home/constants/PhabricatorHomeConstants.php
--- a/src/applications/home/constants/PhabricatorHomeConstants.php
+++ b/src/applications/home/constants/PhabricatorHomeConstants.php
@@ -3,6 +3,7 @@
final class PhabricatorHomeConstants
extends PhabricatorHomeController {
+ const ITEM_HOME = 'home.dashboard';
const ITEM_LAUNCHER = 'home.launcher';
const ITEM_MANAGE = 'home.manage.menu';
diff --git a/src/applications/home/controller/PhabricatorHomeController.php b/src/applications/home/controller/PhabricatorHomeController.php
--- a/src/applications/home/controller/PhabricatorHomeController.php
+++ b/src/applications/home/controller/PhabricatorHomeController.php
@@ -2,69 +2,48 @@
abstract class PhabricatorHomeController extends PhabricatorController {
- public function buildNav() {
- $user = $this->getRequest()->getUser();
+ private $home;
+ private $profileMenu;
- $nav = new AphrontSideNavFilterView();
- $nav->setBaseURI(new PhutilURI('/'));
+ public function buildApplicationMenu() {
+ $menu = $this->newApplicationMenu();
- $applications = id(new PhabricatorApplicationQuery())
- ->setViewer($user)
- ->withInstalled(true)
- ->withUnlisted(false)
- ->withLaunchable(true)
- ->execute();
-
- $pinned = $user->getUserSetting(
- PhabricatorPinnedApplicationsSetting::SETTINGKEY);
-
- // Force "Applications" to appear at the bottom.
- $meta_app = 'PhabricatorApplicationsApplication';
- $pinned = array_fuse($pinned);
- unset($pinned[$meta_app]);
- $pinned[$meta_app] = $meta_app;
- $applications[$meta_app] = PhabricatorApplication::getByClass($meta_app);
-
- $tiles = array();
-
- $home_app = new PhabricatorHomeApplication();
+ $profile_menu = $this->getProfileMenu();
+ if ($profile_menu) {
+ $menu->setProfileMenu($profile_menu);
+ }
- $tiles[] = id(new PhabricatorApplicationLaunchView())
- ->setApplication($home_app)
- ->addClass('phabricator-application-launch-phone-only')
- ->setUser($user);
+ return $menu;
+ }
- foreach ($pinned as $pinned_application) {
- if (empty($applications[$pinned_application])) {
- continue;
+ protected function getProfileMenu() {
+ if (!$this->profileMenu) {
+ $viewer = $this->getViewer();
+ $applications = id(new PhabricatorApplicationQuery())
+ ->setViewer($viewer)
+ ->withClasses(array('PhabricatorHomeApplication'))
+ ->withInstalled(true)
+ ->execute();
+ $home = head($applications);
+ if (!$home) {
+ return null;
}
- $application = $applications[$pinned_application];
+ $engine = id(new PhabricatorHomeProfileMenuEngine())
+ ->setViewer($viewer)
+ ->setProfileObject($home);
- $tile = id(new PhabricatorApplicationLaunchView())
- ->setApplication($application)
- ->setUser($user);
+ if ($viewer->getPHID()) {
+ $engine->setCustomPHID($viewer->getPHID())
+ ->setMenuType(PhabricatorProfileMenuEngine::MENU_COMBINED);
+ } else {
+ $engine->setMenuType(PhabricatorProfileMenuEngine::MENU_GLOBAL);
+ }
- $tiles[] = $tile;
+ $this->profileMenu = $engine->buildNavigation();
}
- $nav->addCustomBlock(
- phutil_tag(
- 'div',
- array(
- 'class' => 'application-tile-group',
- ),
- $tiles));
-
- $nav->addFilter(
- '',
- pht('Customize Menu...'),
- '/settings/panel/home/');
-
- $nav->addClass('phabricator-side-menu-home');
- $nav->selectFilter(null);
-
- return $nav;
+ return $this->profileMenu;
}
}
diff --git a/src/applications/home/controller/PhabricatorHomeMainController.php b/src/applications/home/controller/PhabricatorHomeMainController.php
--- a/src/applications/home/controller/PhabricatorHomeMainController.php
+++ b/src/applications/home/controller/PhabricatorHomeMainController.php
@@ -34,19 +34,17 @@
$content = $this->buildMainResponse();
}
- if (!$request->getURIData('only')) {
- $nav = $this->buildNav();
- $nav->appendChild(
- array(
- $content,
- id(new PhabricatorGlobalUploadTargetView())->setUser($viewer),
- ));
- $content = $nav;
- }
+ $nav = $this->getProfileMenu();
+ $content =
+ array(
+ $content,
+ id(new PhabricatorGlobalUploadTargetView())->setUser($viewer),
+ );
return $this->newPage()
->setTitle('Phabricator')
->addClass('phabricator-home')
+ ->setNavigation($nav)
->appendChild($content);
}
diff --git a/src/applications/home/controller/PhabricatorHomeMenuController.php b/src/applications/home/controller/PhabricatorHomeMenuController.php
--- a/src/applications/home/controller/PhabricatorHomeMenuController.php
+++ b/src/applications/home/controller/PhabricatorHomeMenuController.php
@@ -9,6 +9,11 @@
public function handleRequest(AphrontRequest $request) {
$viewer = $request->getViewer();
+ if (!$viewer->getIsAdmin()) {
+ $uri = '/home/menu/personal/item/configure/';
+ return id(new AphrontRedirectResponse())->setURI($uri);
+ }
+
$menu = id(new PHUIObjectItemListView())
->setUser($viewer);
diff --git a/src/applications/home/controller/PhabricatorHomeMenuItemController.php b/src/applications/home/controller/PhabricatorHomeMenuItemController.php
--- a/src/applications/home/controller/PhabricatorHomeMenuItemController.php
+++ b/src/applications/home/controller/PhabricatorHomeMenuItemController.php
@@ -24,8 +24,7 @@
->setProfileObject($home_app)
->setCustomPHID($custom_phid)
->setMenuType($menu)
- ->setController($this)
- ->setShowNavigation(false);
+ ->setController($this);
return $engine->buildResponse();
}
diff --git a/src/applications/home/engine/PhabricatorHomeProfileMenuEngine.php b/src/applications/home/engine/PhabricatorHomeProfileMenuEngine.php
--- a/src/applications/home/engine/PhabricatorHomeProfileMenuEngine.php
+++ b/src/applications/home/engine/PhabricatorHomeProfileMenuEngine.php
@@ -30,6 +30,12 @@
->withLaunchable(true)
->execute();
+ // Default Home Dashboard
+ $items[] = $this->newItem()
+ ->setBuiltinKey(PhabricatorHomeConstants::ITEM_HOME)
+ ->setMenuItemKey(
+ PhabricatorHomeProfileMenuItem::MENUITEMKEY);
+
foreach ($applications as $application) {
if (!$application->isPinnedByDefault($viewer)) {
continue;
@@ -46,6 +52,12 @@
->setMenuItemProperties($properties);
}
+ // Hotlink to More Applications Launcher...
+ $items[] = $this->newItem()
+ ->setBuiltinKey(PhabricatorHomeConstants::ITEM_LAUNCHER)
+ ->setMenuItemKey(
+ PhabricatorHomeLauncherProfileMenuItem::MENUITEMKEY);
+
// Single Manage Item, switches URI based on admin/user
$items[] = $this->newItem()
->setBuiltinKey(PhabricatorHomeConstants::ITEM_MANAGE)
diff --git a/src/applications/home/menuitem/PhabricatorHomeManageProfileMenuItem.php b/src/applications/home/menuitem/PhabricatorHomeLauncherProfileMenuItem.php
copy from src/applications/home/menuitem/PhabricatorHomeManageProfileMenuItem.php
copy to src/applications/home/menuitem/PhabricatorHomeLauncherProfileMenuItem.php
--- a/src/applications/home/menuitem/PhabricatorHomeManageProfileMenuItem.php
+++ b/src/applications/home/menuitem/PhabricatorHomeLauncherProfileMenuItem.php
@@ -1,16 +1,16 @@
<?php
-final class PhabricatorHomeManageProfileMenuItem
+final class PhabricatorHomeLauncherProfileMenuItem
extends PhabricatorProfileMenuItem {
- const MENUITEMKEY = 'home.manage.menu';
+ const MENUITEMKEY = 'home.launcher.menu';
public function getMenuItemTypeName() {
- return pht('Manage Home Menu');
+ return pht('More Applications');
}
private function getDefaultName() {
- return pht('Manage');
+ return pht('More Applications');
}
public function canHideMenuItem(
@@ -50,13 +50,9 @@
$viewer = $this->getViewer();
if ($viewer->isLoggedIn()) {
- $admin = $viewer->getIsAdmin();
$name = $this->getDisplayName($config);
- $icon = 'fa-pencil';
- $href = '/home/menu/personal/item/configure/';
- if ($admin) {
- $href = '/home/menu/';
- }
+ $icon = 'fa-globe';
+ $href = '/applications/';
$item = $this->newItem()
->setHref($href)
diff --git a/src/applications/home/menuitem/PhabricatorHomeManageProfileMenuItem.php b/src/applications/home/menuitem/PhabricatorHomeManageProfileMenuItem.php
--- a/src/applications/home/menuitem/PhabricatorHomeManageProfileMenuItem.php
+++ b/src/applications/home/menuitem/PhabricatorHomeManageProfileMenuItem.php
@@ -10,7 +10,7 @@
}
private function getDefaultName() {
- return pht('Manage');
+ return pht('Edit Menu');
}
public function canHideMenuItem(
@@ -50,13 +50,9 @@
$viewer = $this->getViewer();
if ($viewer->isLoggedIn()) {
- $admin = $viewer->getIsAdmin();
$name = $this->getDisplayName($config);
$icon = 'fa-pencil';
- $href = '/home/menu/personal/item/configure/';
- if ($admin) {
- $href = '/home/menu/';
- }
+ $href = '/home/menu/';
$item = $this->newItem()
->setHref($href)
diff --git a/src/applications/home/menuitem/PhabricatorHomeManageProfileMenuItem.php b/src/applications/home/menuitem/PhabricatorHomeProfileMenuItem.php
copy from src/applications/home/menuitem/PhabricatorHomeManageProfileMenuItem.php
copy to src/applications/home/menuitem/PhabricatorHomeProfileMenuItem.php
--- a/src/applications/home/menuitem/PhabricatorHomeManageProfileMenuItem.php
+++ b/src/applications/home/menuitem/PhabricatorHomeProfileMenuItem.php
@@ -1,16 +1,16 @@
<?php
-final class PhabricatorHomeManageProfileMenuItem
+final class PhabricatorHomeProfileMenuItem
extends PhabricatorProfileMenuItem {
- const MENUITEMKEY = 'home.manage.menu';
+ const MENUITEMKEY = 'home.dashboard';
public function getMenuItemTypeName() {
- return pht('Manage Home Menu');
+ return pht('Home');
}
private function getDefaultName() {
- return pht('Manage');
+ return pht('Home');
}
public function canHideMenuItem(
@@ -20,7 +20,7 @@
public function canMakeDefault(
PhabricatorProfileMenuItemConfiguration $config) {
- return false;
+ return true;
}
public function getDisplayName(
@@ -50,13 +50,9 @@
$viewer = $this->getViewer();
if ($viewer->isLoggedIn()) {
- $admin = $viewer->getIsAdmin();
$name = $this->getDisplayName($config);
- $icon = 'fa-pencil';
- $href = '/home/menu/personal/item/configure/';
- if ($admin) {
- $href = '/home/menu/';
- }
+ $icon = 'fa-home';
+ $href = '/home/';
$item = $this->newItem()
->setHref($href)
diff --git a/src/applications/meta/view/PhabricatorApplicationLaunchView.php b/src/applications/meta/view/PhabricatorApplicationLaunchView.php
deleted file mode 100644
--- a/src/applications/meta/view/PhabricatorApplicationLaunchView.php
+++ /dev/null
@@ -1,69 +0,0 @@
-<?php
-
-final class PhabricatorApplicationLaunchView extends AphrontTagView {
-
- private $application;
-
- public function setApplication(PhabricatorApplication $application) {
- $this->application = $application;
- return $this;
- }
-
- protected function getTagName() {
- return $this->application ? 'a' : 'div';
- }
-
- protected function getTagAttributes() {
- $application = $this->application;
- return array(
- 'class' => array('phabricator-application-launch-container'),
- 'href' => $application ? $application->getBaseURI() : null,
- );
- }
-
- protected function getTagContent() {
- $application = $this->application;
-
- require_celerity_resource('phabricator-application-launch-view-css');
-
- $content = array();
- $icon = null;
- if ($application) {
- $content[] = phutil_tag(
- 'span',
- array(
- 'class' => 'phabricator-application-launch-name',
- ),
- $application->getName());
-
- $content[] = phutil_tag(
- 'span',
- array(
- 'class' => 'phabricator-application-launch-description',
- ),
- $application->getShortDescription());
-
- $classes = array();
- $classes[] = 'phabricator-application-launch-icon';
-
- $styles = array();
- $classes[] = $application->getIcon();
- $classes[] = 'phui-icon-view';
- $classes[] = 'phui-font-fa';
-
- $icon = phutil_tag(
- 'span',
- array(
- 'class' => implode(' ', $classes),
- 'style' => nonempty(implode('; ', $styles), null),
- ),
- '');
- }
-
- return array(
- $icon,
- $content,
- );
- }
-
-}
diff --git a/src/applications/people/controller/PhabricatorPeopleProfileController.php b/src/applications/people/controller/PhabricatorPeopleProfileController.php
--- a/src/applications/people/controller/PhabricatorPeopleProfileController.php
+++ b/src/applications/people/controller/PhabricatorPeopleProfileController.php
@@ -60,4 +60,63 @@
return $crumbs;
}
+ public function buildProfileHeader() {
+ $user = $this->user;
+ $viewer = $this->getViewer();
+
+ $profile = $user->loadUserProfile();
+ $picture = $user->getProfileImageURI();
+
+ $profile_icon = PhabricatorPeopleIconSet::getIconIcon($profile->getIcon());
+ $profile_title = $profile->getDisplayTitle();
+
+ $roles = array();
+ if ($user->getIsAdmin()) {
+ $roles[] = pht('Administrator');
+ }
+ if ($user->getIsDisabled()) {
+ $roles[] = pht('Disabled');
+ }
+ if (!$user->getIsApproved()) {
+ $roles[] = pht('Not Approved');
+ }
+ if ($user->getIsSystemAgent()) {
+ $roles[] = pht('Bot');
+ }
+ if ($user->getIsMailingList()) {
+ $roles[] = pht('Mailing List');
+ }
+
+ $tag = null;
+ if ($roles) {
+ $tag = id(new PHUITagView())
+ ->setName(implode(', ', $roles))
+ ->addClass('project-view-header-tag')
+ ->setType(PHUITagView::TYPE_SHADE);
+ }
+
+ $header = id(new PHUIHeaderView())
+ ->setHeader(array($user->getFullName(), $tag))
+ ->setImage($picture)
+ ->setProfileHeader(true);
+
+ if ($user->getIsDisabled()) {
+ $header->setStatus('fa-ban', 'red', pht('Disabled'));
+ } else {
+ $header->setStatus($profile_icon, 'bluegrey', $profile_title);
+ }
+
+ $can_edit = PhabricatorPolicyFilter::hasCapability(
+ $viewer,
+ $user,
+ PhabricatorPolicyCapability::CAN_EDIT);
+
+ if ($can_edit) {
+ $id = $user->getID();
+ $header->setImageEditURL($this->getApplicationURI("picture/{$id}/"));
+ }
+
+ return $header;
+ }
+
}
diff --git a/src/applications/people/controller/PhabricatorPeopleProfileManageController.php b/src/applications/people/controller/PhabricatorPeopleProfileManageController.php
--- a/src/applications/people/controller/PhabricatorPeopleProfileManageController.php
+++ b/src/applications/people/controller/PhabricatorPeopleProfileManageController.php
@@ -23,20 +23,7 @@
}
$this->setUser($user);
-
- $profile = $user->loadUserProfile();
- $picture = $user->getProfileImageURI();
-
- $profile_icon = PhabricatorPeopleIconSet::getIconIcon($profile->getIcon());
- $profile_icon = id(new PHUIIconView())
- ->setIcon($profile_icon);
- $profile_title = $profile->getDisplayTitle();
-
- $header = id(new PHUIHeaderView())
- ->setHeader($user->getFullName())
- ->setSubheader(array($profile_icon, $profile_title))
- ->setImage($picture)
- ->setProfileHeader(true);
+ $header = $this->buildProfileHeader();
$curtain = $this->buildCurtain($user);
$properties = $this->buildPropertyView($user);
@@ -51,8 +38,10 @@
$manage = id(new PHUITwoColumnView())
->setHeader($header)
+ ->addClass('project-view-home')
->setCurtain($curtain)
->addPropertySection(pht('Details'), $properties);
+ require_celerity_resource('project-view-css');
return $this->newPage()
->setTitle(
diff --git a/src/applications/people/controller/PhabricatorPeopleProfileViewController.php b/src/applications/people/controller/PhabricatorPeopleProfileViewController.php
--- a/src/applications/people/controller/PhabricatorPeopleProfileViewController.php
+++ b/src/applications/people/controller/PhabricatorPeopleProfileViewController.php
@@ -23,30 +23,7 @@
}
$this->setUser($user);
-
- $profile = $user->loadUserProfile();
- $picture = $user->getProfileImageURI();
-
- $profile_icon = PhabricatorPeopleIconSet::getIconIcon($profile->getIcon());
- $profile_icon = id(new PHUIIconView())
- ->setIcon($profile_icon);
- $profile_title = $profile->getDisplayTitle();
-
- $header = id(new PHUIHeaderView())
- ->setHeader($user->getFullName())
- ->setSubheader(array($profile_icon, $profile_title))
- ->setImage($picture)
- ->setProfileHeader(true);
-
- $can_edit = PhabricatorPolicyFilter::hasCapability(
- $viewer,
- $user,
- PhabricatorPolicyCapability::CAN_EDIT);
-
- if ($can_edit) {
- $id = $user->getID();
- $header->setImageEditURL($this->getApplicationURI("picture/{$id}/"));
- }
+ $header = $this->buildProfileHeader();
$properties = $this->buildPropertyView($user);
$name = $user->getUsername();
diff --git a/src/applications/project/application/PhabricatorProjectApplication.php b/src/applications/project/application/PhabricatorProjectApplication.php
--- a/src/applications/project/application/PhabricatorProjectApplication.php
+++ b/src/applications/project/application/PhabricatorProjectApplication.php
@@ -7,7 +7,7 @@
}
public function getShortDescription() {
- return pht('Get Organized');
+ return pht('Projects, Tags, and Teams');
}
public function isPinnedByDefault(PhabricatorUser $viewer) {
diff --git a/src/applications/project/menuitem/PhabricatorProjectPointsProfileMenuItem.php b/src/applications/project/menuitem/PhabricatorProjectPointsProfileMenuItem.php
--- a/src/applications/project/menuitem/PhabricatorProjectPointsProfileMenuItem.php
+++ b/src/applications/project/menuitem/PhabricatorProjectPointsProfileMenuItem.php
@@ -68,17 +68,16 @@
->setLimit($limit + 1)
->execute();
+ $error = array();
if (count($tasks) > $limit) {
- return $this->renderError(
+ $error[] =
pht(
- 'Too many tasks to compute statistics for (more than %s).',
- new PhutilNumber($limit)));
+ 'Too many tasks (%s).',
+ new PhutilNumber($limit));
}
if (!$tasks) {
- return $this->renderError(
- pht(
- 'This milestone has no tasks yet.'));
+ $error[] = pht('This milestone has no tasks.');
}
$statuses = array();
@@ -111,14 +110,11 @@
}
if ($no_points == count($tasks)) {
- return $this->renderError(
- pht('No tasks have assigned point values.'));
+ $error[] = pht('No tasks have points assigned.');
}
-
if (!$points_total) {
- return $this->renderError(
- pht('All tasks with assigned point values are worth zero points.'));
+ $error[] = pht('No tasks have positive points.');
}
$label = pht(
@@ -158,6 +154,10 @@
->setTooltip($tooltip);
}
+ if ($error) {
+ $bar->setLabel(head($error));
+ }
+
$bar = phutil_tag(
'div',
array(
@@ -173,20 +173,4 @@
);
}
- private function renderError($message) {
- $message = phutil_tag(
- 'div',
- array(
- 'class' => 'phui-profile-menu-error',
- ),
- $message);
-
- $item = $this->newItem()
- ->appendChild($message);
-
- return array(
- $item,
- );
- }
-
}
diff --git a/src/applications/search/menuitem/PhabricatorApplicationProfileMenuItem.php b/src/applications/search/menuitem/PhabricatorApplicationProfileMenuItem.php
--- a/src/applications/search/menuitem/PhabricatorApplicationProfileMenuItem.php
+++ b/src/applications/search/menuitem/PhabricatorApplicationProfileMenuItem.php
@@ -88,6 +88,11 @@
->setName($this->getDisplayName($config))
->setIcon($app->getIcon());
+ // Don't show tooltip if they've set a custom name
+ if (strlen(($config->getMenuItemProperty('name')))) {
+ $item->setTooltip($app->getShortDescription());
+ }
+
return array(
$item,
);
diff --git a/src/applications/settings/panel/PhabricatorHomePreferencesSettingsPanel.php b/src/applications/settings/panel/PhabricatorHomePreferencesSettingsPanel.php
deleted file mode 100644
--- a/src/applications/settings/panel/PhabricatorHomePreferencesSettingsPanel.php
+++ /dev/null
@@ -1,223 +0,0 @@
-<?php
-
-final class PhabricatorHomePreferencesSettingsPanel
- extends PhabricatorSettingsPanel {
-
- public function getPanelKey() {
- return 'home';
- }
-
- public function getPanelName() {
- return pht('Home Page');
- }
-
- public function getPanelGroupKey() {
- return PhabricatorSettingsApplicationsPanelGroup::PANELGROUPKEY;
- }
-
- public function isTemplatePanel() {
- return true;
- }
-
- public function processRequest(AphrontRequest $request) {
- $viewer = $this->getViewer();
- $preferences = $this->getPreferences();
-
- $pinned_key = PhabricatorPinnedApplicationsSetting::SETTINGKEY;
- $pinned = $preferences->getSettingValue($pinned_key);
-
- $apps = id(new PhabricatorApplicationQuery())
- ->setViewer($viewer)
- ->withInstalled(true)
- ->withUnlisted(false)
- ->withLaunchable(true)
- ->execute();
-
- $app_list = array();
- foreach ($pinned as $app) {
- if (isset($apps[$app])) {
- $app_list[$app] = $apps[$app];
- }
- }
-
- if ($request->getBool('reset')) {
- if ($request->isFormPost()) {
- $this->writePinnedApplications($preferences, null);
- return id(new AphrontRedirectResponse())
- ->setURI($this->getPanelURI());
- }
-
- return $this->newDialog()
- ->setTitle(pht('Reset Applications'))
- ->addHiddenInput('reset', 'true')
- ->appendParagraph(
- pht('Reset pinned applications to their defaults?'))
- ->addSubmitButton(pht('Reset Applications'))
- ->addCancelButton($this->getPanelURI());
- }
-
-
- if ($request->getBool('add')) {
- $options = array();
- foreach ($apps as $app) {
- $options[get_class($app)] = $app->getName();
- }
- asort($options);
-
- unset($options['PhabricatorApplicationsApplication']);
-
- if ($request->isFormPost()) {
- $pins = $request->getArr('pin');
- $phid = head($pins);
- $app = id(new PhabricatorApplicationQuery())
- ->setViewer($viewer)
- ->withPHIDs(array($phid))
- ->executeOne();
- if ($app) {
- $pin = get_class($app);
- } else {
- // This likely means the user submitted an empty form
- // which will cause nothing to happen.
- $pin = '';
- }
- if (isset($options[$pin]) && !in_array($pin, $pinned)) {
- $pinned[] = $pin;
-
- $this->writePinnedApplications($preferences, $pinned);
-
- return id(new AphrontRedirectResponse())
- ->setURI($this->getPanelURI());
- }
- }
-
- $options_control = id(new AphrontFormTokenizerControl())
- ->setName('pin')
- ->setLabel(pht('Application'))
- ->setDatasource(new PhabricatorApplicationDatasource())
- ->setLimit(1);
-
- $form = id(new AphrontFormView())
- ->setViewer($viewer)
- ->addHiddenInput('add', 'true')
- ->appendRemarkupInstructions(
- pht('Choose an application to pin to your home page.'))
- ->appendControl($options_control);
-
- return $this->newDialog()
- ->setWidth(AphrontDialogView::WIDTH_FORM)
- ->setTitle(pht('Pin Application'))
- ->appendChild($form->buildLayoutView())
- ->addSubmitButton(pht('Pin Application'))
- ->addCancelButton($this->getPanelURI());
- }
-
- $unpin = $request->getStr('unpin');
- if ($unpin) {
- $app = idx($apps, $unpin);
- if ($app) {
- if ($request->isFormPost()) {
- $pinned = array_diff($pinned, array($unpin));
-
- $this->writePinnedApplications($preferences, $pinned);
-
- return id(new AphrontRedirectResponse())
- ->setURI($this->getPanelURI());
- }
-
- return $this->newDialog()
- ->setTitle(pht('Unpin Application'))
- ->addHiddenInput('unpin', $unpin)
- ->appendParagraph(
- pht(
- 'Unpin the %s application from your home page?',
- phutil_tag('strong', array(), $app->getName())))
- ->addSubmitButton(pht('Unpin Application'))
- ->addCancelButton($this->getPanelURI());
- }
- }
-
- $order = $request->getStrList('order');
- if ($order && $request->validateCSRF()) {
- $this->writePinnedApplications($preferences, $order);
-
- return id(new AphrontRedirectResponse())
- ->setURI($this->getPanelURI());
- }
-
- $list_id = celerity_generate_unique_node_id();
-
- $list = id(new PHUIObjectItemListView())
- ->setViewer($viewer)
- ->setID($list_id)
- ->setDrag(true);
-
- Javelin::initBehavior(
- 'reorder-applications',
- array(
- 'listID' => $list_id,
- 'panelURI' => $this->getPanelURI(),
- ));
-
- foreach ($app_list as $key => $application) {
- if ($key == 'PhabricatorApplicationsApplication') {
- continue;
- }
-
- $icon = $application->getIcon();
- if (!$icon) {
- $icon = 'fa-globe';
- }
-
- $item = id(new PHUIObjectItemView())
- ->setHeader($application->getName())
- ->setImageIcon($icon)
- ->setGrippable(true);
-
- $item->addAction(
- id(new PHUIListItemView())
- ->setIcon('fa-times')
- ->setHref($this->getPanelURI().'?unpin='.$key)
- ->setWorkflow(true));
-
- $item->addSigil('pinned-application');
- $item->setMetadata(
- array(
- 'applicationClass' => $key,
- ));
-
- $list->addItem($item);
- }
-
- $header = id(new PHUIHeaderView())
- ->setHeader(pht('Pinned Applications'))
- ->addActionLink(
- id(new PHUIButtonView())
- ->setTag('a')
- ->setText(pht('Pin Application'))
- ->setHref($this->getPanelURI().'?add=true')
- ->setWorkflow(true)
- ->setIcon('fa-thumb-tack'))
- ->addActionLink(
- id(new PHUIButtonView())
- ->setTag('a')
- ->setText(pht('Reset to Defaults'))
- ->setHref($this->getPanelURI().'?reset=true')
- ->setWorkflow(true)
- ->setIcon('fa-recycle'));
-
- $box = id(new PHUIObjectBoxView())
- ->setHeader($header)
- ->setObjectList($list);
-
- return $box;
- }
-
- private function writePinnedApplications(
- PhabricatorUserPreferences $preferences,
- $pinned) {
-
- $pinned_key = PhabricatorPinnedApplicationsSetting::SETTINGKEY;
- $this->writeSetting($preferences, $pinned_key, $pinned);
- }
-
-}
diff --git a/src/view/layout/AphrontSideNavFilterView.php b/src/view/layout/AphrontSideNavFilterView.php
--- a/src/view/layout/AphrontSideNavFilterView.php
+++ b/src/view/layout/AphrontSideNavFilterView.php
@@ -204,7 +204,6 @@
private function renderFlexNav() {
require_celerity_resource('phabricator-nav-view-css');
- require_celerity_resource('phui-profile-menu-css');
$nav_classes = array();
$nav_classes[] = 'phabricator-nav';
@@ -310,7 +309,7 @@
$classes[] = 'phui-navigation-shell';
if ($this->getIsProfileMenu()) {
- $classes[] = 'phui-profile-menu';
+ $classes[] = 'phui-profile-menu phui-basic-nav';
} else {
$classes[] = 'phui-basic-nav';
}
diff --git a/src/view/phui/PHUIListItemView.php b/src/view/phui/PHUIListItemView.php
--- a/src/view/phui/PHUIListItemView.php
+++ b/src/view/phui/PHUIListItemView.php
@@ -30,6 +30,7 @@
private $hideInApplicationMenu;
private $icons = array();
private $openInNewWindow = false;
+ private $tooltip;
public function setOpenInNewWindow($open_in_new_window) {
$this->openInNewWindow = $open_in_new_window;
@@ -176,6 +177,11 @@
return $this->icons;
}
+ public function setTooltip($tooltip) {
+ $this->tooltip = $tooltip;
+ return $this;
+ }
+
protected function getTagName() {
return 'li';
}
@@ -185,7 +191,7 @@
$classes[] = 'phui-list-item-view';
$classes[] = 'phui-list-item-'.$this->type;
- if ($this->icon) {
+ if ($this->icon || $this->profileImage) {
$classes[] = 'phui-list-item-has-icon';
}
@@ -230,6 +236,16 @@
'align' => 'E',
);
} else {
+ if ($this->tooltip) {
+ Javelin::initBehavior('phabricator-tooltips');
+ $sigil = 'has-tooltip';
+ $meta = array(
+ 'tip' => $this->tooltip,
+ 'align' => 'E',
+ 'size' => 300,
+ );
+ }
+
$external = null;
if ($this->isExternal) {
$external = " \xE2\x86\x97";
diff --git a/webroot/rsrc/css/aphront/tooltip.css b/webroot/rsrc/css/aphront/tooltip.css
--- a/webroot/rsrc/css/aphront/tooltip.css
+++ b/webroot/rsrc/css/aphront/tooltip.css
@@ -5,17 +5,24 @@
.jx-tooltip-container {
position: absolute;
padding: 5px;
+ opacity: 1;
+ transition: opacity 0.25s ease;
+}
+
+.jx-tooltip-hidden {
+ opacity: 0;
}
.jx-tooltip-inner {
position: relative;
- background: rgba({$alphablack}, .9);
+ background: #000;
border-radius: 3px;
}
.jx-tooltip {
color: #f9f9f9;
font-size: {$normalfontsize};
+ -webkit-font-smoothing: antialiased;
padding: 6px 8px;
overflow: hidden;
white-space: pre-wrap;
diff --git a/webroot/rsrc/css/application/base/main-menu-view.css b/webroot/rsrc/css/application/base/main-menu-view.css
--- a/webroot/rsrc/css/application/base/main-menu-view.css
+++ b/webroot/rsrc/css/application/base/main-menu-view.css
@@ -164,10 +164,7 @@
right: 0;
position: absolute;
font-size: {$normalfontsize};
- border-width: 1px;
- border-color: {$lightblueborder};
- border-radius: 3px;
- border-style: solid;
+ border: none;
background-color: #fff;
height: 28px;
padding: 3px 28px 3px 52px;
@@ -186,7 +183,6 @@
background: #fff;
opacity: 1;
color: {$darkbluetext};
- border-color: {$sky};
box-shadow: none;
}
diff --git a/webroot/rsrc/css/application/base/phabricator-application-launch-view.css b/webroot/rsrc/css/application/base/phabricator-application-launch-view.css
deleted file mode 100644
--- a/webroot/rsrc/css/application/base/phabricator-application-launch-view.css
+++ /dev/null
@@ -1,103 +0,0 @@
-/**
- * @provides phabricator-application-launch-view-css
- */
-
-
-/* - Application List ----------------------------------------------------------
-
- Spacing container for the list of large application buttons.
-
-*/
-
-
-.application-tile-group {
- overflow: hidden;
-}
-
-
-/* - Application Launch Button -------------------------------------------------
-
- Spacing container for the list of large application buttons.
-
-*/
-
-a.phabricator-application-launch-container,
-div.phabricator-application-launch-container {
- display: block;
- float: left;
- overflow: hidden;
- position: relative;
- text-decoration: none;
- width: 100%;
- border-top-right-radius: 3px;
- border-bottom-right-radius: 3px;
- padding: 4px 0;
-}
-
-.device-phone div.phabricator-application-launch-container {
- display: none;
-}
-
-.phabricator-application-launch-icon {
- position: absolute;
- width: 38px;
- height: 18px;
- top: 6px;
- left: 0;
- font-size: 18px;
- text-align: center;
- vertical-align: bottom;
- color: {$darkbluetext};
- text-shadow: {$whitetextshadow};
-}
-
-.device-desktop a.phabricator-application-launch-container:hover {
- background-color: rgba({$alphablack},.07);
- text-decoration: none;
-}
-
-.device-desktop a.phabricator-application-launch-container:hover
- .phabricator-application-launch-icon {
- color: {$sky};
-}
-
-.phabricator-application-launch-name {
- display: block;
- font-weight: bold;
- color: {$darkbluetext};
- font-size: {$normalfontsize};
- margin-left: 36px;
-}
-
-.phabricator-application-launch-description {
- color: {$bluetext};
- font-size: {$smallestfontsize};
- margin-left: 36px;
- text-overflow: ellipsis;
- width: 150px;
- overflow: hidden;
- white-space: nowrap;
- display: inline-block;
- padding: 2px 0 0 0;
-}
-
-.phabricator-application-launch-attention {
- position: absolute;
- top: 8px;
- right: 8px;
- color: {$darkbluetext};
- font-weight: bold;
- font-size: {$smallerfontsize};
-}
-
-.phabricator-application-attention-count {
- color: {$fire};
-}
-
-a.phabricator-application-launch-phone-only {
- display: none;
-}
-
-.device-phone a.phabricator-application-launch-phone-only {
- display: block;
-}
diff --git a/webroot/rsrc/css/application/base/phui-theme.css b/webroot/rsrc/css/application/base/phui-theme.css
--- a/webroot/rsrc/css/application/base/phui-theme.css
+++ b/webroot/rsrc/css/application/base/phui-theme.css
@@ -5,7 +5,7 @@
/*--- Header Colors ----------------------------------------------------------*/
.phui-theme-blindigo .phabricator-main-menu-background {
- background: #41506e;
+ background: #4a5f88;
}
.phui-theme-dark .phabricator-main-menu-background {
diff --git a/webroot/rsrc/css/application/search/application-search-view.css b/webroot/rsrc/css/application/search/application-search-view.css
--- a/webroot/rsrc/css/application/search/application-search-view.css
+++ b/webroot/rsrc/css/application/search/application-search-view.css
@@ -6,6 +6,10 @@
background-color: #fff;
}
+.application-search-view .phui-crumbs-view {
+ background-color: #fff;
+}
+
.application-search-view .application-search-results.phui-object-box {
margin: 0;
padding: 0 16px 24px;
@@ -17,7 +21,7 @@
}
.application-search-view .application-search-results .phui-profile-header {
- padding: 16px 8px;
+ padding: 22px 8px;
border-bottom: 1px solid {$thinblueborder};
}
diff --git a/webroot/rsrc/css/phui/phui-basic-nav-view.css b/webroot/rsrc/css/phui/phui-basic-nav-view.css
--- a/webroot/rsrc/css/phui/phui-basic-nav-view.css
+++ b/webroot/rsrc/css/phui/phui-basic-nav-view.css
@@ -19,26 +19,26 @@
display: table-cell;
position: relative;
vertical-align: top;
- width: {$menu.profile.width};
- max-width: {$menu.profile.width};
margin-top: 0;
overflow: hidden;
}
+.phabricator-home.device-phone .phabricator-nav-content {
+ display: none;
+}
+
+.phabricator-home .phui-basic-nav .phabricator-side-menu {
+ background: transparent;
+}
+
.phui-basic-nav.phui-navigation-shell .phabricator-nav-local {
width: 205px;
- padding-top: 4px;
+ padding-top: 12px;
padding-right: 8px;
}
-.phui-basic-nav .phabricator-side-menu {
- background-color: {$page.sidenav};
-}
-
.phui-two-column-view .phui-basic-nav.phui-navigation-shell
.phabricator-nav-local {
- width: {$menu.profile.width};
- max-width: {$menu.profile.width};
padding-right: 0;
padding-top: 0;
}
@@ -55,13 +55,12 @@
display: block;
white-space: nowrap;
text-decoration: none;
- font-size: 13px;
-webkit-font-smoothing: antialiased;
}
.phui-basic-nav .phabricator-side-menu .phui-list-item-href {
display: block;
- padding: 6px 8px 6px 24px;
+ padding: 6px 8px 6px 20px;
color: {$darkbluetext};
border-top-right-radius: 3px;
border-bottom-right-radius: 3px;
@@ -69,10 +68,30 @@
text-overflow: ellipsis
}
+.phui-basic-nav .phabricator-side-menu .phui-list-item-has-icon
+ .phui-list-item-href {
+ padding-left: 12px;
+ }
+
.phui-basic-nav .phabricator-side-menu .phui-list-item-icon {
- margin-left: -12px;
+ margin-left: -4px;
text-align: center;
- width: 24px;
+ width: 30px;
+}
+
+.phui-basic-nav .phabricator-side-menu .phui-divider {
+ border-bottom: 1px solid rgba({$alphablack},.08);
+ margin: 0 0 8px 8px;
+ padding: 8px 0 0 0;
+}
+
+.phui-basic-nav .phabricator-side-menu .phui-list-item-icon.phuihead-small {
+ display: inline-block;
+ height: 16px;
+ width: 16px;
+ border-radius: 3px;
+ background-size: 100%;
+ margin: -2px 7px -2px 3px;
}
.phui-basic-nav .phabricator-side-menu .phui-list-item-selected {
@@ -91,7 +110,7 @@
.phui-basic-nav .phabricator-side-menu .phui-list-item-selected
.phui-list-item-href {
- padding-left: 20px;
+ margin-left: -4px;
}
.phui-basic-nav .phabricator-side-menu .phui-list-item-type-label {
@@ -108,3 +127,12 @@
text-decoration: none;
background-color: rgba({$alphablack},.07);
}
+
+.phui-basic-nav .phabricator-side-menu .phui-list-item-type-link +
+ .phui-list-item-type-label {
+ margin-top: 12px;
+}
+
+.phui-basic-nav .phui-profile-segment-bar {
+ padding: 4px 4px 8px 12px;
+}
diff --git a/webroot/rsrc/css/phui/phui-box.css b/webroot/rsrc/css/phui/phui-box.css
--- a/webroot/rsrc/css/phui/phui-box.css
+++ b/webroot/rsrc/css/phui/phui-box.css
@@ -49,10 +49,11 @@
.phui-object-box.phui-box-blue div.phui-info-severity-nodata,
.phui-object-box.phui-box-grey div.phui-info-severity-nodata {
- background: transparent;
- padding: 20px 4px 24px;
+ background: #fff;
+ padding: 32px 0 20px;
text-align: center;
border: none;
+ margin: 0;
color: {$greytext};
}
diff --git a/webroot/rsrc/css/phui/phui-profile-menu.css b/webroot/rsrc/css/phui/phui-profile-menu.css
deleted file mode 100644
--- a/webroot/rsrc/css/phui/phui-profile-menu.css
+++ /dev/null
@@ -1,162 +0,0 @@
-/**
- * @provides phui-profile-menu-css
- */
-
-.device-desktop .phui-profile-menu .phabricator-nav-local {
- width: {$menu.profile.width.collapsed};
- max-width: {$menu.profile.width.collapsed};
-}
-
-.device-desktop .phui-profile-menu .phabricator-nav-content {
- display: table-cell;
- margin-left: 0;
-}
-
-.phui-profile-menu .phui-basic-nav {
- width: 205px;
-}
-
-.phui-profile-menu .phabricator-side-menu {
- background: #dee0e7;
- width: 240px;
-}
-
-.phabricator-side-menu .phui-profile-menu-footer-1 {
- background: #dee0e7;
-}
-
-.phui-profile-menu .phabricator-side-menu .phui-list-item-view {
- position: relative;
-}
-
-.phui-profile-menu .phabricator-side-menu .phui-list-item-href {
- display: block;
- text-decoration: none;
- padding: 0 8px 0 48px;
- height: 48px;
- font-size: {$biggerfontsize};
- -webkit-font-smoothing: antialiased;
- line-height: 22px;
- overflow: hidden;
- color: {$darkbluetext};
- text-overflow: ellipsis;
- line-height: 48px;
-}
-
-.phui-profile-menu .phabricator-side-menu .phui-list-item-icon,
-.phui-profile-menu .phabricator-side-menu
- .phui-list-item-href .phui-list-item-icon {
- position: absolute;
- top: 12px;
- left: 13px;
- font-size: 24px;
- width: 24px;
- height: 24px;
- line-height: 24px;
- text-align: center;
- color: {$darkbluetext};
- background-size: 100%;
-}
-
-.phui-profile-menu .phabricator-side-menu .phui-list-item-href {
- text-align: center;
- padding: 42px 4px 14px;
- line-height: 14px;
- height: auto;
- font-size: {$smallerfontsize};
-}
-
-.phui-profile-menu .phabricator-side-menu .phui-list-item-name {
- display: block;
- overflow: hidden;
- text-overflow: ellipsis;
-}
-
-.phui-profile-menu .phabricator-side-menu .phui-list-item-icon,
-.phui-profile-menu .phabricator-side-menu .phui-list-item-href
- .phui-list-item-icon {
- top: 14px;
- left: 32px;
-}
-
-.phui-profile-menu .phabricator-side-menu
- .phui-list-item-disabled
- .phui-list-item-icon {
- color: {$lightgreytext};
-}
-
-.phui-profile-menu .phabricator-side-menu .phui-icon-view {
- border-radius: 3px;
-}
-
-.device-desktop .phui-profile-menu .phabricator-side-menu
- .phui-list-item-href:hover {
- background-color: rgba({$alphablack},0.05);
-}
-
-.phui-profile-menu .phabricator-side-menu .phui-list-item-selected
- .phui-list-item-href {
- background-color: rgba({$alphablack},0.1);
-}
-
-.phui-profile-menu .phabricator-side-menu .phui-list-item-selected
- .phui-list-item-href:hover {
- background-color: rgba({$alphablack},0.15);
-}
-
-.phui-profile-menu .phabricator-side-menu .phui-divider {
- margin: 4px 0;
- border-bottom: 1px solid rgba({$alphablack}, 0.2);
-}
-
-.phui-profile-menu .phabricator-side-menu .phui-motivator {
- white-space: normal;
- padding: 18px 15px;
- font-size: 12px;
- color: {$darkbluetext};
-}
-
-.phui-profile-menu .phabricator-side-menu .phui-motivator .phui-icon-view {
- position: static;
- font-size: 12px;
- color: {$darkbluetext};
-}
-
-.phui-profile-menu .phabricator-side-menu .phui-profile-menu-error {
- color: rgba({$alphawhite}, 0.5);
- font-size: {$smallerfontsize};
- padding: 16px;
-}
-
-.phui-profile-menu .phabricator-side-menu .phui-profile-menu-error {
- padding: 16px 8px;
- overflow: hidden;
- text-overflow: ellipsis;
-}
-
-.phui-profile-menu .phabricator-side-menu .phui-list-item-disabled
- .phui-list-item-href,
-.phui-profile-menu .phui-list-sidenav .phui-list-item-disabled
- .phui-list-item-href {
- color: rgba({$lightgreytext});
-}
-
-.phui-profile-menu .phabricator-side-menu .phui-profile-segment-bar {
- color: {$darkbluetext};
- font-size: {$smallerfontsize};
- -webkit-font-smoothing: antialiased;
- padding: 8px 12px 16px;
-}
-
-.phui-profile-menu .phabricator-side-menu .phui-profile-segment-bar {
- padding: 8px 8px 16px;
-}
-
-.phui-profile-menu .phabricator-side-menu .phui-profile-menu-spacer {
- box-sizing: border-box;
- height: {$menu.profile.item.height};
-}
-
-!print .phui-profile-menu .phabricator-side-menu {
- display: none;
-}
diff --git a/webroot/rsrc/css/phui/phui-segment-bar-view.css b/webroot/rsrc/css/phui/phui-segment-bar-view.css
--- a/webroot/rsrc/css/phui/phui-segment-bar-view.css
+++ b/webroot/rsrc/css/phui/phui-segment-bar-view.css
@@ -7,14 +7,14 @@
margin-bottom: 4px;
}
-.phui-profile-menu-collapsed .phui-segment-bar-label {
- width: 74px;
+.phui-basic-nav .phui-segment-bar-label {
+ width: 180px;
overflow: hidden;
text-overflow: ellipsis;
}
.phui-segment-bar-segments {
- background: {$lightgreybackground};
+ background: rgba({$alphablue}, .1);
border-radius: 4px;
position: relative;
overflow: hidden;
diff --git a/webroot/rsrc/css/phui/workboards/phui-workboard-color.css b/webroot/rsrc/css/phui/workboards/phui-workboard-color.css
--- a/webroot/rsrc/css/phui/workboards/phui-workboard-color.css
+++ b/webroot/rsrc/css/phui/workboards/phui-workboard-color.css
@@ -60,6 +60,10 @@
color: rgba({$alphawhite},.8);
}
+.phui-workboard-color .phui-segment-bar-label {
+ color: rgba({$alphawhite},.8);
+}
+
/* Gradients */
.phui-workboard-gradient-red {
diff --git a/webroot/rsrc/css/phui/workboards/phui-workboard.css b/webroot/rsrc/css/phui/workboards/phui-workboard.css
--- a/webroot/rsrc/css/phui/workboards/phui-workboard.css
+++ b/webroot/rsrc/css/phui/workboards/phui-workboard.css
@@ -32,7 +32,7 @@
}
.device-desktop .project-board-wrapper .phui-workboard-view-shadow {
- left: {$menu.profile.width.collapsed};
+ left: 212px;
}
!print .project-board-wrapper .phui-workboard-view-shadow {
diff --git a/webroot/rsrc/js/core/ToolTip.js b/webroot/rsrc/js/core/ToolTip.js
--- a/webroot/rsrc/js/core/ToolTip.js
+++ b/webroot/rsrc/js/core/ToolTip.js
@@ -46,7 +46,7 @@
var node = JX.$N(
'div',
- { className: 'jx-tooltip-container' },
+ { className: 'jx-tooltip-container jx-tooltip-hidden' },
node_inner);
node.style.maxWidth = scale + 'px';
@@ -61,6 +61,7 @@
// Jump through some hoops trying to auto-position the tooltip
var pos = self._getSmartPosition(align, root, node);
pos.setPos(node);
+ JX.DOM.alterClass(node, 'jx-tooltip-hidden', false);
},
_getSmartPosition: function (align, root, node) {
diff --git a/webroot/rsrc/js/core/behavior-tooltip.js b/webroot/rsrc/js/core/behavior-tooltip.js
--- a/webroot/rsrc/js/core/behavior-tooltip.js
+++ b/webroot/rsrc/js/core/behavior-tooltip.js
@@ -26,7 +26,7 @@
JX.Tooltip.show(
e.getNode('has-tooltip'),
- data.size || 120,
+ data.size || 160,
data.align || 'N',
data.tip);
});

File Metadata

Mime Type
text/plain
Expires
Thu, May 9, 12:52 PM (2 w, 2 h ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
6274851
Default Alt Text
D17259.id41544.diff (60 KB)

Event Timeline