@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Redesign header menus and search

Summary:
Still lots to fix here, punting up since I'm running into a few roadblocks.

TODO:
[] Sort Personal/Global correctly
[] Quicksand in Help Items correctly on page changes

Test Plan: Verify new menus work on desktop, tablet, mobile. Test logged in menus, logged out menus. Logging out via a menu, verify each link works as expected. Help menus get build when using an app like Maniphest, Differential. Check that search works, preferences still save.

Reviewers: epriestley

Reviewed By: epriestley

Subscribers: Korvin

Maniphest Tasks: T12107

Differential Revision: https://secure.phabricator.com/D17209

+518 -801
+36 -36
resources/celerity/map.php
··· 9 9 'names' => array( 10 10 'conpherence.pkg.css' => '0b64e988', 11 11 'conpherence.pkg.js' => '6249a1cf', 12 - 'core.pkg.css' => '1afa1d13', 13 - 'core.pkg.js' => '892976d4', 12 + 'core.pkg.css' => '85f51b68', 13 + 'core.pkg.js' => '2c684890', 14 14 'darkconsole.pkg.js' => 'e7393ebb', 15 15 'differential.pkg.css' => '9535a7e6', 16 16 'differential.pkg.js' => 'ddfeb49b', ··· 21 21 'maniphest.pkg.js' => '5ab2753f', 22 22 'rsrc/css/aphront/aphront-bars.css' => '231ac33c', 23 23 'rsrc/css/aphront/dark-console.css' => 'f54bf286', 24 - 'rsrc/css/aphront/dialog-view.css' => '938f52c5', 24 + 'rsrc/css/aphront/dialog-view.css' => '5e5aa60b', 25 25 'rsrc/css/aphront/list-filter-view.css' => '5d6f0526', 26 26 'rsrc/css/aphront/multi-column.css' => '84cc6640', 27 27 'rsrc/css/aphront/notification.css' => '3f6c89c9', ··· 34 34 'rsrc/css/aphront/typeahead.css' => 'd4f16145', 35 35 'rsrc/css/application/almanac/almanac.css' => 'dbb9b3af', 36 36 'rsrc/css/application/auth/auth.css' => '0877ed6e', 37 - 'rsrc/css/application/base/main-menu-view.css' => 'f03e17be', 38 - 'rsrc/css/application/base/notification-menu.css' => '1e055865', 37 + 'rsrc/css/application/base/main-menu-view.css' => '7bc94bc2', 38 + 'rsrc/css/application/base/notification-menu.css' => '6a697e43', 39 39 'rsrc/css/application/base/phabricator-application-launch-view.css' => '95351601', 40 40 'rsrc/css/application/base/phui-theme.css' => '798c69b8', 41 41 'rsrc/css/application/base/standard-page-view.css' => '894d8a25', ··· 96 96 'rsrc/css/application/policy/policy-transaction-detail.css' => '82100a43', 97 97 'rsrc/css/application/policy/policy.css' => '957ea14c', 98 98 'rsrc/css/application/ponder/ponder-view.css' => 'fbd45f96', 99 - 'rsrc/css/application/project/project-card-view.css' => '9418c97d', 99 + 'rsrc/css/application/project/project-card-view.css' => 'd27c67ae', 100 100 'rsrc/css/application/project/project-view.css' => '1e6f7072', 101 101 'rsrc/css/application/releeph/releeph-core.css' => '9b3c5733', 102 102 'rsrc/css/application/releeph/releeph-preview-branch.css' => 'b7a6f4a5', ··· 108 108 'rsrc/css/application/tokens/tokens.css' => '3d0f239e', 109 109 'rsrc/css/application/uiexample/example.css' => '528b19de', 110 110 'rsrc/css/core/core.css' => 'd0801452', 111 - 'rsrc/css/core/remarkup.css' => 'aebc1180', 111 + 'rsrc/css/core/remarkup.css' => '4a2de2bb', 112 112 'rsrc/css/core/syntax.css' => '769d3498', 113 113 'rsrc/css/core/z-index.css' => '5e72c4e0', 114 114 'rsrc/css/diviner/diviner-shared.css' => 'aa3656aa', ··· 128 128 'rsrc/css/phui/object-item/phui-oi-flush-ui.css' => '9d9685d6', 129 129 'rsrc/css/phui/object-item/phui-oi-list-view.css' => 'bff632a4', 130 130 'rsrc/css/phui/object-item/phui-oi-simple-ui.css' => 'a8beebea', 131 - 'rsrc/css/phui/phui-action-list.css' => 'e1d48300', 131 + 'rsrc/css/phui/phui-action-list.css' => '5679229f', 132 132 'rsrc/css/phui/phui-action-panel.css' => '91c7b835', 133 133 'rsrc/css/phui/phui-badge.css' => '3baef8db', 134 134 'rsrc/css/phui/phui-basic-nav-view.css' => '7093573b', 135 135 'rsrc/css/phui/phui-big-info-view.css' => 'bd903741', 136 136 'rsrc/css/phui/phui-box.css' => '33b629f8', 137 - 'rsrc/css/phui/phui-button.css' => '43f4912e', 137 + 'rsrc/css/phui/phui-button.css' => '9718cb0c', 138 138 'rsrc/css/phui/phui-chart.css' => '6bf6f78e', 139 139 'rsrc/css/phui/phui-cms.css' => 'be43c8a8', 140 140 'rsrc/css/phui/phui-comment-form.css' => '48fbd65d', 141 141 'rsrc/css/phui/phui-comment-panel.css' => 'f50152ad', 142 142 'rsrc/css/phui/phui-crumbs-view.css' => 'f82868f2', 143 143 'rsrc/css/phui/phui-curtain-view.css' => '947bf1a4', 144 - 'rsrc/css/phui/phui-document-pro.css' => 'c354e312', 144 + 'rsrc/css/phui/phui-document-pro.css' => 'f56738ed', 145 145 'rsrc/css/phui/phui-document-summary.css' => '9ca48bdf', 146 146 'rsrc/css/phui/phui-document.css' => 'c32e8dec', 147 147 'rsrc/css/phui/phui-feed-story.css' => '44a9c8e9', 148 148 'rsrc/css/phui/phui-fontkit.css' => '9cda225e', 149 - 'rsrc/css/phui/phui-form-view.css' => '04cc4771', 149 + 'rsrc/css/phui/phui-form-view.css' => 'adca31ce', 150 150 'rsrc/css/phui/phui-form.css' => '2342b0e5', 151 151 'rsrc/css/phui/phui-head-thing.css' => 'fd311e5f', 152 152 'rsrc/css/phui/phui-header-view.css' => '6ec8f155', 153 - 'rsrc/css/phui/phui-hovercard.css' => 'de1a2119', 153 + 'rsrc/css/phui/phui-hovercard.css' => 'e904f5dc', 154 154 'rsrc/css/phui/phui-icon-set-selector.css' => '1ab67aad', 155 155 'rsrc/css/phui/phui-icon.css' => '09f46dd9', 156 156 'rsrc/css/phui/phui-image-mask.css' => 'a8498f9c', ··· 170 170 'rsrc/css/phui/phui-status.css' => 'd5263e49', 171 171 'rsrc/css/phui/phui-tag-view.css' => '84d65f26', 172 172 'rsrc/css/phui/phui-timeline-view.css' => 'bc523970', 173 - 'rsrc/css/phui/phui-two-column-view.css' => '7babf5b9', 173 + 'rsrc/css/phui/phui-two-column-view.css' => 'a0d3858a', 174 174 'rsrc/css/phui/workboards/phui-workboard-color.css' => 'b60ef38a', 175 175 'rsrc/css/phui/workboards/phui-workboard.css' => 'c88912ee', 176 - 'rsrc/css/phui/workboards/phui-workcard.css' => '00979e40', 176 + 'rsrc/css/phui/workboards/phui-workcard.css' => 'cca5fa92', 177 177 'rsrc/css/phui/workboards/phui-workpanel.css' => 'a3a63478', 178 178 'rsrc/css/sprite-login.css' => '587d92d7', 179 179 'rsrc/css/sprite-tokens.css' => '9cdfd599', ··· 538 538 'rsrc/js/phui/behavior-phui-submenu.js' => 'a6f7a73b', 539 539 'rsrc/js/phui/behavior-phui-tab-group.js' => '0a0b10e9', 540 540 'rsrc/js/phuix/PHUIXActionListView.js' => 'b5c256b8', 541 - 'rsrc/js/phuix/PHUIXActionView.js' => '8cf6d262', 541 + 'rsrc/js/phuix/PHUIXActionView.js' => '9cc178ed', 542 542 'rsrc/js/phuix/PHUIXAutocomplete.js' => '6d86ce8b', 543 543 'rsrc/js/phuix/PHUIXDropdownMenu.js' => '82e270da', 544 544 'rsrc/js/phuix/PHUIXFormControl.js' => 'bbece68d', ··· 548 548 'almanac-css' => 'dbb9b3af', 549 549 'aphront-bars' => '231ac33c', 550 550 'aphront-dark-console-css' => 'f54bf286', 551 - 'aphront-dialog-view-css' => '938f52c5', 551 + 'aphront-dialog-view-css' => '5e5aa60b', 552 552 'aphront-list-filter-view-css' => '5d6f0526', 553 553 'aphront-multi-column-view-css' => '84cc6640', 554 554 'aphront-panel-view-css' => '8427b78d', ··· 778 778 'paste-css' => '1898e534', 779 779 'path-typeahead' => 'f7fc67ec', 780 780 'people-profile-css' => '2473d929', 781 - 'phabricator-action-list-view-css' => 'e1d48300', 781 + 'phabricator-action-list-view-css' => '5679229f', 782 782 'phabricator-application-launch-view-css' => '95351601', 783 783 'phabricator-busy' => '59a7976a', 784 784 'phabricator-chatlog-css' => 'd295b020', ··· 796 796 'phabricator-flag-css' => 'bba8f811', 797 797 'phabricator-keyboard-shortcut' => '1ae869f2', 798 798 'phabricator-keyboard-shortcut-manager' => '4a021c10', 799 - 'phabricator-main-menu-view' => 'f03e17be', 799 + 'phabricator-main-menu-view' => '7bc94bc2', 800 800 'phabricator-nav-view-css' => 'b29426e9', 801 801 'phabricator-notification' => 'ccf1cbf8', 802 802 'phabricator-notification-css' => '3f6c89c9', 803 - 'phabricator-notification-menu-css' => '1e055865', 803 + 'phabricator-notification-menu-css' => '6a697e43', 804 804 'phabricator-object-selector-css' => '85ee8ce6', 805 805 'phabricator-phtize' => 'd254d646', 806 806 'phabricator-prefab' => '8d40ae75', 807 - 'phabricator-remarkup-css' => 'aebc1180', 807 + 'phabricator-remarkup-css' => '4a2de2bb', 808 808 'phabricator-search-results-css' => '64ad079a', 809 809 'phabricator-shaped-request' => '7cbe244b', 810 810 'phabricator-slowvote-css' => 'a94b7230', ··· 840 840 'phui-basic-nav-view-css' => '7093573b', 841 841 'phui-big-info-view-css' => 'bd903741', 842 842 'phui-box-css' => '33b629f8', 843 - 'phui-button-css' => '43f4912e', 843 + 'phui-button-css' => '9718cb0c', 844 844 'phui-calendar-css' => '477acfaa', 845 845 'phui-calendar-day-css' => '572b1893', 846 846 'phui-calendar-list-css' => 'fcc9fb41', ··· 853 853 'phui-curtain-view-css' => '947bf1a4', 854 854 'phui-document-summary-view-css' => '9ca48bdf', 855 855 'phui-document-view-css' => 'c32e8dec', 856 - 'phui-document-view-pro-css' => 'c354e312', 856 + 'phui-document-view-pro-css' => 'f56738ed', 857 857 'phui-feed-story-css' => '44a9c8e9', 858 858 'phui-font-icon-base-css' => '870a7360', 859 859 'phui-fontkit-css' => '9cda225e', 860 860 'phui-form-css' => '2342b0e5', 861 - 'phui-form-view-css' => '04cc4771', 861 + 'phui-form-view-css' => 'adca31ce', 862 862 'phui-head-thing-view-css' => 'fd311e5f', 863 863 'phui-header-view-css' => '6ec8f155', 864 864 'phui-hovercard' => '1bd28176', 865 - 'phui-hovercard-view-css' => 'de1a2119', 865 + 'phui-hovercard-view-css' => 'e904f5dc', 866 866 'phui-icon-set-selector-css' => '1ab67aad', 867 867 'phui-icon-view-css' => '09f46dd9', 868 868 'phui-image-mask-css' => 'a8498f9c', ··· 890 890 'phui-tag-view-css' => '84d65f26', 891 891 'phui-theme-css' => '798c69b8', 892 892 'phui-timeline-view-css' => 'bc523970', 893 - 'phui-two-column-view-css' => '7babf5b9', 893 + 'phui-two-column-view-css' => 'a0d3858a', 894 894 'phui-workboard-color-css' => 'b60ef38a', 895 895 'phui-workboard-view-css' => 'c88912ee', 896 - 'phui-workcard-view-css' => '00979e40', 896 + 'phui-workcard-view-css' => 'cca5fa92', 897 897 'phui-workpanel-view-css' => 'a3a63478', 898 898 'phuix-action-list-view' => 'b5c256b8', 899 - 'phuix-action-view' => '8cf6d262', 899 + 'phuix-action-view' => '9cc178ed', 900 900 'phuix-autocomplete' => '6d86ce8b', 901 901 'phuix-dropdown-menu' => '82e270da', 902 902 'phuix-form-control-view' => 'bbece68d', ··· 905 905 'policy-edit-css' => '815c66f7', 906 906 'policy-transaction-detail-css' => '82100a43', 907 907 'ponder-view-css' => 'fbd45f96', 908 - 'project-card-view-css' => '9418c97d', 908 + 'project-card-view-css' => 'd27c67ae', 909 909 'project-view-css' => '1e6f7072', 910 910 'releeph-core' => '9b3c5733', 911 911 'releeph-preview-branch' => 'b7a6f4a5', ··· 1508 1508 'owners-path-editor', 1509 1509 'javelin-behavior', 1510 1510 ), 1511 + '7bc94bc2' => array( 1512 + 'phui-theme-css', 1513 + ), 1511 1514 '7cbe244b' => array( 1512 1515 'javelin-install', 1513 1516 'javelin-util', ··· 1603 1606 'javelin-stratcom', 1604 1607 'javelin-behavior', 1605 1608 ), 1606 - '8cf6d262' => array( 1607 - 'javelin-install', 1608 - 'javelin-dom', 1609 - 'javelin-util', 1610 - ), 1611 1609 '8d3bc1b2' => array( 1612 1610 'javelin-dom', 1613 1611 'javelin-util', ··· 1706 1704 'javelin-util', 1707 1705 'javelin-workflow', 1708 1706 'javelin-stratcom', 1707 + ), 1708 + '9cc178ed' => array( 1709 + 'javelin-install', 1710 + 'javelin-dom', 1711 + 'javelin-util', 1709 1712 ), 1710 1713 '9d9685d6' => array( 1711 1714 'phui-oi-list-view-css', ··· 2160 2163 'javelin-util', 2161 2164 'javelin-workflow', 2162 2165 'javelin-json', 2163 - ), 2164 - 'f03e17be' => array( 2165 - 'phui-theme-css', 2166 2166 ), 2167 2167 'f12cbc9f' => array( 2168 2168 'phui-oi-list-view-css',
+1 -17
src/__phutil_library_map__.php
··· 1698 1698 'PHUIListItemView' => 'view/phui/PHUIListItemView.php', 1699 1699 'PHUIListView' => 'view/phui/PHUIListView.php', 1700 1700 'PHUIListViewTestCase' => 'view/layout/__tests__/PHUIListViewTestCase.php', 1701 - 'PHUIMainMenuView' => 'view/phui/PHUIMainMenuView.php', 1702 1701 'PHUIObjectBoxView' => 'view/phui/PHUIObjectBoxView.php', 1703 1702 'PHUIObjectItemListExample' => 'applications/uiexample/examples/PHUIObjectItemListExample.php', 1704 1703 'PHUIObjectItemListView' => 'view/phui/PHUIObjectItemListView.php', ··· 2592 2591 'PhabricatorEditEngineConfigurationTransactionQuery' => 'applications/transactions/query/PhabricatorEditEngineConfigurationTransactionQuery.php', 2593 2592 'PhabricatorEditEngineConfigurationViewController' => 'applications/transactions/controller/PhabricatorEditEngineConfigurationViewController.php', 2594 2593 'PhabricatorEditEngineController' => 'applications/transactions/controller/PhabricatorEditEngineController.php', 2595 - 'PhabricatorEditEngineCreateQuickActions' => 'applications/settings/quickmenu/PhabricatorEditEngineCreateQuickActions.php', 2596 2594 'PhabricatorEditEngineDatasource' => 'applications/transactions/typeahead/PhabricatorEditEngineDatasource.php', 2597 2595 'PhabricatorEditEngineExtension' => 'applications/transactions/engineextension/PhabricatorEditEngineExtension.php', 2598 2596 'PhabricatorEditEngineExtensionModule' => 'applications/transactions/engineextension/PhabricatorEditEngineExtensionModule.php', ··· 2673 2671 'PhabricatorFavoritesConstants' => 'applications/favorites/constants/PhabricatorFavoritesConstants.php', 2674 2672 'PhabricatorFavoritesController' => 'applications/favorites/controller/PhabricatorFavoritesController.php', 2675 2673 'PhabricatorFavoritesMainController' => 'applications/favorites/controller/PhabricatorFavoritesMainController.php', 2676 - 'PhabricatorFavoritesManageProfileMenuItem' => 'applications/favorites/menuitem/PhabricatorFavoritesManageProfileMenuItem.php', 2677 2674 'PhabricatorFavoritesMenuItemController' => 'applications/favorites/controller/PhabricatorFavoritesMenuItemController.php', 2678 2675 'PhabricatorFavoritesProfileMenuEngine' => 'applications/favorites/engine/PhabricatorFavoritesProfileMenuEngine.php', 2679 2676 'PhabricatorFaxContentSource' => 'infrastructure/contentsource/PhabricatorFaxContentSource.php', ··· 2828 2825 'PhabricatorHelpDocumentationController' => 'applications/help/controller/PhabricatorHelpDocumentationController.php', 2829 2826 'PhabricatorHelpEditorProtocolController' => 'applications/help/controller/PhabricatorHelpEditorProtocolController.php', 2830 2827 'PhabricatorHelpKeyboardShortcutController' => 'applications/help/controller/PhabricatorHelpKeyboardShortcutController.php', 2831 - 'PhabricatorHelpMainMenuBarExtension' => 'applications/help/extension/PhabricatorHelpMainMenuBarExtension.php', 2832 2828 'PhabricatorHeraldApplication' => 'applications/herald/application/PhabricatorHeraldApplication.php', 2833 2829 'PhabricatorHeraldContentSource' => 'applications/herald/contentsource/PhabricatorHeraldContentSource.php', 2834 2830 'PhabricatorHighSecurityRequestExceptionHandler' => 'aphront/handler/PhabricatorHighSecurityRequestExceptionHandler.php', ··· 2841 2837 'PhabricatorHomeMenuItemController' => 'applications/home/controller/PhabricatorHomeMenuItemController.php', 2842 2838 'PhabricatorHomePreferencesSettingsPanel' => 'applications/settings/panel/PhabricatorHomePreferencesSettingsPanel.php', 2843 2839 'PhabricatorHomeProfileMenuEngine' => 'applications/home/engine/PhabricatorHomeProfileMenuEngine.php', 2844 - 'PhabricatorHomeQuickCreateController' => 'applications/home/controller/PhabricatorHomeQuickCreateController.php', 2845 2840 'PhabricatorHovercardEngineExtension' => 'applications/search/engineextension/PhabricatorHovercardEngineExtension.php', 2846 2841 'PhabricatorHovercardEngineExtensionModule' => 'applications/search/engineextension/PhabricatorHovercardEngineExtensionModule.php', 2847 2842 'PhabricatorIDsSearchEngineExtension' => 'applications/search/engineextension/PhabricatorIDsSearchEngineExtension.php', ··· 3317 3312 'PhabricatorPeopleLogQuery' => 'applications/people/query/PhabricatorPeopleLogQuery.php', 3318 3313 'PhabricatorPeopleLogSearchEngine' => 'applications/people/query/PhabricatorPeopleLogSearchEngine.php', 3319 3314 'PhabricatorPeopleLogsController' => 'applications/people/controller/PhabricatorPeopleLogsController.php', 3320 - 'PhabricatorPeopleMainMenuBarExtension' => 'applications/people/extension/PhabricatorPeopleMainMenuBarExtension.php', 3321 3315 'PhabricatorPeopleManageProfileMenuItem' => 'applications/people/menuitem/PhabricatorPeopleManageProfileMenuItem.php', 3322 3316 'PhabricatorPeopleNewController' => 'applications/people/controller/PhabricatorPeopleNewController.php', 3323 3317 'PhabricatorPeopleNoOwnerDatasource' => 'applications/people/typeahead/PhabricatorPeopleNoOwnerDatasource.php', ··· 3562 3556 'PhabricatorQueryOrderItem' => 'infrastructure/query/order/PhabricatorQueryOrderItem.php', 3563 3557 'PhabricatorQueryOrderTestCase' => 'infrastructure/query/order/__tests__/PhabricatorQueryOrderTestCase.php', 3564 3558 'PhabricatorQueryOrderVector' => 'infrastructure/query/order/PhabricatorQueryOrderVector.php', 3565 - 'PhabricatorQuickActions' => 'applications/settings/quickmenu/PhabricatorQuickActions.php', 3566 3559 'PhabricatorRateLimitRequestExceptionHandler' => 'aphront/handler/PhabricatorRateLimitRequestExceptionHandler.php', 3567 3560 'PhabricatorRecaptchaConfigOptions' => 'applications/config/option/PhabricatorRecaptchaConfigOptions.php', 3568 3561 'PhabricatorRecipientHasBadgeEdgeType' => 'applications/badges/edge/PhabricatorRecipientHasBadgeEdgeType.php', ··· 3771 3764 'PhabricatorSettingsListController' => 'applications/settings/controller/PhabricatorSettingsListController.php', 3772 3765 'PhabricatorSettingsLogsPanelGroup' => 'applications/settings/panelgroup/PhabricatorSettingsLogsPanelGroup.php', 3773 3766 'PhabricatorSettingsMainController' => 'applications/settings/controller/PhabricatorSettingsMainController.php', 3774 - 'PhabricatorSettingsMainMenuBarExtension' => 'applications/settings/extension/PhabricatorSettingsMainMenuBarExtension.php', 3775 3767 'PhabricatorSettingsPanel' => 'applications/settings/panel/PhabricatorSettingsPanel.php', 3776 3768 'PhabricatorSettingsPanelGroup' => 'applications/settings/panelgroup/PhabricatorSettingsPanelGroup.php', 3777 3769 'PhabricatorSettingsTimezoneController' => 'applications/settings/controller/PhabricatorSettingsTimezoneController.php', ··· 6575 6567 'PHUIListItemView' => 'AphrontTagView', 6576 6568 'PHUIListView' => 'AphrontTagView', 6577 6569 'PHUIListViewTestCase' => 'PhabricatorTestCase', 6578 - 'PHUIMainMenuView' => 'AphrontView', 6579 6570 'PHUIObjectBoxView' => 'AphrontTagView', 6580 6571 'PHUIObjectItemListExample' => 'PhabricatorUIExample', 6581 6572 'PHUIObjectItemListView' => 'AphrontTagView', ··· 6679 6670 'PhabricatorAccessLogConfigOptions' => 'PhabricatorApplicationConfigOptions', 6680 6671 'PhabricatorAccessibilitySetting' => 'PhabricatorSelectSetting', 6681 6672 'PhabricatorAccountSettingsPanel' => 'PhabricatorEditEngineSettingsPanel', 6682 - 'PhabricatorActionListView' => 'AphrontView', 6673 + 'PhabricatorActionListView' => 'AphrontTagView', 6683 6674 'PhabricatorActionView' => 'AphrontView', 6684 6675 'PhabricatorActivitySettingsPanel' => 'PhabricatorSettingsPanel', 6685 6676 'PhabricatorAdministratorsPolicyRule' => 'PhabricatorPolicyRule', ··· 7613 7604 'PhabricatorEditEngineConfigurationTransactionQuery' => 'PhabricatorApplicationTransactionQuery', 7614 7605 'PhabricatorEditEngineConfigurationViewController' => 'PhabricatorEditEngineController', 7615 7606 'PhabricatorEditEngineController' => 'PhabricatorApplicationTransactionController', 7616 - 'PhabricatorEditEngineCreateQuickActions' => 'PhabricatorQuickActions', 7617 7607 'PhabricatorEditEngineDatasource' => 'PhabricatorTypeaheadDatasource', 7618 7608 'PhabricatorEditEngineExtension' => 'Phobject', 7619 7609 'PhabricatorEditEngineExtensionModule' => 'PhabricatorConfigModule', ··· 7696 7686 'PhabricatorFavoritesConstants' => 'PhabricatorFavoritesController', 7697 7687 'PhabricatorFavoritesController' => 'PhabricatorController', 7698 7688 'PhabricatorFavoritesMainController' => 'PhabricatorFavoritesController', 7699 - 'PhabricatorFavoritesManageProfileMenuItem' => 'PhabricatorProfileMenuItem', 7700 7689 'PhabricatorFavoritesMenuItemController' => 'PhabricatorFavoritesController', 7701 7690 'PhabricatorFavoritesProfileMenuEngine' => 'PhabricatorProfileMenuEngine', 7702 7691 'PhabricatorFaxContentSource' => 'PhabricatorContentSource', ··· 7887 7876 'PhabricatorHelpDocumentationController' => 'PhabricatorHelpController', 7888 7877 'PhabricatorHelpEditorProtocolController' => 'PhabricatorHelpController', 7889 7878 'PhabricatorHelpKeyboardShortcutController' => 'PhabricatorHelpController', 7890 - 'PhabricatorHelpMainMenuBarExtension' => 'PhabricatorMainMenuBarExtension', 7891 7879 'PhabricatorHeraldApplication' => 'PhabricatorApplication', 7892 7880 'PhabricatorHeraldContentSource' => 'PhabricatorContentSource', 7893 7881 'PhabricatorHighSecurityRequestExceptionHandler' => 'PhabricatorRequestExceptionHandler', ··· 7900 7888 'PhabricatorHomeMenuItemController' => 'PhabricatorHomeController', 7901 7889 'PhabricatorHomePreferencesSettingsPanel' => 'PhabricatorSettingsPanel', 7902 7890 'PhabricatorHomeProfileMenuEngine' => 'PhabricatorProfileMenuEngine', 7903 - 'PhabricatorHomeQuickCreateController' => 'PhabricatorHomeController', 7904 7891 'PhabricatorHovercardEngineExtension' => 'Phobject', 7905 7892 'PhabricatorHovercardEngineExtensionModule' => 'PhabricatorConfigModule', 7906 7893 'PhabricatorIDsSearchEngineExtension' => 'PhabricatorSearchEngineExtension', ··· 8450 8437 'PhabricatorPeopleLogQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', 8451 8438 'PhabricatorPeopleLogSearchEngine' => 'PhabricatorApplicationSearchEngine', 8452 8439 'PhabricatorPeopleLogsController' => 'PhabricatorPeopleController', 8453 - 'PhabricatorPeopleMainMenuBarExtension' => 'PhabricatorMainMenuBarExtension', 8454 8440 'PhabricatorPeopleManageProfileMenuItem' => 'PhabricatorProfileMenuItem', 8455 8441 'PhabricatorPeopleNewController' => 'PhabricatorPeopleController', 8456 8442 'PhabricatorPeopleNoOwnerDatasource' => 'PhabricatorTypeaheadDatasource', ··· 8749 8735 'Phobject', 8750 8736 'Iterator', 8751 8737 ), 8752 - 'PhabricatorQuickActions' => 'Phobject', 8753 8738 'PhabricatorRateLimitRequestExceptionHandler' => 'PhabricatorRequestExceptionHandler', 8754 8739 'PhabricatorRecaptchaConfigOptions' => 'PhabricatorApplicationConfigOptions', 8755 8740 'PhabricatorRecipientHasBadgeEdgeType' => 'PhabricatorEdgeType', ··· 9016 9001 'PhabricatorSettingsListController' => 'PhabricatorController', 9017 9002 'PhabricatorSettingsLogsPanelGroup' => 'PhabricatorSettingsPanelGroup', 9018 9003 'PhabricatorSettingsMainController' => 'PhabricatorController', 9019 - 'PhabricatorSettingsMainMenuBarExtension' => 'PhabricatorMainMenuBarExtension', 9020 9004 'PhabricatorSettingsPanel' => 'Phobject', 9021 9005 'PhabricatorSettingsPanelGroup' => 'Phobject', 9022 9006 'PhabricatorSettingsTimezoneController' => 'PhabricatorController',
+6 -31
src/applications/auth/extension/PhabricatorAuthMainMenuBarExtension.php
··· 13 13 $viewer = $this->getViewer(); 14 14 15 15 if ($viewer->isLoggedIn()) { 16 - return array( 17 - $this->buildLogoutMenu(), 18 - ); 16 + return array(); 19 17 } 20 18 21 19 $controller = $this->getController(); ··· 30 28 ); 31 29 } 32 30 33 - private function buildLogoutMenu() { 34 - $controller = $this->getController(); 35 - 36 - $is_selected = ($controller instanceof PhabricatorLogoutController); 37 - 38 - $bar_item = id(new PHUIListItemView()) 39 - ->addClass('core-menu-item') 40 - ->setName(pht('Log Out')) 41 - ->setIcon('fa-sign-out') 42 - ->setWorkflow(true) 43 - ->setHref('/logout/') 44 - ->setSelected($is_selected) 45 - ->setAural(pht('Log Out')); 46 - 47 - return id(new PHUIMainMenuView()) 48 - ->setOrder(900) 49 - ->setMenuBarItem($bar_item); 50 - } 51 - 52 31 private function buildLoginMenu() { 53 32 $controller = $this->getController(); 54 33 ··· 58 37 $uri->setQueryParam('next', $path); 59 38 } 60 39 61 - $bar_item = id(new PHUIListItemView()) 62 - ->addClass('core-menu-item') 63 - ->setName(pht('Log In')) 64 - ->setIcon('fa-sign-in') 40 + return id(new PHUIButtonView()) 41 + ->setTag('a') 42 + ->setText(pht('Log In')) 65 43 ->setHref($uri) 66 - ->setAural(pht('Log In')); 67 - 68 - return id(new PHUIMainMenuView()) 69 - ->setOrder(900) 70 - ->setMenuBarItem($bar_item); 44 + ->setNoCSS(true) 45 + ->addClass('phabricator-core-login-button'); 71 46 } 72 47 73 48 }
+4 -16
src/applications/base/PhabricatorApplication.php
··· 172 172 173 173 $articles = $this->getHelpDocumentationArticles($viewer); 174 174 if ($articles) { 175 - $items[] = id(new PHUIListItemView()) 176 - ->setType(PHUIListItemView::TYPE_LABEL) 177 - ->setName(pht('%s Documentation', $this->getName())); 178 175 foreach ($articles as $article) { 179 - $item = id(new PHUIListItemView()) 176 + $item = id(new PhabricatorActionView()) 180 177 ->setName($article['name']) 181 - ->setIcon('fa-book') 182 - ->setHref($article['href']) 183 - ->setOpenInNewWindow(true); 184 - 178 + ->setHref($article['href']); 185 179 $items[] = $item; 186 180 } 187 181 } 188 182 189 183 $command_specs = $this->getMailCommandObjects(); 190 184 if ($command_specs) { 191 - $items[] = id(new PHUIListItemView()) 192 - ->setType(PHUIListItemView::TYPE_LABEL) 193 - ->setName(pht('Email Help')); 194 185 foreach ($command_specs as $key => $spec) { 195 186 $object = $spec['object']; 196 187 197 188 $class = get_class($this); 198 189 $href = '/applications/mailcommands/'.$class.'/'.$key.'/'; 199 - 200 - $item = id(new PHUIListItemView()) 190 + $item = id(new PhabricatorActionView()) 201 191 ->setName($spec['name']) 202 - ->setIcon('fa-envelope-o') 203 - ->setHref($href) 204 - ->setOpenInNewWindow(true); 192 + ->setHref($href); 205 193 $items[] = $item; 206 194 } 207 195 }
+1 -1
src/applications/celerity/postprocessor/CelerityDefaultPostprocessor.php
··· 29 29 "Arial, sans-serif", 30 30 31 31 // Drop Shadow 32 - 'dropshadow' => '0 1px 6px rgba(0, 0, 0, .25)', 32 + 'dropshadow' => '0 2px 12px rgba(0, 0, 0, .20)', 33 33 'whitetextshadow' => '0 1px 0 rgba(255, 255, 255, 1)', 34 34 35 35 // Anchors
+59 -3
src/applications/favorites/application/PhabricatorFavoritesApplication.php
··· 15 15 } 16 16 17 17 public function getIcon() { 18 - return 'fa-star-o'; 18 + return 'fa-star'; 19 19 } 20 20 21 21 public function getRoutes() { ··· 32 32 return false; 33 33 } 34 34 35 - public function getApplicationOrder() { 36 - return 9; 35 + public function buildMainMenuExtraNodes( 36 + PhabricatorUser $viewer, 37 + PhabricatorController $controller = null) { 38 + 39 + return id(new PHUIButtonView()) 40 + ->setTag('a') 41 + ->setHref('#') 42 + ->setIcon('fa-star') 43 + ->addClass('phabricator-core-user-menu') 44 + ->setNoCSS(true) 45 + ->setDropdown(true) 46 + ->setDropdownMenu($this->renderFavoritesDropdown($viewer)); 47 + } 48 + 49 + private function renderFavoritesDropdown(PhabricatorUser $viewer) { 50 + 51 + $application = __CLASS__; 52 + $favorites = id(new PhabricatorApplicationQuery()) 53 + ->setViewer($viewer) 54 + ->withClasses(array($application)) 55 + ->withInstalled(true) 56 + ->executeOne(); 57 + 58 + $filter_view = id(new PhabricatorFavoritesProfileMenuEngine()) 59 + ->setViewer($viewer) 60 + ->setProfileObject($favorites) 61 + ->setMenuType(PhabricatorProfileMenuEngine::MENU_COMBINED) 62 + ->buildNavigation(); 63 + 64 + $menu_view = $filter_view->getMenu(); 65 + $item_views = $menu_view->getItems(); 66 + 67 + $view = id(new PhabricatorActionListView()) 68 + ->setViewer($viewer); 69 + foreach ($item_views as $item) { 70 + $type = null; 71 + if (!strlen($item->getName())) { 72 + $type = PhabricatorActionView::TYPE_DIVIDER; 73 + } 74 + $action = id(new PhabricatorActionView()) 75 + ->setName($item->getName()) 76 + ->setHref($item->getHref()) 77 + ->setType($type); 78 + $view->addAction($action); 79 + } 80 + 81 + // Build out edit interface 82 + if ($viewer->isLoggedIn()) { 83 + $view->addAction( 84 + id(new PhabricatorActionView()) 85 + ->setType(PhabricatorActionView::TYPE_DIVIDER)); 86 + $view->addAction( 87 + id(new PhabricatorActionView()) 88 + ->setName(pht('Edit Favorites')) 89 + ->setHref('/favorites/')); 90 + } 91 + 92 + return $view; 37 93 } 38 94 39 95 }
+1 -1
src/applications/favorites/constants/PhabricatorFavoritesConstants.php
··· 6 6 const ITEM_TASK = 'favorites.task'; 7 7 const ITEM_PROJECT = 'favorites.project'; 8 8 const ITEM_REPOSITORY = 'favorites.repository'; 9 - const ITEM_MANAGE = 'favorites.manage'; 9 + const ITEM_DIVIDER = 'favorites.divider'; 10 10 11 11 }
+5
src/applications/favorites/controller/PhabricatorFavoritesMainController.php
··· 10 10 public function handleRequest(AphrontRequest $request) { 11 11 $viewer = $request->getViewer(); 12 12 13 + if (!$viewer->getIsAdmin()) { 14 + $uri = '/favorites/personal/item/configure/'; 15 + return id(new AphrontRedirectResponse())->setURI($uri); 16 + } 17 + 13 18 $menu = id(new PHUIObjectItemListView()) 14 19 ->setUser($viewer); 15 20
+5 -1
src/applications/favorites/controller/PhabricatorFavoritesMenuItemController.php
··· 7 7 $viewer = $this->getViewer(); 8 8 $type = $request->getURIData('type'); 9 9 $custom_phid = null; 10 + $menu = PhabricatorProfileMenuEngine::MENU_GLOBAL; 10 11 if ($type == 'personal') { 11 12 $custom_phid = $viewer->getPHID(); 13 + $menu = PhabricatorProfileMenuEngine::MENU_PERSONAL; 12 14 } 13 15 14 16 $application = 'PhabricatorFavoritesApplication'; ··· 21 23 $engine = id(new PhabricatorFavoritesProfileMenuEngine()) 22 24 ->setProfileObject($favorites) 23 25 ->setCustomPHID($custom_phid) 24 - ->setController($this); 26 + ->setController($this) 27 + ->setMenuType($menu) 28 + ->setShowNavigation(false); 25 29 26 30 return $engine->buildResponse(); 27 31 }
+1 -6
src/applications/favorites/engine/PhabricatorFavoritesProfileMenuEngine.php
··· 21 21 protected function getBuiltinProfileItems($object) { 22 22 $items = array(); 23 23 $custom_phid = $this->getCustomPHID(); 24 + $viewer = $this->getViewer(); 24 25 25 26 // Built-in Global Defaults 26 27 if (!$custom_phid) { ··· 57 58 ->setMenuItemKey(PhabricatorEditEngineProfileMenuItem::MENUITEMKEY) 58 59 ->setMenuItemProperties($create_repository); 59 60 } 60 - 61 - // Single Manage Item, switches URI based on admin/user 62 - $items[] = $this->newItem() 63 - ->setBuiltinKey(PhabricatorFavoritesConstants::ITEM_MANAGE) 64 - ->setMenuItemKey( 65 - PhabricatorFavoritesManageProfileMenuItem::MENUITEMKEY); 66 61 67 62 return $items; 68 63 }
-72
src/applications/favorites/menuitem/PhabricatorFavoritesManageProfileMenuItem.php
··· 1 - <?php 2 - 3 - final class PhabricatorFavoritesManageProfileMenuItem 4 - extends PhabricatorProfileMenuItem { 5 - 6 - const MENUITEMKEY = 'favorites.manage'; 7 - 8 - public function getMenuItemTypeName() { 9 - return pht('Manage Favorites'); 10 - } 11 - 12 - private function getDefaultName() { 13 - return pht('Manage'); 14 - } 15 - 16 - public function canHideMenuItem( 17 - PhabricatorProfileMenuItemConfiguration $config) { 18 - return false; 19 - } 20 - 21 - public function canMakeDefault( 22 - PhabricatorProfileMenuItemConfiguration $config) { 23 - return false; 24 - } 25 - 26 - public function getDisplayName( 27 - PhabricatorProfileMenuItemConfiguration $config) { 28 - $name = $config->getMenuItemProperty('name'); 29 - 30 - if (strlen($name)) { 31 - return $name; 32 - } 33 - 34 - return $this->getDefaultName(); 35 - } 36 - 37 - public function buildEditEngineFields( 38 - PhabricatorProfileMenuItemConfiguration $config) { 39 - return array( 40 - id(new PhabricatorTextEditField()) 41 - ->setKey('name') 42 - ->setLabel(pht('Name')) 43 - ->setPlaceholder($this->getDefaultName()) 44 - ->setValue($config->getMenuItemProperty('name')), 45 - ); 46 - } 47 - 48 - protected function newNavigationMenuItems( 49 - PhabricatorProfileMenuItemConfiguration $config) { 50 - $viewer = $this->getViewer(); 51 - 52 - if ($viewer->isLoggedIn()) { 53 - $admin = $viewer->getIsAdmin(); 54 - $name = $this->getDisplayName($config); 55 - $icon = 'fa-pencil'; 56 - $href = '/favorites/personal/item/configure/'; 57 - if ($admin) { 58 - $href = '/favorites/'; 59 - } 60 - 61 - $item = $this->newItem() 62 - ->setHref($href) 63 - ->setName($name) 64 - ->setIcon($icon); 65 - } 66 - 67 - return array( 68 - $item, 69 - ); 70 - } 71 - 72 - }
-1
src/applications/help/controller/PhabricatorHelpDocumentationController.php
··· 31 31 $list->addItem( 32 32 id(new PHUIObjectItemView()) 33 33 ->setHeader($item->getName()) 34 - ->setWorkflow($item->getWorkflow()) 35 34 ->setHref($item->getHref())); 36 35 } 37 36
-70
src/applications/help/extension/PhabricatorHelpMainMenuBarExtension.php
··· 1 - <?php 2 - 3 - final class PhabricatorHelpMainMenuBarExtension 4 - extends PhabricatorMainMenuBarExtension { 5 - 6 - const MAINMENUBARKEY = 'help'; 7 - 8 - public function isExtensionEnabledForViewer(PhabricatorUser $viewer) { 9 - return true; 10 - } 11 - 12 - public function buildMainMenus() { 13 - $application = $this->getApplication(); 14 - if (!$application) { 15 - return array(); 16 - } 17 - 18 - $viewer = $this->getViewer(); 19 - $help_links = $application->getHelpMenuItems($viewer); 20 - if (!$help_links) { 21 - return array(); 22 - } 23 - 24 - $help_id = celerity_generate_unique_node_id(); 25 - 26 - Javelin::initBehavior( 27 - 'aphlict-dropdown', 28 - array( 29 - 'bubbleID' => $help_id, 30 - 'dropdownID' => 'phabricator-help-menu', 31 - 'local' => true, 32 - 'desktop' => true, 33 - 'right' => true, 34 - )); 35 - 36 - $help_name = pht('%s Help', $application->getName()); 37 - 38 - $help_item = id(new PHUIListItemView()) 39 - ->setIcon('fa-book') 40 - ->addClass('core-menu-item') 41 - ->setID($help_id) 42 - ->setName($help_name) 43 - ->setHref('/help/documentation/'.get_class($application).'/') 44 - ->setAural($help_name); 45 - 46 - $view = new PHUIListView(); 47 - foreach ($help_links as $help_link) { 48 - $view->addMenuItem($help_link); 49 - } 50 - 51 - $dropdown_menu = phutil_tag( 52 - 'div', 53 - array( 54 - 'id' => 'phabricator-help-menu', 55 - 'class' => 'phabricator-main-menu-dropdown phui-list-sidenav', 56 - 'style' => 'display: none', 57 - ), 58 - $view); 59 - 60 - $help_menu = id(new PHUIMainMenuView()) 61 - ->setOrder(200) 62 - ->setMenuBarItem($help_item) 63 - ->appendChild($dropdown_menu); 64 - 65 - return array( 66 - $help_menu, 67 - ); 68 - } 69 - 70 - }
+70 -56
src/applications/home/application/PhabricatorHomeApplication.php
··· 2 2 3 3 final class PhabricatorHomeApplication extends PhabricatorApplication { 4 4 5 - private $quickItems; 5 + private $application; 6 + 6 7 const DASHBOARD_DEFAULT = 'dashboard:default'; 7 8 8 9 public function getBaseURI() { ··· 26 27 '/' => 'PhabricatorHomeMainController', 27 28 '/(?P<only>home)/' => 'PhabricatorHomeMainController', 28 29 '/home/' => array( 29 - 'create/' => 'PhabricatorHomeQuickCreateController', 30 30 'menu/' => array( 31 31 '' => 'PhabricatorHomeMenuController', 32 32 '(?P<type>global|personal)/item/' => $this->getProfileMenuRouting( ··· 44 44 return 9; 45 45 } 46 46 47 - public function buildMainMenuItems( 48 - PhabricatorUser $user, 47 + public function buildMainMenuExtraNodes( 48 + PhabricatorUser $viewer, 49 49 PhabricatorController $controller = null) { 50 50 51 - $quick_items = $this->getQuickActionItems($user); 52 - if (!$quick_items) { 53 - return array(); 51 + if (!$viewer->isLoggedIn()) { 52 + return; 54 53 } 55 54 56 - $items = array(); 57 - $create_id = celerity_generate_unique_node_id(); 55 + $image = $viewer->getProfileImageURI(); 56 + if ($controller) { 57 + $this->application = $controller->getCurrentApplication(); 58 + } 58 59 59 - Javelin::initBehavior( 60 - 'aphlict-dropdown', 61 - array( 62 - 'bubbleID' => $create_id, 63 - 'dropdownID' => 'phabricator-quick-create-menu', 64 - 'local' => true, 65 - 'desktop' => true, 66 - 'right' => true, 67 - )); 60 + $profile_image = id(new PHUIIconView()) 61 + ->setImage($image) 62 + ->setHeadSize(PHUIIconView::HEAD_SMALL); 68 63 69 - $item = id(new PHUIListItemView()) 70 - ->setName(pht('Quick Actions')) 71 - ->setIcon('fa-plus') 72 - ->addClass('core-menu-item') 73 - ->setHref('/home/create/') 74 - ->addSigil('quick-create-menu') 75 - ->setID($create_id) 76 - ->setAural(pht('Quick Actions')) 77 - ->setOrder(300); 78 - $items[] = $item; 79 - 80 - return $items; 64 + return id(new PHUIButtonView()) 65 + ->setTag('a') 66 + ->setHref('/p/'.$viewer->getUsername().'/') 67 + ->setIcon($profile_image) 68 + ->addClass('phabricator-core-user-menu') 69 + ->setNoCSS(true) 70 + ->setDropdown(true) 71 + ->setDropdownMenu($this->renderUserDropdown($viewer)); 81 72 } 82 73 83 - public function buildMainMenuExtraNodes( 84 - PhabricatorUser $viewer, 85 - PhabricatorController $controller = null) { 74 + private function renderUserDropdown(PhabricatorUser $viewer) { 86 75 87 - $items = $this->getQuickActionItems($viewer); 76 + $view = id(new PhabricatorActionListView()) 77 + ->setViewer($viewer); 88 78 89 - $view = null; 90 - if ($items) { 91 - $view = new PHUIListView(); 92 - foreach ($items as $item) { 93 - $view->addMenuItem($item); 79 + // User Menu 80 + $view->addAction( 81 + id(new PhabricatorActionView()) 82 + ->setName($viewer->getRealName()) 83 + ->setLabel(true)); 84 + 85 + $view->addAction( 86 + id(new PhabricatorActionView()) 87 + ->setName(pht('Profile')) 88 + ->setHref('/p/'.$viewer->getUsername().'/')); 89 + 90 + $view->addAction( 91 + id(new PhabricatorActionView()) 92 + ->setName(pht('Settings')) 93 + ->setHref('/settings/user/'.$viewer->getUsername().'/')); 94 + 95 + $view->addAction( 96 + id(new PhabricatorActionView()) 97 + ->setName(pht('Manage')) 98 + ->setHref('/people/manage/'.$viewer->getID().'/')); 99 + 100 + // Help Menus 101 + if ($this->application) { 102 + $application = $this->application; 103 + $help_links = $application->getHelpMenuItems($viewer); 104 + if ($help_links) { 105 + $view->addAction( 106 + id(new PhabricatorActionView()) 107 + ->setType(PhabricatorActionView::TYPE_DIVIDER)); 108 + 109 + foreach ($help_links as $link) { 110 + $link->setOpenInNewWindow(true); 111 + $view->addAction($link); 112 + } 94 113 } 114 + } 95 115 96 - return phutil_tag( 97 - 'div', 98 - array( 99 - 'id' => 'phabricator-quick-create-menu', 100 - 'class' => 'phabricator-main-menu-dropdown phui-list-sidenav', 101 - 'style' => 'display: none', 102 - ), 103 - $view); 104 - } 116 + // Logout Menu 117 + $view->addAction( 118 + id(new PhabricatorActionView()) 119 + ->setType(PhabricatorActionView::TYPE_DIVIDER)); 120 + 121 + $view->addAction( 122 + id(new PhabricatorActionView()) 123 + ->setName(pht('Log Out %s', $viewer->getUsername())) 124 + ->setHref('/logout/') 125 + ->setWorkflow(true)); 126 + 105 127 return $view; 106 - } 107 - 108 - private function getQuickActionItems(PhabricatorUser $viewer) { 109 - if ($this->quickItems === null) { 110 - $items = PhabricatorQuickActions::loadMenuItemsForUser($viewer); 111 - $this->quickItems = $items; 112 - } 113 - return $this->quickItems; 114 128 } 115 129 116 130 }
-47
src/applications/home/controller/PhabricatorHomeQuickCreateController.php
··· 1 - <?php 2 - 3 - final class PhabricatorHomeQuickCreateController 4 - extends PhabricatorHomeController { 5 - 6 - public function handleRequest(AphrontRequest $request) { 7 - $viewer = $this->getViewer(); 8 - 9 - $items = PhabricatorQuickActions::loadMenuItemsForUser($viewer); 10 - 11 - $list = id(new PHUIObjectItemListView()) 12 - ->setUser($viewer); 13 - 14 - foreach ($items as $item) { 15 - $list->addItem( 16 - id(new PHUIObjectItemView()) 17 - ->setHeader($item->getName()) 18 - ->setWorkflow($item->getWorkflow()) 19 - ->setHref($item->getHref())); 20 - } 21 - 22 - $title = pht('Quick Create'); 23 - 24 - $crumbs = $this->buildApplicationCrumbs(); 25 - $crumbs->addTextCrumb(pht('Quick Create')); 26 - $crumbs->setBorder(true); 27 - 28 - $box = id(new PHUIObjectBoxView()) 29 - ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) 30 - ->setObjectList($list); 31 - 32 - $header = id(new PHUIHeaderView()) 33 - ->setHeader($title) 34 - ->setHeaderIcon('fa-plus-square'); 35 - 36 - $view = id(new PHUITwoColumnView()) 37 - ->setHeader($header) 38 - ->setFooter($box); 39 - 40 - return $this->newPage() 41 - ->setTitle($title) 42 - ->setCrumbs($crumbs) 43 - ->appendChild($view); 44 - 45 - } 46 - 47 - }
-41
src/applications/people/extension/PhabricatorPeopleMainMenuBarExtension.php
··· 1 - <?php 2 - 3 - final class PhabricatorPeopleMainMenuBarExtension 4 - extends PhabricatorMainMenuBarExtension { 5 - 6 - const MAINMENUBARKEY = 'people'; 7 - 8 - public function buildMainMenus() { 9 - $viewer = $this->getViewer(); 10 - $image = $viewer->getProfileImageURI(); 11 - 12 - $bar_item = id(new PHUIListItemView()) 13 - ->setName($viewer->getUsername()) 14 - ->setHref('/p/'.$viewer->getUsername().'/') 15 - ->addClass('core-menu-item') 16 - ->setAural(pht('Profile')); 17 - 18 - $classes = array( 19 - 'phabricator-core-menu-icon', 20 - 'phabricator-core-menu-profile-image', 21 - ); 22 - 23 - $bar_item->appendChild( 24 - phutil_tag( 25 - 'span', 26 - array( 27 - 'class' => implode(' ', $classes), 28 - 'style' => 'background-image: url('.$image.')', 29 - ), 30 - '')); 31 - 32 - $profile_menu = id(new PHUIMainMenuView()) 33 - ->setOrder(100) 34 - ->setMenuBarItem($bar_item); 35 - 36 - return array( 37 - $profile_menu, 38 - ); 39 - } 40 - 41 - }
+1 -1
src/applications/phame/application/PhabricatorPhameApplication.php
··· 11 11 } 12 12 13 13 public function getIcon() { 14 - return 'fa-star'; 14 + return 'fa-feed'; 15 15 } 16 16 17 17 public function getShortDescription() {
+45 -5
src/applications/search/engine/PhabricatorProfileMenuEngine.php
··· 6 6 private $profileObject; 7 7 private $customPHID; 8 8 private $items; 9 + private $menuType; 9 10 private $defaultItem; 10 11 private $controller; 11 12 private $navigation; 13 + private $showNavigation = true; 14 + 15 + const MENU_GLOBAL = 'global'; 16 + const MENU_PERSONAL = 'personal'; 17 + const MENU_COMBINED = 'menu'; 12 18 13 19 public function setViewer(PhabricatorUser $viewer) { 14 20 $this->viewer = $viewer; ··· 55 61 public function getDefaultItem() { 56 62 $this->loadItems(); 57 63 return $this->defaultItem; 64 + } 65 + 66 + public function setMenuType($type) { 67 + $this->menuType = $type; 68 + return $this; 69 + } 70 + 71 + private function getMenuType() { 72 + return $this->menuType; 73 + } 74 + 75 + public function setShowNavigation($show) { 76 + $this->showNavigation = $show; 77 + return $this; 78 + } 79 + 80 + public function getShowNavigation() { 81 + return $this->showNavigation; 58 82 } 59 83 60 84 abstract protected function getItemURI($path); ··· 130 154 $navigation->selectFilter('item.configure'); 131 155 132 156 $crumbs = $controller->buildApplicationCrumbsForEditEngine(); 157 + switch ($this->getMenuType()) { 158 + case 'personal': 159 + $crumbs->addTextCrumb(pht('Personal')); 160 + break; 161 + case 'global': 162 + $crumbs->addTextCrumb(pht('Global')); 163 + break; 164 + } 133 165 134 166 switch ($item_action) { 135 167 case 'view': ··· 177 209 178 210 $crumbs->setBorder(true); 179 211 180 - return $controller->newPage() 212 + $page = $controller->newPage() 181 213 ->setTitle(pht('Configure Menu')) 182 - ->setNavigation($navigation) 183 214 ->setCrumbs($crumbs) 184 215 ->appendChild($content); 216 + 217 + if ($this->getShowNavigation()) { 218 + $page->setNavigation($navigation); 219 + } 220 + return $page; 185 221 } 186 222 187 223 public function buildNavigation() { ··· 258 294 $object = $this->getProfileObject(); 259 295 260 296 $items = $this->loadBuiltinProfileItems(); 297 + $menu = $this->getMenuType(); 261 298 262 299 if ($this->getCustomPHID()) { 263 300 $stored_items = id(new PhabricatorProfileMenuItemConfigurationQuery()) 264 301 ->setViewer($viewer) 265 302 ->withProfilePHIDs(array($object->getPHID())) 266 303 ->withCustomPHIDs(array($this->getCustomPHID())) 304 + ->setMenuType($menu) 267 305 ->execute(); 268 306 } else { 269 307 $stored_items = id(new PhabricatorProfileMenuItemConfigurationQuery()) 270 308 ->setViewer($viewer) 271 309 ->withProfilePHIDs(array($object->getPHID())) 310 + ->setMenuType($menu) 272 311 ->execute(); 273 312 } 274 313 ··· 501 540 )); 502 541 503 542 $list = id(new PHUIObjectItemListView()) 504 - ->setID($list_id); 543 + ->setID($list_id) 544 + ->setNoDataString(pht('This menu currently has no items.')); 505 545 506 546 foreach ($items as $item) { 507 547 $id = $item->getID(); ··· 638 678 ->setName($doc_name)); 639 679 640 680 $header = id(new PHUIHeaderView()) 641 - ->setHeader(pht('Profile Menu Items')) 681 + ->setHeader(pht('Menu Items')) 642 682 ->setHeaderIcon('fa-list'); 643 683 644 684 $box = id(new PHUIObjectBoxView()) 645 - ->setHeaderText(pht('Navigation')) 685 + ->setHeaderText(pht('Current Menu Items')) 646 686 ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) 647 687 ->setObjectList($list); 648 688
+6
src/applications/search/query/PhabricatorProfileMenuItemConfigurationQuery.php
··· 7 7 private $phids; 8 8 private $profilePHIDs; 9 9 private $customPHIDs; 10 + private $menuType; 10 11 11 12 public function withIDs(array $ids) { 12 13 $this->ids = $ids; ··· 25 26 26 27 public function withCustomPHIDs(array $phids) { 27 28 $this->customPHIDs = $phids; 29 + return $this; 30 + } 31 + 32 + public function setMenuType($type) { 33 + $this->menuType = $type; 28 34 return $this; 29 35 } 30 36
-29
src/applications/settings/extension/PhabricatorSettingsMainMenuBarExtension.php
··· 1 - <?php 2 - 3 - final class PhabricatorSettingsMainMenuBarExtension 4 - extends PhabricatorMainMenuBarExtension { 5 - 6 - const MAINMENUBARKEY = 'settings'; 7 - 8 - public function buildMainMenus() { 9 - $controller = $this->getController(); 10 - $is_selected = ($controller instanceof PhabricatorSettingsMainController); 11 - 12 - $bar_item = id(new PHUIListItemView()) 13 - ->setName(pht('Settings')) 14 - ->setIcon('fa-wrench') 15 - ->addClass('core-menu-item') 16 - ->setSelected($is_selected) 17 - ->setHref('/settings/') 18 - ->setAural(pht('Settings')); 19 - 20 - $settings_menu = id(new PHUIMainMenuView()) 21 - ->setMenuBarItem($bar_item) 22 - ->setOrder(400); 23 - 24 - return array( 25 - $settings_menu, 26 - ); 27 - } 28 - 29 - }
-46
src/applications/settings/quickmenu/PhabricatorEditEngineCreateQuickActions.php
··· 1 - <?php 2 - 3 - final class PhabricatorEditEngineCreateQuickActions 4 - extends PhabricatorQuickActions { 5 - 6 - const QUICKACTIONSKEY = 'editengine.create'; 7 - 8 - public function getQuickMenuItems() { 9 - $viewer = $this->getViewer(); 10 - 11 - $engines = PhabricatorEditEngine::getAllEditEngines(); 12 - 13 - foreach ($engines as $key => $engine) { 14 - if (!$engine->hasQuickCreateActions()) { 15 - unset($engines[$key]); 16 - } 17 - } 18 - 19 - if (!$engines) { 20 - return array(); 21 - } 22 - 23 - $engine_keys = array_keys($engines); 24 - 25 - $configs = id(new PhabricatorEditEngineConfigurationQuery()) 26 - ->setViewer($viewer) 27 - ->withEngineKeys($engine_keys) 28 - ->withIsDefault(true) 29 - ->withIsDisabled(false) 30 - ->execute(); 31 - $configs = msort($configs, 'getCreateSortKey'); 32 - $configs = mgroup($configs, 'getEngineKey'); 33 - 34 - $items = array(); 35 - foreach ($engines as $key => $engine) { 36 - $engine_configs = idx($configs, $key, array()); 37 - $engine_items = $engine->newQuickCreateActions($engine_configs); 38 - foreach ($engine_items as $engine_item) { 39 - $items[] = $engine_item; 40 - } 41 - } 42 - 43 - return $items; 44 - } 45 - 46 - }
-54
src/applications/settings/quickmenu/PhabricatorQuickActions.php
··· 1 - <?php 2 - 3 - abstract class PhabricatorQuickActions extends Phobject { 4 - 5 - private $viewer; 6 - 7 - public function setViewer(PhabricatorUser $viewer) { 8 - $this->viewer = $viewer; 9 - return $this; 10 - } 11 - 12 - public function getViewer() { 13 - return $this->viewer; 14 - } 15 - 16 - public function isEnabled() { 17 - return true; 18 - } 19 - 20 - abstract public function getQuickMenuItems(); 21 - 22 - final public function getQuickActionsKey() { 23 - return $this->getPhobjectClassConstant('QUICKACTIONSKEY'); 24 - } 25 - 26 - public static function getAllQuickActions() { 27 - return id(new PhutilClassMapQuery()) 28 - ->setAncestorClass(__CLASS__) 29 - ->setUniqueMethod('getQuickActionsKey') 30 - ->execute(); 31 - } 32 - 33 - public static function loadMenuItemsForUser(PhabricatorUser $viewer) { 34 - $actions = self::getAllQuickActions(); 35 - 36 - foreach ($actions as $key => $action) { 37 - $action->setViewer($viewer); 38 - if (!$action->isEnabled()) { 39 - unset($actions[$key]); 40 - continue; 41 - } 42 - } 43 - 44 - $items = array(); 45 - foreach ($actions as $key => $action) { 46 - foreach ($action->getQuickMenuItems() as $item) { 47 - $items[] = $item; 48 - } 49 - } 50 - 51 - return $items; 52 - } 53 - 54 - }
+15 -9
src/view/layout/PhabricatorActionListView.php
··· 1 1 <?php 2 2 3 - final class PhabricatorActionListView extends AphrontView { 3 + final class PhabricatorActionListView extends AphrontTagView { 4 4 5 5 private $actions = array(); 6 6 private $object; ··· 25 25 return $this->id; 26 26 } 27 27 28 - public function render() { 28 + protected function getTagName() { 29 + return 'ul'; 30 + } 31 + 32 + protected function getTagAttributes() { 33 + $classes = array(); 34 + $classes[] = 'phabricator-action-list-view'; 35 + return array( 36 + 'class' => implode(' ', $classes), 37 + ); 38 + } 39 + 40 + protected function getTagContent() { 29 41 $viewer = $this->getViewer(); 30 42 31 43 $event = new PhabricatorEvent( ··· 55 67 } 56 68 } 57 69 58 - return phutil_tag( 59 - 'ul', 60 - array( 61 - 'class' => 'phabricator-action-list-view', 62 - 'id' => $this->id, 63 - ), 64 - $items); 70 + return $items; 65 71 } 66 72 67 73 public function getDropdownMenuMetadata() {
+42
src/view/layout/PhabricatorActionView.php
··· 18 18 private $hidden; 19 19 private $depth; 20 20 private $id; 21 + private $order; 22 + private $color; 23 + private $type; 24 + 25 + const TYPE_DIVIDER = 'type-divider'; 26 + const TYPE_LABEL = 'label'; 27 + const RED = 'action-item-red'; 21 28 22 29 public function setSelected($selected) { 23 30 $this->selected = $selected; ··· 48 55 49 56 public function setHref($href) { 50 57 $this->href = $href; 58 + return $this; 59 + } 60 + 61 + public function setColor($color) { 62 + $this->color = $color; 51 63 return $this; 52 64 } 53 65 ··· 112 124 $this->id = celerity_generate_unique_node_id(); 113 125 } 114 126 return $this->id; 127 + } 128 + 129 + public function setOrder($order) { 130 + $this->order = $order; 131 + return $this; 132 + } 133 + 134 + public function getOrder() { 135 + return $this->order; 136 + } 137 + 138 + public function setType($type) { 139 + $this->type = $type; 140 + return $this; 141 + } 142 + 143 + public function getType() { 144 + return $this->type; 115 145 } 116 146 117 147 public function setSubmenu(array $submenu) { ··· 278 308 279 309 if ($this->getHref()) { 280 310 $classes[] = 'phabricator-action-view-href'; 311 + } 312 + 313 + if ($this->icon) { 314 + $classes[] = 'action-has-icon'; 315 + } 316 + 317 + if ($this->color) { 318 + $classes[] = $this->color; 319 + } 320 + 321 + if ($this->type) { 322 + $classes[] = 'phabricator-action-view-'.$this->type; 281 323 } 282 324 283 325 $style = array();
+4 -5
src/view/page/PhabricatorStandardPageView.php
··· 769 769 770 770 $rendered_dropdowns = array(); 771 771 $applications = array( 772 - 'PhabricatorHelpApplication', 772 + 'PhabricatorHomeApplication', 773 773 ); 774 774 foreach ($applications as $application_class) { 775 775 if (!PhabricatorApplication::isClassInstalledForViewer( ··· 778 778 continue; 779 779 } 780 780 $application = PhabricatorApplication::getByClass($application_class); 781 - $rendered_dropdowns[$application_class] = 782 - $application->buildMainMenuExtraNodes( 783 - $viewer, 784 - $controller); 781 + $menu = $application->buildMainMenuExtraNodes($viewer, $controller); 782 + // TODO: Doesn't work with Quicksand active. 783 + $rendered_dropdowns[$application_class] = hsprintf('%s', $menu); 785 784 } 786 785 787 786 $hisec_warning_config = $this->getHighSecurityWarningConfig();
+6 -4
src/view/page/menu/PhabricatorMainMenuSearchView.php
··· 99 99 'id' => $button_id, 100 100 'class' => 'phui-icon-view phui-font-fa fa-search', 101 101 ), 102 - $search_text), 103 - $selector, 102 + array( 103 + $selector, 104 + $search_text, 105 + )), 104 106 $primary_input, 105 107 $target, 106 108 ))); ··· 118 120 119 121 $items[] = array( 120 122 'icon' => 'fa-globe', 121 - 'name' => pht('Search All Documents'), 123 + 'name' => pht('All Documents'), 122 124 'value' => 'all', 123 125 ); 124 126 ··· 134 136 135 137 $items[] = array( 136 138 'icon' => $application_icon, 137 - 'name' => pht('Search Current Application'), 139 + 'name' => pht('Current Application'), 138 140 'value' => PhabricatorSearchController::SCOPE_CURRENT_APPLICATION, 139 141 ); 140 142
+30 -67
src/view/page/menu/PhabricatorMainMenuView.php
··· 52 52 $alerts[] = $menu; 53 53 } 54 54 $menu_bar = array_merge($menu_bar, $dropdowns); 55 - $app_button = $this->renderApplicationMenuButton($header_id); 55 + $app_button = $this->renderApplicationMenuButton(); 56 56 $search_button = $this->renderSearchMenuButton($header_id); 57 57 } else { 58 - $app_button = $this->renderApplicationMenuButton($header_id); 58 + $app_button = $this->renderApplicationMenuButton(); 59 59 if (PhabricatorEnv::getEnvConfig('policy.allow-public')) { 60 60 $search_button = $this->renderSearchMenuButton($header_id); 61 61 } ··· 82 82 phutil_implode_html(' ', $aural)); 83 83 } 84 84 85 + // Build out Header Menus 85 86 $applications = PhabricatorApplication::getAllInstalledApplications(); 86 87 87 88 $menus = array(); 88 89 $controller = $this->getController(); 89 90 foreach ($applications as $application) { 90 - $app_actions = $application->buildMainMenuItems( 91 - $viewer, 92 - $controller); 93 91 $app_extra = $application->buildMainMenuExtraNodes( 94 92 $viewer, 95 93 $controller); 96 - 97 - foreach ($app_actions as $action) { 98 - $menus[] = id(new PHUIMainMenuView()) 99 - ->setMenuBarItem($action) 100 - ->setOrder($action->getOrder()); 101 - } 102 - 103 94 if ($app_extra !== null) { 104 - $menus[] = id(new PHUIMainMenuView()) 105 - ->appendChild($app_extra); 95 + $menus[] = $app_extra; 106 96 } 107 97 } 108 98 ··· 126 116 } 127 117 } 128 118 119 + // Builds out "login" button 129 120 foreach ($extensions as $extension) { 130 121 foreach ($extension->buildMainMenus() as $menu) { 131 122 $menus[] = $menu; 132 123 } 133 124 } 134 125 135 - $menus = msort($menus, 'getOrder'); 136 - $bar_items = array(); 137 126 foreach ($menus as $menu) { 138 127 $menu_bar[] = $menu; 139 - 140 - $item = $menu->getMenuBarItem(); 141 - if ($item === null) { 142 - continue; 143 - } 144 - 145 - $bar_items[] = $item; 146 128 } 147 129 148 - $application_menu = $this->renderApplicationMenu($bar_items); 149 130 $classes = array(); 150 131 $classes[] = 'phabricator-main-menu'; 151 132 $classes[] = 'phabricator-main-menu-background'; ··· 162 143 $this->renderPhabricatorLogo(), 163 144 $alerts, 164 145 $aural, 165 - $application_menu, 166 146 $search_menu, 167 147 $menu_bar, 168 148 )); ··· 218 198 return $result; 219 199 } 220 200 221 - public function renderApplicationMenuButton($header_id) { 222 - $button_id = celerity_generate_unique_node_id(); 223 - return javelin_tag( 224 - 'a', 225 - array( 226 - 'class' => 'phabricator-main-menu-expand-button '. 227 - 'phabricator-expand-search-menu', 228 - 'sigil' => 'jx-toggle-class', 229 - 'meta' => array( 230 - 'map' => array( 231 - $header_id => 'phabricator-application-menu-expanded', 232 - $button_id => 'menu-icon-selected', 233 - ), 234 - ), 235 - ), 236 - phutil_tag( 237 - 'span', 238 - array( 239 - 'class' => 'phabricator-menu-button-icon phui-icon-view '. 240 - 'phui-font-fa fa-bars', 241 - 'id' => $button_id, 242 - ), 243 - '')); 201 + public function renderApplicationMenuButton() { 202 + $dropdown = $this->renderApplicationMenu(); 203 + if (!$dropdown) { 204 + return null; 205 + } 206 + 207 + return id(new PHUIButtonView()) 208 + ->setTag('a') 209 + ->setHref('#') 210 + ->setIcon('fa-bars') 211 + ->addClass('phabricator-core-user-menu') 212 + ->addClass('phabricator-core-user-mobile-menu') 213 + ->setNoCSS(true) 214 + ->setDropdownMenu($dropdown); 244 215 } 245 216 246 - private function renderApplicationMenu(array $bar_items) { 217 + private function renderApplicationMenu() { 247 218 $viewer = $this->getViewer(); 248 - 249 219 $view = $this->getApplicationMenu(); 250 - 251 - if (!$view) { 252 - $view = new PHUIListView(); 253 - } 254 - 255 - $view->addClass('phabricator-dark-menu'); 256 - $view->addClass('phabricator-application-menu'); 257 - 258 - if ($bar_items) { 259 - $view->addMenuItem( 260 - id(new PHUIListItemView()) 261 - ->setType(PHUIListItemView::TYPE_LABEL) 262 - ->setName(pht('Actions'))); 263 - foreach ($bar_items as $bar_item) { 264 - $view->addMenuItem($bar_item); 220 + if ($view) { 221 + $items = $view->getItems(); 222 + $view = id(new PhabricatorActionListView()) 223 + ->setViewer($viewer); 224 + foreach ($items as $item) { 225 + $view->addAction( 226 + id(new PhabricatorActionView()) 227 + ->setName($item->getName()) 228 + ->setHref($item->getHref()) 229 + ->setType($item->getType())); 265 230 } 266 231 } 267 - 268 232 return $view; 269 233 } 270 234 ··· 296 260 private function renderPhabricatorSearchMenu() { 297 261 298 262 $view = new PHUIListView(); 299 - $view->addClass('phabricator-dark-menu'); 300 263 $view->addClass('phabricator-search-menu'); 301 264 302 265 $search = $this->renderSearch();
+10
src/view/phui/PHUIButtonView.php
··· 27 27 private $disabled; 28 28 private $name; 29 29 private $tooltip; 30 + private $noCSS; 30 31 31 32 public function setName($name) { 32 33 $this->name = $name; ··· 84 85 85 86 public function setTooltip($text) { 86 87 $this->tooltip = $text; 88 + return $this; 89 + } 90 + 91 + public function setNoCSS($no_css) { 92 + $this->noCSS = $no_css; 87 93 return $this; 88 94 } 89 95 ··· 162 168 $meta = array( 163 169 'tip' => $this->tooltip, 164 170 ); 171 + } 172 + 173 + if ($this->noCSS) { 174 + $classes = array(); 165 175 } 166 176 167 177 return array(
+2 -2
src/view/phui/PHUIListItemView.php
··· 202 202 } 203 203 204 204 return array( 205 - 'class' => $classes, 205 + 'class' => implode(' ', $classes), 206 206 ); 207 207 } 208 208 ··· 249 249 $name = phutil_tag( 250 250 'span', 251 251 array( 252 - 'class' => implode(' ', $classes), 252 + 'class' => $classes, 253 253 ), 254 254 array( 255 255 $this->name,
-31
src/view/phui/PHUIMainMenuView.php
··· 1 - <?php 2 - 3 - final class PHUIMainMenuView extends AphrontView { 4 - 5 - private $menuItem; 6 - private $extraContent = array(); 7 - private $order; 8 - 9 - public function setMenuBarItem(PHUIListItemView $menu_item) { 10 - $this->menuItem = $menu_item; 11 - return $this; 12 - } 13 - 14 - public function getMenuBarItem() { 15 - return $this->menuItem; 16 - } 17 - 18 - public function setOrder($order) { 19 - $this->order = $order; 20 - return $this; 21 - } 22 - 23 - public function getOrder() { 24 - return $this->order; 25 - } 26 - 27 - public function render() { 28 - return $this->renderChildren(); 29 - } 30 - 31 - }
+8 -4
src/view/phui/PHUITimelineEventView.php
··· 606 606 607 607 $items[] = id(new PhabricatorActionView()) 608 608 ->setIcon('fa-quote-left') 609 + ->setName(pht('Quote Comment')) 609 610 ->setHref('#') 610 - ->setName(pht('Quote')) 611 611 ->addSigil('transaction-quote') 612 612 ->setMetadata( 613 613 array( ··· 619 619 620 620 if ($this->getIsNormalComment()) { 621 621 $items[] = id(new PhabricatorActionView()) 622 - ->setIcon('fa-cutlery') 622 + ->setIcon('fa-code') 623 623 ->setHref('/transactions/raw/'.$xaction_phid.'/') 624 - ->setName(pht('View Raw')) 624 + ->setName(pht('View Remarkup')) 625 625 ->addSigil('transaction-raw') 626 626 ->setMetadata( 627 627 array( ··· 648 648 649 649 if ($this->getIsRemovable()) { 650 650 $items[] = id(new PhabricatorActionView()) 651 - ->setIcon('fa-times') 651 + ->setType(PhabricatorActionView::TYPE_DIVIDER); 652 + 653 + $items[] = id(new PhabricatorActionView()) 654 + ->setIcon('fa-trash-o') 652 655 ->setHref('/transactions/remove/'.$xaction_phid.'/') 653 656 ->setName(pht('Remove Comment')) 657 + ->setColor(PhabricatorActionView::RED) 654 658 ->addSigil('transaction-remove') 655 659 ->setMetadata( 656 660 array(
+92 -94
webroot/rsrc/css/application/base/main-menu-view.css
··· 63 63 } 64 64 65 65 .device-phone .phabricator-wordmark { 66 - max-width: 112px; /* iPhone 5 limitation */ 66 + display: none; 67 67 } 68 68 69 69 .phabricator-wordmark { ··· 119 119 */ 120 120 121 121 .device-desktop .phabricator-main-menu-search { 122 - width: 220px; 122 + width: 298px; 123 123 } 124 124 125 125 .device .phabricator-main-menu-search { ··· 130 130 padding: 8px 0; 131 131 position: relative; 132 132 height: 24px; 133 - margin: 0 8px; 133 + margin: 0 8px 0 0; 134 134 } 135 135 136 136 .phabricator-main-menu-search-target { ··· 150 150 151 151 .device .phabricator-main-menu-search-container { 152 152 padding: 4px 0; 153 + margin: 0 4px; 153 154 } 154 155 155 156 .phabricator-main-menu .phabricator-main-menu-search input { ··· 169 170 border-style: solid; 170 171 background-color: #fff; 171 172 height: 28px; 172 - padding: 3px 30px 3px 6px; 173 + padding: 3px 28px 3px 52px; 173 174 float: left; 174 - width: 205px; 175 + width: 280px; 175 176 } 176 177 177 178 .device .phabricator-main-menu-search input { ··· 196 197 .phabricator-main-menu-search button { 197 198 color: {$bluetext}; 198 199 position: absolute; 199 - background: {$greybackground}; 200 + background: transparent; 200 201 border: none; 201 202 outline: none; 202 203 box-shadow: none; ··· 204 205 min-width: 0; 205 206 height: 24px; 206 207 width: 28px; 207 - top: 10px; 208 + top: 9px; 208 209 right: -6px; 209 210 margin: 0 8px 0 0; 210 211 padding: 0; ··· 214 215 .phabricator-main-menu-search button.phabricator-main-menu-search-dropdown { 215 216 position: absolute; 216 217 right: auto; 217 - left: -45px; 218 - width: 40px; 219 - background: transparent; 218 + left: 12px; 219 + width: 46px; 220 + background: {$greybackground}; 221 + z-index: 1; 220 222 } 221 223 222 224 .device-desktop .phabricator-main-menu-search 223 225 button.phabricator-main-menu-search-dropdown { 224 - height: 28px; 225 - top: 8px; 226 + height: 24px; 227 + top: 10px; 228 + border-radius: 3px; 226 229 } 227 230 228 231 .device-desktop .phabricator-main-menu-search 229 232 button.phabricator-main-menu-search-dropdown:hover .phui-icon-view { 230 - color: #fff; 233 + color: {$sky}; 231 234 } 232 235 233 236 .device .phabricator-main-menu-search ··· 236 239 background: {$greybackground}; 237 240 } 238 241 239 - button.phabricator-main-menu-search-dropdown .caret:before { 242 + button.phabricator-main-menu-search-dropdown .caret:before, 243 + a.phabricator-core-user-menu .caret:before { 240 244 content: "\f107"; 241 245 font-family: FontAwesome; 242 - color: {$hoverwhite}; 243 246 } 244 247 245 248 .phabricator-main-menu-search button.phabricator-main-menu-search-dropdown 246 249 .phui-icon-view { 247 - color: {$hoverwhite}; 250 + color: {$bluetext}; 248 251 font-size: 15px; 249 - top: 6px; 252 + top: 4px; 250 253 left: 8px; 251 - } 252 - 253 - .device 254 - .phabricator-main-menu-search button.phabricator-main-menu-search-dropdown 255 - .phui-icon-view { 256 - color: {$bluetext}; 257 - } 258 - 259 - .device button.phabricator-main-menu-search-dropdown .caret:before { 260 - color: {$bluetext}; 261 254 } 262 255 263 256 .phabricator-main-menu-search-dropdown .caret { 264 257 position: absolute; 265 - right: 15px; 266 - top: 5px; 258 + right: 18px; 259 + top: 2px; 267 260 border: none; 268 261 margin-top: 1px; 269 262 } ··· 284 277 word-wrap: break-word; 285 278 overflow-y: auto; 286 279 box-shadow: {$dropshadow}; 287 - border: 1px solid {$blueborder}; 280 + border: 1px solid {$lightgreyborder}; 288 281 border-radius: 3px; 289 282 margin-left: 40px; 290 283 } ··· 338 331 .device-phone .phabricator-main-search-typeahead-result .result-type { 339 332 font-size: {$normalfontsize}; 340 333 } 341 - 342 - .device .phabricator-dark-menu .phui-list-item-type-link 343 - .phabricator-main-search-typeahead-result { 344 - line-height: 18px; 345 - } 346 - 347 334 348 335 349 336 /* - Alert --------------------------------------------------------------------- ··· 442 429 display: block; 443 430 } 444 431 445 - /* - Dark Menu ----------------------------------------------------------------- 446 - 447 - Styles shared between the "core" menu (left button on mobile) and 448 - "application" menu (right button on mobile). These styles give the menu a 449 - white-on-black appearance. 450 - 451 - */ 452 - 453 - .device .phabricator-dark-menu, 454 - .device .phabricator-dark-menu a.phui-list-item-href { 455 - color: {$darkbluetext}; 456 - -webkit-font-smoothing: antialiased; 457 - } 458 - 459 - .device .phabricator-dark-menu .phui-list-item-type-label { 460 - text-transform: uppercase; 461 - font-size: {$normalfontsize}; 462 - background-color: #fff; 463 - padding: 6px 0 6px 12px; 464 - display: block; 465 - font-weight: bold; 466 - color: #000; 467 - } 468 - 469 - .device .phabricator-dark-menu .phui-list-item-href { 470 - background-color: #fff; 471 - padding: 4px 0 4px 20px; 472 - display: block; 473 - } 474 - 475 432 476 433 /* - Core Menu ----------------------------------------------------------------- 477 434 478 435 Styles unique to the core menu (left button on mobile). 479 436 480 437 */ 481 - 482 - .phabricator-core-menu-profile-image { 483 - background-size: 28px 28px; 484 - } 485 438 486 439 .device .phabricator-search-menu { 487 440 display: none; ··· 500 453 border: 1px solid {$lightblueborder}; 501 454 border-radius: 3px; 502 455 box-shadow: {$dropshadow}; 503 - } 504 - 505 - .device .phabricator-dark-menu .phui-list-item-type-link { 506 - min-height: 24px; 507 - line-height: 20px; 508 - background: #fff; 456 + background: {$page.background}; 509 457 } 510 458 511 459 .device-desktop .phabricator-application-menu { ··· 529 477 margin: 8px; 530 478 text-align: center; 531 479 vertical-align: middle; 532 - } 533 - 534 - .device .phabricator-dark-menu.phabricator-application-menu 535 - .phui-list-item-icon.phui-font-fa, 536 - .device .phabricator-dark-menu .phabricator-core-menu-icon { 537 - display: none; 538 480 } 539 481 540 482 .device .phabricator-application-menu .phui-list-item-icon.phui-font-fa { ··· 606 548 padding-left: 12px; 607 549 } 608 550 551 + /* - User Menu ----------------------------------------------------------------- 609 552 610 - /* - Application Menu ---------------------------------------------------------- 553 + Styles unique to the user profile menu. 611 554 612 - Styles unique to the application menu (right button on mobile). 555 + */ 613 556 614 - */ 557 + .phabricator-core-user-menu { 558 + float: right; 559 + display: inline-block; 560 + padding: 9px 24px 0 8px; 561 + height: 35px; 562 + position: relative; 563 + } 615 564 616 - .device .phabricator-application-menu-expanded .phabricator-application-menu { 617 - display: block; 565 + .phabricator-core-user-mobile-menu { 566 + display: none; 567 + } 568 + 569 + .phabricator-core-user-menu span.phui-icon-view.phuihead-small { 570 + height: 24px; 571 + width: 24px; 572 + background-size: 24px; 573 + border-radius: 3px; 574 + display: inline-block; 575 + margin: 1px 0 0 0; 576 + } 577 + 578 + .phabricator-core-user-menu .phui-icon-view { 579 + color: {$hoverwhite}; 580 + font-size: 18px; 581 + margin: 4px 0 0 0; 582 + } 583 + 584 + .phabricator-core-user-menu .caret { 618 585 position: absolute; 619 - border: 1px solid {$blueborder}; 586 + right: 17px; 587 + top: 13px; 588 + border: none; 589 + margin: 1px; 590 + color: {$hoverwhite}; 591 + } 592 + 593 + .phabricator-core-login-button { 594 + float: right; 595 + display: inline-block; 596 + padding: 4px 12px; 620 597 border-radius: 3px; 621 - box-shadow: {$dropshadow}; 622 - top: 42px; 623 - right: 8px; 624 - width: 240px; 598 + margin: 8px 6px 4px; 599 + border: 1px solid {$hoverwhite}; 600 + color: {$hoverwhite}; 625 601 } 626 602 627 - .device .phabricator-application-menu, 628 - .device-desktop .phabricator-dark-menu .phui-list-item-type-label { 603 + .device-desktop .phabricator-core-login-button:hover { 604 + border: 1px solid #fff; 605 + color: #fff; 606 + } 607 + 608 + .device-desktop .phabricator-core-user-menu:hover .caret, 609 + .device-desktop .phabricator-core-user-menu:hover .phui-icon-view { 610 + color: #fff; 611 + } 612 + 613 + .device .phabricator-core-user-menu .caret { 629 614 display: none; 615 + } 616 + 617 + .device .phabricator-core-user-mobile-menu { 618 + display: block; 619 + } 620 + 621 + .device .phabricator-core-user-menu { 622 + padding: 9px 8px 0 8px; 623 + } 624 + 625 + .device .phabricator-core-user-menu .phui-icon-view { 626 + font-size: 20px; 627 + margin: 3px 0 0 0; 630 628 } 631 629 632 630
+1 -1
webroot/rsrc/css/application/base/notification-menu.css
··· 8 8 word-wrap: break-word; 9 9 overflow-y: auto; 10 10 box-shadow: {$dropshadow}; 11 - border: 1px solid {$blueborder}; 11 + border: 1px solid {$lightgreyborder}; 12 12 border-radius: 3px; 13 13 } 14 14
+46 -23
webroot/rsrc/css/phui/phui-action-list.css
··· 11 11 /* When an action list view appears inside a dropdown menu, don't hide it 12 12 by default. */ 13 13 display: block; 14 + padding: 0; 14 15 } 15 16 16 17 .device .phabricator-action-list-view.phabricator-action-list-toggle, ··· 18 19 .phabricator-action-list-view.phabricator-action-list-toggle { 19 20 display: block; 20 21 width: 200px; 21 - border: 1px solid {$lightblueborder}; 22 + border: 1px solid {$lightgreyborder}; 22 23 border-radius: 3px; 23 24 position: absolute; 24 25 right: 16px; ··· 58 59 59 60 .phabricator-action-view button.phabricator-action-view-item, 60 61 .phabricator-action-view-item { 61 - padding: 4px 4px 4px 28px; 62 + padding: 4px 8px 6px 8px; 62 63 display: block; 63 64 text-decoration: none; 64 65 color: {$darkbluetext}; 65 66 } 66 67 67 - .phabricator-action-view-label .phabricator-action-view-item { 68 - font-size: {$normalfontsize}; 68 + .action-has-icon button.phabricator-action-view-item, 69 + .action-has-icon .phabricator-action-view-item { 70 + padding: 4px 4px 4px 28px; 71 + } 72 + 73 + .device-desktop .phabricator-action-view-href:hover 74 + .phabricator-action-view-item { 75 + text-decoration: none; 76 + background: rgba({$alphablue}, .08); 77 + color: {$sky}; 78 + border-radius: 3px; 79 + } 80 + 81 + .device-desktop .phabricator-action-view-href:hover 82 + .phabricator-action-view-icon { 83 + color: {$sky}; 84 + } 85 + 86 + .device-desktop .phabricator-action-view-href.action-item-red:hover 87 + .phabricator-action-view-item { 88 + background-color: {$sh-redbackground}; 89 + color: {$sh-redtext}; 90 + } 91 + 92 + .device-desktop .phabricator-action-view-href.action-item-red:hover 93 + .phabricator-action-view-icon { 94 + color: {$red}; 95 + } 96 + 97 + .phabricator-action-view-label .phabricator-action-view-item, 98 + .phabricator-action-view-type-label .phabricator-action-view-item { 99 + font-size: {$smallerfontsize}; 69 100 font-weight: bold; 70 101 color: {$bluetext}; 71 102 padding: 4px 8px 6px 8px; 72 103 display: block; 104 + text-transform: uppercase; 73 105 -webkit-font-smoothing: antialiased; 74 106 } 75 107 ··· 87 119 width: 14px; 88 120 height: 14px; 89 121 position: absolute; 90 - top: 8px; 122 + top: 7px; 91 123 left: 8px; 92 124 text-align: center; 93 - } 94 - 95 - .device-desktop .phabricator-action-view:hover .phabricator-action-view-item { 96 - text-decoration: none; 97 - background-color: {$sky}; 98 - color: #fff; 99 - } 100 - 101 - .device-desktop .phabricator-action-view:hover .phabricator-action-view-icon { 102 - color: #fff; 103 125 } 104 126 105 127 .phabricator-action-view-disabled .phabricator-action-view-item, ··· 108 130 } 109 131 110 132 .phabricator-action-view-selected { 111 - border-left: 3px solid {$sky}; 112 - background: {$hoverblue}; 113 - } 114 - 115 - .phabricator-action-view-selected .phabricator-action-view-item { 116 - padding-left: 25px; 133 + background: {$sh-violetbackground}; 134 + border-radius: 3px; 117 135 } 118 136 119 - .phabricator-action-view-selected .phabricator-action-view-icon { 120 - left: 6px; 137 + .phabricator-action-view-selected:hover a { 138 + text-decoration: none; 121 139 } 122 140 123 141 .phabricator-action-view button[disabled] { ··· 135 153 background-color: {$greybackground}; 136 154 color: {$lightgreytext}; 137 155 } 156 + 157 + .phabricator-action-view-type-divider { 158 + margin-top: 8px; 159 + border-top: 1px solid {$thinblueborder}; 160 + }
+3 -3
webroot/rsrc/css/phui/phui-button.css
··· 198 198 199 199 .phuix-dropdown-menu { 200 200 position: absolute; 201 - width: 240px; 201 + width: 200px; 202 202 background: #fff; 203 203 margin-top: -1px; 204 - padding: 5px 0; 204 + padding: 12px; 205 205 box-shadow: {$dropshadow}; 206 - border: 1px solid {$blueborder}; 206 + border: 1px solid {$lightgreyborder}; 207 207 border-radius: 3px; 208 208 margin-bottom: 16px; 209 209 }
+1 -1
webroot/rsrc/css/phui/phui-document-pro.css
··· 80 80 81 81 .phui-document-view-pro .phui-document-toc-list { 82 82 margin: 8px; 83 - border: 1px solid {$blueborder}; 83 + border: 1px solid {$lightgreyborder}; 84 84 border-radius: 3px; 85 85 box-shadow: {$dropshadow}; 86 86 width: 200px;
+1 -2
webroot/rsrc/css/phui/phui-form-view.css
··· 460 460 461 461 .fancy-datepicker-core { 462 462 background-color: white; 463 - border: 1px solid {$lightblueborder}; 464 - border-bottom: 1px solid {$blueborder}; 463 + border: 1px solid {$lightgreyborder}; 465 464 box-shadow: {$dropshadow}; 466 465 border-radius: 3px; 467 466 }
+4 -18
webroot/rsrc/css/phui/phui-two-column-view.css
··· 159 159 padding: 0 12px; 160 160 } 161 161 162 - .phabricator-action-view button.phabricator-action-view-item, 163 - .phabricator-action-view-item { 164 - padding: 5px 4px 5px 28px; 165 - } 166 - 167 - .device-desktop .phui-two-column-properties .phabricator-action-view-href:hover 168 - .phabricator-action-view-item { 169 - text-decoration: none; 170 - background-color: rgba({$alphablue}, .08); 171 - color: {$sky}; 172 - border-radius: 3px; 173 - } 174 - 175 - .device-desktop .phui-two-column-properties .phabricator-action-view-href:hover 176 - .phabricator-action-view-icon { 177 - color: {$sky}; 178 - } 179 - 180 162 .phui-two-column-view .phui-property-list-section-header, 181 163 .phui-two-column-view .phui-property-list-text-content { 182 164 margin: 0 16px; ··· 197 179 .device .phui-two-column-view .phui-info-view { 198 180 margin: 0 0 20px 0; 199 181 padding: 12px; 182 + } 183 + 184 + .phui-two-column-view .phui-oi-empty .phui-info-view { 185 + margin: 0; 200 186 } 201 187 202 188 .phui-two-column-view .phui-side-column .phui-oi-empty
+12 -3
webroot/rsrc/js/phuix/PHUIXActionView.js
··· 77 77 78 78 getNode: function() { 79 79 if (!this._node) { 80 - var attr = { 81 - className: 'phabricator-action-view' 82 - }; 80 + var classes = ['phabricator-action-view']; 81 + 82 + if (this._href || this._handler) { 83 + classes.push('phabricator-action-view-href'); 84 + } 85 + 86 + if (this._icon) { 87 + classes.push('action-has-icon'); 88 + } 83 89 84 90 var content = [ 85 91 this._buildIconNode(), 86 92 this._buildNameNode() 87 93 ]; 88 94 95 + var attr = { 96 + className: classes.join(' ') 97 + }; 89 98 this._node = JX.$N('li', attr, content); 90 99 } 91 100