@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.

Mobile Crumbs.

Summary: Not for full review. This makes crumbs appear consistently in mobile. It helps give a quick link to the apps home, the page title currently on, and action icons for the object. It will take additional clean-up to make this consistent across apps. Passing for early review from a UEX perspective. I actually really like it and think onces it's everywhere, helps mobile feel complete.

Test Plan: Testing in iOS and Simulator.

Reviewers: epriestley, btrahan

Reviewed By: epriestley

CC: aran, Korvin

Maniphest Tasks: T2796

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

+129 -79
+39 -39
src/__celerity_resource_map__.php
··· 2793 2793 ), 2794 2794 'phabricator-crumbs-view-css' => 2795 2795 array( 2796 - 'uri' => '/res/4f15b2ae/rsrc/css/layout/phabricator-crumbs-view.css', 2796 + 'uri' => '/res/2857d229/rsrc/css/layout/phabricator-crumbs-view.css', 2797 2797 'type' => 'css', 2798 2798 'requires' => 2799 2799 array( ··· 3701 3701 ), array( 3702 3702 'packages' => 3703 3703 array( 3704 - '93e81012' => 3704 + 'bcecb316' => 3705 3705 array( 3706 3706 'name' => 'core.pkg.css', 3707 3707 'symbols' => ··· 3743 3743 34 => 'phabricator-object-item-list-view-css', 3744 3744 35 => 'global-drag-and-drop-css', 3745 3745 ), 3746 - 'uri' => '/res/pkg/93e81012/core.pkg.css', 3746 + 'uri' => '/res/pkg/bcecb316/core.pkg.css', 3747 3747 'type' => 'css', 3748 3748 ), 3749 3749 '95ceba95' => ··· 3934 3934 'reverse' => 3935 3935 array( 3936 3936 'aphront-attached-file-view-css' => '6b1fccc6', 3937 - 'aphront-dialog-view-css' => '93e81012', 3938 - 'aphront-error-view-css' => '93e81012', 3939 - 'aphront-form-view-css' => '93e81012', 3940 - 'aphront-list-filter-view-css' => '93e81012', 3941 - 'aphront-pager-view-css' => '93e81012', 3942 - 'aphront-panel-view-css' => '93e81012', 3943 - 'aphront-table-view-css' => '93e81012', 3944 - 'aphront-tokenizer-control-css' => '93e81012', 3945 - 'aphront-tooltip-css' => '93e81012', 3946 - 'aphront-typeahead-control-css' => '93e81012', 3937 + 'aphront-dialog-view-css' => 'bcecb316', 3938 + 'aphront-error-view-css' => 'bcecb316', 3939 + 'aphront-form-view-css' => 'bcecb316', 3940 + 'aphront-list-filter-view-css' => 'bcecb316', 3941 + 'aphront-pager-view-css' => 'bcecb316', 3942 + 'aphront-panel-view-css' => 'bcecb316', 3943 + 'aphront-table-view-css' => 'bcecb316', 3944 + 'aphront-tokenizer-control-css' => 'bcecb316', 3945 + 'aphront-tooltip-css' => 'bcecb316', 3946 + 'aphront-typeahead-control-css' => 'bcecb316', 3947 3947 'differential-changeset-view-css' => '8aaacd1b', 3948 3948 'differential-core-view-css' => '8aaacd1b', 3949 3949 'differential-inline-comment-editor' => '322728f3', ··· 3957 3957 'differential-table-of-contents-css' => '8aaacd1b', 3958 3958 'diffusion-commit-view-css' => 'c8ce2d88', 3959 3959 'diffusion-icons-css' => 'c8ce2d88', 3960 - 'global-drag-and-drop-css' => '93e81012', 3960 + 'global-drag-and-drop-css' => 'bcecb316', 3961 3961 'inline-comment-summary-css' => '8aaacd1b', 3962 3962 'javelin-aphlict' => '95ceba95', 3963 3963 'javelin-behavior' => 'fe22443b', ··· 4029 4029 'javelin-util' => 'fe22443b', 4030 4030 'javelin-vector' => 'fe22443b', 4031 4031 'javelin-workflow' => 'fe22443b', 4032 - 'lightbox-attachment-css' => '93e81012', 4032 + 'lightbox-attachment-css' => 'bcecb316', 4033 4033 'maniphest-task-summary-css' => '6b1fccc6', 4034 4034 'maniphest-transaction-detail-css' => '6b1fccc6', 4035 4035 'phabricator-busy' => '95ceba95', 4036 4036 'phabricator-content-source-view-css' => '8aaacd1b', 4037 - 'phabricator-core-buttons-css' => '93e81012', 4038 - 'phabricator-core-css' => '93e81012', 4039 - 'phabricator-crumbs-view-css' => '93e81012', 4040 - 'phabricator-directory-css' => '93e81012', 4037 + 'phabricator-core-buttons-css' => 'bcecb316', 4038 + 'phabricator-core-css' => 'bcecb316', 4039 + 'phabricator-crumbs-view-css' => 'bcecb316', 4040 + 'phabricator-directory-css' => 'bcecb316', 4041 4041 'phabricator-drag-and-drop-file-upload' => '322728f3', 4042 4042 'phabricator-dropdown-menu' => '95ceba95', 4043 4043 'phabricator-file-upload' => '95ceba95', 4044 - 'phabricator-filetree-view-css' => '93e81012', 4045 - 'phabricator-flag-css' => '93e81012', 4046 - 'phabricator-form-view-css' => '93e81012', 4047 - 'phabricator-header-view-css' => '93e81012', 4048 - 'phabricator-jump-nav' => '93e81012', 4044 + 'phabricator-filetree-view-css' => 'bcecb316', 4045 + 'phabricator-flag-css' => 'bcecb316', 4046 + 'phabricator-form-view-css' => 'bcecb316', 4047 + 'phabricator-header-view-css' => 'bcecb316', 4048 + 'phabricator-jump-nav' => 'bcecb316', 4049 4049 'phabricator-keyboard-shortcut' => '95ceba95', 4050 4050 'phabricator-keyboard-shortcut-manager' => '95ceba95', 4051 - 'phabricator-main-menu-view' => '93e81012', 4051 + 'phabricator-main-menu-view' => 'bcecb316', 4052 4052 'phabricator-menu-item' => '95ceba95', 4053 - 'phabricator-nav-view-css' => '93e81012', 4053 + 'phabricator-nav-view-css' => 'bcecb316', 4054 4054 'phabricator-notification' => '95ceba95', 4055 - 'phabricator-notification-css' => '93e81012', 4056 - 'phabricator-notification-menu-css' => '93e81012', 4057 - 'phabricator-object-item-list-view-css' => '93e81012', 4055 + 'phabricator-notification-css' => 'bcecb316', 4056 + 'phabricator-notification-menu-css' => 'bcecb316', 4057 + 'phabricator-object-item-list-view-css' => 'bcecb316', 4058 4058 'phabricator-object-selector-css' => '8aaacd1b', 4059 4059 'phabricator-paste-file-upload' => '95ceba95', 4060 4060 'phabricator-prefab' => '95ceba95', 4061 4061 'phabricator-project-tag-css' => '6b1fccc6', 4062 - 'phabricator-remarkup-css' => '93e81012', 4062 + 'phabricator-remarkup-css' => 'bcecb316', 4063 4063 'phabricator-shaped-request' => '322728f3', 4064 - 'phabricator-side-menu-view-css' => '93e81012', 4065 - 'phabricator-standard-page-view' => '93e81012', 4064 + 'phabricator-side-menu-view-css' => 'bcecb316', 4065 + 'phabricator-standard-page-view' => 'bcecb316', 4066 4066 'phabricator-textareautils' => '95ceba95', 4067 4067 'phabricator-tooltip' => '95ceba95', 4068 - 'phabricator-transaction-view-css' => '93e81012', 4069 - 'phabricator-zindex-css' => '93e81012', 4070 - 'sprite-apps-large-css' => '93e81012', 4071 - 'sprite-gradient-css' => '93e81012', 4072 - 'sprite-icon-css' => '93e81012', 4073 - 'sprite-menu-css' => '93e81012', 4074 - 'syntax-highlighting-css' => '93e81012', 4068 + 'phabricator-transaction-view-css' => 'bcecb316', 4069 + 'phabricator-zindex-css' => 'bcecb316', 4070 + 'sprite-apps-large-css' => 'bcecb316', 4071 + 'sprite-gradient-css' => 'bcecb316', 4072 + 'sprite-icon-css' => 'bcecb316', 4073 + 'sprite-menu-css' => 'bcecb316', 4074 + 'syntax-highlighting-css' => 'bcecb316', 4075 4075 ), 4076 4076 ));
+13 -2
src/applications/differential/controller/DifferentialDiffCreateController.php
··· 65 65 66 66 $panel = new AphrontPanelView(); 67 67 $panel->setHeader(pht('Create New Diff')); 68 + $panel->setNoBackground(); 68 69 $panel->appendChild($form); 69 70 $panel->setWidth(AphrontPanelView::WIDTH_FORM); 70 71 71 - return $this->buildStandardPageResponse( 72 - $panel, 72 + $crumbs = $this->buildApplicationCrumbs(); 73 + $crumbs->addCrumb( 74 + id(new PhabricatorCrumbView()) 75 + ->setName(pht('Create Diff')) 76 + ->setHref('/differential/diff/create/')); 77 + 78 + return $this->buildApplicationPage( 79 + array( 80 + $crumbs, 81 + $panel 82 + ), 73 83 array( 74 84 'title' => pht('Create Diff'), 85 + 'device' => true, 75 86 )); 76 87 } 77 88
+1 -4
src/applications/files/controller/PhabricatorFileListController.php
··· 48 48 $side_nav = $this->buildSideNavView(); 49 49 $side_nav->selectFilter($this->getFilter()); 50 50 51 - $header_view = id(new PhabricatorHeaderView()) 52 - ->setHeader($header); 53 - 54 51 $side_nav->appendChild( 55 52 array( 56 - $header_view, 57 53 $file_list, 58 54 $pager, 59 55 new PhabricatorGlobalUploadTargetView(), ··· 72 68 array( 73 69 'title' => 'Files', 74 70 'device' => true, 71 + 'dust' => true, 75 72 )); 76 73 } 77 74
+7 -6
src/applications/files/controller/PhabricatorFileUploadController.php
··· 39 39 'desktop onto this page or the Phabricator home page.'))); 40 40 41 41 $form = id(new AphrontFormView()) 42 - ->setFlexible(true) 43 42 ->setUser($user) 44 43 ->setEncType('multipart/form-data') 45 44 ->appendChild( ··· 68 67 69 68 $title = pht('Upload File'); 70 69 71 - $header = id(new PhabricatorHeaderView()) 72 - ->setHeader($title); 73 - 74 70 if ($errors) { 75 71 $errors = id(new AphrontErrorView()) 76 72 ->setTitle(pht('Form Errors')) ··· 80 76 $global_upload = id(new PhabricatorGlobalUploadTargetView()) 81 77 ->setShowIfSupportedID($support_id); 82 78 79 + $panel = new AphrontPanelView(); 80 + $panel->setHeader(pht('New File Upload')); 81 + $panel->setNoBackground(); 82 + $panel->appendChild($form); 83 + $panel->setWidth(AphrontPanelView::WIDTH_FORM); 84 + 83 85 return $this->buildApplicationPage( 84 86 array( 85 87 $crumbs, 86 - $header, 87 88 $errors, 88 - $form, 89 + $panel, 89 90 $global_upload, 90 91 ), 91 92 array(
+8 -7
src/applications/macro/controller/PhabricatorMacroEditController.php
··· 152 152 } 153 153 154 154 $form = new AphrontFormView(); 155 - $form->setFlexible(true); 156 155 $form->addHiddenInput('name_form', 1); 157 156 $form->setUser($request->getUser()); 158 157 ··· 237 236 ->setHref($request->getRequestURI()) 238 237 ->setName($crumb)); 239 238 240 - $header = id(new PhabricatorHeaderView()) 241 - ->setHeader($title); 242 - 243 - 244 239 $upload = null; 245 240 if ($macro->getID()) { 246 241 $upload_header = id(new PhabricatorHeaderView()) ··· 272 267 $upload = array($upload_header, $upload_form); 273 268 } 274 269 270 + $panel = new AphrontPanelView(); 271 + $panel->setHeader(pht('Create New Macro')); 272 + $panel->setNoBackground(); 273 + $panel->appendChild($form); 274 + $panel->setWidth(AphrontPanelView::WIDTH_FORM); 275 + 275 276 return $this->buildApplicationPage( 276 277 array( 277 278 $crumbs, 278 - $header, 279 279 $error_view, 280 - $form, 280 + $panel, 281 281 $upload, 282 282 ), 283 283 array( 284 284 'title' => $title, 285 + 'device' => true, 285 286 )); 286 287 } 287 288 }
+6 -1
src/applications/maniphest/controller/ManiphestTaskDetailController.php
··· 340 340 $crumbs->addCrumb( 341 341 id(new PhabricatorCrumbView()) 342 342 ->setName($object_name) 343 - ->setHref('/'.$object_name)); 343 + ->setHref('/'.$object_name)) 344 + ->addAction( 345 + id(new PhabricatorMenuItemView()) 346 + ->setHref($this->getApplicationURI('/task/create/')) 347 + ->setName(pht('Create Task')) 348 + ->setIcon('create')); 344 349 345 350 $header = $this->buildHeaderView($task); 346 351 $actions = $this->buildActionView($task);
+12
src/applications/maniphest/controller/ManiphestTaskEditController.php
··· 532 532 $page_objects = array(); 533 533 } 534 534 535 + $crumbs = $this->buildApplicationCrumbs(); 536 + $crumbs->addCrumb( 537 + id(new PhabricatorCrumbView()) 538 + ->setName($header_name) 539 + ->setHref($this->getApplicationURI('/task/create/'))) 540 + ->addAction( 541 + id(new PhabricatorMenuItemView()) 542 + ->setHref($this->getApplicationURI('/task/create/')) 543 + ->setName(pht('Create Task')) 544 + ->setIcon('create')); 545 + 535 546 return $this->buildApplicationPage( 536 547 array( 548 + $crumbs, 537 549 $error_view, 538 550 $panel, 539 551 $description_preview_panel,
+1 -4
src/applications/paste/controller/PhabricatorPasteListController.php
··· 43 43 $list->setPager($pager); 44 44 $list->setNoDataString($nodata); 45 45 46 - $header = id(new PhabricatorHeaderView()) 47 - ->setHeader($title); 48 - 49 46 $nav->appendChild( 50 47 array( 51 - $header, 52 48 $list, 53 49 )); 54 50 ··· 66 62 array( 67 63 'title' => $title, 68 64 'device' => true, 65 + 'dust' => true, 69 66 )); 70 67 } 71 68
-4
src/applications/phlux/controller/PhluxListController.php
··· 36 36 ->setName($title) 37 37 ->setHref($this->getApplicationURI())); 38 38 39 - $header = id(new PhabricatorHeaderView()) 40 - ->setHeader($title); 41 - 42 39 return $this->buildApplicationPage( 43 40 array( 44 41 $crumbs, 45 - $header, 46 42 $view, 47 43 $pager, 48 44 ),
+6 -3
src/applications/pholio/controller/PholioMockEditController.php
··· 219 219 ->setName('can_view')) 220 220 ->appendChild($submit); 221 221 222 - $header = id(new PhabricatorHeaderView()) 223 - ->setHeader($title); 222 + $crumbs = $this->buildApplicationCrumbs($this->buildSideNav()); 223 + $crumbs->addCrumb( 224 + id(new PhabricatorCrumbView()) 225 + ->setName($title) 226 + ->setHref($this->getApplicationURI())); 224 227 225 228 $content = array( 226 - $header, 229 + $crumbs, 227 230 $error_view, 228 231 $form, 229 232 );
-4
src/applications/project/controller/PhabricatorProjectListController.php
··· 123 123 $list->addItem($item); 124 124 } 125 125 126 - $header = id(new PhabricatorHeaderView()) 127 - ->setHeader($table_header); 128 - 129 126 $nav->appendChild( 130 127 array( 131 - $header, 132 128 $list, 133 129 $pager, 134 130 ));
+2
src/view/layout/PhabricatorCrumbView.php
··· 67 67 'class' => 'sprite-menu phabricator-crumb-divider', 68 68 ), 69 69 ''); 70 + } else { 71 + $classes[] = 'phabricator-last-crumb'; 70 72 } 71 73 72 74 return phutil_tag(
+8 -1
src/view/layout/PhabricatorCrumbsView.php
··· 37 37 ), 38 38 ''); 39 39 } 40 + $name = phutil_tag( 41 + 'span', 42 + array( 43 + 'class' => 'phabricator-crumbs-action-name' 44 + ), 45 + $action->getName() 46 + ); 40 47 $actions[] = javelin_tag( 41 48 'a', 42 49 array( ··· 46 53 ), 47 54 array( 48 55 $icon, 49 - $action->getName(), 56 + $name, 50 57 )); 51 58 } 52 59
+26 -4
webroot/rsrc/css/layout/phabricator-crumbs-view.css
··· 2 2 * @provides phabricator-crumbs-view-css 3 3 */ 4 4 5 - .device .phabricator-crumbs-view { 6 - display: none; 7 - } 8 - 9 5 .phabricator-crumbs-view { 10 6 background-color: #d8dce2; 11 7 height: 31px; ··· 43 39 line-height: 31px; 44 40 } 45 41 42 + .device-phone .phabricator-crumb-view { 43 + display: none; 44 + } 45 + 46 + .device-phone .phabricator-crumb-view.phabricator-last-crumb, 47 + .device-phone .phabricator-crumb-view.phabricator-crumb-has-icon { 48 + display: inline-block; 49 + } 50 + 46 51 .phabricator-crumb-icon { 47 52 display: inline-block; 48 53 width: 28px; ··· 51 56 vertical-align: top; 52 57 } 53 58 59 + .device-phone .phabricator-crumb-icon { 60 + margin-left: 7px; 61 + } 62 + 54 63 .phabricator-crumbs-actions { 55 64 float: right; 56 65 } ··· 60 69 height: 17px; 61 70 padding: 8px 14px 8px 24px; 62 71 position: relative; 72 + } 73 + 74 + .device-phone a.phabricator-crumbs-action { 75 + padding: 13px 20px 4px 10px; 76 + border-left: 1px solid #ccc; 77 + } 78 + 79 + .device-phone .phabricator-crumbs-action-name { 80 + display: none; 81 + } 82 + 83 + .device-phone a.phabricator-crumbs-action .sprite-icon { 84 + margin-left: 5px; 63 85 } 64 86 65 87 .phabricator-crumbs-action .sprite-icon {