diff --git a/resources/celerity/map.php b/resources/celerity/map.php --- a/resources/celerity/map.php +++ b/resources/celerity/map.php @@ -8,7 +8,7 @@ 'names' => array( 'core.pkg.css' => 'ab5dd633', - 'core.pkg.js' => '57d0e1c4', + 'core.pkg.js' => '68839013', 'darkconsole.pkg.js' => 'ca8671ce', 'differential.pkg.css' => '9578e86b', 'differential.pkg.js' => '11a5b750', @@ -147,7 +147,7 @@ 'rsrc/css/phui/phui-status.css' => '2f562399', 'rsrc/css/phui/phui-tag-view.css' => '295d81c4', 'rsrc/css/phui/phui-text.css' => '23e9b4b7', - 'rsrc/css/phui/phui-timeline-view.css' => '7dcd5354', + 'rsrc/css/phui/phui-timeline-view.css' => '23fe340a', 'rsrc/css/phui/phui-workboard-view.css' => 'bf70dd2e', 'rsrc/css/phui/phui-workpanel-view.css' => '97b69459', 'rsrc/css/sprite-actions.css' => '969ad0e5', @@ -412,7 +412,7 @@ 'rsrc/js/application/search/behavior-reorder-queries.js' => '37871df4', 'rsrc/js/application/slowvote/behavior-slowvote-embed.js' => 'a51fdb2e', 'rsrc/js/application/transactions/behavior-transaction-comment-form.js' => '9084a36f', - 'rsrc/js/application/transactions/behavior-transaction-list.js' => '3c918aa8', + 'rsrc/js/application/transactions/behavior-transaction-list.js' => '80ec8180', 'rsrc/js/application/uiexample/JavelinViewExample.js' => 'd4a14807', 'rsrc/js/application/uiexample/ReactorButtonExample.js' => '44524435', 'rsrc/js/application/uiexample/ReactorCheckboxExample.js' => '7ba325ee', @@ -451,7 +451,7 @@ 'rsrc/js/core/behavior-error-log.js' => 'a5d7cf86', 'rsrc/js/core/behavior-fancy-datepicker.js' => '5d584426', 'rsrc/js/core/behavior-file-tree.js' => 'c8728c70', - 'rsrc/js/core/behavior-form.js' => '27d4da3f', + 'rsrc/js/core/behavior-form.js' => 'a9aaba0c', 'rsrc/js/core/behavior-gesture.js' => 'fe2e0ba4', 'rsrc/js/core/behavior-global-drag-and-drop.js' => '8fd76bab', 'rsrc/js/core/behavior-history-install.js' => '7ee2b591', @@ -532,7 +532,7 @@ 'javelin-behavior-aphront-basic-tokenizer' => 'b3a4b884', 'javelin-behavior-aphront-crop' => 'b98fc918', 'javelin-behavior-aphront-drag-and-drop-textarea' => '4a11ea9c', - 'javelin-behavior-aphront-form-disable-on-submit' => '27d4da3f', + 'javelin-behavior-aphront-form-disable-on-submit' => 'a9aaba0c', 'javelin-behavior-aphront-more' => '9b9197be', 'javelin-behavior-audio-source' => '59b251eb', 'javelin-behavior-audit-preview' => 'be81801d', @@ -603,7 +603,7 @@ 'javelin-behavior-phabricator-show-all-transactions' => '7c273581', 'javelin-behavior-phabricator-tooltips' => '48db4145', 'javelin-behavior-phabricator-transaction-comment-form' => '9084a36f', - 'javelin-behavior-phabricator-transaction-list' => '3c918aa8', + 'javelin-behavior-phabricator-transaction-list' => '80ec8180', 'javelin-behavior-phabricator-watch-anchor' => '06e05112', 'javelin-behavior-phame-post-preview' => '61d927ec', 'javelin-behavior-pholio-mock-edit' => '1e1e8bb0', @@ -762,7 +762,7 @@ 'phui-status-list-view-css' => '2f562399', 'phui-tag-view-css' => '295d81c4', 'phui-text-css' => '23e9b4b7', - 'phui-timeline-view-css' => '7dcd5354', + 'phui-timeline-view-css' => '23fe340a', 'phui-workboard-view-css' => 'bf70dd2e', 'phui-workpanel-view-css' => '97b69459', 'policy-css' => '957ea14c', @@ -988,12 +988,6 @@ 7 => 'javelin-typeahead-preloaded-source', 8 => 'javelin-json', ), - '27d4da3f' => - array( - 0 => 'javelin-behavior', - 1 => 'javelin-stratcom', - 2 => 'javelin-dom', - ), '2a2dba85' => array( 0 => 'javelin-behavior', @@ -1055,14 +1049,6 @@ 1 => 'javelin-dom', 2 => 'phortune-credit-card-form', ), - '3c918aa8' => - array( - 0 => 'javelin-behavior', - 1 => 'javelin-stratcom', - 2 => 'javelin-workflow', - 3 => 'javelin-dom', - 4 => 'javelin-fx', - ), '403a3dce' => array( 0 => 'javelin-install', @@ -1321,6 +1307,14 @@ 0 => 'javelin-behavior', 1 => 'javelin-history', ), + '80ec8180' => + array( + 0 => 'javelin-behavior', + 1 => 'javelin-stratcom', + 2 => 'javelin-workflow', + 3 => 'javelin-dom', + 4 => 'javelin-fx', + ), '82f568cd' => array( 0 => 'javelin-install', @@ -1497,6 +1491,12 @@ 1 => 'javelin-dom', 2 => 'javelin-stratcom', ), + 'a9aaba0c' => + array( + 0 => 'javelin-behavior', + 1 => 'javelin-stratcom', + 2 => 'javelin-dom', + ), 'ad7a69ca' => array( 0 => 'javelin-install', diff --git a/src/applications/transactions/view/PhabricatorApplicationTransactionView.php b/src/applications/transactions/view/PhabricatorApplicationTransactionView.php --- a/src/applications/transactions/view/PhabricatorApplicationTransactionView.php +++ b/src/applications/transactions/view/PhabricatorApplicationTransactionView.php @@ -146,9 +146,11 @@ Javelin::initBehavior( 'phabricator-transaction-list', array( - 'listID' => $list_id, - 'objectPHID' => $this->getObjectPHID(), - 'nextAnchor' => $this->anchorOffset + count($events), + 'listID' => $list_id, + 'objectPHID' => $this->getObjectPHID(), + 'nextAnchor' => $this->anchorOffset + count($events), + 'historyLink' => '/transactions/history/', + 'historyLinkText' => pht('Edited'), )); } @@ -193,7 +195,7 @@ return false; } - protected function renderTransactionContent( + protected function renderTransactionComment( PhabricatorApplicationTransaction $xaction) { $field = PhabricatorApplicationTransactionComment::MARKUP_FIELD_COMMENT; @@ -202,12 +204,22 @@ if ($comment) { if ($comment->getIsDeleted()) { - return phutil_tag( - 'em', - array(), + return javelin_tag( + 'span', + array( + 'class' => 'comment-deleted', + 'sigil' => 'transaction-comment', + 'meta' => array('phid' => $comment->getTransactionPHID()), + ), pht('This comment has been deleted.')); } else if ($xaction->hasComment()) { - return $engine->getOutput($comment, $field); + return javelin_tag( + 'span', + array( + 'sigil' => 'transaction-comment', + 'meta' => array('phid' => $comment->getTransactionPHID()), + ), + $engine->getOutput($comment, $field)); } else { // This is an empty, non-deleted comment. Usually this happens when // rendering previews. @@ -333,9 +345,9 @@ } } - $content = $this->renderTransactionContent($xaction); - if ($content) { - $event->appendChild($content); + $comment = $this->renderTransactionComment($xaction); + if ($comment) { + $event->appendChild($comment); } return $event; diff --git a/src/view/phui/PHUITimelineEventView.php b/src/view/phui/PHUITimelineEventView.php --- a/src/view/phui/PHUITimelineEventView.php +++ b/src/view/phui/PHUITimelineEventView.php @@ -146,9 +146,10 @@ } $extra = array_reverse($extra); $extra = array_mergev($extra); - $extra = phutil_tag( + $extra = javelin_tag( 'span', array( + 'sigil' => 'timeline-extra', 'class' => 'phui-timeline-extra', ), phutil_implode_html(" \xC2\xB7 ", $extra)); @@ -342,7 +343,7 @@ 'a', array( 'href' => '/transactions/history/'.$xaction_phid.'/', - 'sigil' => 'workflow', + 'sigil' => 'workflow transaction-edit-history', ), pht('Edited')); } diff --git a/webroot/rsrc/css/phui/phui-timeline-view.css b/webroot/rsrc/css/phui/phui-timeline-view.css --- a/webroot/rsrc/css/phui/phui-timeline-view.css +++ b/webroot/rsrc/css/phui/phui-timeline-view.css @@ -160,6 +160,10 @@ overflow-x: auto; } +.phui-timeline-core-content .comment-deleted { + font-style: italic; +} + .device .phui-timeline-event-view { min-height: 23px; position: relative; diff --git a/webroot/rsrc/js/application/transactions/behavior-transaction-list.js b/webroot/rsrc/js/application/transactions/behavior-transaction-list.js --- a/webroot/rsrc/js/application/transactions/behavior-transaction-list.js +++ b/webroot/rsrc/js/application/transactions/behavior-transaction-list.js @@ -62,14 +62,47 @@ } } + function edittransaction(transaction, response) { + // NOTE: this is for 1 transaction only + for (var phid in response.xactions) { + var new_node = JX.$H(response.xactions[phid]).getFragment().firstChild; + var new_comment = JX.DOM.find(new_node, 'span', 'transaction-comment'); + var old_comment = JX.DOM.find( + transaction, + 'span', + 'transaction-comment'); + JX.DOM.replace(old_comment, new_comment); + var edit_history = JX.DOM.scry( + transaction, + 'a', + 'transaction-edit-history'); + if (!edit_history.length) { + var transaction_phid = JX.Stratcom.getData(new_comment).phid; + var history_link = JX.$N( + 'a', + { sigil : 'transaction-edit-history', + href : config.historyLink + transaction_phid + '/' }, + config.historyLinkText); + JX.Stratcom.addSigil(history_link, 'workflow'); + var timeline_extra = JX.DOM.find(transaction, 'span', 'timeline-extra'); + JX.DOM.setContent( + timeline_extra, + [history_link, " ยท ", JX.$H(timeline_extra.innerHTML)]); + } + new JX.FX(transaction).setDuration(500).start({opacity: [0, 1]}); + } + } + JX.DOM.listen(list, 'click', 'transaction-edit', function(e) { if (!e.isNormalClick()) { return; } + var transaction = e.getNode('transaction'); + JX.Workflow.newFromLink(e.getTarget()) .setData({anchor: e.getNodeData('transaction').anchor}) - .setHandler(ontransactions) + .setHandler(JX.bind(null, edittransaction, transaction)) .start(); e.kill();