mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-23 15:22:41 +01:00
Generate slightly shorter summaries in the typeahead browse dialog
Summary: Ref T11034. Try to produce a roughly-one-sentence summary instead of a roughly-one-paragraph summary for the browse dialog. Test Plan: - Added unit tests, ran unit tests. - Wrote a longer summary for a project, browsed to it, saw a shorter summary. Reviewers: chad Reviewed By: chad Maniphest Tasks: T11034 Differential Revision: https://secure.phabricator.com/D16892
This commit is contained in:
parent
d69a1b95e7
commit
79132311f4
4 changed files with 68 additions and 1 deletions
|
@ -2896,6 +2896,7 @@ phutil_register_library_map(array(
|
||||||
'PhabricatorManiphestTaskTestDataGenerator' => 'applications/maniphest/lipsum/PhabricatorManiphestTaskTestDataGenerator.php',
|
'PhabricatorManiphestTaskTestDataGenerator' => 'applications/maniphest/lipsum/PhabricatorManiphestTaskTestDataGenerator.php',
|
||||||
'PhabricatorMarkupCache' => 'applications/cache/storage/PhabricatorMarkupCache.php',
|
'PhabricatorMarkupCache' => 'applications/cache/storage/PhabricatorMarkupCache.php',
|
||||||
'PhabricatorMarkupEngine' => 'infrastructure/markup/PhabricatorMarkupEngine.php',
|
'PhabricatorMarkupEngine' => 'infrastructure/markup/PhabricatorMarkupEngine.php',
|
||||||
|
'PhabricatorMarkupEngineTestCase' => 'infrastructure/markup/__tests__/PhabricatorMarkupEngineTestCase.php',
|
||||||
'PhabricatorMarkupInterface' => 'infrastructure/markup/PhabricatorMarkupInterface.php',
|
'PhabricatorMarkupInterface' => 'infrastructure/markup/PhabricatorMarkupInterface.php',
|
||||||
'PhabricatorMarkupOneOff' => 'infrastructure/markup/PhabricatorMarkupOneOff.php',
|
'PhabricatorMarkupOneOff' => 'infrastructure/markup/PhabricatorMarkupOneOff.php',
|
||||||
'PhabricatorMarkupPreviewController' => 'infrastructure/markup/PhabricatorMarkupPreviewController.php',
|
'PhabricatorMarkupPreviewController' => 'infrastructure/markup/PhabricatorMarkupPreviewController.php',
|
||||||
|
@ -7871,6 +7872,7 @@ phutil_register_library_map(array(
|
||||||
'PhabricatorManiphestTaskTestDataGenerator' => 'PhabricatorTestDataGenerator',
|
'PhabricatorManiphestTaskTestDataGenerator' => 'PhabricatorTestDataGenerator',
|
||||||
'PhabricatorMarkupCache' => 'PhabricatorCacheDAO',
|
'PhabricatorMarkupCache' => 'PhabricatorCacheDAO',
|
||||||
'PhabricatorMarkupEngine' => 'Phobject',
|
'PhabricatorMarkupEngine' => 'Phobject',
|
||||||
|
'PhabricatorMarkupEngineTestCase' => 'PhabricatorTestCase',
|
||||||
'PhabricatorMarkupOneOff' => array(
|
'PhabricatorMarkupOneOff' => array(
|
||||||
'Phobject',
|
'Phobject',
|
||||||
'PhabricatorMarkupInterface',
|
'PhabricatorMarkupInterface',
|
||||||
|
|
|
@ -130,7 +130,7 @@ final class PhabricatorProjectDatasource
|
||||||
|
|
||||||
$description = idx($descriptions, $phid);
|
$description = idx($descriptions, $phid);
|
||||||
if (strlen($description)) {
|
if (strlen($description)) {
|
||||||
$summary = PhabricatorMarkupEngine::summarize($description);
|
$summary = PhabricatorMarkupEngine::summarizeSentence($description);
|
||||||
$proj_result->addAttribute($summary);
|
$proj_result->addAttribute($summary);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -607,6 +607,28 @@ final class PhabricatorMarkupEngine extends Phobject {
|
||||||
return array_values($files);
|
return array_values($files);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function summarizeSentence($corpus) {
|
||||||
|
$corpus = trim($corpus);
|
||||||
|
$blocks = preg_split('/\n+/', $corpus, 2);
|
||||||
|
$block = head($blocks);
|
||||||
|
|
||||||
|
$sentences = preg_split(
|
||||||
|
'/\b([.?!]+)\B/u',
|
||||||
|
$block,
|
||||||
|
2,
|
||||||
|
PREG_SPLIT_DELIM_CAPTURE);
|
||||||
|
|
||||||
|
if (count($sentences) > 1) {
|
||||||
|
$result = $sentences[0].$sentences[1];
|
||||||
|
} else {
|
||||||
|
$result = head($sentences);
|
||||||
|
}
|
||||||
|
|
||||||
|
return id(new PhutilUTF8StringTruncator())
|
||||||
|
->setMaximumGlyphs(128)
|
||||||
|
->truncateString($result);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Produce a corpus summary, in a way that shortens the underlying text
|
* Produce a corpus summary, in a way that shortens the underlying text
|
||||||
* without truncating it somewhere awkward.
|
* without truncating it somewhere awkward.
|
||||||
|
|
|
@ -0,0 +1,43 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
final class PhabricatorMarkupEngineTestCase
|
||||||
|
extends PhabricatorTestCase {
|
||||||
|
|
||||||
|
public function testRemarkupSentenceSummmaries() {
|
||||||
|
$this->assertSentenceSummary(
|
||||||
|
'The quick brown fox. Jumped over the lazy dog.',
|
||||||
|
'The quick brown fox.');
|
||||||
|
|
||||||
|
$this->assertSentenceSummary(
|
||||||
|
'Go to www.help.com for details. Good day.',
|
||||||
|
'Go to www.help.com for details.');
|
||||||
|
|
||||||
|
$this->assertSentenceSummary(
|
||||||
|
'Coxy lummox gives squid who asks for job pen.',
|
||||||
|
'Coxy lummox gives squid who asks for job pen.');
|
||||||
|
|
||||||
|
$this->assertSentenceSummary(
|
||||||
|
'DEPRECATED',
|
||||||
|
'DEPRECATED');
|
||||||
|
|
||||||
|
$this->assertSentenceSummary(
|
||||||
|
'Never use this! It is deadly poison.',
|
||||||
|
'Never use this!');
|
||||||
|
|
||||||
|
$this->assertSentenceSummary(
|
||||||
|
"a short poem\nmeow meow meow\nmeow meow meow\n\n- cat",
|
||||||
|
'a short poem');
|
||||||
|
|
||||||
|
$this->assertSentenceSummary(
|
||||||
|
'WOW!! GREAT PROJECT!',
|
||||||
|
'WOW!!');
|
||||||
|
}
|
||||||
|
|
||||||
|
private function assertSentenceSummary($corpus, $summary) {
|
||||||
|
$this->assertEqual(
|
||||||
|
$summary,
|
||||||
|
PhabricatorMarkupEngine::summarizeSentence($corpus),
|
||||||
|
pht('Summary of: %s', $corpus));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in a new issue