diff --git a/resources/celerity/map.php b/resources/celerity/map.php index c732e061f0..eec3ad47fa 100644 --- a/resources/celerity/map.php +++ b/resources/celerity/map.php @@ -7,7 +7,7 @@ */ return array( 'names' => array( - 'core.pkg.css' => 'ca3f6a60', + 'core.pkg.css' => 'a821cfc9', 'core.pkg.js' => '919c56b5', 'darkconsole.pkg.js' => 'e7393ebb', 'differential.pkg.css' => 'bb338e4b', @@ -49,7 +49,7 @@ return array( 'rsrc/css/application/conpherence/menu.css' => 'f389e048', 'rsrc/css/application/conpherence/message-pane.css' => '3150e2a2', 'rsrc/css/application/conpherence/notification.css' => 'd208f806', - 'rsrc/css/application/conpherence/transaction.css' => '25138b7f', + 'rsrc/css/application/conpherence/transaction.css' => '885433f0', 'rsrc/css/application/conpherence/update.css' => '1099a660', 'rsrc/css/application/conpherence/widget-pane.css' => '2af42ebe', 'rsrc/css/application/contentsource/content-source-view.css' => '4b8b05d4', @@ -133,7 +133,7 @@ return array( 'rsrc/css/phui/phui-document.css' => '94d5dcd8', 'rsrc/css/phui/phui-feed-story.css' => 'c9f3a0b5', 'rsrc/css/phui/phui-fontkit.css' => 'dd8ddf27', - 'rsrc/css/phui/phui-form-view.css' => '17eace76', + 'rsrc/css/phui/phui-form-view.css' => '94ae3032', 'rsrc/css/phui/phui-form.css' => 'f535f938', 'rsrc/css/phui/phui-header-view.css' => 'da4586b1', 'rsrc/css/phui/phui-icon.css' => 'bc766998', @@ -346,6 +346,7 @@ return array( 'rsrc/js/application/aphlict/behavior-aphlict-listen.js' => 'b1a59974', 'rsrc/js/application/aphlict/behavior-aphlict-status.js' => 'ea681761', 'rsrc/js/application/auth/behavior-persona-login.js' => '9414ff18', + 'rsrc/js/application/calendar/event-all-day.js' => 'ca5fa62a', 'rsrc/js/application/config/behavior-reorder-fields.js' => '14a827de', 'rsrc/js/application/conpherence/ConpherenceThreadManager.js' => '9e507b59', 'rsrc/js/application/conpherence/behavior-drag-and-drop-photo.js' => 'cf86d16a', @@ -516,7 +517,7 @@ return array( 'conpherence-message-pane-css' => '3150e2a2', 'conpherence-notification-css' => 'd208f806', 'conpherence-thread-manager' => '9e507b59', - 'conpherence-transaction-css' => '25138b7f', + 'conpherence-transaction-css' => '885433f0', 'conpherence-update-css' => '1099a660', 'conpherence-widget-pane-css' => '2af42ebe', 'differential-changeset-view-css' => 'e19cfd6e', @@ -585,6 +586,7 @@ return array( 'javelin-behavior-doorkeeper-tag' => 'e5822781', 'javelin-behavior-durable-column' => '657c2b50', 'javelin-behavior-error-log' => '6882e80a', + 'javelin-behavior-event-all-day' => 'ca5fa62a', 'javelin-behavior-fancy-datepicker' => '5c0f680f', 'javelin-behavior-global-drag-and-drop' => 'c8e57404', 'javelin-behavior-herald-rule-editor' => '7ebaeed3', @@ -784,7 +786,7 @@ return array( 'phui-font-icon-base-css' => '3dad2ae3', 'phui-fontkit-css' => 'dd8ddf27', 'phui-form-css' => 'f535f938', - 'phui-form-view-css' => '17eace76', + 'phui-form-view-css' => '94ae3032', 'phui-header-view-css' => 'da4586b1', 'phui-icon-view-css' => 'bc766998', 'phui-image-mask-css' => '5a8b09c8', diff --git a/src/applications/conpherence/query/ConpherenceThreadSearchEngine.php b/src/applications/conpherence/query/ConpherenceThreadSearchEngine.php index 2a23d6c073..f2a2d920bd 100644 --- a/src/applications/conpherence/query/ConpherenceThreadSearchEngine.php +++ b/src/applications/conpherence/query/ConpherenceThreadSearchEngine.php @@ -149,32 +149,48 @@ final class ConpherenceThreadSearchEngine $viewer, $conpherences); + $engines = array(); + $fulltext = $query->getParameter('fulltext'); if (strlen($fulltext) && $conpherences) { $context = $this->loadContextMessages($conpherences, $fulltext); $author_phids = array(); - foreach ($context as $messages) { + foreach ($context as $phid => $messages) { + $conpherence = $conpherences[$phid]; + + $engine = id(new PhabricatorMarkupEngine()) + ->setViewer($viewer) + ->setContextObject($conpherence); + foreach ($messages as $group) { foreach ($group as $message) { $xaction = $message['xaction']; if ($xaction) { $author_phids[] = $xaction->getAuthorPHID(); + $engine->addObject( + $xaction->getComment(), + PhabricatorApplicationTransactionComment::MARKUP_FIELD_COMMENT); } } } + $engine->process(); + + $engines[$phid] = $engine; } $handles = $viewer->loadHandles($author_phids); + $handles = iterator_to_array($handles); } else { $context = array(); } $list = new PHUIObjectItemListView(); $list->setUser($viewer); - foreach ($conpherences as $conpherence) { + foreach ($conpherences as $conpherence_phid => $conpherence) { $created = phabricator_date($conpherence->getDateCreated(), $viewer); $title = $conpherence->getDisplayTitle($viewer); + $monogram = $conpherence->getMonogram(); if ($conpherence->getIsRoom()) { $icon_name = $conpherence->getPolicyIconName($policy_objects); @@ -186,7 +202,7 @@ final class ConpherenceThreadSearchEngine $item = id(new PHUIObjectItemView()) ->setObjectName($conpherence->getMonogram()) ->setHeader($title) - ->setHref('/conpherence/'.$conpherence->getID().'/') + ->setHref('/'.$conpherence->getMonogram()) ->setObject($conpherence) ->addIcon('none', $created) ->addIcon( @@ -201,43 +217,37 @@ final class ConpherenceThreadSearchEngine phabricator_datetime($conpherence->getDateModified(), $viewer)), )); - $messages = idx($context, $conpherence->getPHID()); + $messages = idx($context, $conpherence_phid); if ($messages) { - - // TODO: This is egregiously under-designed. - foreach ($messages as $group) { $rows = array(); - $rowc = array(); foreach ($group as $message) { $xaction = $message['xaction']; if (!$xaction) { continue; } - $rowc[] = ($message['match'] ? 'highlighted' : null); - $rows[] = array( - $handles->renderHandle($xaction->getAuthorPHID()), - $xaction->getComment()->getContent(), - phabricator_datetime($xaction->getDateCreated(), $viewer), - ); + $history_href = '/'.$monogram.'#'.$xaction->getID(); + + $view = id(new ConpherenceTransactionView()) + ->setUser($viewer) + ->setHandles($handles) + ->setMarkupEngine($engines[$conpherence_phid]) + ->setConpherenceThread($conpherence) + ->setConpherenceTransaction($xaction) + ->setEpoch($xaction->getDateCreated(), $history_href) + ->addClass('conpherence-fulltext-result'); + + if ($message['match']) { + $view->addClass('conpherence-fulltext-match'); + } + + $rows[] = $view; } - $table = id(new AphrontTableView($rows)) - ->setHeaders( - array( - pht('User'), - pht('Message'), - pht('At'), - )) - ->setRowClasses($rowc) - ->setColumnClasses( - array( - '', - 'wide', - )); + $box = id(new PHUIBoxView()) - ->appendChild($table) - ->addMargin(PHUI::MARGIN_SMALL); + ->appendChild($rows) + ->addClass('conpherence-fulltext-results'); $item->appendChild($box); } } @@ -362,8 +372,12 @@ final class ConpherenceThreadSearchEngine $groups = array(); foreach ($hits as $thread_phid => $rows) { $rows = ipull($rows, null, 'transactionPHID'); + $done = array(); foreach ($rows as $phid => $row) { - unset($rows[$phid]); + if (isset($done[$phid])) { + continue; + } + $done[$phid] = true; $group = array(); @@ -381,7 +395,7 @@ final class ConpherenceThreadSearchEngine if (isset($rows[$prev])) { $match = true; - unset($rows[$prev]); + $done[$prev] = true; } else { $match = false; } @@ -411,7 +425,7 @@ final class ConpherenceThreadSearchEngine if (isset($rows[$next])) { $match = true; - unset($rows[$next]); + $done[$next] = true; } else { $match = false; } @@ -451,6 +465,9 @@ final class ConpherenceThreadSearchEngine foreach ($group as $key => $list) { foreach ($list as $lkey => $item) { $xaction = idx($xactions, $item['phid']); + if ($xaction->shouldHide()) { + continue; + } $groups[$thread_phid][$key][$lkey]['xaction'] = $xaction; } } diff --git a/webroot/rsrc/css/application/conpherence/transaction.css b/webroot/rsrc/css/application/conpherence/transaction.css index d67d31692e..6ebd53b2ee 100644 --- a/webroot/rsrc/css/application/conpherence/transaction.css +++ b/webroot/rsrc/css/application/conpherence/transaction.css @@ -25,3 +25,22 @@ color: {$darkbluetext}; font-weight: bold; } + +.conpherence-fulltext-results { + margin: 0 8px 8px; + background: {$lightgreybackground}; + border: 1px solid {$lightgreyborder}; +} + +.conpherence-fulltext-result { + margin: 0 0 1px; + padding: 8px; +} + +.conpherence-fulltext-match { + background: {$lightyellow}; +} + +.conpherence-fulltext-results .epoch-link { + float: right; +}