Commit 3ec07c49 authored by epriestley's avatar epriestley
Browse files

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
parent 992dedca
......@@ -32,7 +32,7 @@ final class DifferentialAuthorField
}
public function renderPropertyViewValue(array $handles) {
return $handles[$this->getObject()->getAuthorPHID()]->renderLink();
return $handles[$this->getObject()->getAuthorPHID()]->renderHovercardLink();
}
}
......@@ -120,7 +120,7 @@ final class DifferentialReviewersView extends AphrontView {
}
$item->setTarget($handle->renderLink());
$item->setTarget($handle->renderHovercardLink());
$view->addItem($item);
}
......
......@@ -208,19 +208,26 @@ final class ManiphestTaskDetailController extends ManiphestController {
->setObject($task)
->setActionList($actions);
$view->addProperty(
pht('Assigned To'),
$task->getOwnerPHID()
? $handles->renderHandle($task->getOwnerPHID())
: phutil_tag('em', array(), pht('None')));
$owner_phid = $task->getOwnerPHID();
if ($owner_phid) {
$assigned_to = $handles
->renderHandle($owner_phid)
->setShowHovercard(true);
} else {
$assigned_to = phutil_tag('em', array(), pht('None'));
}
$view->addProperty(pht('Assigned To'), $assigned_to);
$view->addProperty(
pht('Priority'),
ManiphestTaskPriority::getTaskPriorityName($task->getPriority()));
$view->addProperty(
pht('Author'),
$handles->renderHandle($task->getAuthorPHID()));
$author = $handles
->renderHandle($task->getAuthorPHID())
->setShowHovercard(true);
$view->addProperty(pht('Author'), $author);
$source = $task->getOriginalEmailSource();
if ($source) {
......
......@@ -248,6 +248,23 @@ final class PhabricatorObjectHandle
public function renderLink($name = null) {
return $this->renderLinkWithAttributes($name, array());
}
public function renderHovercardLink($name = null) {
Javelin::initBehavior('phabricator-hovercards');
$attributes = array(
'sigil' => 'hovercard',
'meta' => array(
'hoverPHID' => $this->getPHID(),
),
);
return $this->renderLinkWithAttributes($name, $attributes);
}
private function renderLinkWithAttributes($name, array $attributes) {
if ($name === null) {
$name = $this->getLinkName();
}
......@@ -275,13 +292,15 @@ final class PhabricatorObjectHandle
->setIconFont('fa-lock lightgreytext');
}
return phutil_tag(
$attributes = $attributes + array(
'href' => $uri,
'class' => implode(' ', $classes),
'title' => $title,
);
return javelin_tag(
$uri ? 'a' : 'span',
array(
'href' => $uri,
'class' => implode(' ', $classes),
'title' => $title,
),
$attributes,
array($icon, $name));
}
......
......@@ -34,9 +34,14 @@ final class PHUIHandleListView
}
protected function getTagContent() {
$list = $this->handleList;
$items = array();
foreach ($this->handleList as $handle) {
$items[] = $handle->renderLink();
foreach ($list as $handle) {
$view = $list->renderHandle($handle->getPHID());
$view->setShowHovercard(true);
$items[] = $view;
}
if ($this->getAsInline()) {
......
......@@ -7,6 +7,7 @@ final class PHUIHandleTagListView extends AphrontTagView {
private $limit;
private $noDataString;
private $slim;
private $showHovercards;
public function setHandles(array $handles) {
$this->handles = $handles;
......@@ -33,6 +34,11 @@ final class PHUIHandleTagListView extends AphrontTagView {
return $this;
}
public function setShowHovercards($show_hovercards) {
$this->showHovercards = $show_hovercards;
return $this;
}
protected function getTagName() {
return 'ul';
}
......@@ -62,6 +68,9 @@ final class PHUIHandleTagListView extends AphrontTagView {
$list = array();
foreach ($handles as $handle) {
$tag = $handle->renderTag();
if ($this->showHovercards) {
$tag->setPHID($handle->getPHID());
}
if ($this->slim) {
$tag->setSlimShady(true);
}
......
......@@ -15,6 +15,7 @@ final class PHUIHandleView
private $handlePHID;
private $asTag;
private $useShortName;
private $showHovercard;
public function setHandleList(PhabricatorHandleList $list) {
$this->handleList = $list;
......@@ -36,17 +37,37 @@ final class PHUIHandleView
return $this;
}
public function setShowHovercard($hovercard) {
$this->showHovercard = $hovercard;
return $this;
}
public function render() {
$handle = $this->handleList[$this->handlePHID];
if ($this->asTag) {
return $handle->renderTag();
} else {
if ($this->useShortName) {
return $handle->renderLink($handle->getName());
} else {
return $handle->renderLink();
$tag = $handle->renderTag();
if ($this->showHovercard) {
$tag->setPHID($handle->getPHID());
}
return $tag;
}
if ($this->useShortName) {
$name = $handle->getName();
} else {
$name = null;
}
if ($this->showHovercard) {
$link = $handle->renderHovercardLink($name);
} else {
$link = $handle->renderLink($name);
}
return $link;
}
}
......@@ -101,7 +101,8 @@ final class PhabricatorProjectUIEventListener
if ($handles) {
$list = id(new PHUIHandleTagListView())
->setHandles($handles)
->setAnnotations($annotations);
->setAnnotations($annotations)
->setShowHovercards(true);
} else {
$list = phutil_tag('em', array(), pht('None'));
}
......
......@@ -57,7 +57,7 @@ final class SubscriptionListStringBuilder extends Phobject {
// link. Instead, render "a, b, c, d" in this case, and then when we get one
// more render "a, b, c, and 2 others".
if ($subscribers_count <= ($show_count + 1)) {
return phutil_implode_html(', ', mpull($handles, 'renderLink'));
return phutil_implode_html(', ', mpull($handles, 'renderHovercardLink'));
}
$show = array_slice($handles, 0, $show_count);
......
......@@ -83,7 +83,7 @@ abstract class PhabricatorStandardCustomFieldPHIDs
return null;
}
$handles = mpull($handles, 'renderLink');
$handles = mpull($handles, 'renderHovercardLink');
$handles = phutil_implode_html(', ', $handles);
return $handles;
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment