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

Show hovercards for most links in object property views

Summary:
Ref T8980. This isn't 100% coverage but should be pretty much all of the common ones.

These feel a touch iffy to me at first glance so I didn't go crazy trying to hunt all of them down. I have some other plans for them so maybe they'll feel better by the end of it.

Test Plan: Hovered over author, reviewers, blocked tasks, projects, etc.

Reviewers: chad

Reviewed By: chad

Maniphest Tasks: T8980

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

+89 -27
+1 -1
src/applications/differential/customfield/DifferentialAuthorField.php
··· 32 32 } 33 33 34 34 public function renderPropertyViewValue(array $handles) { 35 - return $handles[$this->getObject()->getAuthorPHID()]->renderLink(); 35 + return $handles[$this->getObject()->getAuthorPHID()]->renderHovercardLink(); 36 36 } 37 37 38 38 }
+1 -1
src/applications/differential/view/DifferentialReviewersView.php
··· 120 120 121 121 } 122 122 123 - $item->setTarget($handle->renderLink()); 123 + $item->setTarget($handle->renderHovercardLink()); 124 124 $view->addItem($item); 125 125 } 126 126
+15 -8
src/applications/maniphest/controller/ManiphestTaskDetailController.php
··· 208 208 ->setObject($task) 209 209 ->setActionList($actions); 210 210 211 - $view->addProperty( 212 - pht('Assigned To'), 213 - $task->getOwnerPHID() 214 - ? $handles->renderHandle($task->getOwnerPHID()) 215 - : phutil_tag('em', array(), pht('None'))); 211 + $owner_phid = $task->getOwnerPHID(); 212 + if ($owner_phid) { 213 + $assigned_to = $handles 214 + ->renderHandle($owner_phid) 215 + ->setShowHovercard(true); 216 + } else { 217 + $assigned_to = phutil_tag('em', array(), pht('None')); 218 + } 219 + 220 + $view->addProperty(pht('Assigned To'), $assigned_to); 216 221 217 222 $view->addProperty( 218 223 pht('Priority'), 219 224 ManiphestTaskPriority::getTaskPriorityName($task->getPriority())); 220 225 221 - $view->addProperty( 222 - pht('Author'), 223 - $handles->renderHandle($task->getAuthorPHID())); 226 + $author = $handles 227 + ->renderHandle($task->getAuthorPHID()) 228 + ->setShowHovercard(true); 229 + 230 + $view->addProperty(pht('Author'), $author); 224 231 225 232 $source = $task->getOriginalEmailSource(); 226 233 if ($source) {
+25 -6
src/applications/phid/PhabricatorObjectHandle.php
··· 248 248 249 249 250 250 public function renderLink($name = null) { 251 + return $this->renderLinkWithAttributes($name, array()); 252 + } 253 + 254 + public function renderHovercardLink($name = null) { 255 + Javelin::initBehavior('phabricator-hovercards'); 256 + 257 + $attributes = array( 258 + 'sigil' => 'hovercard', 259 + 'meta' => array( 260 + 'hoverPHID' => $this->getPHID(), 261 + ), 262 + ); 263 + 264 + return $this->renderLinkWithAttributes($name, $attributes); 265 + } 266 + 267 + private function renderLinkWithAttributes($name, array $attributes) { 251 268 if ($name === null) { 252 269 $name = $this->getLinkName(); 253 270 } ··· 275 292 ->setIconFont('fa-lock lightgreytext'); 276 293 } 277 294 278 - return phutil_tag( 295 + $attributes = $attributes + array( 296 + 'href' => $uri, 297 + 'class' => implode(' ', $classes), 298 + 'title' => $title, 299 + ); 300 + 301 + return javelin_tag( 279 302 $uri ? 'a' : 'span', 280 - array( 281 - 'href' => $uri, 282 - 'class' => implode(' ', $classes), 283 - 'title' => $title, 284 - ), 303 + $attributes, 285 304 array($icon, $name)); 286 305 } 287 306
+7 -2
src/applications/phid/view/PHUIHandleListView.php
··· 34 34 } 35 35 36 36 protected function getTagContent() { 37 + $list = $this->handleList; 37 38 $items = array(); 38 - foreach ($this->handleList as $handle) { 39 - $items[] = $handle->renderLink(); 39 + foreach ($list as $handle) { 40 + $view = $list->renderHandle($handle->getPHID()); 41 + 42 + $view->setShowHovercard(true); 43 + 44 + $items[] = $view; 40 45 } 41 46 42 47 if ($this->getAsInline()) {
+9
src/applications/phid/view/PHUIHandleTagListView.php
··· 7 7 private $limit; 8 8 private $noDataString; 9 9 private $slim; 10 + private $showHovercards; 10 11 11 12 public function setHandles(array $handles) { 12 13 $this->handles = $handles; ··· 30 31 31 32 public function setSlim($slim) { 32 33 $this->slim = true; 34 + return $this; 35 + } 36 + 37 + public function setShowHovercards($show_hovercards) { 38 + $this->showHovercards = $show_hovercards; 33 39 return $this; 34 40 } 35 41 ··· 62 68 $list = array(); 63 69 foreach ($handles as $handle) { 64 70 $tag = $handle->renderTag(); 71 + if ($this->showHovercards) { 72 + $tag->setPHID($handle->getPHID()); 73 + } 65 74 if ($this->slim) { 66 75 $tag->setSlimShady(true); 67 76 }
+27 -6
src/applications/phid/view/PHUIHandleView.php
··· 15 15 private $handlePHID; 16 16 private $asTag; 17 17 private $useShortName; 18 + private $showHovercard; 18 19 19 20 public function setHandleList(PhabricatorHandleList $list) { 20 21 $this->handleList = $list; ··· 36 37 return $this; 37 38 } 38 39 40 + public function setShowHovercard($hovercard) { 41 + $this->showHovercard = $hovercard; 42 + return $this; 43 + } 44 + 39 45 public function render() { 40 46 $handle = $this->handleList[$this->handlePHID]; 47 + 41 48 if ($this->asTag) { 42 - return $handle->renderTag(); 49 + $tag = $handle->renderTag(); 50 + 51 + if ($this->showHovercard) { 52 + $tag->setPHID($handle->getPHID()); 53 + } 54 + 55 + return $tag; 56 + } 57 + 58 + if ($this->useShortName) { 59 + $name = $handle->getName(); 43 60 } else { 44 - if ($this->useShortName) { 45 - return $handle->renderLink($handle->getName()); 46 - } else { 47 - return $handle->renderLink(); 48 - } 61 + $name = null; 49 62 } 63 + 64 + if ($this->showHovercard) { 65 + $link = $handle->renderHovercardLink($name); 66 + } else { 67 + $link = $handle->renderLink($name); 68 + } 69 + 70 + return $link; 50 71 } 51 72 52 73 }
+2 -1
src/applications/project/events/PhabricatorProjectUIEventListener.php
··· 101 101 if ($handles) { 102 102 $list = id(new PHUIHandleTagListView()) 103 103 ->setHandles($handles) 104 - ->setAnnotations($annotations); 104 + ->setAnnotations($annotations) 105 + ->setShowHovercards(true); 105 106 } else { 106 107 $list = phutil_tag('em', array(), pht('None')); 107 108 }
+1 -1
src/applications/subscriptions/view/SubscriptionListStringBuilder.php
··· 57 57 // link. Instead, render "a, b, c, d" in this case, and then when we get one 58 58 // more render "a, b, c, and 2 others". 59 59 if ($subscribers_count <= ($show_count + 1)) { 60 - return phutil_implode_html(', ', mpull($handles, 'renderLink')); 60 + return phutil_implode_html(', ', mpull($handles, 'renderHovercardLink')); 61 61 } 62 62 63 63 $show = array_slice($handles, 0, $show_count);
+1 -1
src/infrastructure/customfield/standard/PhabricatorStandardCustomFieldPHIDs.php
··· 83 83 return null; 84 84 } 85 85 86 - $handles = mpull($handles, 'renderLink'); 86 + $handles = mpull($handles, 'renderHovercardLink'); 87 87 $handles = phutil_implode_html(', ', $handles); 88 88 return $handles; 89 89 }