diff --git a/mozilla/xpfe/components/search/resources/internetresults.xul b/mozilla/xpfe/components/search/resources/internetresults.xul
index afc401254b4..b5ef79e048f 100644
--- a/mozilla/xpfe/components/search/resources/internetresults.xul
+++ b/mozilla/xpfe/components/search/resources/internetresults.xul
@@ -56,6 +56,9 @@
+
+
@@ -116,6 +120,10 @@
value="&availability.column.label;" observes="AvailabilityColumn"
resource="http://home.netscape.com/NC-rdf#Availability"
onclick="return doSort('AvailabilityColumn');" />
+
+
-
+
diff --git a/mozilla/xpfe/components/search/resources/search-panel.js b/mozilla/xpfe/components/search/resources/search-panel.js
index a30ddb3abb5..59a41478f54 100644
--- a/mozilla/xpfe/components/search/resources/search-panel.js
+++ b/mozilla/xpfe/components/search/resources/search-panel.js
@@ -359,11 +359,13 @@ function doStop()
var priceProperty = rdf.GetResource("http://home.netscape.com/NC-rdf#Price", true);
var availabilityProperty = rdf.GetResource("http://home.netscape.com/NC-rdf#Availability", true);
var relevanceProperty = rdf.GetResource("http://home.netscape.com/NC-rdf#Relevance", true);
+ var dateProperty = rdf.GetResource("http://home.netscape.com/NC-rdf#Date", true);
var trueProperty = rdf.GetLiteral("true");
var hasPriceFlag = internetSearch.HasAssertion(searchResource, priceProperty, trueProperty, true);
var hasAvailabilityFlag = internetSearch.HasAssertion(searchResource, availabilityProperty, trueProperty, true);
var hasRelevanceFlag = internetSearch.HasAssertion(searchResource, relevanceProperty, trueProperty, true);
+ var hasDateFlag = internetSearch.HasAssertion(searchResource, dateProperty, trueProperty, true);
if(hasPriceFlag == true)
{
@@ -384,6 +386,12 @@ function doStop()
if (colNode)
colNode.removeAttribute("style", "width: 0; visibility: collapse;");
}
+ if (hasDateFlag == true)
+ {
+ colNode = top.content.document.getElementById("DateColumn");
+ if (colNode)
+ colNode.removeAttribute("style", "width: 0; visibility: collapse;");
+ }
if (hasRelevanceFlag == true)
{
colNode = top.content.document.getElementById("RelevanceColumn");
diff --git a/mozilla/xpfe/components/search/src/nsInternetSearchService.cpp b/mozilla/xpfe/components/search/src/nsInternetSearchService.cpp
index be0e7e086c0..bb205806562 100755
--- a/mozilla/xpfe/components/search/src/nsInternetSearchService.cpp
+++ b/mozilla/xpfe/components/search/src/nsInternetSearchService.cpp
@@ -278,6 +278,7 @@ static PRBool mEngineListBuilt;
static nsIRDFResource *kNC_Banner;
static nsIRDFResource *kNC_Site;
static nsIRDFResource *kNC_Relevance;
+ static nsIRDFResource *kNC_Date;
static nsIRDFResource *kNC_RelevanceSort;
static nsIRDFResource *kNC_PageRank;
static nsIRDFResource *kNC_Engine;
@@ -385,6 +386,7 @@ nsIRDFResource *InternetSearchDataSource::kNC_Banner;
nsIRDFResource *InternetSearchDataSource::kNC_Site;
nsIRDFResource *InternetSearchDataSource::kNC_Relevance;
nsIRDFResource *InternetSearchDataSource::kNC_RelevanceSort;
+nsIRDFResource *InternetSearchDataSource::kNC_Date;
nsIRDFResource *InternetSearchDataSource::kNC_PageRank;
nsIRDFResource *InternetSearchDataSource::kNC_Engine;
nsIRDFResource *InternetSearchDataSource::kNC_Price;
@@ -440,6 +442,7 @@ InternetSearchDataSource::InternetSearchDataSource(void)
gRDFService->GetResource(NC_NAMESPACE_URI "Site", &kNC_Site);
gRDFService->GetResource(NC_NAMESPACE_URI "Relevance", &kNC_Relevance);
gRDFService->GetResource(NC_NAMESPACE_URI "Relevance?sort=true", &kNC_RelevanceSort);
+ gRDFService->GetResource(NC_NAMESPACE_URI "Date", &kNC_Date);
gRDFService->GetResource(NC_NAMESPACE_URI "PageRank", &kNC_PageRank);
gRDFService->GetResource(NC_NAMESPACE_URI "Engine", &kNC_Engine);
gRDFService->GetResource(NC_NAMESPACE_URI "Price", &kNC_Price);
@@ -485,6 +488,7 @@ InternetSearchDataSource::~InternetSearchDataSource (void)
NS_IF_RELEASE(kNC_Site);
NS_IF_RELEASE(kNC_Relevance);
NS_IF_RELEASE(kNC_RelevanceSort);
+ NS_IF_RELEASE(kNC_Date);
NS_IF_RELEASE(kNC_PageRank);
NS_IF_RELEASE(kNC_Engine);
NS_IF_RELEASE(kNC_Price);
@@ -3398,6 +3402,7 @@ InternetSearchDataSource::ParseHTML(nsIURI *aURL, nsIRDFResource *mParent, nsIRD
}
PRBool hasPriceFlag = PR_FALSE, hasAvailabilityFlag = PR_FALSE, hasRelevanceFlag = PR_FALSE;
+ PRBool hasDateFlag = PR_FALSE;
PRInt32 pageRank = 1;
// need to handle multiple sections, per spec
@@ -3408,6 +3413,9 @@ InternetSearchDataSource::ParseHTML(nsIURI *aURL, nsIRDFResource *mParent, nsIRD
nsAutoString relevanceStartStr, relevanceEndStr;
nsAutoString bannerStartStr, bannerEndStr, skiplocalStr;
nsAutoString priceStartStr, priceEndStr, availStartStr, availEndStr;
+ nsAutoString dateStartStr, dateEndStr;
+ nsAutoString nameStartStr, nameEndStr;
+ nsAutoString emailStartStr, emailEndStr;
nsAutoString browserResultTypeStr="result"; // default to "result"
// need an original copy of the HTML every time through the loop
@@ -3425,11 +3433,24 @@ InternetSearchDataSource::ParseHTML(nsIURI *aURL, nsIRDFResource *mParent, nsIRD
GetData(data, "interpret", interpretSectionNum, "bannerEnd", bannerEndStr);
GetData(data, "interpret", interpretSectionNum, "skiplocal", skiplocalStr);
skipLocalFlag = (skiplocalStr.EqualsIgnoreCase("true")) ? PR_TRUE : PR_FALSE;
+
+ // shopping channel support
GetData(data, "interpret", interpretSectionNum, "priceStart", priceStartStr);
GetData(data, "interpret", interpretSectionNum, "priceEnd", priceEndStr);
GetData(data, "interpret", interpretSectionNum, "availStart", availStartStr);
GetData(data, "interpret", interpretSectionNum, "availEnd", availEndStr);
+ // news channel support
+ GetData(data, "interpret", interpretSectionNum, "dateStart", dateStartStr);
+ GetData(data, "interpret", interpretSectionNum, "dateEnd", dateEndStr);
+
+ // people channel support
+ GetData(data, "interpret", interpretSectionNum, "nameStart", nameStartStr);
+ GetData(data, "interpret", interpretSectionNum, "nameEnd", nameEndStr);
+ GetData(data, "interpret", interpretSectionNum, "emailStart", emailStartStr);
+ GetData(data, "interpret", interpretSectionNum, "emailEnd", emailEndStr);
+
+ // special browser support
GetData(data, "interpret", interpretSectionNum, "browserResultType", browserResultTypeStr);
if (browserResultTypeStr.Length() < 1)
{
@@ -3493,7 +3514,7 @@ InternetSearchDataSource::ParseHTML(nsIURI *aURL, nsIRDFResource *mParent, nsIRD
if (resultItemEndStr.Length() < 1)
{
resultItemEndStr = resultItemStartStr;
- trimItemEnd = PR_FALSE;
+ trimItemEnd = PR_TRUE;
}
while(PR_TRUE)
@@ -3518,19 +3539,17 @@ InternetSearchDataSource::ParseHTML(nsIURI *aURL, nsIRDFResource *mParent, nsIRD
{
resultItemEnd = htmlResults.Length()-1;
}
+ else if ((trimItemEnd == PR_FALSE) && (resultItemEnd >= 0))
+ {
+ resultItemEnd += resultItemEndStr.Length();
+ }
nsAutoString resultItem;
htmlResults.Left(resultItem, resultItemEnd);
if (resultItem.Length() < 1) break;
- if (trimItemEnd == PR_TRUE)
- {
- htmlResults.Cut(0, resultItemEnd + resultItemEndStr.Length());
- }
- else
- {
- htmlResults.Cut(0, resultItemEnd);
- }
+
+ htmlResults.Cut(0, resultItemEnd);
#ifdef DEBUG_SEARCH_OUTPUT
char *results = resultItem.ToNewCString();
@@ -3754,77 +3773,123 @@ InternetSearchDataSource::ParseHTML(nsIURI *aURL, nsIRDFResource *mParent, nsIRD
}
}
- // look for price
- nsAutoString priceItem;
- PRInt32 priceStart;
- if ((priceStart = resultItem.Find(priceStartStr, PR_TRUE)) >= 0)
+ // look for date
+ if (dateStartStr.Length() > 0)
{
- PRInt32 priceEnd = resultItem.Find(priceEndStr, PR_TRUE, priceStart + priceStartStr.Length());
- if (priceEnd > priceStart)
+ nsAutoString dateItem;
+ PRInt32 dateStart;
+ if ((dateStart = resultItem.Find(dateStartStr, PR_TRUE)) >= 0)
{
- resultItem.Mid(priceItem, priceStart + priceStartStr.Length(),
- priceEnd - priceStart - priceStartStr.Length());
-
- ConvertEntities(priceItem);
- }
- }
- if (priceItem.Length() > 0)
- {
- const PRUnichar *priceUni = priceItem.GetUnicode();
- nsCOMPtr priceLiteral;
- if (NS_SUCCEEDED(rv = gRDFService->GetLiteral(priceUni, getter_AddRefs(priceLiteral))))
- {
- if (priceLiteral)
+ dateStart += dateStartStr.Length();
+ PRInt32 dateEnd = resultItem.Find(dateEndStr, PR_TRUE, dateStart);
+ if (dateEnd > dateStart)
{
- mInner->Assert(res, kNC_Price, priceLiteral, PR_TRUE);
- hasPriceFlag = PR_TRUE;
- }
- }
-
- PRInt32 priceCharStartOffset = priceItem.FindCharInSet("1234567890");
- if (priceCharStartOffset >= 0)
- {
- priceItem.Cut(0, priceCharStartOffset);
- PRInt32 priceErr;
- float val = priceItem.ToFloat(&priceErr);
- if (priceItem.FindChar(PRUnichar('.')) >= 0) val *= 100;
-
- nsCOMPtr priceSortLiteral;
- if (NS_SUCCEEDED(rv = gRDFService->GetIntLiteral((PRInt32)val, getter_AddRefs(priceSortLiteral))))
- {
- if (priceSortLiteral)
- {
- mInner->Assert(res, kNC_PriceSort, priceSortLiteral, PR_TRUE);
- }
+ resultItem.Mid(dateItem, dateStart, dateEnd - dateStart);
}
}
+ // strip out any html tags
+ PRInt32 ltOffset, gtOffset;
+ while ((ltOffset = dateItem.FindChar(PRUnichar('<'))) >= 0)
+ {
+ if ((gtOffset = dateItem.FindChar(PRUnichar('>'), PR_FALSE, ltOffset)) <= ltOffset)
+ break;
+ dateItem.Cut(ltOffset, gtOffset - ltOffset + 1);
+ }
+
+ // strip out whitespace and any CR/LFs
+ dateItem = dateItem.Trim("\n\r\t ");
+
+ if (dateItem.Length() > 0)
+ {
+ const PRUnichar *dateUni = dateItem.GetUnicode();
+ nsCOMPtr dateLiteral;
+ if (NS_SUCCEEDED(rv = gRDFService->GetLiteral(dateUni, getter_AddRefs(dateLiteral))))
+ {
+ if (dateLiteral)
+ {
+ mInner->Assert(res, kNC_Date, dateLiteral, PR_TRUE);
+ hasDateFlag = PR_TRUE;
+ }
+ }
+ }
+ }
+
+ // look for price
+ if (priceStartStr.Length() > 0)
+ {
+ nsAutoString priceItem;
+ PRInt32 priceStart;
+ if ((priceStart = resultItem.Find(priceStartStr, PR_TRUE)) >= 0)
+ {
+ priceStart += priceStartStr.Length();
+ PRInt32 priceEnd = resultItem.Find(priceEndStr, PR_TRUE, priceStart);
+ if (priceEnd > priceStart)
+ {
+ resultItem.Mid(priceItem, priceStart, priceEnd - priceStart);
+ ConvertEntities(priceItem);
+ }
+ }
+ if (priceItem.Length() > 0)
+ {
+ const PRUnichar *priceUni = priceItem.GetUnicode();
+ nsCOMPtr priceLiteral;
+ if (NS_SUCCEEDED(rv = gRDFService->GetLiteral(priceUni, getter_AddRefs(priceLiteral))))
+ {
+ if (priceLiteral)
+ {
+ mInner->Assert(res, kNC_Price, priceLiteral, PR_TRUE);
+ hasPriceFlag = PR_TRUE;
+ }
+ }
+
+ PRInt32 priceCharStartOffset = priceItem.FindCharInSet("1234567890");
+ if (priceCharStartOffset >= 0)
+ {
+ priceItem.Cut(0, priceCharStartOffset);
+ PRInt32 priceErr;
+ float val = priceItem.ToFloat(&priceErr);
+ if (priceItem.FindChar(PRUnichar('.')) >= 0) val *= 100;
+
+ nsCOMPtr priceSortLiteral;
+ if (NS_SUCCEEDED(rv = gRDFService->GetIntLiteral((PRInt32)val, getter_AddRefs(priceSortLiteral))))
+ {
+ if (priceSortLiteral)
+ {
+ mInner->Assert(res, kNC_PriceSort, priceSortLiteral, PR_TRUE);
+ }
+ }
+ }
+
+ }
}
// look for availability
- nsAutoString availItem;
- PRInt32 availStart;
- if ((availStart = resultItem.Find(availStartStr, PR_TRUE)) >= 0)
+ if (availStartStr.Length() > 0)
{
- PRInt32 availEnd = resultItem.Find(availEndStr, PR_TRUE, availStart + availStartStr.Length());
- if (availEnd > availStart)
+ nsAutoString availItem;
+ PRInt32 availStart;
+ if ((availStart = resultItem.Find(availStartStr, PR_TRUE)) >= 0)
{
- resultItem.Mid(availItem, availStart + availStartStr.Length(),
- availEnd - availStart - availStartStr.Length());
-
- ConvertEntities(availItem);
- }
- }
- if (availItem.Length() > 0)
- {
- const PRUnichar *availUni = availItem.GetUnicode();
- nsCOMPtr availLiteral;
- if (NS_SUCCEEDED(rv = gRDFService->GetLiteral(availUni, getter_AddRefs(availLiteral))))
- {
- if (availLiteral)
+ availStart += availStartStr.Length();
+ PRInt32 availEnd = resultItem.Find(availEndStr, PR_TRUE, availStart);
+ if (availEnd > availStart)
{
- mInner->Assert(res, kNC_Availability, availLiteral, PR_TRUE);
- hasAvailabilityFlag = PR_TRUE;
+ resultItem.Mid(availItem, availStart, availEnd - availStart);
+ ConvertEntities(availItem);
+ }
+ }
+ if (availItem.Length() > 0)
+ {
+ const PRUnichar *availUni = availItem.GetUnicode();
+ nsCOMPtr availLiteral;
+ if (NS_SUCCEEDED(rv = gRDFService->GetLiteral(availUni, getter_AddRefs(availLiteral))))
+ {
+ if (availLiteral)
+ {
+ mInner->Assert(res, kNC_Availability, availLiteral, PR_TRUE);
+ hasAvailabilityFlag = PR_TRUE;
+ }
}
}
}
@@ -3834,11 +3899,11 @@ InternetSearchDataSource::ParseHTML(nsIURI *aURL, nsIRDFResource *mParent, nsIRD
PRInt32 relStart;
if ((relStart = resultItem.Find(relevanceStartStr, PR_TRUE)) >= 0)
{
+ relStart += relevanceStartStr.Length();
PRInt32 relEnd = resultItem.Find(relevanceEndStr, PR_TRUE);
if (relEnd > relStart)
{
- resultItem.Mid(relItem, relStart + relevanceStartStr.Length(),
- relEnd - relStart - relevanceStartStr.Length());
+ resultItem.Mid(relItem, relStart, relEnd - relStart);
}
}
@@ -4043,6 +4108,7 @@ InternetSearchDataSource::ParseHTML(nsIURI *aURL, nsIRDFResource *mParent, nsIRD
if (hasPriceFlag == PR_TRUE) SetHint(mParent, kNC_Price);
if (hasAvailabilityFlag == PR_TRUE) SetHint(mParent, kNC_Availability);
if (hasRelevanceFlag == PR_TRUE) SetHint(mParent, kNC_Relevance);
+ if (hasDateFlag == PR_TRUE) SetHint(mParent, kNC_Date);
}
return(NS_OK);