Page MenuHomePhabricator

D9889.id23746.diff
No OneTemporary

D9889.id23746.diff

diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php
--- a/src/__phutil_library_map__.php
+++ b/src/__phutil_library_map__.php
@@ -586,6 +586,7 @@
'DiffusionSvnRawDiffQuery' => 'applications/diffusion/query/rawdiff/DiffusionSvnRawDiffQuery.php',
'DiffusionSvnRequest' => 'applications/diffusion/request/DiffusionSvnRequest.php',
'DiffusionSymbolController' => 'applications/diffusion/controller/DiffusionSymbolController.php',
+ 'DiffusionSymbolDatasource' => 'applications/diffusion/typeahead/DiffusionSymbolDatasource.php',
'DiffusionSymbolQuery' => 'applications/diffusion/query/DiffusionSymbolQuery.php',
'DiffusionTagListController' => 'applications/diffusion/controller/DiffusionTagListController.php',
'DiffusionTagListView' => 'applications/diffusion/view/DiffusionTagListView.php',
@@ -1144,6 +1145,7 @@
'PhabricatorApplicationCountdown' => 'applications/countdown/application/PhabricatorApplicationCountdown.php',
'PhabricatorApplicationDaemons' => 'applications/daemon/application/PhabricatorApplicationDaemons.php',
'PhabricatorApplicationDashboard' => 'applications/dashboard/application/PhabricatorApplicationDashboard.php',
+ 'PhabricatorApplicationDatasource' => 'applications/meta/typeahead/PhabricatorApplicationDatasource.php',
'PhabricatorApplicationDetailViewController' => 'applications/meta/controller/PhabricatorApplicationDetailViewController.php',
'PhabricatorApplicationDifferential' => 'applications/differential/application/PhabricatorApplicationDifferential.php',
'PhabricatorApplicationDiffusion' => 'applications/diffusion/application/PhabricatorApplicationDiffusion.php',
@@ -2146,6 +2148,7 @@
'PhabricatorSearchConfigOptions' => 'applications/search/config/PhabricatorSearchConfigOptions.php',
'PhabricatorSearchController' => 'applications/search/controller/PhabricatorSearchController.php',
'PhabricatorSearchDAO' => 'applications/search/storage/PhabricatorSearchDAO.php',
+ 'PhabricatorSearchDatasource' => 'applications/search/typeahead/PhabricatorSearchDatasource.php',
'PhabricatorSearchDeleteController' => 'applications/search/controller/PhabricatorSearchDeleteController.php',
'PhabricatorSearchDocument' => 'applications/search/storage/document/PhabricatorSearchDocument.php',
'PhabricatorSearchDocumentField' => 'applications/search/storage/document/PhabricatorSearchDocumentField.php',
@@ -3297,6 +3300,7 @@
'DiffusionSvnRawDiffQuery' => 'DiffusionRawDiffQuery',
'DiffusionSvnRequest' => 'DiffusionRequest',
'DiffusionSymbolController' => 'DiffusionController',
+ 'DiffusionSymbolDatasource' => 'PhabricatorTypeaheadDatasource',
'DiffusionSymbolQuery' => 'PhabricatorOffsetPagedQuery',
'DiffusionTagListController' => 'DiffusionController',
'DiffusionTagListView' => 'DiffusionView',
@@ -3946,6 +3950,7 @@
'PhabricatorApplicationCountdown' => 'PhabricatorApplication',
'PhabricatorApplicationDaemons' => 'PhabricatorApplication',
'PhabricatorApplicationDashboard' => 'PhabricatorApplication',
+ 'PhabricatorApplicationDatasource' => 'PhabricatorTypeaheadDatasource',
'PhabricatorApplicationDetailViewController' => 'PhabricatorApplicationsController',
'PhabricatorApplicationDifferential' => 'PhabricatorApplication',
'PhabricatorApplicationDiffusion' => 'PhabricatorApplication',
@@ -5063,6 +5068,7 @@
'PhabricatorSearchConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorSearchController' => 'PhabricatorSearchBaseController',
'PhabricatorSearchDAO' => 'PhabricatorLiskDAO',
+ 'PhabricatorSearchDatasource' => 'PhabricatorTypeaheadCompositeDatasource',
'PhabricatorSearchDeleteController' => 'PhabricatorSearchBaseController',
'PhabricatorSearchDocument' => 'PhabricatorSearchDAO',
'PhabricatorSearchDocumentField' => 'PhabricatorSearchDAO',
diff --git a/src/applications/diffusion/typeahead/DiffusionSymbolDatasource.php b/src/applications/diffusion/typeahead/DiffusionSymbolDatasource.php
new file mode 100644
--- /dev/null
+++ b/src/applications/diffusion/typeahead/DiffusionSymbolDatasource.php
@@ -0,0 +1,47 @@
+<?php
+
+final class DiffusionSymbolDatasource
+ extends PhabricatorTypeaheadDatasource {
+
+ public function getPlaceholderText() {
+ return pht('Type a symbol name...');
+ }
+
+ public function getDatasourceApplicationClass() {
+ return 'PhabricatorApplicationDiffusion';
+ }
+
+ public function loadResults() {
+ $viewer = $this->getViewer();
+ $raw_query = $this->getRawQuery();
+
+ $results = array();
+
+ if (strlen($raw_query)) {
+ $symbols = id(new DiffusionSymbolQuery())
+ ->setNamePrefix($raw_query)
+ ->setLimit(15)
+ ->needArcanistProjects(true)
+ ->needRepositories(true)
+ ->needPaths(true)
+ ->execute();
+ foreach ($symbols as $symbol) {
+ $lang = $symbol->getSymbolLanguage();
+ $name = $symbol->getSymbolName();
+ $type = $symbol->getSymbolType();
+ $proj = $symbol->getArcanistProject()->getName();
+
+ $results[] = id(new PhabricatorTypeaheadResult())
+ ->setName($name)
+ ->setURI($symbol->getURI())
+ ->setPHID(md5($symbol->getURI())) // Just needs to be unique.
+ ->setDisplayName($name)
+ ->setDisplayType(strtoupper($lang).' '.ucwords($type).' ('.$proj.')')
+ ->setPriorityType('symb');
+ }
+ }
+
+ return $results;
+ }
+
+}
diff --git a/src/applications/meta/typeahead/PhabricatorApplicationDatasource.php b/src/applications/meta/typeahead/PhabricatorApplicationDatasource.php
new file mode 100644
--- /dev/null
+++ b/src/applications/meta/typeahead/PhabricatorApplicationDatasource.php
@@ -0,0 +1,43 @@
+<?php
+
+final class PhabricatorApplicationDatasource
+ extends PhabricatorTypeaheadDatasource {
+
+ public function getPlaceholderText() {
+ return pht('Type an application name...');
+ }
+
+ public function getDatasourceApplicationClass() {
+ return 'PhabricatorApplicationApplications';
+ }
+
+ public function loadResults() {
+ $viewer = $this->getViewer();
+ $raw_query = $this->getRawQuery();
+
+ $results = array();
+
+ $applications = PhabricatorApplication::getAllInstalledApplications();
+ foreach ($applications as $application) {
+ $uri = $application->getTypeaheadURI();
+ if (!$uri) {
+ continue;
+ }
+ $name = $application->getName().' '.$application->getShortDescription();
+ $img = 'apps-'.$application->getIconName().'-dark-large';
+ $results[] = id(new PhabricatorTypeaheadResult())
+ ->setName($name)
+ ->setURI($uri)
+ ->setPHID($application->getPHID())
+ ->setPriorityString($application->getName())
+ ->setDisplayName($application->getName())
+ ->setDisplayType($application->getShortDescription())
+ ->setImageuRI($application->getIconURI())
+ ->setPriorityType('apps')
+ ->setImageSprite('phabricator-search-icon sprite-apps-large '.$img);
+ }
+
+ return $results;
+ }
+
+}
diff --git a/src/applications/people/typeahead/PhabricatorPeopleDatasource.php b/src/applications/people/typeahead/PhabricatorPeopleDatasource.php
--- a/src/applications/people/typeahead/PhabricatorPeopleDatasource.php
+++ b/src/applications/people/typeahead/PhabricatorPeopleDatasource.php
@@ -3,6 +3,18 @@
final class PhabricatorPeopleDatasource
extends PhabricatorTypeaheadDatasource {
+ private $enrichResults;
+
+ /**
+ * Controls enriched rendering, for global search. This is a bit hacky and
+ * should probably be handled in a more general way, but is fairly reasonable
+ * for now.
+ */
+ public function setEnrichResults($enrich) {
+ $this->enrichResults = $enrich;
+ return $this;
+ }
+
public function getPlaceholderText() {
return pht('Type a username...');
}
@@ -71,16 +83,14 @@
}
}
- // TODO: Restore this when mainsearch moves here.
- /*
-
- if ($need_rich_data) {
+ if ($this->enrichResults && $users) {
$phids = mpull($users, 'getPHID');
- $handles = $this->loadViewerHandles($phids);
+ $handles = id(new PhabricatorHandleQuery())
+ ->setViewer($viewer)
+ ->withPHIDs($phids)
+ ->execute();
}
- */
-
foreach ($users as $user) {
$closed = null;
if ($user->getIsDisabled()) {
@@ -98,10 +108,7 @@
->setPriorityType('user')
->setClosed($closed);
- // TODO: Restore this too.
- /*
-
- if ($need_rich_data) {
+ if ($this->enrichResults) {
$display_type = 'User';
if ($user->getIsAdmin()) {
$display_type = 'Administrator';
@@ -110,8 +117,6 @@
$result->setImageURI($handles[$user->getPHID()]->getImageURI());
}
- */
-
$results[] = $result;
}
diff --git a/src/applications/search/typeahead/PhabricatorSearchDatasource.php b/src/applications/search/typeahead/PhabricatorSearchDatasource.php
new file mode 100644
--- /dev/null
+++ b/src/applications/search/typeahead/PhabricatorSearchDatasource.php
@@ -0,0 +1,24 @@
+<?php
+
+final class PhabricatorSearchDatasource
+ extends PhabricatorTypeaheadCompositeDatasource {
+
+ public function getPlaceholderText() {
+ return pht('Type an object name...');
+ }
+
+ public function getDatasourceApplicationClass() {
+ return 'PhabricatorApplicationSearch';
+ }
+
+ public function getComponentDatasources() {
+ return array(
+ id(new PhabricatorPeopleDatasource())->setEnrichResults(true),
+ new PhabricatorProjectDatasource(),
+ new PhabricatorApplicationDatasource(),
+ new PhabricatorTypeaheadMonogramDatasource(),
+ new DiffusionSymbolDatasource(),
+ );
+ }
+
+}
diff --git a/src/applications/typeahead/controller/PhabricatorTypeaheadCommonDatasourceController.php b/src/applications/typeahead/controller/PhabricatorTypeaheadCommonDatasourceController.php
--- a/src/applications/typeahead/controller/PhabricatorTypeaheadCommonDatasourceController.php
+++ b/src/applications/typeahead/controller/PhabricatorTypeaheadCommonDatasourceController.php
@@ -19,24 +19,12 @@
$query = $request->getStr('q');
$raw_query = $request->getStr('raw');
- $need_rich_data = false;
-
$need_users = false;
- $need_applications = false;
$need_projs = false;
$need_upforgrabs = false;
$need_noproject = false;
- $need_symbols = false;
- $need_jump_objects = false;
+ $need_rich_data = false;
switch ($this->type) {
- case 'mainsearch':
- $need_users = true;
- $need_applications = true;
- $need_rich_data = true;
- $need_symbols = true;
- $need_projs = true;
- $need_jump_objects = true;
- break;
case 'searchowner':
$need_users = true;
$need_upforgrabs = true;
@@ -186,74 +174,6 @@
}
}
- if ($need_applications) {
- $applications = PhabricatorApplication::getAllInstalledApplications();
- foreach ($applications as $application) {
- $uri = $application->getTypeaheadURI();
- if (!$uri) {
- continue;
- }
- $name = $application->getName().' '.$application->getShortDescription();
- $img = 'apps-'.$application->getIconName().'-dark-large';
- $results[] = id(new PhabricatorTypeaheadResult())
- ->setName($name)
- ->setURI($uri)
- ->setPHID($application->getPHID())
- ->setPriorityString($application->getName())
- ->setDisplayName($application->getName())
- ->setDisplayType($application->getShortDescription())
- ->setImageuRI($application->getIconURI())
- ->setPriorityType('apps')
- ->setImageSprite('phabricator-search-icon sprite-apps-large '.$img);
- }
- }
-
- if ($need_symbols) {
- $symbols = id(new DiffusionSymbolQuery())
- ->setNamePrefix($query)
- ->setLimit(15)
- ->needArcanistProjects(true)
- ->needRepositories(true)
- ->needPaths(true)
- ->execute();
- foreach ($symbols as $symbol) {
- $lang = $symbol->getSymbolLanguage();
- $name = $symbol->getSymbolName();
- $type = $symbol->getSymbolType();
- $proj = $symbol->getArcanistProject()->getName();
-
- $results[] = id(new PhabricatorTypeaheadResult())
- ->setName($name)
- ->setURI($symbol->getURI())
- ->setPHID(md5($symbol->getURI())) // Just needs to be unique.
- ->setDisplayName($name)
- ->setDisplayType(strtoupper($lang).' '.ucwords($type).' ('.$proj.')')
- ->setPriorityType('symb');
- }
- }
-
- if ($need_jump_objects) {
- $objects = id(new PhabricatorObjectQuery())
- ->setViewer($viewer)
- ->withNames(array($raw_query))
- ->execute();
- if ($objects) {
- $handles = id(new PhabricatorHandleQuery())
- ->setViewer($viewer)
- ->withPHIDs(mpull($objects, 'getPHID'))
- ->execute();
- $handle = head($handles);
- if ($handle) {
- $results[] = id(new PhabricatorTypeaheadResult())
- ->setName($handle->getFullName())
- ->setDisplayType($handle->getTypeName())
- ->setURI($handle->getURI())
- ->setPHID($handle->getPHID())
- ->setPriorityType('jump');
- }
- }
- }
-
$content = mpull($results, 'getWireFormat');
if ($request->isAjax()) {
diff --git a/src/view/page/menu/PhabricatorMainMenuSearchView.php b/src/view/page/menu/PhabricatorMainMenuSearchView.php
--- a/src/view/page/menu/PhabricatorMainMenuSearchView.php
+++ b/src/view/page/menu/PhabricatorMainMenuSearchView.php
@@ -35,13 +35,15 @@
),
'');
+ $search_datasource = new PhabricatorSearchDatasource();
+
Javelin::initBehavior(
'phabricator-search-typeahead',
array(
'id' => $target_id,
'input' => $search_id,
'button' => $button_id,
- 'src' => '/typeahead/common/mainsearch/',
+ 'src' => $search_datasource->getDatasourceURI(),
'limit' => 10,
'placeholder' => pht('Search'),
));

File Metadata

Mime Type
text/plain
Expires
Sat, May 11, 6:59 AM (1 w, 5 d ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
6285051
Default Alt Text
D9889.id23746.diff (14 KB)

Event Timeline