1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-11-27 01:02:42 +01:00

Show drafts and inline comments

Summary:
Show drafts for users that made them.
Show inline comments beside image, highlights them when user mouseovers selection.
Allow users that can view mock to add inline comment instead of only allowing users that can edit mock to add inline comment.

Test Plan:
Verified that inline comments are shown beside image. Verified that only drafts for current user are shown. Verified that inline comment is
highlithed when user mouseovers their selection.

Reviewers: epriestley

CC: aran, Korvin

Maniphest Tasks: T2446

Differential Revision: https://secure.phabricator.com/D4929
This commit is contained in:
Lauri-Henrik Jalonen 2013-02-13 07:10:14 -08:00 committed by epriestley
parent 5a9e834658
commit 29d6180e35
6 changed files with 165 additions and 9 deletions

View file

@ -1864,6 +1864,18 @@ celerity_register_resource_map(array(
), ),
'disk' => '/rsrc/js/application/phame/phame-post-preview.js', 'disk' => '/rsrc/js/application/phame/phame-post-preview.js',
), ),
'javelin-behavior-pholio-edit-inline-comment' =>
array(
'uri' => '/res/61759cd8/rsrc/js/application/pholio/behavior-pholio-edit-inline-comment.js',
'type' => 'js',
'requires' =>
array(
0 => 'javelin-behavior',
1 => 'javelin-stratcom',
2 => 'javelin-dom',
),
'disk' => '/rsrc/js/application/pholio/behavior-pholio-edit-inline-comment.js',
),
'javelin-behavior-pholio-mock-view' => 'javelin-behavior-pholio-mock-view' =>
array( array(
'uri' => '/res/e5f432ac/rsrc/js/application/pholio/behavior-pholio-mock-view.js', 'uri' => '/res/e5f432ac/rsrc/js/application/pholio/behavior-pholio-mock-view.js',

View file

@ -20,10 +20,27 @@ final class PholioInlineController extends PholioController {
$this->id $this->id
); );
$inline_comments = array_merge(
$inline_comments,
id(new PholioTransactionComment())->loadAllWhere(
'imageid = %d AND authorphid = %s AND transactionphid IS NULL',
$this->id,
$user->getPHID()));
$inlines = array(); $inlines = array();
foreach ($inline_comments as $inline_comment) { foreach ($inline_comments as $inline_comment) {
$author = id(new PhabricatorUser())->loadOneWhere(
'phid = %s',
$inline_comment->getAuthorPHID()
);
$inlines[] = array( $inlines[] = array(
'phid' => $inline_comment->getPHID(), 'phid' => $inline_comment->getPHID(),
'userphid' => $author->getPHID(),
'username' => $author->getUserName(),
'canEdit' => ($inline_comment->
getEditPolicy(PhabricatorPolicyCapability::CAN_EDIT) ==
$user->getPHID()) ? true : false,
'transactionphid' => $inline_comment->getTransactionPHID(),
'imageID' => $inline_comment->getImageID(), 'imageID' => $inline_comment->getImageID(),
'x' => $inline_comment->getX(), 'x' => $inline_comment->getX(),
'y' => $inline_comment->getY(), 'y' => $inline_comment->getY(),

View file

@ -13,8 +13,7 @@ final class PholioInlineSaveController extends PholioController {
->setViewer($user) ->setViewer($user)
->requireCapabilities( ->requireCapabilities(
array( array(
PhabricatorPolicyCapability::CAN_VIEW, PhabricatorPolicyCapability::CAN_VIEW
PhabricatorPolicyCapability::CAN_EDIT,
)) ))
->withIDs(array($request->getInt('mockID'))) ->withIDs(array($request->getInt('mockID')))
->executeOne(); ->executeOne();

View file

@ -47,12 +47,22 @@ final class PholioMockImagesView extends AphrontView {
$main_image_tag $main_image_tag
); );
$inline_comments_holder = javelin_tag(
'div',
array(
'id' => 'mock-inline-comments',
'sigil' => 'mock-inline-comments',
'class' => 'pholio-mock-inline-comments'
),
"");
$mockview[] = phutil_tag( $mockview[] = phutil_tag(
'div', 'div',
array( array(
'class' => 'pholio-mock-image-container', 'class' => 'pholio-mock-image-container',
), ),
$main_image_tag); array($main_image_tag, $inline_comments_holder));
if (count($this->mock->getImages()) > 1) { if (count($this->mock->getImages()) > 1) {
$thumbnails = array(); $thumbnails = array();

View file

@ -4,6 +4,7 @@
.pholio-mock-image-container { .pholio-mock-image-container {
background-color: #282828; background-color: #282828;
text-align: center; text-align: center;
vertical-align: middle;
} }
.pholio-mock-carousel { .pholio-mock-carousel {
@ -43,3 +44,35 @@
margin: 10px 0px; margin: 10px 0px;
} }
.pholio-mock-inline-comments {
display: inline-block;
margin-left: 10px;
text-align: left;
padding-bottom: 10px;
}
.pholio-inline-comment {
border: 1px solid #aa8;
background: #f9f9f1;
margin-bottom: 2px;
padding: 8px 10px;
}
.pholio-inline-comment-header {
border-bottom: 1px solid #cca;
color: #333;
font-weight: bold;
padding-bottom: 6px;
margin-bottom: 4px;
}
.pholio-mock-inline-comment-highlight {
background-color: #F0B160;
}
.pholio-inline-head-links a {
font-weight: normal;
margin-left: 5px;
}

View file

@ -139,14 +139,56 @@ JX.behavior('pholio-mock-view', function(config) {
endY: Math.max(startPos.y,endPos.y), endY: Math.max(startPos.y,endPos.y),
comment: comment}; comment: comment};
inlineComment.addData(commentToAdd); inlineComment.addData(commentToAdd);
inlineComment.send(); inlineComment.send();
load_inline_comments();
}); });
function forge_inline_comment(data) {
var comment_head = data.username;
if (data.transactionphid == null) comment_head += " (draft)";
var links = null;
if (data.canEdit && data.transactionphid == null) {
links = JX.$N(
'span',
{
className: 'pholio-inline-head-links'
},
[
JX.$N('a',{href: 'http://www.google.fi'},'Edit'),
JX.$N('a',{href: 'http://www.google.fi'},'Delete')
]);
}
var comment_header = JX.$N(
'div',
{
className: 'pholio-inline-comment-header'
},
[comment_head, links]);
var comment_body = JX.$N(
'div',
{},
data.content);
var inline_comment = JX.$N(
'div',
{
id: data.phid + "_comment",
className: 'pholio-inline-comment'
},
[comment_header, comment_body]);
return inline_comment;
}
function load_inline_comments() { function load_inline_comments() {
var data = JX.Stratcom.getData(JX.$(config.mainID)); var data = JX.Stratcom.getData(JX.$(config.mainID));
var comment_holder = JX.$('mock-inline-comments');
JX.DOM.setContent(comment_holder, '');
var inline_comments_url = "/pholio/inline/" + data['imageID'] + "/"; var inline_comments_url = "/pholio/inline/" + data['imageID'] + "/";
var inline_comments = new JX.Request(inline_comments_url, function(r) { var inline_comments = new JX.Request(inline_comments_url, function(r) {
@ -156,25 +198,68 @@ JX.behavior('pholio-mock-view', function(config) {
var inlineSelection = JX.$N( var inlineSelection = JX.$N(
'div', 'div',
{ {
id: r[i].phid, id: r[i].phid + "_selection",
className: 'pholio-mock-select-border', className: 'pholio-mock-select-border',
title: r[i].content title: r[i].content
}); });
JX.Stratcom.addData(
inlineSelection,
{phid: r[i].phid});
JX.Stratcom.addSigil(inlineSelection, "image_selection");
JX.DOM.appendContent(comment_holder, forge_inline_comment(r[i]));
JX.DOM.appendContent(wrapper, inlineSelection); JX.DOM.appendContent(wrapper, inlineSelection);
JX.$V(r[i].x, r[i].y).setPos(inlineSelection); JX.$V(r[i].x, r[i].y).setPos(inlineSelection);
JX.$V(r[i].width, r[i].height) JX.$V(r[i].width, r[i].height).setDim(inlineSelection);
.setDim(inlineSelection);
if (r[i].transactionphid == null) {
var inlineDraft = JX.$N(
'div',{className: 'pholio-mock-select-fill'});
JX.$V(r[i].x, r[i].y).setPos(inlineDraft);
JX.$V(r[i].width, r[i].height).setDim(inlineDraft);
JX.Stratcom.addData(
inlineDraft,
{phid: r[i].phid});
JX.Stratcom.addSigil(inlineDraft, "image_selection");
JX.DOM.appendContent(wrapper, inlineDraft);
}
} }
} }
JX.Stratcom.listen(
'mouseover',
'image_selection',
function(e) {
var data = e.getNodeData('image_selection');
var inline_comment = JX.$(data.phid + "_comment");
JX.DOM.alterClass(inline_comment,
'pholio-mock-inline-comment-highlight', true);
});
JX.Stratcom.listen(
'mouseout',
'image_selection',
function(e) {
var data = e.getNodeData('image_selection');
var inline_comment = JX.$(data.phid + "_comment");
JX.DOM.alterClass(inline_comment,
'pholio-mock-inline-comment-highlight', false);
});
}); });
inline_comments.send(); inline_comments.send();
} }
load_inline_comments(); load_inline_comments();
}); });