Source code

Revision control

Copy as Markdown

Other Tools

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
import { RealtimeSuggestProvider } from "moz-src:///browser/components/urlbar/private/RealtimeSuggestProvider.sys.mjs";
/**
* A feature that supports Yelp realtime suggestions.
*/
export class YelpRealtimeSuggestions extends RealtimeSuggestProvider {
get realtimeType() {
// Ideally this would simply be "yelp" but we want to avoid confusion with
// offline Yelp suggestions.
return "yelpRealtime";
}
get isSponsored() {
return true;
}
get merinoProvider() {
return "yelp";
}
getViewTemplateForDescriptionTop(_item, index) {
return [
{
name: `title_${index}`,
tag: "span",
classList: ["urlbarView-yelpRealtime-title"],
},
];
}
getViewTemplateForDescriptionBottom(_item, index) {
return [
{
name: `address_${index}`,
tag: "span",
classList: ["urlbarView-yelpRealtime-description-address"],
},
{
tag: "span",
classList: ["urlbarView-realtime-description-separator-dot"],
},
{
name: `pricing_${index}`,
tag: "span",
classList: ["urlbarView-yelpRealtime-description-pricing"],
},
{
tag: "span",
classList: ["urlbarView-realtime-description-separator-dot"],
},
{
name: `business_hours_${index}`,
tag: "span",
classList: ["urlbarView-yelpRealtime-description-business-hours"],
},
{
tag: "span",
classList: ["urlbarView-realtime-description-separator-dot"],
},
{
tag: "span",
classList: ["urlbarView-yelpRealtime-description-popularity-star"],
},
{
name: `popularity_${index}`,
tag: "span",
classList: ["urlbarView-yelpRealtime-description-popularity"],
},
];
}
getViewUpdateForPayloadItem(item, index) {
return {
[`item_${index}`]: {
attributes: {
state: item.business_hours[0].is_open_now ? "open" : "closed",
},
},
[`image_${index}`]: {
attributes: {
src: item.image_url,
},
},
[`title_${index}`]: {
textContent: item.name,
},
[`address_${index}`]: {
textContent: item.address,
},
[`pricing_${index}`]: {
textContent: item.pricing,
},
[`business_hours_${index}`]: {
l10n: {
id: item.business_hours[0].is_open_now
? "urlbar-result-yelp-realtime-business-hours-open"
: "urlbar-result-yelp-realtime-business-hours-closed",
args: {
// TODO: Need to pass "time until keeping the status" after resolving
// the timezone issue.
timeUntil: new Intl.DateTimeFormat(undefined, {
hour: "numeric",
}).format(new Date()),
},
parseMarkup: true,
},
},
[`popularity_${index}`]: {
l10n: {
id: "urlbar-result-yelp-realtime-popularity",
args: {
rating: item.rating,
review_count: item.review_count,
},
},
},
};
}
}