mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-18 11:30:55 +01:00
Redesign Home/Profile/Projects side navigation
Summary: Ref T11957. Needs some more polish, but I think everything here is square. Test Plan: Add personal/global items to home, test mobile. Test workboards / colors. Reviewers: epriestley Reviewed By: epriestley Subscribers: 20after4, rfreebern, Korvin Maniphest Tasks: T11957 Differential Revision: https://secure.phabricator.com/D17259
This commit is contained in:
parent
239b7c7f5c
commit
ad01e26af7
42 changed files with 462 additions and 967 deletions
|
@ -9,8 +9,8 @@ return array(
|
|||
'names' => array(
|
||||
'conpherence.pkg.css' => 'e25569a9',
|
||||
'conpherence.pkg.js' => '6249a1cf',
|
||||
'core.pkg.css' => '7c235ec7',
|
||||
'core.pkg.js' => '2291d3b2',
|
||||
'core.pkg.css' => '25cda14d',
|
||||
'core.pkg.js' => 'f1e0e26f',
|
||||
'darkconsole.pkg.js' => 'e7393ebb',
|
||||
'differential.pkg.css' => '4815647b',
|
||||
'differential.pkg.js' => 'ddfeb49b',
|
||||
|
@ -29,15 +29,14 @@ return array(
|
|||
'rsrc/css/aphront/phabricator-nav-view.css' => 'b29426e9',
|
||||
'rsrc/css/aphront/table-view.css' => '213a5981',
|
||||
'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 @@ return array(
|
|||
'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',
|
||||
|
@ -119,7 +118,7 @@ return array(
|
|||
'rsrc/css/layout/phabricator-filetree-view.css' => 'fccf9f82',
|
||||
'rsrc/css/layout/phabricator-source-code-view.css' => '4383192f',
|
||||
'rsrc/css/phui/calendar/phui-calendar-day.css' => '572b1893',
|
||||
'rsrc/css/phui/calendar/phui-calendar-list.css' => 'fcc9fb41',
|
||||
'rsrc/css/phui/calendar/phui-calendar-list.css' => 'eb5c774b',
|
||||
'rsrc/css/phui/calendar/phui-calendar-month.css' => '8e10e92c',
|
||||
'rsrc/css/phui/calendar/phui-calendar.css' => '477acfaa',
|
||||
'rsrc/css/phui/object-item/phui-oi-big-ui.css' => '19f9369b',
|
||||
|
@ -131,9 +130,9 @@ return array(
|
|||
'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' => '269cbc99',
|
||||
'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 @@ return array(
|
|||
'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 @@ return array(
|
|||
'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 @@ return array(
|
|||
'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 @@ return array(
|
|||
'aphront-panel-view-css' => '8427b78d',
|
||||
'aphront-table-view-css' => '213a5981',
|
||||
'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 @@ return array(
|
|||
'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 @@ return array(
|
|||
'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 @@ return array(
|
|||
'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 @@ return array(
|
|||
'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,13 +836,13 @@ return array(
|
|||
'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' => '269cbc99',
|
||||
'phui-button-css' => '00ddac15',
|
||||
'phui-calendar-css' => '477acfaa',
|
||||
'phui-calendar-day-css' => '572b1893',
|
||||
'phui-calendar-list-css' => 'fcc9fb41',
|
||||
'phui-calendar-list-css' => 'eb5c774b',
|
||||
'phui-calendar-month-css' => '8e10e92c',
|
||||
'phui-chart-css' => '6bf6f78e',
|
||||
'phui-cms-css' => 'be43c8a8',
|
||||
|
@ -883,18 +880,17 @@ return array(
|
|||
'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 @@ return array(
|
|||
'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 @@ return array(
|
|||
'javelin-stratcom',
|
||||
'javelin-util',
|
||||
),
|
||||
'8eac4166' => array(
|
||||
'phui-theme-css',
|
||||
),
|
||||
'8ff5e24c' => array(
|
||||
'javelin-behavior',
|
||||
'javelin-stratcom',
|
||||
|
@ -1636,6 +1623,9 @@ return array(
|
|||
'javelin-stratcom',
|
||||
'javelin-dom',
|
||||
),
|
||||
'93519cb0' => array(
|
||||
'phui-theme-css',
|
||||
),
|
||||
'93ae974f' => array(
|
||||
'javelin-behavior',
|
||||
'javelin-dom',
|
||||
|
@ -1888,12 +1878,6 @@ return array(
|
|||
'javelin-install',
|
||||
'javelin-dom',
|
||||
),
|
||||
'b5c62c3b' => array(
|
||||
'javelin-install',
|
||||
'javelin-util',
|
||||
'javelin-dom',
|
||||
'javelin-vector',
|
||||
),
|
||||
'b5d57730' => array(
|
||||
'javelin-install',
|
||||
'javelin-stratcom',
|
||||
|
@ -1969,6 +1953,12 @@ return array(
|
|||
'javelin-install',
|
||||
'javelin-dom',
|
||||
),
|
||||
'c420b0b9' => array(
|
||||
'javelin-behavior',
|
||||
'javelin-behavior-device',
|
||||
'javelin-stratcom',
|
||||
'phabricator-tooltip',
|
||||
),
|
||||
'c587b80f' => array(
|
||||
'javelin-install',
|
||||
),
|
||||
|
@ -2026,6 +2016,12 @@ return array(
|
|||
'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 @@ return array(
|
|||
'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',
|
||||
|
|
|
@ -130,9 +130,7 @@ return array(
|
|||
'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',
|
||||
|
|
45
resources/sql/autopatches/20170131.dashboard.personal.01.php
Normal file
45
resources/sql/autopatches/20170131.dashboard.personal.01.php
Normal file
|
@ -0,0 +1,45 @@
|
|||
<?php
|
||||
|
||||
$table = new PhabricatorDashboard();
|
||||
$conn = $table->establishConnection('r');
|
||||
$table_name = 'dashboard_install';
|
||||
|
||||
$search_table = new PhabricatorProfileMenuItemConfiguration();
|
||||
$search_conn = $search_table->establishConnection('w');
|
||||
$search_table_name = 'search_profilepanelconfiguration';
|
||||
|
||||
$viewer = PhabricatorUser::getOmnipotentUser();
|
||||
$profile_phid = id(new PhabricatorHomeApplication())->getPHID();
|
||||
$menu_item_key = PhabricatorDashboardProfileMenuItem::MENUITEMKEY;
|
||||
|
||||
foreach (new LiskRawMigrationIterator($conn, $table_name) as $install) {
|
||||
|
||||
$dashboard_phid = $install['dashboardPHID'];
|
||||
$new_phid = id(new PhabricatorProfileMenuItemConfiguration())->generatePHID();
|
||||
$menu_item_properties = json_encode(
|
||||
array('dashboardPHID' => $dashboard_phid, 'name' => ''));
|
||||
|
||||
$custom_phid = $install['objectPHID'];
|
||||
if ($custom_phid == 'dashboard:default') {
|
||||
$custom_phid = null;
|
||||
}
|
||||
|
||||
$menu_item_order = 0;
|
||||
|
||||
queryfx(
|
||||
$search_conn,
|
||||
'INSERT INTO %T (phid, profilePHID, menuItemKey, menuItemProperties, '.
|
||||
'visibility, dateCreated, dateModified, menuItemOrder, customPHID) VALUES '.
|
||||
'(%s, %s, %s, %s, %s, %d, %d, %d, %ns)',
|
||||
$search_table_name,
|
||||
$new_phid,
|
||||
$profile_phid,
|
||||
$menu_item_key,
|
||||
$menu_item_properties,
|
||||
'visible',
|
||||
PhabricatorTime::getNow(),
|
||||
PhabricatorTime::getNow(),
|
||||
$menu_item_order,
|
||||
$custom_phid);
|
||||
|
||||
}
|
|
@ -1825,7 +1825,6 @@ phutil_register_library_map(array(
|
|||
'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',
|
||||
|
@ -2469,7 +2468,6 @@ phutil_register_library_map(array(
|
|||
'PhabricatorDashboardEditController' => 'applications/dashboard/controller/PhabricatorDashboardEditController.php',
|
||||
'PhabricatorDashboardIconSet' => 'applications/dashboard/icon/PhabricatorDashboardIconSet.php',
|
||||
'PhabricatorDashboardInstall' => 'applications/dashboard/storage/PhabricatorDashboardInstall.php',
|
||||
'PhabricatorDashboardInstallController' => 'applications/dashboard/controller/PhabricatorDashboardInstallController.php',
|
||||
'PhabricatorDashboardLayoutConfig' => 'applications/dashboard/layoutconfig/PhabricatorDashboardLayoutConfig.php',
|
||||
'PhabricatorDashboardListController' => 'applications/dashboard/controller/PhabricatorDashboardListController.php',
|
||||
'PhabricatorDashboardManageController' => 'applications/dashboard/controller/PhabricatorDashboardManageController.php',
|
||||
|
@ -2837,12 +2835,13 @@ phutil_register_library_map(array(
|
|||
'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',
|
||||
|
@ -6711,7 +6710,6 @@ phutil_register_library_map(array(
|
|||
'PhabricatorApplicationEditController' => 'PhabricatorApplicationsController',
|
||||
'PhabricatorApplicationEditHTTPParameterHelpView' => 'AphrontView',
|
||||
'PhabricatorApplicationEmailCommandsController' => 'PhabricatorApplicationsController',
|
||||
'PhabricatorApplicationLaunchView' => 'AphrontTagView',
|
||||
'PhabricatorApplicationPanelController' => 'PhabricatorApplicationsController',
|
||||
'PhabricatorApplicationProfileMenuItem' => 'PhabricatorProfileMenuItem',
|
||||
'PhabricatorApplicationQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
|
||||
|
@ -7471,7 +7469,6 @@ phutil_register_library_map(array(
|
|||
'PhabricatorDashboardEditController' => 'PhabricatorDashboardController',
|
||||
'PhabricatorDashboardIconSet' => 'PhabricatorIconSet',
|
||||
'PhabricatorDashboardInstall' => 'PhabricatorDashboardDAO',
|
||||
'PhabricatorDashboardInstallController' => 'PhabricatorDashboardController',
|
||||
'PhabricatorDashboardLayoutConfig' => 'Phobject',
|
||||
'PhabricatorDashboardListController' => 'PhabricatorDashboardController',
|
||||
'PhabricatorDashboardManageController' => 'PhabricatorDashboardController',
|
||||
|
@ -7893,12 +7890,13 @@ phutil_register_library_map(array(
|
|||
'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',
|
||||
|
|
|
@ -209,10 +209,7 @@ final class CelerityDefaultPostprocessor
|
|||
'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',
|
||||
|
||||
);
|
||||
}
|
||||
|
|
|
@ -30,7 +30,6 @@ final class PhabricatorDashboardApplication extends PhabricatorApplication {
|
|||
'create/' => 'PhabricatorDashboardEditController',
|
||||
'copy/(?:(?P<id>\d+)/)?' => 'PhabricatorDashboardCopyController',
|
||||
'edit/(?:(?P<id>\d+)/)?' => 'PhabricatorDashboardEditController',
|
||||
'install/(?P<id>\d+)/' => 'PhabricatorDashboardInstallController',
|
||||
'uninstall/(?P<id>\d+)/' => 'PhabricatorDashboardUninstallController',
|
||||
'addpanel/(?P<id>\d+)/' => 'PhabricatorDashboardAddPanelController',
|
||||
'movepanel/(?P<id>\d+)/' => 'PhabricatorDashboardMovePanelController',
|
||||
|
|
|
@ -1,148 +0,0 @@
|
|||
<?php
|
||||
|
||||
final class PhabricatorDashboardInstallController
|
||||
extends PhabricatorDashboardController {
|
||||
|
||||
private $id;
|
||||
|
||||
public function handleRequest(AphrontRequest $request) {
|
||||
$viewer = $request->getViewer();
|
||||
$this->id = $request->getURIData('id');
|
||||
|
||||
$dashboard = id(new PhabricatorDashboardQuery())
|
||||
->setViewer($viewer)
|
||||
->withIDs(array($this->id))
|
||||
->executeOne();
|
||||
if (!$dashboard) {
|
||||
return new Aphront404Response();
|
||||
}
|
||||
$dashboard_phid = $dashboard->getPHID();
|
||||
|
||||
$object_phid = $request->getStr('objectPHID', $viewer->getPHID());
|
||||
switch ($object_phid) {
|
||||
case PhabricatorHomeApplication::DASHBOARD_DEFAULT:
|
||||
if (!$viewer->getIsAdmin()) {
|
||||
return new Aphront404Response();
|
||||
}
|
||||
break;
|
||||
default:
|
||||
$object = id(new PhabricatorObjectQuery())
|
||||
->setViewer($viewer)
|
||||
->requireCapabilities(
|
||||
array(
|
||||
PhabricatorPolicyCapability::CAN_VIEW,
|
||||
PhabricatorPolicyCapability::CAN_EDIT,
|
||||
))
|
||||
->withPHIDs(array($object_phid))
|
||||
->executeOne();
|
||||
if (!$object) {
|
||||
return new Aphront404Response();
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
$installer_phid = $viewer->getPHID();
|
||||
$application_class = $request->getStr(
|
||||
'applicationClass',
|
||||
'PhabricatorHomeApplication');
|
||||
|
||||
if ($request->isFormPost()) {
|
||||
$dashboard_install = id(new PhabricatorDashboardInstall())
|
||||
->loadOneWhere(
|
||||
'objectPHID = %s AND applicationClass = %s',
|
||||
$object_phid,
|
||||
$application_class);
|
||||
if (!$dashboard_install) {
|
||||
$dashboard_install = id(new PhabricatorDashboardInstall())
|
||||
->setObjectPHID($object_phid)
|
||||
->setApplicationClass($application_class);
|
||||
}
|
||||
$dashboard_install
|
||||
->setInstallerPHID($installer_phid)
|
||||
->setDashboardPHID($dashboard_phid)
|
||||
->save();
|
||||
return id(new AphrontRedirectResponse())
|
||||
->setURI($this->getRedirectURI($application_class, $object_phid));
|
||||
}
|
||||
|
||||
$dialog = $this->newDialog()
|
||||
->setTitle(pht('Install Dashboard'))
|
||||
->addHiddenInput('objectPHID', $object_phid)
|
||||
->addCancelButton($this->getCancelURI($application_class, $object_phid))
|
||||
->addSubmitButton(pht('Install Dashboard'));
|
||||
|
||||
switch ($application_class) {
|
||||
case 'PhabricatorHomeApplication':
|
||||
if ($viewer->getPHID() == $object_phid) {
|
||||
if ($viewer->getIsAdmin()) {
|
||||
$dialog->setWidth(AphrontDialogView::WIDTH_FORM);
|
||||
|
||||
$form = id(new AphrontFormView())
|
||||
->setUser($viewer)
|
||||
->appendRemarkupInstructions(
|
||||
pht('Choose where to install this dashboard.'))
|
||||
->appendChild(
|
||||
id(new AphrontFormRadioButtonControl())
|
||||
->setName('objectPHID')
|
||||
->setValue(PhabricatorHomeApplication::DASHBOARD_DEFAULT)
|
||||
->addButton(
|
||||
PhabricatorHomeApplication::DASHBOARD_DEFAULT,
|
||||
pht('Default Dashboard for All Users'),
|
||||
pht(
|
||||
'Install this dashboard as the global default dashboard '.
|
||||
'for all users. Users can install a personal dashboard '.
|
||||
'to replace it. All users who have not configured '.
|
||||
'a personal dashboard will be affected by this change.'))
|
||||
->addButton(
|
||||
$viewer->getPHID(),
|
||||
pht('Personal Home Page Dashboard'),
|
||||
pht(
|
||||
'Install this dashboard as your personal home page '.
|
||||
'dashboard. Only you will be affected by this change.')));
|
||||
|
||||
$dialog->appendChild($form->buildLayoutView());
|
||||
} else {
|
||||
$dialog->appendParagraph(
|
||||
pht('Install this dashboard on your home page?'));
|
||||
}
|
||||
} else {
|
||||
$dialog->appendParagraph(
|
||||
pht(
|
||||
'Install this dashboard as the home page dashboard for %s?',
|
||||
phutil_tag(
|
||||
'strong',
|
||||
array(),
|
||||
$viewer->renderHandle($object_phid))));
|
||||
}
|
||||
break;
|
||||
default:
|
||||
throw new Exception(
|
||||
pht(
|
||||
'Unknown dashboard application class "%s"!',
|
||||
$application_class));
|
||||
}
|
||||
|
||||
return $dialog;
|
||||
}
|
||||
|
||||
private function getCancelURI($application_class, $object_phid) {
|
||||
$uri = null;
|
||||
switch ($application_class) {
|
||||
case 'PhabricatorHomeApplication':
|
||||
$uri = '/dashboard/view/'.$this->id.'/';
|
||||
break;
|
||||
}
|
||||
return $uri;
|
||||
}
|
||||
|
||||
private function getRedirectURI($application_class, $object_phid) {
|
||||
$uri = null;
|
||||
switch ($application_class) {
|
||||
case 'PhabricatorHomeApplication':
|
||||
$uri = '/';
|
||||
break;
|
||||
}
|
||||
return $uri;
|
||||
}
|
||||
|
||||
}
|
|
@ -156,26 +156,6 @@ final class PhabricatorDashboardManageController
|
|||
->setHref($this->getApplicationURI("copy/{$id}/"))
|
||||
->setWorkflow(true));
|
||||
|
||||
$installed_dashboard = id(new PhabricatorDashboardInstall())
|
||||
->loadOneWhere(
|
||||
'objectPHID = %s AND applicationClass = %s',
|
||||
$viewer->getPHID(),
|
||||
'PhabricatorHomeApplication');
|
||||
if ($installed_dashboard &&
|
||||
$installed_dashboard->getDashboardPHID() == $dashboard->getPHID()) {
|
||||
$title_install = pht('Uninstall Dashboard');
|
||||
$href_install = "uninstall/{$id}/";
|
||||
} else {
|
||||
$title_install = pht('Install Dashboard');
|
||||
$href_install = "install/{$id}/";
|
||||
}
|
||||
$curtain->addAction(
|
||||
id(new PhabricatorActionView())
|
||||
->setName($title_install)
|
||||
->setIcon('fa-wrench')
|
||||
->setHref($this->getApplicationURI($href_install))
|
||||
->setWorkflow(true));
|
||||
|
||||
return $curtain;
|
||||
}
|
||||
|
||||
|
|
|
@ -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';
|
||||
|
||||
|
|
|
@ -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();
|
||||
|
||||
$tiles[] = id(new PhabricatorApplicationLaunchView())
|
||||
->setApplication($home_app)
|
||||
->addClass('phabricator-application-launch-phone-only')
|
||||
->setUser($user);
|
||||
|
||||
foreach ($pinned as $pinned_application) {
|
||||
if (empty($applications[$pinned_application])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$application = $applications[$pinned_application];
|
||||
|
||||
$tile = id(new PhabricatorApplicationLaunchView())
|
||||
->setApplication($application)
|
||||
->setUser($user);
|
||||
|
||||
$tiles[] = $tile;
|
||||
$profile_menu = $this->getProfileMenu();
|
||||
if ($profile_menu) {
|
||||
$menu->setProfileMenu($profile_menu);
|
||||
}
|
||||
|
||||
$nav->addCustomBlock(
|
||||
phutil_tag(
|
||||
'div',
|
||||
array(
|
||||
'class' => 'application-tile-group',
|
||||
),
|
||||
$tiles));
|
||||
return $menu;
|
||||
}
|
||||
|
||||
$nav->addFilter(
|
||||
'',
|
||||
pht('Customize Menu...'),
|
||||
'/settings/panel/home/');
|
||||
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;
|
||||
}
|
||||
|
||||
$nav->addClass('phabricator-side-menu-home');
|
||||
$nav->selectFilter(null);
|
||||
$engine = id(new PhabricatorHomeProfileMenuEngine())
|
||||
->setViewer($viewer)
|
||||
->setProfileObject($home);
|
||||
|
||||
return $nav;
|
||||
if ($viewer->getPHID()) {
|
||||
$engine->setCustomPHID($viewer->getPHID())
|
||||
->setMenuType(PhabricatorProfileMenuEngine::MENU_COMBINED);
|
||||
} else {
|
||||
$engine->setMenuType(PhabricatorProfileMenuEngine::MENU_GLOBAL);
|
||||
}
|
||||
|
||||
$this->profileMenu = $engine->buildNavigation();
|
||||
}
|
||||
|
||||
return $this->profileMenu;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -34,19 +34,17 @@ final class PhabricatorHomeMainController extends PhabricatorHomeController {
|
|||
$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);
|
||||
|
||||
}
|
||||
|
|
|
@ -9,6 +9,11 @@ final class PhabricatorHomeMenuController extends PhabricatorHomeController {
|
|||
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);
|
||||
|
||||
|
|
|
@ -24,8 +24,7 @@ final class PhabricatorHomeMenuItemController
|
|||
->setProfileObject($home_app)
|
||||
->setCustomPHID($custom_phid)
|
||||
->setMenuType($menu)
|
||||
->setController($this)
|
||||
->setShowNavigation(false);
|
||||
->setController($this);
|
||||
|
||||
return $engine->buildResponse();
|
||||
}
|
||||
|
|
|
@ -30,6 +30,12 @@ final class PhabricatorHomeProfileMenuEngine
|
|||
->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 @@ final class PhabricatorHomeProfileMenuEngine
|
|||
->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)
|
||||
|
|
|
@ -0,0 +1,68 @@
|
|||
<?php
|
||||
|
||||
final class PhabricatorHomeLauncherProfileMenuItem
|
||||
extends PhabricatorProfileMenuItem {
|
||||
|
||||
const MENUITEMKEY = 'home.launcher.menu';
|
||||
|
||||
public function getMenuItemTypeName() {
|
||||
return pht('More Applications');
|
||||
}
|
||||
|
||||
private function getDefaultName() {
|
||||
return pht('More Applications');
|
||||
}
|
||||
|
||||
public function canHideMenuItem(
|
||||
PhabricatorProfileMenuItemConfiguration $config) {
|
||||
return false;
|
||||
}
|
||||
|
||||
public function canMakeDefault(
|
||||
PhabricatorProfileMenuItemConfiguration $config) {
|
||||
return false;
|
||||
}
|
||||
|
||||
public function getDisplayName(
|
||||
PhabricatorProfileMenuItemConfiguration $config) {
|
||||
$name = $config->getMenuItemProperty('name');
|
||||
|
||||
if (strlen($name)) {
|
||||
return $name;
|
||||
}
|
||||
|
||||
return $this->getDefaultName();
|
||||
}
|
||||
|
||||
public function buildEditEngineFields(
|
||||
PhabricatorProfileMenuItemConfiguration $config) {
|
||||
return array(
|
||||
id(new PhabricatorTextEditField())
|
||||
->setKey('name')
|
||||
->setLabel(pht('Name'))
|
||||
->setPlaceholder($this->getDefaultName())
|
||||
->setValue($config->getMenuItemProperty('name')),
|
||||
);
|
||||
}
|
||||
|
||||
protected function newNavigationMenuItems(
|
||||
PhabricatorProfileMenuItemConfiguration $config) {
|
||||
$viewer = $this->getViewer();
|
||||
|
||||
if ($viewer->isLoggedIn()) {
|
||||
$name = $this->getDisplayName($config);
|
||||
$icon = 'fa-globe';
|
||||
$href = '/applications/';
|
||||
|
||||
$item = $this->newItem()
|
||||
->setHref($href)
|
||||
->setName($name)
|
||||
->setIcon($icon);
|
||||
}
|
||||
|
||||
return array(
|
||||
$item,
|
||||
);
|
||||
}
|
||||
|
||||
}
|
|
@ -10,7 +10,7 @@ final class PhabricatorHomeManageProfileMenuItem
|
|||
}
|
||||
|
||||
private function getDefaultName() {
|
||||
return pht('Manage');
|
||||
return pht('Edit Menu');
|
||||
}
|
||||
|
||||
public function canHideMenuItem(
|
||||
|
@ -50,13 +50,9 @@ final class PhabricatorHomeManageProfileMenuItem
|
|||
$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)
|
||||
|
|
|
@ -0,0 +1,68 @@
|
|||
<?php
|
||||
|
||||
final class PhabricatorHomeProfileMenuItem
|
||||
extends PhabricatorProfileMenuItem {
|
||||
|
||||
const MENUITEMKEY = 'home.dashboard';
|
||||
|
||||
public function getMenuItemTypeName() {
|
||||
return pht('Home');
|
||||
}
|
||||
|
||||
private function getDefaultName() {
|
||||
return pht('Home');
|
||||
}
|
||||
|
||||
public function canHideMenuItem(
|
||||
PhabricatorProfileMenuItemConfiguration $config) {
|
||||
return false;
|
||||
}
|
||||
|
||||
public function canMakeDefault(
|
||||
PhabricatorProfileMenuItemConfiguration $config) {
|
||||
return true;
|
||||
}
|
||||
|
||||
public function getDisplayName(
|
||||
PhabricatorProfileMenuItemConfiguration $config) {
|
||||
$name = $config->getMenuItemProperty('name');
|
||||
|
||||
if (strlen($name)) {
|
||||
return $name;
|
||||
}
|
||||
|
||||
return $this->getDefaultName();
|
||||
}
|
||||
|
||||
public function buildEditEngineFields(
|
||||
PhabricatorProfileMenuItemConfiguration $config) {
|
||||
return array(
|
||||
id(new PhabricatorTextEditField())
|
||||
->setKey('name')
|
||||
->setLabel(pht('Name'))
|
||||
->setPlaceholder($this->getDefaultName())
|
||||
->setValue($config->getMenuItemProperty('name')),
|
||||
);
|
||||
}
|
||||
|
||||
protected function newNavigationMenuItems(
|
||||
PhabricatorProfileMenuItemConfiguration $config) {
|
||||
$viewer = $this->getViewer();
|
||||
|
||||
if ($viewer->isLoggedIn()) {
|
||||
$name = $this->getDisplayName($config);
|
||||
$icon = 'fa-home';
|
||||
$href = '/home/';
|
||||
|
||||
$item = $this->newItem()
|
||||
->setHref($href)
|
||||
->setName($name)
|
||||
->setIcon($icon);
|
||||
}
|
||||
|
||||
return array(
|
||||
$item,
|
||||
);
|
||||
}
|
||||
|
||||
}
|
|
@ -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,
|
||||
);
|
||||
}
|
||||
|
||||
}
|
|
@ -60,4 +60,63 @@ abstract class PhabricatorPeopleProfileController
|
|||
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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -23,20 +23,7 @@ final class PhabricatorPeopleProfileManageController
|
|||
}
|
||||
|
||||
$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 @@ final class PhabricatorPeopleProfileManageController
|
|||
|
||||
$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(
|
||||
|
|
|
@ -23,30 +23,7 @@ final class PhabricatorPeopleProfileViewController
|
|||
}
|
||||
|
||||
$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();
|
||||
|
@ -158,12 +135,9 @@ final class PhabricatorPeopleProfileViewController
|
|||
}
|
||||
|
||||
} else {
|
||||
$error = id(new PHUIBoxView())
|
||||
->addClass('mlb')
|
||||
->appendChild(pht('User does not belong to any projects.'));
|
||||
$list = id(new PHUIInfoView())
|
||||
->setSeverity(PHUIInfoView::SEVERITY_NODATA)
|
||||
->appendChild($error);
|
||||
->appendChild(pht('User does not belong to any projects.'));
|
||||
}
|
||||
|
||||
$box = id(new PHUIObjectBoxView())
|
||||
|
@ -302,12 +276,9 @@ final class PhabricatorPeopleProfileViewController
|
|||
}
|
||||
}
|
||||
} else {
|
||||
$error = id(new PHUIBoxView())
|
||||
->addClass('mlb')
|
||||
->appendChild(pht('User does not have any badges.'));
|
||||
$flex = id(new PHUIInfoView())
|
||||
->setSeverity(PHUIInfoView::SEVERITY_NODATA)
|
||||
->appendChild($error);
|
||||
->appendChild(pht('User does not have any badges.'));
|
||||
}
|
||||
|
||||
// Best option?
|
||||
|
|
|
@ -7,7 +7,7 @@ final class PhabricatorProjectApplication extends PhabricatorApplication {
|
|||
}
|
||||
|
||||
public function getShortDescription() {
|
||||
return pht('Get Organized');
|
||||
return pht('Projects, Tags, and Teams');
|
||||
}
|
||||
|
||||
public function isPinnedByDefault(PhabricatorUser $viewer) {
|
||||
|
|
|
@ -68,17 +68,16 @@ final class PhabricatorProjectPointsProfileMenuItem
|
|||
->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 @@ final class PhabricatorProjectPointsProfileMenuItem
|
|||
}
|
||||
|
||||
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 @@ final class PhabricatorProjectPointsProfileMenuItem
|
|||
->setTooltip($tooltip);
|
||||
}
|
||||
|
||||
if ($error) {
|
||||
$bar->setLabel(head($error));
|
||||
}
|
||||
|
||||
$bar = phutil_tag(
|
||||
'div',
|
||||
array(
|
||||
|
@ -173,20 +173,4 @@ final class PhabricatorProjectPointsProfileMenuItem
|
|||
);
|
||||
}
|
||||
|
||||
private function renderError($message) {
|
||||
$message = phutil_tag(
|
||||
'div',
|
||||
array(
|
||||
'class' => 'phui-profile-menu-error',
|
||||
),
|
||||
$message);
|
||||
|
||||
$item = $this->newItem()
|
||||
->appendChild($message);
|
||||
|
||||
return array(
|
||||
$item,
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -254,7 +254,6 @@ abstract class PhabricatorProfileMenuEngine extends Phobject {
|
|||
if ($this->navigation) {
|
||||
return $this->navigation;
|
||||
}
|
||||
|
||||
$nav = id(new AphrontSideNavFilterView())
|
||||
->setIsProfileMenu(true)
|
||||
->setBaseURI(new PhutilURI($this->getItemURI('')));
|
||||
|
|
|
@ -88,6 +88,11 @@ final class PhabricatorApplicationProfileMenuItem
|
|||
->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,
|
||||
);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
|
@ -204,7 +204,6 @@ final class AphrontSideNavFilterView extends AphrontView {
|
|||
|
||||
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 @@ final class AphrontSideNavFilterView extends AphrontView {
|
|||
$classes[] = 'phui-navigation-shell';
|
||||
|
||||
if ($this->getIsProfileMenu()) {
|
||||
$classes[] = 'phui-profile-menu';
|
||||
$classes[] = 'phui-profile-menu phui-basic-nav';
|
||||
} else {
|
||||
$classes[] = 'phui-basic-nav';
|
||||
}
|
||||
|
|
|
@ -30,6 +30,7 @@ final class PHUIListItemView extends AphrontTagView {
|
|||
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 @@ final class PHUIListItemView extends AphrontTagView {
|
|||
return $this->icons;
|
||||
}
|
||||
|
||||
public function setTooltip($tooltip) {
|
||||
$this->tooltip = $tooltip;
|
||||
return $this;
|
||||
}
|
||||
|
||||
protected function getTagName() {
|
||||
return 'li';
|
||||
}
|
||||
|
@ -185,7 +191,7 @@ final class PHUIListItemView extends AphrontTagView {
|
|||
$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 @@ final class PHUIListItemView extends AphrontTagView {
|
|||
'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";
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
|
@ -5,7 +5,7 @@
|
|||
/*--- Header Colors ----------------------------------------------------------*/
|
||||
|
||||
.phui-theme-blindigo .phabricator-main-menu-background {
|
||||
background: #41506e;
|
||||
background: #4a5f88;
|
||||
}
|
||||
|
||||
.phui-theme-dark .phabricator-main-menu-background {
|
||||
|
|
|
@ -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};
|
||||
}
|
||||
|
||||
|
|
|
@ -66,7 +66,7 @@
|
|||
|
||||
.phui-calendar-list-item-empty {
|
||||
color: {$lightgreytext};
|
||||
padding: 0 12px;
|
||||
padding: 0;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
.phui-basic-nav.phui-navigation-shell .phabricator-nav-local {
|
||||
width: 205px;
|
||||
padding-top: 4px;
|
||||
padding-right: 8px;
|
||||
.phabricator-home.device-phone .phabricator-nav-content {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.phui-basic-nav .phabricator-side-menu {
|
||||
background-color: {$page.sidenav};
|
||||
.phabricator-home .phui-basic-nav .phabricator-side-menu {
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
.phui-basic-nav.phui-navigation-shell .phabricator-nav-local {
|
||||
width: 205px;
|
||||
padding-top: 12px;
|
||||
padding-right: 8px;
|
||||
}
|
||||
|
||||
.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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
text-align: center;
|
||||
border: none;
|
||||
margin: 0;
|
||||
color: {$greytext};
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
|
@ -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;
|
||||
|
|
|
@ -60,6 +60,10 @@ body.phui-workboard-color .phabricator-side-menu .phui-profile-menu-footer-1 {
|
|||
color: rgba({$alphawhite},.8);
|
||||
}
|
||||
|
||||
.phui-workboard-color .phui-segment-bar-label {
|
||||
color: rgba({$alphawhite},.8);
|
||||
}
|
||||
|
||||
/* Gradients */
|
||||
|
||||
.phui-workboard-gradient-red {
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -46,7 +46,7 @@ JX.install('Tooltip', {
|
|||
|
||||
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 @@ JX.install('Tooltip', {
|
|||
// 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) {
|
||||
|
|
|
@ -26,7 +26,7 @@ JX.behavior('phabricator-tooltips', function() {
|
|||
|
||||
JX.Tooltip.show(
|
||||
e.getNode('has-tooltip'),
|
||||
data.size || 120,
|
||||
data.size || 160,
|
||||
data.align || 'N',
|
||||
data.tip);
|
||||
});
|
||||
|
|
Loading…
Reference in a new issue