diff options
author | Martin Reddy <lynx@lindenlab.com> | 2009-10-20 14:07:50 +0000 |
---|---|---|
committer | Martin Reddy <lynx@lindenlab.com> | 2009-10-20 14:07:50 +0000 |
commit | eb620735fc27d5f4fe21b52deceaec2818fea27d (patch) | |
tree | 07c068436dc31ce970517c4f49104be6a32ed95a | |
parent | 2180706f4cb5e8f5ba24b3973a25a50c6176be38 (diff) |
DEV-41358: Added support for search categories.
You can now specify a search category for all web-based searches,
e.g., "all" (default), "people", "places", "events", "groups", "wiki",
"destinations", "classifieds". Specifying a category will add the
relevant subdir to the search URL, as specified by the search team.
-rw-r--r-- | indra/newview/lleventnotifier.cpp | 2 | ||||
-rw-r--r-- | indra/newview/llfloatersearch.cpp | 45 | ||||
-rw-r--r-- | indra/newview/llfloatersearch.h | 8 | ||||
-rw-r--r-- | indra/newview/llgroupactions.cpp | 2 | ||||
-rw-r--r-- | indra/newview/llnavigationbar.cpp | 2 | ||||
-rw-r--r-- | indra/newview/llworldmapview.cpp | 6 | ||||
-rw-r--r-- | indra/newview/skins/default/xui/en/floater_search.xml | 2 |
7 files changed, 52 insertions, 15 deletions
diff --git a/indra/newview/lleventnotifier.cpp b/indra/newview/lleventnotifier.cpp index 68a4f31730..867fb0255a 100644 --- a/indra/newview/lleventnotifier.cpp +++ b/indra/newview/lleventnotifier.cpp @@ -198,7 +198,7 @@ bool LLEventNotification::handleResponse(const LLSD& notification, const LLSD& r break; } case 1: - LLFloaterReg::showInstance("search", LLSD().insert("panel", "event").insert("id", S32(getEventID()))); + LLFloaterReg::showInstance("search", LLSD().insert("category", "events").insert("id", S32(getEventID()))); break; case 2: break; diff --git a/indra/newview/llfloatersearch.cpp b/indra/newview/llfloatersearch.cpp index 904263e2c2..4c83530f43 100644 --- a/indra/newview/llfloatersearch.cpp +++ b/indra/newview/llfloatersearch.cpp @@ -40,6 +40,17 @@ LLFloaterSearch::LLFloaterSearch(const LLSD& key) : LLFloater(key), mBrowser(NULL) { + // declare a map that transforms a category name into + // the URL suffix that is used to search that category + mCategoryPaths = LLSD::emptyMap(); + mCategoryPaths["all"] = "search"; + mCategoryPaths["people"] = "search/people"; + mCategoryPaths["places"] = "search/places"; + mCategoryPaths["events"] = "search/events"; + mCategoryPaths["groups"] = "search/groups"; + mCategoryPaths["wiki"] = "search/wiki"; + mCategoryPaths["destinations"] = "destinations"; + mCategoryPaths["classifieds"] = "classifieds"; } BOOL LLFloaterSearch::postBuild() @@ -79,13 +90,33 @@ void LLFloaterSearch::handleMediaEvent(LLPluginClassMedia *self, EMediaEvent eve void LLFloaterSearch::search(const LLSD &key) { - if (mBrowser) + if (! mBrowser) + { + return; + } + + // get the URL for the search page + std::string url = getString("search_url"); + if (! LLStringUtil::endsWith(url, "/")) { - std::string query = getString("search_url"); - if (key.has("id")) - { - query += std::string("?q=") + key["id"].asString(); - } - mBrowser->navigateTo(query); + url += "/"; } + + // work out the subdir to use based on the requested category + std::string category = key.has("category") ? key["category"].asString() : ""; + if (mCategoryPaths.has(category)) + { + url += mCategoryPaths[category].asString(); + } + else + { + url += mCategoryPaths["all"].asString(); + } + + // append the search query string + std::string search_text = key.has("id") ? key["id"].asString() : ""; + url += std::string("?q=") + search_text; + + // and load the URL in the web view + mBrowser->navigateTo(url); } diff --git a/indra/newview/llfloatersearch.h b/indra/newview/llfloatersearch.h index 46af53b154..743107484f 100644 --- a/indra/newview/llfloatersearch.h +++ b/indra/newview/llfloatersearch.h @@ -56,9 +56,14 @@ public: LLFloaterSearch(const LLSD& key); /// show the search floater with a new search + /// see search() for details on the key parameter. /*virtual*/ void onOpen(const LLSD& key); - /// perform a search with the specific search term + /// perform a search with the specific search term. + /// The key should be a map that can contain the following keys: + /// - "id": specifies the text phrase to search for + /// - "category": one of "all" (default), "people", "places", + /// "events", "groups", "wiki", "destinations", "classifieds" void search(const LLSD &key); private: @@ -68,6 +73,7 @@ private: /*virtual*/ void handleMediaEvent(LLPluginClassMedia *self, EMediaEvent event); LLMediaCtrl *mBrowser; + LLSD mCategoryPaths; }; #endif // LL_LLFLOATERSEARCH_H diff --git a/indra/newview/llgroupactions.cpp b/indra/newview/llgroupactions.cpp index 220fb3c8a0..c46eedbef2 100644 --- a/indra/newview/llgroupactions.cpp +++ b/indra/newview/llgroupactions.cpp @@ -112,7 +112,7 @@ LLGroupHandler gGroupHandler; // static void LLGroupActions::search() { - LLFloaterReg::showInstance("search", LLSD().insert("panel", "group")); + LLFloaterReg::showInstance("search", LLSD().insert("category", "groups")); } // static diff --git a/indra/newview/llnavigationbar.cpp b/indra/newview/llnavigationbar.cpp index 19fee20740..b77415dfee 100644 --- a/indra/newview/llnavigationbar.cpp +++ b/indra/newview/llnavigationbar.cpp @@ -535,7 +535,7 @@ void LLNavigationBar::handleLoginComplete() void LLNavigationBar::invokeSearch(std::string search_text) { - LLFloaterReg::showInstance("search", LLSD().insert("panel", "all").insert("id", LLSD(search_text))); + LLFloaterReg::showInstance("search", LLSD().insert("category", "all").insert("id", LLSD(search_text))); } void LLNavigationBar::clearHistoryCache() diff --git a/indra/newview/llworldmapview.cpp b/indra/newview/llworldmapview.cpp index 5446a08ebf..3aad5c7378 100644 --- a/indra/newview/llworldmapview.cpp +++ b/indra/newview/llworldmapview.cpp @@ -1897,20 +1897,20 @@ BOOL LLWorldMapView::handleDoubleClick( S32 x, S32 y, MASK mask ) id.toString(uuid_str); uuid_str = uuid_str.substr(28); sscanf(uuid_str.c_str(), "%X", &event_id); - LLFloaterReg::showInstance("search", LLSD().insert("panel", "event").insert("id", event_id)); + LLFloaterReg::showInstance("search", LLSD().insert("category", "events").insert("id", event_id)); break; } case MAP_ITEM_LAND_FOR_SALE: case MAP_ITEM_LAND_FOR_SALE_ADULT: { LLFloaterReg::hideInstance("world_map"); - LLFloaterReg::showInstance("search", LLSD().insert("panel", "land").insert("id", id)); + LLFloaterReg::showInstance("search", LLSD().insert("category", "destinations").insert("id", id)); break; } case MAP_ITEM_CLASSIFIED: { LLFloaterReg::hideInstance("world_map"); - LLFloaterReg::showInstance("search", LLSD().insert("panel", "classified").insert("id", id)); + LLFloaterReg::showInstance("search", LLSD().insert("category", "classifieds").insert("id", id)); break; } default: diff --git a/indra/newview/skins/default/xui/en/floater_search.xml b/indra/newview/skins/default/xui/en/floater_search.xml index 4ac0edca5a..296cde92e3 100644 --- a/indra/newview/skins/default/xui/en/floater_search.xml +++ b/indra/newview/skins/default/xui/en/floater_search.xml @@ -13,7 +13,7 @@ width="620"> <floater.string name="search_url"> - http://eniac21.lindenlab.com:10001/viewer/search/ + http://eniac21.lindenlab.com:10001/viewer </floater.string> <floater.string name="loading_text"> |