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

Move general workboard actions to "Manage Board" dropdown

Summary: See D9719.

Test Plan:
- Used hide/show columns.
- Used "add column".
- Filtered board.

{F170133}

Reviewers: chad

Reviewed By: chad

Subscribers: epriestley

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

+102 -63
+9 -9
resources/celerity/map.php
··· 411 411 'rsrc/js/application/policy/behavior-policy-control.js' => 'f3fef818', 412 412 'rsrc/js/application/policy/behavior-policy-rule-editor.js' => '92918fcb', 413 413 'rsrc/js/application/ponder/behavior-votebox.js' => '4e9b766b', 414 - 'rsrc/js/application/projects/behavior-boards-filter.js' => '8be7c2f0', 414 + 'rsrc/js/application/projects/behavior-boards-dropdown.js' => '0ec56e1d', 415 415 'rsrc/js/application/projects/behavior-project-boards.js' => '1cb113dc', 416 416 'rsrc/js/application/projects/behavior-project-create.js' => '065227cc', 417 417 'rsrc/js/application/releeph/releeph-preview-branch.js' => 'b2b4fbaf', ··· 553 553 'javelin-behavior-audio-source' => '59b251eb', 554 554 'javelin-behavior-audit-preview' => 'd835b03a', 555 555 'javelin-behavior-balanced-payment-form' => '3b3e1664', 556 - 'javelin-behavior-boards-filter' => '8be7c2f0', 556 + 'javelin-behavior-boards-dropdown' => '0ec56e1d', 557 557 'javelin-behavior-config-reorder-fields' => '14a827de', 558 558 'javelin-behavior-conpherence-menu' => 'f0a41b9f', 559 559 'javelin-behavior-conpherence-pontificate' => '85ab3c8e', ··· 917 917 2 => 'javelin-stratcom', 918 918 3 => 'javelin-util', 919 919 4 => 'phabricator-notification-css', 920 + ), 921 + '0ec56e1d' => 922 + array( 923 + 0 => 'javelin-behavior', 924 + 1 => 'javelin-dom', 925 + 2 => 'javelin-stratcom', 926 + 3 => 'phuix-dropdown-menu', 920 927 ), 921 928 '0f764c35' => 922 929 array( ··· 1514 1521 array( 1515 1522 0 => 'javelin-magical-init', 1516 1523 1 => 'javelin-util', 1517 - ), 1518 - '8be7c2f0' => 1519 - array( 1520 - 0 => 'javelin-behavior', 1521 - 1 => 'javelin-dom', 1522 - 2 => 'javelin-stratcom', 1523 - 3 => 'phuix-dropdown-menu', 1524 1524 ), 1525 1525 '8d199d97' => 1526 1526 array(
+88 -49
src/applications/project/controller/PhabricatorProjectBoardViewController.php
··· 217 217 $board->addPanel($panel); 218 218 } 219 219 220 - $can_edit = PhabricatorPolicyFilter::hasCapability( 220 + Javelin::initBehavior( 221 + 'boards-dropdown', 222 + array()); 223 + 224 + $filter_menu = $this->buildFilterMenu( 221 225 $viewer, 222 - $project, 223 - PhabricatorPolicyCapability::CAN_EDIT); 226 + $custom_query, 227 + $engine, 228 + $query_key); 229 + 230 + $manage_menu = $this->buildManageMenu($project, $show_hidden); 231 + 232 + $header_link = phutil_tag( 233 + 'a', 234 + array( 235 + 'href' => $this->getApplicationURI('view/'.$project->getID().'/') 236 + ), 237 + $project->getName()); 224 238 225 - $add_icon = id(new PHUIIconView()) 226 - ->setIconFont('fa-plus bluegrey'); 239 + $header = id(new PHUIHeaderView()) 240 + ->setHeader($header_link) 241 + ->setUser($viewer) 242 + ->setNoBackground(true) 243 + ->setImage($project->getProfileImageURI()) 244 + ->setImageURL($this->getApplicationURI('view/'.$project->getID().'/')) 245 + ->addActionLink($filter_menu) 246 + ->addActionLink($manage_menu) 247 + ->setPolicyObject($project); 227 248 228 - $add_button = id(new PHUIButtonView()) 229 - ->setText(pht('Add Column')) 230 - ->setIcon($add_icon) 231 - ->setTag('a') 232 - ->setHref($this->getApplicationURI('board/'.$this->id.'/edit/')) 233 - ->setDisabled(!$can_edit) 234 - ->setWorkflow(!$can_edit); 249 + $board_box = id(new PHUIBoxView()) 250 + ->appendChild($board) 251 + ->addClass('project-board-wrapper'); 235 252 236 - Javelin::initBehavior( 237 - 'boards-filter', 253 + return $this->buildApplicationPage( 254 + array( 255 + $header, 256 + $board_box, 257 + ), 238 258 array( 259 + 'title' => pht('%s Board', $project->getName()), 239 260 )); 261 + } 262 + 263 + private function buildFilterMenu( 264 + PhabricatorUser $viewer, 265 + $custom_query, 266 + PhabricatorApplicationSearchEngine $engine, 267 + $query_key) { 240 268 241 269 $filter_icon = id(new PHUIIconView()) 242 270 ->setIconFont('fa-search-plus bluegrey'); ··· 300 328 ->setIcon($filter_icon) 301 329 ->setTag('a') 302 330 ->setHref('#') 303 - ->addSigil('boards-filter-menu') 331 + ->addSigil('boards-dropdown-menu') 304 332 ->setMetadata( 305 333 array( 306 334 'items' => hsprintf('%s', $filter_menu), 307 335 )); 308 336 309 - $header_link = phutil_tag( 310 - 'a', 311 - array( 312 - 'href' => $this->getApplicationURI('view/'.$project->getID().'/') 313 - ), 314 - $project->getName()); 337 + return $filter_button; 338 + } 339 + 340 + private function buildManageMenu( 341 + PhabricatorProject $project, 342 + $show_hidden) { 343 + 344 + $request = $this->getRequest(); 345 + $viewer = $request->getUser(); 346 + 347 + $can_edit = PhabricatorPolicyFilter::hasCapability( 348 + $viewer, 349 + $project, 350 + PhabricatorPolicyCapability::CAN_EDIT); 351 + 352 + $manage_icon = id(new PHUIIconView()) 353 + ->setIconFont('fa-cog bluegrey'); 354 + 355 + $manage_items = array(); 356 + 357 + $manage_items[] = id(new PhabricatorActionView()) 358 + ->setIcon('fa-plus') 359 + ->setName(pht('Add Column')) 360 + ->setHref($this->getApplicationURI('board/'.$this->id.'/edit/')); 315 361 316 362 if ($show_hidden) { 317 363 $hidden_uri = $request->getRequestURI() 318 364 ->setQueryParam('hidden', null); 319 - $hidden_icon = id(new PHUIIconView()) 320 - ->setIconFont('fa-eye-slash bluegrey'); 365 + $hidden_icon = 'fa-eye-slash'; 321 366 $hidden_text = pht('Hide Hidden Columns'); 322 367 } else { 323 368 $hidden_uri = $request->getRequestURI() 324 369 ->setQueryParam('hidden', 'true'); 325 - $hidden_icon = id(new PHUIIconView()) 326 - ->setIconFont('fa-eye bluegrey'); 370 + $hidden_icon = 'fa-eye'; 327 371 $hidden_text = pht('Show Hidden Columns'); 328 372 } 329 373 330 - $hidden_button = id(new PHUIButtonView()) 331 - ->setText($hidden_text) 374 + $manage_items[] = id(new PhabricatorActionView()) 332 375 ->setIcon($hidden_icon) 333 - ->setTag('a') 376 + ->setName($hidden_text) 334 377 ->setHref($hidden_uri); 335 378 336 - $header = id(new PHUIHeaderView()) 337 - ->setHeader($header_link) 338 - ->setUser($viewer) 339 - ->setNoBackground(true) 340 - ->setImage($project->getProfileImageURI()) 341 - ->setImageURL($this->getApplicationURI('view/'.$project->getID().'/')) 342 - ->addActionLink($hidden_button) 343 - ->addActionLink($filter_button) 344 - ->addActionLink($add_button) 345 - ->setPolicyObject($project); 379 + $manage_menu = id(new PhabricatorActionListView()) 380 + ->setUser($viewer); 381 + foreach ($manage_items as $item) { 382 + $manage_menu->addAction($item); 383 + } 346 384 347 - $board_box = id(new PHUIBoxView()) 348 - ->appendChild($board) 349 - ->addClass('project-board-wrapper'); 385 + $manage_button = id(new PHUIButtonView()) 386 + ->setText(pht('Manage Board')) 387 + ->setIcon($manage_icon) 388 + ->setTag('a') 389 + ->setHref('#') 390 + ->addSigil('boards-dropdown-menu') 391 + ->setMetadata( 392 + array( 393 + 'items' => hsprintf('%s', $manage_menu), 394 + )); 350 395 351 - return $this->buildApplicationPage( 352 - array( 353 - $header, 354 - $board_box, 355 - ), 356 - array( 357 - 'title' => pht('%s Board', $project->getName()), 358 - )); 396 + return $manage_button; 359 397 } 398 + 360 399 361 400 }
+5 -5
webroot/rsrc/js/application/projects/behavior-boards-filter.js webroot/rsrc/js/application/projects/behavior-boards-dropdown.js
··· 1 1 /** 2 - * @provides javelin-behavior-boards-filter 2 + * @provides javelin-behavior-boards-dropdown 3 3 * @requires javelin-behavior 4 4 * javelin-dom 5 5 * javelin-stratcom 6 6 * phuix-dropdown-menu 7 7 */ 8 8 9 - JX.behavior('boards-filter', function() { 9 + JX.behavior('boards-dropdown', function() { 10 10 11 - JX.Stratcom.listen('click', 'boards-filter-menu', function(e) { 12 - var data = e.getNodeData('boards-filter-menu'); 11 + JX.Stratcom.listen('click', 'boards-dropdown-menu', function(e) { 12 + var data = e.getNodeData('boards-dropdown-menu'); 13 13 if (data.menu) { 14 14 return; 15 15 } ··· 18 18 19 19 var list = JX.$H(data.items).getFragment().firstChild; 20 20 21 - var button = e.getNode('boards-filter-menu'); 21 + var button = e.getNode('boards-dropdown-menu'); 22 22 data.menu = new JX.PHUIXDropdownMenu(button); 23 23 data.menu.setContent(list); 24 24 data.menu.open();