From 3bb8b396bb11a544bb77ad43177b1ac05ae26dd0 Mon Sep 17 00:00:00 2001 From: Ed Lee Date: Wed, 15 Aug 2018 00:13:38 +0000 Subject: [PATCH] Bug 1483375 - Add tab-able search, search telemetry and bug fixes to Activity Stream r=ursula Differential Revision: https://phabricator.services.mozilla.com/D3367 --HG-- extra : moz-landing-system : lando --- .../TopSites/SearchShortcutsForm.jsx | 16 +++++- .../components/TopSites/TopSite.jsx | 12 ++++- .../components/TopSites/TopSites.jsx | 7 ++- .../data/content/activity-stream.bundle.js | 36 +++++++++++-- .../content/activity-stream.bundle.js.map | 2 +- .../docs/v2-system-addon/data_dictionary.md | 1 + .../docs/v2-system-addon/data_events.md | 11 ++-- .../components/newtab/lib/TopSitesFeed.jsm | 4 +- .../newtab/locales/el/strings.properties | 2 +- .../newtab/locales/en-CA/strings.properties | 2 +- .../newtab/locales/es-AR/strings.properties | 2 +- .../newtab/locales/hu/strings.properties | 2 +- .../newtab/locales/id/strings.properties | 2 +- .../newtab/locales/it/strings.properties | 1 - .../newtab/locales/ml/strings.properties | 9 ++-- .../newtab/locales/nn-NO/strings.properties | 2 +- .../newtab/locales/pt-PT/strings.properties | 2 +- .../newtab/locales/sv-SE/strings.properties | 2 +- .../newtab/locales/zh-CN/strings.properties | 2 +- browser/components/newtab/mochitest.sh | 15 +++--- ...activity-stream-prerendered-noscripts.html | 2 +- .../ach/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../an/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../ar/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../ast/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../az/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../be/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../bg/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../bn-BD/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../bn-IN/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../br/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../bs/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../ca/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../cak/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../crh/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../cs/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../cy/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../da/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../de/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../dsb/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../el/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../en-CA/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../en-GB/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../en-US/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../eo/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../es-AR/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../es-CL/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../es-ES/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../es-MX/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../et/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../eu/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../fa/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../ff/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../fi/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../fr/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../fy-NL/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../ga-IE/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../gd/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../gl/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../gn/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../gu-IN/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../he/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../hi-IN/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../hr/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../hsb/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../hu/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../hy-AM/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../ia/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../id/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../it/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../ja/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../ka/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../kab/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../kk/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../km/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../kn/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../ko/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../lij/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../lo/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../lt/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../ltg/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../lv/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../mai/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../mk/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../ml/activity-stream-prerendered.html | 2 +- .../locales/ml/activity-stream-strings.js | 10 ++-- ...activity-stream-prerendered-noscripts.html | 2 +- .../mr/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../ms/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../my/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../nb-NO/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../ne-NP/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../nl/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../nn-NO/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../oc/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../pa-IN/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../pl/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../pt-BR/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../pt-PT/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../rm/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../ro/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../ru/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../si/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../sk/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../sl/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../sq/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../sr/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../sv-SE/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../ta/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../te/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../th/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../tl/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../tr/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../uk/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../ur/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../uz/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../vi/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../zh-CN/activity-stream-prerendered.html | 2 +- ...activity-stream-prerendered-noscripts.html | 2 +- .../zh-TW/activity-stream-prerendered.html | 2 +- ...ty-stream-prerendered-debug-noscripts.html | 2 +- .../activity-stream-prerendered-debug.html | 2 +- .../components/newtab/test/schemas/pings.js | 3 ++ .../content-src/components/TopSites.test.jsx | 52 +++++++++++++++---- .../test/unit/lib/TelemetryFeed.test.js | 4 +- .../newtab/test/unit/lib/TopSitesFeed.test.js | 10 ++++ 221 files changed, 356 insertions(+), 247 deletions(-) diff --git a/browser/components/newtab/content-src/components/TopSites/SearchShortcutsForm.jsx b/browser/components/newtab/content-src/components/TopSites/SearchShortcutsForm.jsx index 64c147a740ef..cbb08d98a6f9 100644 --- a/browser/components/newtab/content-src/components/TopSites/SearchShortcutsForm.jsx +++ b/browser/components/newtab/content-src/components/TopSites/SearchShortcutsForm.jsx @@ -1,6 +1,7 @@ import {actionCreators as ac, actionTypes as at} from "common/Actions.jsm"; import {FormattedMessage} from "react-intl"; import React from "react"; +import {TOP_SITES_SOURCE} from "./TopSitesConstants"; class SelectableSearchShortcut extends React.PureComponent { render() { @@ -74,7 +75,7 @@ export class SearchShortcutsForm extends React.PureComponent { if (shortcut.isSelected && !alreadyPinned) { pinQueue.push(this._searchTopSite(shortcut)); } else if (!shortcut.isSelected && alreadyPinned) { - unpinQueue.push({url: alreadyPinned.url}); + unpinQueue.push({url: alreadyPinned.url, searchVendor: shortcut.shortURL}); } }); @@ -97,6 +98,11 @@ export class SearchShortcutsForm extends React.PureComponent { index: availableSlots.shift() } })); + this.props.dispatch(ac.UserEvent({ + source: TOP_SITES_SOURCE, + event: "SEARCH_EDIT_ADD", + value: {search_vendor: shortcut.searchVendor} + })); }); } @@ -106,6 +112,11 @@ export class SearchShortcutsForm extends React.PureComponent { type: at.TOP_SITES_UNPIN, data: {site: shortcut} })); + this.props.dispatch(ac.UserEvent({ + source: TOP_SITES_SOURCE, + event: "SEARCH_EDIT_DELETE", + value: {search_vendor: shortcut.searchVendor} + })); }); this.props.onClose(); @@ -115,7 +126,8 @@ export class SearchShortcutsForm extends React.PureComponent { return { url: shortcut.url, searchTopSite: true, - label: shortcut.keyword + label: shortcut.keyword, + searchVendor: shortcut.shortURL }; } diff --git a/browser/components/newtab/content-src/components/TopSites/TopSite.jsx b/browser/components/newtab/content-src/components/TopSites/TopSite.jsx index 262314e50292..43c2ec0e7766 100644 --- a/browser/components/newtab/content-src/components/TopSites/TopSite.jsx +++ b/browser/components/newtab/content-src/components/TopSites/TopSite.jsx @@ -17,6 +17,7 @@ export class TopSiteLink extends React.PureComponent { super(props); this.state = {screenshotImage: null}; this.onDragEvent = this.onDragEvent.bind(this); + this.onKeyPress = this.onKeyPress.bind(this); } /* @@ -112,6 +113,15 @@ export class TopSiteLink extends React.PureComponent { ScreenshotUtils.maybeRevokeBlobObjectURL(this.state.screenshotImage); } + onKeyPress(event) { + // If we have tabbed to a search shortcut top site, and we click 'enter', + // we should execute the onClick function. This needs to be added because + // search top sites are anchor tags without an href. See bug 1483135 + if (this.props.link.searchTopSite && event.key === "Enter") { + this.props.onClick(event); + } + } + render() { const {children, className, defaultStyle, isDraggable, link, onClick, title} = this.props; const topSiteOuterClassName = `top-site-outer${className ? ` ${className}` : ""}${link.isDragged ? " dragged" : ""}${link.searchTopSite ? " search-shortcut" : ""}`; @@ -173,7 +183,7 @@ export class TopSiteLink extends React.PureComponent { } return (
  • - +
    {link.searchTopSite &&
    } diff --git a/browser/components/newtab/content-src/components/TopSites/TopSites.jsx b/browser/components/newtab/content-src/components/TopSites/TopSites.jsx index e4afe008ae83..eff6896da2fb 100644 --- a/browser/components/newtab/content-src/components/TopSites/TopSites.jsx +++ b/browser/components/newtab/content-src/components/TopSites/TopSites.jsx @@ -64,10 +64,15 @@ export class _TopSites extends React.PureComponent { const topSites = this._getVisibleTopSites(); const topSitesIconsStats = countTopSitesIconsTypes(topSites); const topSitesPinned = topSites.filter(site => !!site.isPinned).length; + const searchShortcuts = topSites.filter(site => !!site.searchTopSite).length; // Dispatch telemetry event with the count of TopSites images types. this.props.dispatch(ac.AlsoToMain({ type: at.SAVE_SESSION_PERF_DATA, - data: {topsites_icon_stats: topSitesIconsStats, topsites_pinned: topSitesPinned} + data: { + topsites_icon_stats: topSitesIconsStats, + topsites_pinned: topSitesPinned, + topsites_search_shortcuts: searchShortcuts + } })); } diff --git a/browser/components/newtab/data/content/activity-stream.bundle.js b/browser/components/newtab/data/content/activity-stream.bundle.js index db4ed665a493..854ca45c3959 100644 --- a/browser/components/newtab/data/content/activity-stream.bundle.js +++ b/browser/components/newtab/data/content/activity-stream.bundle.js @@ -4065,10 +4065,15 @@ class _TopSites extends react__WEBPACK_IMPORTED_MODULE_6___default.a.PureCompone const topSites = this._getVisibleTopSites(); const topSitesIconsStats = countTopSitesIconsTypes(topSites); const topSitesPinned = topSites.filter(site => !!site.isPinned).length; + const searchShortcuts = topSites.filter(site => !!site.searchTopSite).length; // Dispatch telemetry event with the count of TopSites images types. this.props.dispatch(common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].AlsoToMain({ type: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionTypes"].SAVE_SESSION_PERF_DATA, - data: { topsites_icon_stats: topSitesIconsStats, topsites_pinned: topSitesPinned } + data: { + topsites_icon_stats: topSitesIconsStats, + topsites_pinned: topSitesPinned, + topsites_search_shortcuts: searchShortcuts + } })); } @@ -4211,6 +4216,8 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(5); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _TopSitesConstants__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(34); + @@ -4300,7 +4307,7 @@ class SearchShortcutsForm extends react__WEBPACK_IMPORTED_MODULE_2___default.a.P if (shortcut.isSelected && !alreadyPinned) { pinQueue.push(this._searchTopSite(shortcut)); } else if (!shortcut.isSelected && alreadyPinned) { - unpinQueue.push({ url: alreadyPinned.url }); + unpinQueue.push({ url: alreadyPinned.url, searchVendor: shortcut.shortURL }); } }); @@ -4323,6 +4330,11 @@ class SearchShortcutsForm extends react__WEBPACK_IMPORTED_MODULE_2___default.a.P index: availableSlots.shift() } })); + this.props.dispatch(common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].UserEvent({ + source: _TopSitesConstants__WEBPACK_IMPORTED_MODULE_3__["TOP_SITES_SOURCE"], + event: "SEARCH_EDIT_ADD", + value: { search_vendor: shortcut.searchVendor } + })); }); } @@ -4332,6 +4344,11 @@ class SearchShortcutsForm extends react__WEBPACK_IMPORTED_MODULE_2___default.a.P type: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionTypes"].TOP_SITES_UNPIN, data: { site: shortcut } })); + this.props.dispatch(common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].UserEvent({ + source: _TopSitesConstants__WEBPACK_IMPORTED_MODULE_3__["TOP_SITES_SOURCE"], + event: "SEARCH_EDIT_DELETE", + value: { search_vendor: shortcut.searchVendor } + })); }); this.props.onClose(); @@ -4341,7 +4358,8 @@ class SearchShortcutsForm extends react__WEBPACK_IMPORTED_MODULE_2___default.a.P return { url: shortcut.url, searchTopSite: true, - label: shortcut.keyword + label: shortcut.keyword, + searchVendor: shortcut.shortURL }; } @@ -4416,6 +4434,7 @@ class TopSiteLink extends react__WEBPACK_IMPORTED_MODULE_4___default.a.PureCompo super(props); this.state = { screenshotImage: null }; this.onDragEvent = this.onDragEvent.bind(this); + this.onKeyPress = this.onKeyPress.bind(this); } /* @@ -4511,6 +4530,15 @@ class TopSiteLink extends react__WEBPACK_IMPORTED_MODULE_4___default.a.PureCompo content_src_lib_screenshot_utils__WEBPACK_IMPORTED_MODULE_5__["ScreenshotUtils"].maybeRevokeBlobObjectURL(this.state.screenshotImage); } + onKeyPress(event) { + // If we have tabbed to a search shortcut top site, and we click 'enter', + // we should execute the onClick function. This needs to be added because + // search top sites are anchor tags without an href. See bug 1483135 + if (this.props.link.searchTopSite && event.key === "Enter") { + this.props.onClick(event); + } + } + render() { const { children, className, defaultStyle, isDraggable, link, onClick, title } = this.props; const topSiteOuterClassName = `top-site-outer${className ? ` ${className}` : ""}${link.isDragged ? " dragged" : ""}${link.searchTopSite ? " search-shortcut" : ""}`; @@ -4579,7 +4607,7 @@ class TopSiteLink extends react__WEBPACK_IMPORTED_MODULE_4___default.a.PureCompo { className: "top-site-inner" }, react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement( "a", - { href: !link.searchTopSite && link.url, onClick: onClick, draggable: true }, + { href: !link.searchTopSite && link.url, tabIndex: "0", onKeyPress: this.onKeyPress, onClick: onClick, draggable: true }, react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement( "div", { className: "tile", "aria-hidden": true, "data-fallback": letterFallback }, diff --git a/browser/components/newtab/data/content/activity-stream.bundle.js.map b/browser/components/newtab/data/content/activity-stream.bundle.js.map index 0b993d6434cd..136a0830333c 100644 --- a/browser/components/newtab/data/content/activity-stream.bundle.js.map +++ b/browser/components/newtab/data/content/activity-stream.bundle.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./content-src/activity-stream.jsx","webpack:///(webpack)/buildin/global.js","webpack:///./common/Actions.jsm","webpack:///./content-src/lib/snippets.js","webpack:///./content-src/asrouter/asrouter-content.jsx","webpack:///external \"React\"","webpack:///external \"PropTypes\"","webpack:///./content-src/lib/init-store.js","webpack:///external \"Redux\"","webpack:///./content-src/asrouter/components/ImpressionsWrapper/ImpressionsWrapper.jsx","webpack:///external \"ReactDOM\"","webpack:///./content-src/asrouter/template-utils.js","webpack:///./content-src/components/Base/Base.jsx","webpack:///external \"ReactIntl\"","webpack:///./content-src/components/ASRouterAdmin/ASRouterAdmin.jsx","webpack:///./content-src/components/ConfirmDialog/ConfirmDialog.jsx","webpack:///external \"ReactRedux\"","webpack:///./content-src/components/ErrorBoundary/ErrorBoundary.jsx","webpack:///./content-src/components/ManualMigration/ManualMigration.jsx","webpack:///./common/PrerenderData.jsm","webpack:///./content-src/components/Search/Search.jsx","webpack:///./content-src/lib/constants.js","webpack:///./content-src/components/Sections/Sections.jsx","webpack:///./content-src/lib/link-menu-options.js","webpack:///./content-src/components/LinkMenu/LinkMenu.jsx","webpack:///./content-src/components/ContextMenu/ContextMenu.jsx","webpack:///./content-src/lib/screenshot-utils.js","webpack:///./content-src/components/CollapsibleSection/CollapsibleSection.jsx","webpack:///./content-src/components/SectionMenu/SectionMenu.jsx","webpack:///./content-src/lib/section-menu-options.js","webpack:///./content-src/components/ComponentPerfTimer/ComponentPerfTimer.jsx","webpack:///./common/PerfService.jsm","webpack:///./content-src/components/Topics/Topics.jsx","webpack:///./content-src/components/TopSites/TopSites.jsx","webpack:///./content-src/components/TopSites/TopSitesConstants.js","webpack:///./content-src/components/TopSites/SearchShortcutsForm.jsx","webpack:///./content-src/components/TopSites/TopSite.jsx","webpack:///./content-src/components/StartupOverlay/StartupOverlay.jsx","webpack:///./content-src/lib/detect-user-session-start.js","webpack:///./node_modules/fluent/src/parser.js","webpack:///./node_modules/fluent/src/types.js","webpack:///./node_modules/fluent/src/builtins.js","webpack:///./node_modules/fluent/src/resolver.js","webpack:///./node_modules/fluent/src/context.js","webpack:///./node_modules/fluent/src/cached_iterable.js","webpack:///./node_modules/fluent/src/fallback.js","webpack:///./node_modules/fluent/src/util.js","webpack:///./node_modules/fluent/src/index.js","webpack:///./node_modules/fluent-react/src/localization.js","webpack:///./node_modules/fluent-react/src/provider.js","webpack:///./node_modules/fluent-react/src/with_localization.js","webpack:///./node_modules/fluent-react/src/markup.js","webpack:///./node_modules/fluent-react/vendor/omittedCloseTags.js","webpack:///./node_modules/fluent-react/vendor/voidElementTags.js","webpack:///./node_modules/fluent-react/src/localized.js","webpack:///./node_modules/fluent-react/src/index.js","webpack:///./content-src/asrouter/components/Button/Button.jsx","webpack:///./content-src/asrouter/components/SnippetBase/SnippetBase.jsx","webpack:///./content-src/asrouter/templates/SimpleSnippet/SimpleSnippet.jsx","webpack:///./common/Dedupe.jsm","webpack:///./common/Reducers.jsm","webpack:///./content-src/asrouter/components/ModalOverlay/ModalOverlay.jsx","webpack:///./content-src/asrouter/templates/OnboardingMessage/OnboardingMessage.jsx","webpack:///./content-src/components/Card/types.js","webpack:///./content-src/components/Card/Card.jsx","webpack:///./content-src/components/TopSites/TopSiteFormInput.jsx","webpack:///./content-src/components/TopSites/TopSiteForm.jsx"],"names":["store","initStore","global","gActivityStreamPrerenderedState","sendEventOrAddListener","dispatch","ac","AlsoToMain","type","at","NEW_TAB_STATE_REQUEST","ReactDOM","hydrate","document","location","href","documentElement","lang","gActivityStreamStrings","getElementById","addSnippetsSubscriber","globalImportContext","Window","BACKGROUND_PROCESS","UI_CODE","actionTypes","ASRouterActions","_RouteMessage","action","options","meta","from","to","Error","forEach","o","fromTarget","skipLocal","CONTENT_MESSAGE_TYPE","MAIN_MESSAGE_TYPE","OnlyToMain","BroadcastToContent","AlsoToOneContent","target","skipMain","toTarget","OnlyToOneContent","AlsoToPreloaded","PRELOAD_MESSAGE_TYPE","UserEvent","data","TELEMETRY_USER_EVENT","ASRouterUserEvent","AS_ROUTER_TELEMETRY_USER_EVENT","UndesiredEvent","importContext","TELEMETRY_UNDESIRED_EVENT","PerfEvent","TELEMETRY_PERFORMANCE_EVENT","ImpressionStats","TELEMETRY_IMPRESSION_STATS","SetPref","name","value","SET_PREF","WebExtEvent","source","isSendToMain","isBroadcastToContent","isSendToOneContent","isSendToPreloaded","isFromMain","getPortIdOfSender","DATABASE_NAME","DATABASE_VERSION","SNIPPETS_OBJECTSTORE_NAME","SNIPPETS_UPDATE_INTERVAL_MS","SNIPPETS_ENABLED_EVENT","SNIPPETS_DISABLED_EVENT","SnippetsMap","Map","constructor","_db","_dispatch","set","key","_dbTransaction","db","put","delete","clear","SNIPPETS_BLOCKLIST_CLEARED","blockList","get","blockSnippetById","id","includes","push","SNIPPETS_BLOCKLIST_UPDATED","disableOnboarding","DISABLE_ONBOARDING","showFirefoxAccounts","SHOW_FIREFOX_ACCOUNTS","getTotalBookmarksCount","Promise","resolve","TOTAL_BOOKMARKS_REQUEST","RPMAddMessageListener","onMessage","TOTAL_BOOKMARKS_RESPONSE","RPMRemoveMessageListener","getAddonsInfo","ADDONS_INFO_REQUEST","ADDONS_INFO_RESPONSE","connect","_openDB","_restoreFromDb","modifier","reject","transaction","objectStore","onsuccess","event","onerror","error","openRequest","indexedDB","open","deleteDatabase","onupgradeneeded","result","objectStoreNames","contains","createObjectStore","err","console","onversionchange","versionChangeEvent","close","cursorRequest","openCursor","cursor","continue","SnippetsProvider","gSnippetsMap","_onAction","bind","snippetsMap","_refreshSnippets","cachedVersion","appData","version","lastUpdate","needsUpdate","Date","now","snippetsURL","response","fetch","status","payload","text","e","_noSnippetFallback","_forceOnboardingVisibility","shouldBeVisible","onboardingEl","style","display","_showRemoteSnippets","snippetsEl","elementId","innerHTML","scriptEl","getElementsByTagName","relocatedScript","createElement","parentNode","replaceChild","msg","SNIPPET_BLOCKED","concat","init","Object","assign","keys","window","dispatchEvent","Event","initialized","uninit","snippets","asrouterContent","initializing","subscribe","state","getState","isASRouterEnabled","Prefs","values","asrouterExperimentEnabled","asrouterOnboardingCohort","disableSnippets","Snippets","INCOMING_MESSAGE_NAME","OUTGOING_MESSAGE_NAME","ASRouterUtils","addListener","listener","removeListener","sendMessage","RPMSendAsyncMessage","blockById","blockBundle","bundle","executeAction","button_action","button_action_params","unblockById","unblockBundle","getNextMessage","overrideMessage","sendTelemetry","ping","getEndpoint","params","URLSearchParams","slice","indexOf","endpoint","URL","url","snippetId","shouldSendImpressionOnUpdate","nextProps","prevProps","message","generateMessages","content","cx","addMessages","ALLOWED_TAGS","b","i","u","strong","em","br","convertLinks","links","sendClick","reduce","acc","linkTag","safeURI","metric","RichText","props","ASRouterUISurface","React","PureComponent","onMessageFromParent","sendImpression","sendUserActionTelemetry","extraProps","message_id","eventType","provider","dataset","onBlockById","clearBundle","setState","componentWillMount","trigger","componentWillUnmount","renderSnippets","renderOnboarding","render","template","defaultProps","ASRouterContent","containerElement","_mount","_unmount","unmountComponentAtNode","MERGE_STORE_ACTION","EARLY_QUEUED_ACTIONS","SAVE_SESSION_PERF_DATA","PAGE_PRERENDERED","mergeStateReducer","mainReducer","prevState","messageMiddleware","next","au","rehydrationMiddleware","_didRehydrate","isMergeStoreAction","isRehydrationRequest","_didRequestInitialState","INIT","queueEarlyMessageMiddleware","_receivedFromMain","_earlyActionQueue","reducers","initialState","createStore","combineReducers","applyMiddleware","ex","dump","JSON","stringify","stack","VISIBLE","VISIBILITY_CHANGE_EVENT","ImpressionsWrapper","sendImpressionOrAddListener","visibilityState","_onVisibilityChange","removeEventListener","addEventListener","componentDidMount","sendOnMount","componentDidUpdate","children","protocol","isAllowed","warn","PrefsButton","injectIntl","onClick","intl","formatMessage","addLocaleDataForReactIntl","locale","addLocaleData","parentLocale","debounce","func","wait","timer","args","wakeUp","setTimeout","apply","_Base","App","sendNewTabRehydrated","isFirstrun","body","classList","add","isPrerendered","updateTheme","hasTopStoriesSectionChanged","nPropsSections","Sections","find","section","tPropsSections","show_spocs","stories_endpoint","componentWillUpdate","renderNotified","bodyClassName","filter","v","join","className","NEW_TAB_REHYDRATED","strings","prefs","hash","BaseContent","openPreferences","onWindowScroll","fixedSearch","SCROLL_THRESHOLD","scrollY","SETTINGS_OPEN","shouldBeFixedToTop","PrerenderData","arePrefsValid","outerClassName","showSearch","migrationExpired","Base","ASRouterAdmin","findOtherBundledMessagesOfSameTemplate","messages","bundled","handleBlock","handleUnblock","handleOverride","renderMessageItem","isCurrent","lastMessageId","isBlocked","impressions","length","itemClassName","renderMessages","map","renderProviders","providers","_ConfirmDialog","_handleCancelBtn","_handleConfirmBtn","DIALOG_CANCEL","eventSource","onConfirm","_renderModalMessage","message_body","body_string_id","visible","icon","cancel_button_string_id","confirm_button_string_id","ConfirmDialog","Dialog","ErrorBoundaryFallback","windowObj","reload","defaultClass","ErrorBoundary","hasError","componentDidCatch","info","FallbackComponent","_ManualMigration","onLaunchTour","onCancelTour","MIGRATION_START","MIGRATION_CANCEL","ManualMigration","_PrerenderData","initialPrefs","initialSections","_setValidation","validation","_validation","invalidatingPrefs","_invalidatingPrefs","oneOf","getPref","indexedDBPrefs","some","anyModifiedPrefs","prefName","pref","enabled","order","title","_Search","onInputMount","handleEvent","detail","gContentSearchController","search","input","healthReportKey","IS_NEWTAB","searchSource","ContentSearchUIController","Search","documentURI","CARDS_PER_ROW_DEFAULT","CARDS_PER_ROW_COMPACT_WIDE","getFormattedMessage","Section","numRows","rowsPref","maxRows","_dispatchImpressionStats","cardsPerRow","compactCards","matchMedia","matches","maxCards","cards","rows","needsImpressionStats","tiles","link","guid","impressionCardGuids","sendImpressionStatsOrAddListener","shouldSendImpressionStats","collapsed","isCollapsed","wasCollapsed","emptyState","contextMenuOptions","disclaimer","privacyNoticeURL","isFirst","isLast","maxCardsPerRow","maxCardsOnNarrow","shouldShowTopics","topics","realRows","shouldShowEmptyState","isWebExtension","sectionClassName","feed","padding","startsWith","read_more_endpoint","SectionIntl","_Sections","renderSections","sections","enabledSections","sectionOrder","showTopSites","expectedCount","sectionId","split","commonProps","s","_OpenInPrivateWindow","site","OPEN_PRIVATE_WINDOW","referrer","userEvent","GetPlatformString","platform","LinkMenuOptions","Separator","EmptyItem","RemoveBookmark","DELETE_BOOKMARK_BY_ID","bookmarkGuid","AddBookmark","BOOKMARK_URL","OpenInNewWindow","OPEN_NEW_WINDOW","typedBonus","BlockUrl","index","BLOCK_URL","open_url","pocket_id","impression","block","pos","WebExtDismiss","string_id","WEBEXT_DISMISS","action_position","DeleteUrl","isEnabled","siteInfo","DIALOG_OPEN","DELETE_HISTORY_URL","forceBlock","ShowFile","SHOW_DOWNLOAD_FILE","OpenFile","OPEN_DOWNLOAD_FILE","CopyDownloadLink","COPY_DOWNLOAD_LINK","GoToDownloadPage","OPEN_LINK","disabled","RemoveDownload","REMOVE_DOWNLOAD_FILE","PinTopSite","searchTopSite","label","TOP_SITES_PIN","UnpinTopSite","TOP_SITES_UNPIN","SaveToPocket","SAVE_TO_POCKET","pocket","DeleteFromPocket","DELETE_FROM_POCKET","ArchiveFromPocket","ARCHIVE_FROM_POCKET","EditTopSite","TOP_SITES_EDIT","CheckBookmark","CheckPinTopSite","isPinned","CheckSavedToPocket","CheckBookmarkOrArchive","OpenInPrivateWindow","DEFAULT_SITE_MENU_OPTIONS","_LinkMenu","getOptions","isPrivateBrowsingEnabled","propOptions","isDefault","option","userEventData","first","last","onUpdate","LinkMenu","ContextMenu","hideContext","stopPropagation","ContextMenuItem","onKeyDown","shiftKey","ScreenshotUtils","isBlob","isLocal","image","path","createLocalImageObject","remoteImage","createObjectURL","maybeRevokeBlobObjectURL","localImage","revokeObjectURL","isRemoteImageLocal","Disclaimer","onAcknowledge","disclaimerPref","button","DisclaimerIntl","_CollapsibleSection","onBodyMount","onHeaderClick","onTransitionEnd","enableOrDisableAnimation","onMenuButtonClick","onMenuButtonMouseEnter","onMenuButtonMouseLeave","onMenuUpdate","enableAnimation","isAnimating","menuButtonHover","showContextMenu","sectionBody","scrollHeight","node","undefined","maxHeight","SectionMenuOptions","CheckCollapsed","currentTarget","renderIcon","backgroundImage","preventDefault","isCollapsible","extraMenuOptions","showPrefName","needsDisclaimer","active","CollapsibleSection","DEFAULT_SECTION_MENU_OPTIONS","WEBEXT_SECTION_MENU_OPTIONS","_SectionMenu","extraOptions","splice","SectionMenu","MoveUp","SECTION_MOVE","direction","MoveDown","RemoveSection","CollapseSection","UPDATE_SECTION_PREFS","ExpandSection","ManageSection","ManageWebExtension","OPEN_WEBEXT_SETTINGS","AddTopSite","AddSearchShortcut","TOP_SITES_OPEN_SEARCH_SHORTCUTS_MODAL","PrivacyNotice","RECORDED_SECTIONS","ComponentPerfTimer","Component","perfSvc","_sendBadStateEvent","_sendPaintedEvent","_reportMissingData","_timestampHandled","_recordedFirstRender","_maybeSendPaintedEvent","_afterFramePaint","callback","requestAnimationFrame","_maybeSendBadStateEvent","_ensureFirstRenderTsRecorded","mark","dataReadyKey","firstRenderKey","parseInt","getMostRecentAbsMarkStartByName","ChromeUtils","import","usablePerfObj","Services","appShell","hiddenDOMWindow","performance","_PerfService","performanceObj","_perf","prototype","str","getEntriesByName","timeOrigin","absNow","entries","mostRecentEntry","startTime","Topic","Topics","t","topSiteIconType","customScreenshotURL","tippyTopIcon","faviconRef","faviconSize","screenshot","countTopSitesIconsTypes","topSites","countTopSitesTypes","_TopSites","onEditFormClose","onSearchShortcutsFormClose","_dispatchTopSitesStats","_getVisibleTopSites","topSitesIconsStats","topSitesPinned","topsites_icon_stats","topsites_pinned","sitesPerRow","TopSites","TopSitesRows","TOP_SITES_CANCEL_EDIT","TOP_SITES_CLOSE_SEARCH_SHORTCUTS_MODAL","editForm","showSearchShortcutsForm","topSitesRows","TOP_SITES_SOURCE","TOP_SITES_CONTEXT_MENU_OPTIONS","TOP_SITES_SEARCH_SHORTCUTS_CONTEXT_MENU_OPTIONS","MIN_RICH_FAVICON_SIZE","MIN_CORNER_FAVICON_SIZE","SelectableSearchShortcut","shortcut","selected","imageStyle","keyword","onChange","SearchShortcutsForm","handleChange","onCancelButtonClick","onSaveButtonClick","shortcuts","searchShortcuts","isSelected","row","checked","ev","onClose","pinQueue","unpinQueue","alreadyPinned","_searchTopSite","availableSlots","shift","TopSiteLink","screenshotImage","onDragEvent","_allowDrop","dataTransfer","types","dragged","effectAllowed","setData","blur","getNextStateFromProps","imageInState","nextState","componentWillReceiveProps","defaultStyle","isDraggable","topSiteOuterClassName","isDragged","letterFallback","imageClassName","showSmallFavicon","smallFaviconStyle","smallFaviconFallback","hasScreenshotImage","backgroundColor","favicon","draggableProps","onDragEnd","onDragStart","onMouseDown","TopSite","onLinkClick","_getTelemetryInfo","icon_type","iconType","card_type","search_vendor","hostname","altKey","ctrlKey","metaKey","FILL_SEARCH_TERM","onActivate","isContextMenuOpen","activeIndex","TopSitePlaceholder","onEditButtonClick","_TopSiteList","DEFAULT_STATE","draggedIndex","draggedSite","draggedTitle","topSitesPreview","prevTopSites","newTopSites","dropped","_makeTopSitesPreview","TOP_SITES_INSERT","draggedFromIndex","_getTopSites","pinnedOnly","unpinned","siteToInsert","holeIndex","indexStep","shiftingStep","nextIndex","preview","topSitesUI","maxNarrowVisibleIndex","l","slotProps","TopSiteList","_StartupOverlay","onInputChange","onSubmit","clickSkip","initScene","removeOverlay","onInputInvalid","emailInput","overlayRemoved","flowId","flowBeginTime","didFetch","fxa_endpoint","json","show","remove","previousSibling","focus","termsLink","privacyLink","terms","privacy","StartupOverlay","DetectUserSessionStart","_store","_perfService","perfService","_sendEvent","visibility_event_rcvd_ts","MAX_PLACEABLES","entryIdentifierRe","identifierRe","functionIdentifierRe","RuntimeParser","getResource","string","_source","_index","_length","errors","skipWS","getEntry","SyntaxError","skipToNextEntryStart","ch","skipComment","skipSection","getMessage","skipInlineWS","getVariantName","getEntryIdentifier","val","getPattern","attrs","lineStart","getAttributes","skipBlankLines","ptr","getIdentifier","re","lastIndex","exec","toString","start","cc","charCodeAt","getString","substring","eol","firstLineContent","getComplexPattern","buffer","placeables","blankLinesStart","blankLinesEnd","ch2","getPlaceable","variants","getVariants","exp","vars","def","selector","getSelectorExpression","literal","getLiteral","getVariantKey","getCallArgs","test","fun","Array","isArray","lastIndexOf","getNumber","num","defaultIndex","cc0","cc1","parse","parser","FluentType","opts","valueOf","FluentNone","FluentNumber","parseFloat","ctx","nf","_memoizeIntlObject","Intl","NumberFormat","format","match","other","FluentDateTime","dtf","DateTimeFormat","FluentSymbol","pr","PluralRules","select","arg","merge","argopts","unwrapped","opt","MAX_PLACEABLE_LENGTH","FSI","PDI","DefaultMember","env","members","RangeError","MessageReference","_terms","_messages","ReferenceError","VariantExpression","Type","isVariantList","variant","variantKey","AttributeExpression","attrName","SelectExpression","keyCanMatch","expr","Pattern","ExternalArgument","FunctionReference","CallExpression","attr","member","hasOwnProperty","TypeError","_functions","builtins","callee","posargs","keyargs","ptn","dirty","has","useIsolating","_useIsolating","elem","part","WeakSet","locales","functions","_intls","WeakMap","Symbol","iterator","hasMessage","ctor","cache","CachedIterable","iterable","asyncIterator","seen","cur","touchNext","done","mapContextSync","ids","getContextForId","context","remainingCount","foundContexts","fill","mapContextAsync","nonBlank","line","countIndent","indent","ftl","code","lines","indents","common","Math","min","RegExp","replace","contexts","subs","Set","comp","unsubscribe","setMessages","relocalize","getMessageContext","formatCompound","mcx","fallback","isReactLocalization","propName","prop","l10n","getChildContext","Children","only","LocalizationProvider","childContextTypes","propTypes","PropTypes","element","isRequired","isIterable","componentName","withLocalization","Inner","WithLocalization","forceUpdate","displayName","contextTypes","component","TEMPLATE","parseMarkup","omittedCloseTags","area","base","col","embed","hr","img","keygen","param","track","wbr","voidElementTags","menuitem","reMarkup","toArguments","elems","propname","propval","substr","isValidElement","toLowerCase","messageValue","messageAttrs","localizedProps","cloneElement","translationNodes","childNodes","translatedChildren","childNode","nodeType","TEXT_NODE","textContent","localName","sourceChild","Localized","ALLOWED_STYLE_TAGS","Button","tag","border","onBlockClicked","UISurface","onBlock","containerClassName","DEFAULT_ICON_PATH","onButtonClick","renderTitle","renderTitleIcon","titleIcon","title_icon","renderButton","button_url","button_color","button_background_color","button_label","hasLink","button_type","hasButton","tall","richText","Dedupe","createKey","defaultCreateKey","item","group","groups","globalKeys","valueMap","m","TOP_SITES_DEFAULT_ROWS","TOP_SITES_MAX_SITES_PER_ROW","dedupe","INITIAL_STATE","insertPinned","pinned","pinnedUrls","newLinks","pinIndex","hasMatch","newRows","TOP_SITES_UPDATED","TOP_SITES_PREFS_UPDATED","previewResponse","PREVIEW_RESPONSE","previewUrl","PREVIEW_REQUEST","PREVIEW_REQUEST_CANCEL","SCREENSHOT_UPDATED","PLACES_BOOKMARK_ADDED","bookmarkTitle","dateAdded","bookmarkDateCreated","PLACES_BOOKMARK_REMOVED","newSite","PLACES_LINK_DELETED","UPDATE_SEARCH_SHORTCUTS","newValues","PREFS_INITIAL_VALUES","PREF_CHANGED","newState","SECTION_DEREGISTER","SECTION_REGISTER","SECTION_UPDATE","card","dedupeConfigurations","dedupeConf","dedupedRows","dedupeFrom","dedupeSectionId","dedupeSection","SECTION_UPDATE_CARD","PLACES_SAVED_TO_POCKET","PLACES_LINK_BLOCKED","SNIPPETS_DATA","SNIPPETS_RESET","onDoneButton","onAction","cardContextTypes","history","intlID","bookmark","trending","download","gImageLoading","activeCard","imageLoaded","cardImage","maybeLoadImage","imageUrl","loaderPromise","loader","Image","src","catch","then","WEBEXT_CLICK","click","_Card","hasImage","placeholder","description","Card","PlaceholderCard","validationError","onMount","shouldFocus","showClearButton","onClear","typeUrl","titleId","loading","placeholderId","errorMessageId","TopSiteFormInput","customScreenshotUrl","showCustomScreenshotForm","onClearScreenshotInput","onLabelChange","onUrlChange","onClearUrlClick","onDoneButtonClick","onCustomScreenshotUrlChange","onPreviewButtonClick","onEnableScreenshotUrlForm","validateUrl","_updateCustomScreenshotInput","validateForm","cleanUrl","_tryParseUrl","validProtocols","urlObj","validateCustomScreenshotUrl","validate","_renderCustomScreenshotInput","requestFailed","isLoading","showAsAdd","previous","changed","previewMode","previewLink","TopSiteForm"],"mappings":"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","file":"activity-stream.bundle.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {addSnippetsSubscriber} from \"content-src/lib/snippets\";\nimport {Base} from \"content-src/components/Base/Base\";\nimport {DetectUserSessionStart} from \"content-src/lib/detect-user-session-start\";\nimport {initStore} from \"content-src/lib/init-store\";\nimport {Provider} from \"react-redux\";\nimport React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport {reducers} from \"common/Reducers.jsm\";\n\nconst store = initStore(reducers, global.gActivityStreamPrerenderedState);\n\nnew DetectUserSessionStart(store).sendEventOrAddListener();\n\n// If we are starting in a prerendered state, we must wait until the first render\n// to request state rehydration (see Base.jsx). If we are NOT in a prerendered state,\n// we can request it immedately.\nif (!global.gActivityStreamPrerenderedState) {\n store.dispatch(ac.AlsoToMain({type: at.NEW_TAB_STATE_REQUEST}));\n}\n\nReactDOM.hydrate(\n \n, document.getElementById(\"root\"));\n\naddSnippetsSubscriber(store);\n","var g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1, eval)(\"this\");\r\n} catch (e) {\r\n\t// This works if the window reference is available\r\n\tif (typeof window === \"object\") g = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n","/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/. */\n\"use strict\";\n\nthis.MAIN_MESSAGE_TYPE = \"ActivityStream:Main\";\nthis.CONTENT_MESSAGE_TYPE = \"ActivityStream:Content\";\nthis.PRELOAD_MESSAGE_TYPE = \"ActivityStream:PreloadedBrowser\";\nthis.UI_CODE = 1;\nthis.BACKGROUND_PROCESS = 2;\n\n/**\n * globalImportContext - Are we in UI code (i.e. react, a dom) or some kind of background process?\n * Use this in action creators if you need different logic\n * for ui/background processes.\n */\nconst globalImportContext = typeof Window === \"undefined\" ? BACKGROUND_PROCESS : UI_CODE;\n// Export for tests\nthis.globalImportContext = globalImportContext;\n\n// Create an object that avoids accidental differing key/value pairs:\n// {\n// INIT: \"INIT\",\n// UNINIT: \"UNINIT\"\n// }\nconst actionTypes = {};\nfor (const type of [\n \"ADDONS_INFO_REQUEST\",\n \"ADDONS_INFO_RESPONSE\",\n \"ARCHIVE_FROM_POCKET\",\n \"AS_ROUTER_TELEMETRY_USER_EVENT\",\n \"BLOCK_URL\",\n \"BOOKMARK_URL\",\n \"COPY_DOWNLOAD_LINK\",\n \"DELETE_BOOKMARK_BY_ID\",\n \"DELETE_FROM_POCKET\",\n \"DELETE_HISTORY_URL\",\n \"DIALOG_CANCEL\",\n \"DIALOG_OPEN\",\n \"DISABLE_ONBOARDING\",\n \"DOWNLOAD_CHANGED\",\n \"FILL_SEARCH_TERM\",\n \"INIT\",\n \"MIGRATION_CANCEL\",\n \"MIGRATION_COMPLETED\",\n \"MIGRATION_START\",\n \"NEW_TAB_INIT\",\n \"NEW_TAB_INITIAL_STATE\",\n \"NEW_TAB_LOAD\",\n \"NEW_TAB_REHYDRATED\",\n \"NEW_TAB_STATE_REQUEST\",\n \"NEW_TAB_UNLOAD\",\n \"OPEN_DOWNLOAD_FILE\",\n \"OPEN_LINK\",\n \"OPEN_NEW_WINDOW\",\n \"OPEN_PRIVATE_WINDOW\",\n \"OPEN_WEBEXT_SETTINGS\",\n \"PAGE_PRERENDERED\",\n \"PLACES_BOOKMARK_ADDED\",\n \"PLACES_BOOKMARK_REMOVED\",\n \"PLACES_HISTORY_CLEARED\",\n \"PLACES_LINKS_CHANGED\",\n \"PLACES_LINK_BLOCKED\",\n \"PLACES_LINK_DELETED\",\n \"PLACES_SAVED_TO_POCKET\",\n \"PREFS_INITIAL_VALUES\",\n \"PREF_CHANGED\",\n \"PREVIEW_REQUEST\",\n \"PREVIEW_REQUEST_CANCEL\",\n \"PREVIEW_RESPONSE\",\n \"REMOVE_DOWNLOAD_FILE\",\n \"RICH_ICON_MISSING\",\n \"SAVE_SESSION_PERF_DATA\",\n \"SAVE_TO_POCKET\",\n \"SCREENSHOT_UPDATED\",\n \"SECTION_DEREGISTER\",\n \"SECTION_DISABLE\",\n \"SECTION_ENABLE\",\n \"SECTION_MOVE\",\n \"SECTION_OPTIONS_CHANGED\",\n \"SECTION_REGISTER\",\n \"SECTION_UPDATE\",\n \"SECTION_UPDATE_CARD\",\n \"SETTINGS_CLOSE\",\n \"SETTINGS_OPEN\",\n \"SET_PREF\",\n \"SHOW_DOWNLOAD_FILE\",\n \"SHOW_FIREFOX_ACCOUNTS\",\n \"SKIPPED_SIGNIN\",\n \"SNIPPETS_BLOCKLIST_CLEARED\",\n \"SNIPPETS_BLOCKLIST_UPDATED\",\n \"SNIPPETS_DATA\",\n \"SNIPPETS_RESET\",\n \"SNIPPET_BLOCKED\",\n \"SUBMIT_EMAIL\",\n \"SYSTEM_TICK\",\n \"TELEMETRY_IMPRESSION_STATS\",\n \"TELEMETRY_PERFORMANCE_EVENT\",\n \"TELEMETRY_UNDESIRED_EVENT\",\n \"TELEMETRY_USER_EVENT\",\n \"TOP_SITES_CANCEL_EDIT\",\n \"TOP_SITES_CLOSE_SEARCH_SHORTCUTS_MODAL\",\n \"TOP_SITES_EDIT\",\n \"TOP_SITES_INSERT\",\n \"TOP_SITES_OPEN_SEARCH_SHORTCUTS_MODAL\",\n \"TOP_SITES_PIN\",\n \"TOP_SITES_PREFS_UPDATED\",\n \"TOP_SITES_UNPIN\",\n \"TOP_SITES_UPDATED\",\n \"TOTAL_BOOKMARKS_REQUEST\",\n \"TOTAL_BOOKMARKS_RESPONSE\",\n \"UNINIT\",\n \"UPDATE_SEARCH_SHORTCUTS\",\n \"UPDATE_SECTION_PREFS\",\n \"WEBEXT_CLICK\",\n \"WEBEXT_DISMISS\"\n]) {\n actionTypes[type] = type;\n}\n\n// These are acceptable actions for AS Router messages to have. They can show up\n// as call-to-action buttons in snippets, onboarding tour, etc.\nconst ASRouterActions = {};\nfor (const type of [\n \"INSTALL_ADDON_FROM_URL\",\n \"OPEN_PRIVATE_BROWSER_WINDOW\",\n \"OPEN_URL\",\n \"OPEN_ABOUT_PAGE\"\n]) {\n ASRouterActions[type] = type;\n}\n\n// Helper function for creating routed actions between content and main\n// Not intended to be used by consumers\nfunction _RouteMessage(action, options) {\n const meta = action.meta ? {...action.meta} : {};\n if (!options || !options.from || !options.to) {\n throw new Error(\"Routed Messages must have options as the second parameter, and must at least include a .from and .to property.\");\n }\n // For each of these fields, if they are passed as an option,\n // add them to the action. If they are not defined, remove them.\n [\"from\", \"to\", \"toTarget\", \"fromTarget\", \"skipMain\", \"skipLocal\"].forEach(o => {\n if (typeof options[o] !== \"undefined\") {\n meta[o] = options[o];\n } else if (meta[o]) {\n delete meta[o];\n }\n });\n return {...action, meta};\n}\n\n/**\n * AlsoToMain - Creates a message that will be dispatched locally and also sent to the Main process.\n *\n * @param {object} action Any redux action (required)\n * @param {object} options\n * @param {bool} skipLocal Used by OnlyToMain to skip the main reducer\n * @param {string} fromTarget The id of the content port from which the action originated. (optional)\n * @return {object} An action with added .meta properties\n */\nfunction AlsoToMain(action, fromTarget, skipLocal) {\n return _RouteMessage(action, {\n from: CONTENT_MESSAGE_TYPE,\n to: MAIN_MESSAGE_TYPE,\n fromTarget,\n skipLocal\n });\n}\n\n/**\n * OnlyToMain - Creates a message that will be sent to the Main process and skip the local reducer.\n *\n * @param {object} action Any redux action (required)\n * @param {object} options\n * @param {string} fromTarget The id of the content port from which the action originated. (optional)\n * @return {object} An action with added .meta properties\n */\nfunction OnlyToMain(action, fromTarget) {\n return AlsoToMain(action, fromTarget, true);\n}\n\n/**\n * BroadcastToContent - Creates a message that will be dispatched to main and sent to ALL content processes.\n *\n * @param {object} action Any redux action (required)\n * @return {object} An action with added .meta properties\n */\nfunction BroadcastToContent(action) {\n return _RouteMessage(action, {\n from: MAIN_MESSAGE_TYPE,\n to: CONTENT_MESSAGE_TYPE\n });\n}\n\n/**\n * AlsoToOneContent - Creates a message that will be will be dispatched to the main store\n * and also sent to a particular Content process.\n *\n * @param {object} action Any redux action (required)\n * @param {string} target The id of a content port\n * @param {bool} skipMain Used by OnlyToOneContent to skip the main process\n * @return {object} An action with added .meta properties\n */\nfunction AlsoToOneContent(action, target, skipMain) {\n if (!target) {\n throw new Error(\"You must provide a target ID as the second parameter of AlsoToOneContent. If you want to send to all content processes, use BroadcastToContent\");\n }\n return _RouteMessage(action, {\n from: MAIN_MESSAGE_TYPE,\n to: CONTENT_MESSAGE_TYPE,\n toTarget: target,\n skipMain\n });\n}\n\n/**\n * OnlyToOneContent - Creates a message that will be sent to a particular Content process\n * and skip the main reducer.\n *\n * @param {object} action Any redux action (required)\n * @param {string} target The id of a content port\n * @return {object} An action with added .meta properties\n */\nfunction OnlyToOneContent(action, target) {\n return AlsoToOneContent(action, target, true);\n}\n\n/**\n * AlsoToPreloaded - Creates a message that dispatched to the main reducer and also sent to the preloaded tab.\n *\n * @param {object} action Any redux action (required)\n * @return {object} An action with added .meta properties\n */\nfunction AlsoToPreloaded(action) {\n return _RouteMessage(action, {\n from: MAIN_MESSAGE_TYPE,\n to: PRELOAD_MESSAGE_TYPE\n });\n}\n\n/**\n * UserEvent - A telemetry ping indicating a user action. This should only\n * be sent from the UI during a user session.\n *\n * @param {object} data Fields to include in the ping (source, etc.)\n * @return {object} An AlsoToMain action\n */\nfunction UserEvent(data) {\n return AlsoToMain({\n type: actionTypes.TELEMETRY_USER_EVENT,\n data\n });\n}\n\n/**\n * ASRouterUserEvent - A telemetry ping indicating a user action from AS router. This should only\n * be sent from the UI during a user session.\n *\n * @param {object} data Fields to include in the ping (source, etc.)\n * @return {object} An AlsoToMain action\n */\nfunction ASRouterUserEvent(data) {\n return AlsoToMain({\n type: actionTypes.AS_ROUTER_TELEMETRY_USER_EVENT,\n data\n });\n}\n\n/**\n * UndesiredEvent - A telemetry ping indicating an undesired state.\n *\n * @param {object} data Fields to include in the ping (value, etc.)\n * @param {int} importContext (For testing) Override the import context for testing.\n * @return {object} An action. For UI code, a AlsoToMain action.\n */\nfunction UndesiredEvent(data, importContext = globalImportContext) {\n const action = {\n type: actionTypes.TELEMETRY_UNDESIRED_EVENT,\n data\n };\n return importContext === UI_CODE ? AlsoToMain(action) : action;\n}\n\n/**\n * PerfEvent - A telemetry ping indicating a performance-related event.\n *\n * @param {object} data Fields to include in the ping (value, etc.)\n * @param {int} importContext (For testing) Override the import context for testing.\n * @return {object} An action. For UI code, a AlsoToMain action.\n */\nfunction PerfEvent(data, importContext = globalImportContext) {\n const action = {\n type: actionTypes.TELEMETRY_PERFORMANCE_EVENT,\n data\n };\n return importContext === UI_CODE ? AlsoToMain(action) : action;\n}\n\n/**\n * ImpressionStats - A telemetry ping indicating an impression stats.\n *\n * @param {object} data Fields to include in the ping\n * @param {int} importContext (For testing) Override the import context for testing.\n * #return {object} An action. For UI code, a AlsoToMain action.\n */\nfunction ImpressionStats(data, importContext = globalImportContext) {\n const action = {\n type: actionTypes.TELEMETRY_IMPRESSION_STATS,\n data\n };\n return importContext === UI_CODE ? AlsoToMain(action) : action;\n}\n\nfunction SetPref(name, value, importContext = globalImportContext) {\n const action = {type: actionTypes.SET_PREF, data: {name, value}};\n return importContext === UI_CODE ? AlsoToMain(action) : action;\n}\n\nfunction WebExtEvent(type, data, importContext = globalImportContext) {\n if (!data || !data.source) {\n throw new Error(\"WebExtEvent actions should include a property \\\"source\\\", the id of the webextension that should receive the event.\");\n }\n const action = {type, data};\n return importContext === UI_CODE ? AlsoToMain(action) : action;\n}\n\nthis.actionTypes = actionTypes;\nthis.ASRouterActions = ASRouterActions;\n\nthis.actionCreators = {\n BroadcastToContent,\n UserEvent,\n ASRouterUserEvent,\n UndesiredEvent,\n PerfEvent,\n ImpressionStats,\n AlsoToOneContent,\n OnlyToOneContent,\n AlsoToMain,\n OnlyToMain,\n AlsoToPreloaded,\n SetPref,\n WebExtEvent\n};\n\n// These are helpers to test for certain kinds of actions\nthis.actionUtils = {\n isSendToMain(action) {\n if (!action.meta) {\n return false;\n }\n return action.meta.to === MAIN_MESSAGE_TYPE && action.meta.from === CONTENT_MESSAGE_TYPE;\n },\n isBroadcastToContent(action) {\n if (!action.meta) {\n return false;\n }\n if (action.meta.to === CONTENT_MESSAGE_TYPE && !action.meta.toTarget) {\n return true;\n }\n return false;\n },\n isSendToOneContent(action) {\n if (!action.meta) {\n return false;\n }\n if (action.meta.to === CONTENT_MESSAGE_TYPE && action.meta.toTarget) {\n return true;\n }\n return false;\n },\n isSendToPreloaded(action) {\n if (!action.meta) {\n return false;\n }\n return action.meta.to === PRELOAD_MESSAGE_TYPE &&\n action.meta.from === MAIN_MESSAGE_TYPE;\n },\n isFromMain(action) {\n if (!action.meta) {\n return false;\n }\n return action.meta.from === MAIN_MESSAGE_TYPE &&\n action.meta.to === CONTENT_MESSAGE_TYPE;\n },\n getPortIdOfSender(action) {\n return (action.meta && action.meta.fromTarget) || null;\n },\n _RouteMessage\n};\n\nconst EXPORTED_SYMBOLS = [\n \"actionTypes\",\n \"actionCreators\",\n \"actionUtils\",\n \"ASRouterActions\",\n \"globalImportContext\",\n \"UI_CODE\",\n \"BACKGROUND_PROCESS\",\n \"MAIN_MESSAGE_TYPE\",\n \"CONTENT_MESSAGE_TYPE\",\n \"PRELOAD_MESSAGE_TYPE\"\n];\n","const DATABASE_NAME = \"snippets_db\";\nconst DATABASE_VERSION = 1;\nconst SNIPPETS_OBJECTSTORE_NAME = \"snippets\";\nexport const SNIPPETS_UPDATE_INTERVAL_MS = 14400000; // 4 hours.\n\nconst SNIPPETS_ENABLED_EVENT = \"Snippets:Enabled\";\nconst SNIPPETS_DISABLED_EVENT = \"Snippets:Disabled\";\n\nimport {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {ASRouterContent} from \"content-src/asrouter/asrouter-content\";\n\n/**\n * SnippetsMap - A utility for cacheing values related to the snippet. It has\n * the same interface as a Map, but is optionally backed by\n * indexedDB for persistent storage.\n * Call .connect() to open a database connection and restore any\n * previously cached data, if necessary.\n *\n */\nexport class SnippetsMap extends Map {\n constructor(dispatch) {\n super();\n this._db = null;\n this._dispatch = dispatch;\n }\n\n set(key, value) {\n super.set(key, value);\n return this._dbTransaction(db => db.put(value, key));\n }\n\n delete(key) {\n super.delete(key);\n return this._dbTransaction(db => db.delete(key));\n }\n\n clear() {\n super.clear();\n this._dispatch(ac.OnlyToMain({type: at.SNIPPETS_BLOCKLIST_CLEARED}));\n return this._dbTransaction(db => db.clear());\n }\n\n get blockList() {\n return this.get(\"blockList\") || [];\n }\n\n /**\n * blockSnippetById - Blocks a snippet given an id\n *\n * @param {str|int} id The id of the snippet\n * @return {Promise} Resolves when the id has been written to indexedDB,\n * or immediately if the snippetMap is not connected\n */\n async blockSnippetById(id) {\n if (!id) {\n return;\n }\n const {blockList} = this;\n if (!blockList.includes(id)) {\n blockList.push(id);\n this._dispatch(ac.AlsoToMain({type: at.SNIPPETS_BLOCKLIST_UPDATED, data: id}));\n await this.set(\"blockList\", blockList);\n }\n }\n\n disableOnboarding() {\n this._dispatch(ac.AlsoToMain({type: at.DISABLE_ONBOARDING}));\n }\n\n showFirefoxAccounts() {\n this._dispatch(ac.AlsoToMain({type: at.SHOW_FIREFOX_ACCOUNTS}));\n }\n\n getTotalBookmarksCount() {\n return new Promise(resolve => {\n this._dispatch(ac.OnlyToMain({type: at.TOTAL_BOOKMARKS_REQUEST}));\n global.RPMAddMessageListener(\"ActivityStream:MainToContent\", function onMessage({data: action}) {\n if (action.type === at.TOTAL_BOOKMARKS_RESPONSE) {\n resolve(action.data);\n global.RPMRemoveMessageListener(\"ActivityStream:MainToContent\", onMessage);\n }\n });\n });\n }\n\n getAddonsInfo() {\n return new Promise(resolve => {\n this._dispatch(ac.OnlyToMain({type: at.ADDONS_INFO_REQUEST}));\n global.RPMAddMessageListener(\"ActivityStream:MainToContent\", function onMessage({data: action}) {\n if (action.type === at.ADDONS_INFO_RESPONSE) {\n resolve(action.data);\n global.RPMRemoveMessageListener(\"ActivityStream:MainToContent\", onMessage);\n }\n });\n });\n }\n\n /**\n * connect - Attaches an indexedDB back-end to the Map so that any set values\n * are also cached in a store. It also restores any existing values\n * that are already stored in the indexedDB store.\n *\n * @return {type} description\n */\n async connect() {\n // Open the connection\n const db = await this._openDB();\n\n // Restore any existing values\n await this._restoreFromDb(db);\n\n // Attach a reference to the db\n this._db = db;\n }\n\n /**\n * _dbTransaction - Returns a db transaction wrapped with the given modifier\n * function as a Promise. If the db has not been connected,\n * it resolves immediately.\n *\n * @param {func} modifier A function to call with the transaction\n * @return {obj} A Promise that resolves when the transaction has\n * completed or errored\n */\n _dbTransaction(modifier) {\n if (!this._db) {\n return Promise.resolve();\n }\n return new Promise((resolve, reject) => {\n const transaction = modifier(\n this._db\n .transaction(SNIPPETS_OBJECTSTORE_NAME, \"readwrite\")\n .objectStore(SNIPPETS_OBJECTSTORE_NAME)\n );\n transaction.onsuccess = event => resolve();\n\n /* istanbul ignore next */\n transaction.onerror = event => reject(transaction.error);\n });\n }\n\n _openDB() {\n return new Promise((resolve, reject) => {\n const openRequest = indexedDB.open(DATABASE_NAME, DATABASE_VERSION);\n\n /* istanbul ignore next */\n openRequest.onerror = event => {\n // Try to delete the old database so that we can start this process over\n // next time.\n indexedDB.deleteDatabase(DATABASE_NAME);\n reject(event);\n };\n\n openRequest.onupgradeneeded = event => {\n const db = event.target.result;\n if (!db.objectStoreNames.contains(SNIPPETS_OBJECTSTORE_NAME)) {\n db.createObjectStore(SNIPPETS_OBJECTSTORE_NAME);\n }\n };\n\n openRequest.onsuccess = event => {\n let db = event.target.result;\n\n /* istanbul ignore next */\n db.onerror = err => console.error(err); // eslint-disable-line no-console\n /* istanbul ignore next */\n db.onversionchange = versionChangeEvent => versionChangeEvent.target.close();\n\n resolve(db);\n };\n });\n }\n\n _restoreFromDb(db) {\n return new Promise((resolve, reject) => {\n let cursorRequest;\n try {\n cursorRequest = db.transaction(SNIPPETS_OBJECTSTORE_NAME)\n .objectStore(SNIPPETS_OBJECTSTORE_NAME).openCursor();\n } catch (err) {\n // istanbul ignore next\n reject(err);\n // istanbul ignore next\n return;\n }\n\n /* istanbul ignore next */\n cursorRequest.onerror = event => reject(event);\n\n cursorRequest.onsuccess = event => {\n let cursor = event.target.result;\n // Populate the cache from the persistent storage.\n if (cursor) {\n if (cursor.value !== \"blockList\") {\n this.set(cursor.key, cursor.value);\n }\n cursor.continue();\n } else {\n // We are done.\n resolve();\n }\n };\n });\n }\n}\n\n/**\n * SnippetsProvider - Initializes a SnippetsMap and loads snippets from a\n * remote location, or else default snippets if the remote\n * snippets cannot be retrieved.\n */\nexport class SnippetsProvider {\n constructor(dispatch) {\n // Initialize the Snippets Map and attaches it to a global so that\n // the snippet payload can interact with it.\n global.gSnippetsMap = new SnippetsMap(dispatch);\n this._onAction = this._onAction.bind(this);\n }\n\n get snippetsMap() {\n return global.gSnippetsMap;\n }\n\n async _refreshSnippets() {\n // Check if the cached version of of the snippets in snippetsMap. If it's too\n // old, blow away the entire snippetsMap.\n const cachedVersion = this.snippetsMap.get(\"snippets-cached-version\");\n\n if (cachedVersion !== this.appData.version) {\n this.snippetsMap.clear();\n }\n\n // Has enough time passed for us to require an update?\n const lastUpdate = this.snippetsMap.get(\"snippets-last-update\");\n const needsUpdate = !(lastUpdate >= 0) || Date.now() - lastUpdate > SNIPPETS_UPDATE_INTERVAL_MS;\n\n if (needsUpdate && this.appData.snippetsURL) {\n this.snippetsMap.set(\"snippets-last-update\", Date.now());\n try {\n const response = await fetch(this.appData.snippetsURL);\n if (response.status === 200) {\n const payload = await response.text();\n\n this.snippetsMap.set(\"snippets\", payload);\n this.snippetsMap.set(\"snippets-cached-version\", this.appData.version);\n }\n } catch (e) {\n console.error(e); // eslint-disable-line no-console\n }\n }\n }\n\n _noSnippetFallback() {\n // TODO\n }\n\n _forceOnboardingVisibility(shouldBeVisible) {\n const onboardingEl = document.getElementById(\"onboarding-notification-bar\");\n\n if (onboardingEl) {\n onboardingEl.style.display = shouldBeVisible ? \"\" : \"none\";\n }\n }\n\n _showRemoteSnippets() {\n const snippetsEl = document.getElementById(this.elementId);\n const payload = this.snippetsMap.get(\"snippets\");\n\n if (!snippetsEl) {\n throw new Error(`No element was found with id '${this.elementId}'.`);\n }\n\n // This could happen if fetching failed\n if (!payload) {\n throw new Error(\"No remote snippets were found in gSnippetsMap.\");\n }\n\n if (typeof payload !== \"string\") {\n throw new Error(\"Snippet payload was incorrectly formatted\");\n }\n\n // Note that injecting snippets can throw if they're invalid XML.\n // eslint-disable-next-line no-unsanitized/property\n snippetsEl.innerHTML = payload;\n\n // Scripts injected by innerHTML are inactive, so we have to relocate them\n // through DOM manipulation to activate their contents.\n for (const scriptEl of snippetsEl.getElementsByTagName(\"script\")) {\n const relocatedScript = document.createElement(\"script\");\n relocatedScript.text = scriptEl.text;\n scriptEl.parentNode.replaceChild(relocatedScript, scriptEl);\n }\n }\n\n _onAction(msg) {\n if (msg.data.type === at.SNIPPET_BLOCKED) {\n if (!this.snippetsMap.blockList.includes(msg.data.data)) {\n this.snippetsMap.set(\"blockList\", this.snippetsMap.blockList.concat(msg.data.data));\n document.getElementById(\"snippets-container\").style.display = \"none\";\n }\n }\n }\n\n /**\n * init - Fetch the snippet payload and show snippets\n *\n * @param {obj} options\n * @param {str} options.appData.snippetsURL The URL from which we fetch snippets\n * @param {int} options.appData.version The current snippets version\n * @param {str} options.elementId The id of the element in which to inject snippets\n * @param {bool} options.connect Should gSnippetsMap connect to indexedDB?\n */\n async init(options) {\n Object.assign(this, {\n appData: {},\n elementId: \"snippets\",\n connect: true\n }, options);\n\n // Add listener so we know when snippets are blocked on other pages\n if (global.RPMAddMessageListener) {\n global.RPMAddMessageListener(\"ActivityStream:MainToContent\", this._onAction);\n }\n\n // TODO: Requires enabling indexedDB on newtab\n // Restore the snippets map from indexedDB\n if (this.connect) {\n try {\n await this.snippetsMap.connect();\n } catch (e) {\n console.error(e); // eslint-disable-line no-console\n }\n }\n\n // Cache app data values so they can be accessible from gSnippetsMap\n for (const key of Object.keys(this.appData)) {\n if (key === \"blockList\") {\n this.snippetsMap.set(\"blockList\", this.appData[key]);\n } else {\n this.snippetsMap.set(`appData.${key}`, this.appData[key]);\n }\n }\n\n // Refresh snippets, if enough time has passed.\n await this._refreshSnippets();\n\n // Try showing remote snippets, falling back to defaults if necessary.\n try {\n this._showRemoteSnippets();\n } catch (e) {\n this._noSnippetFallback(e);\n }\n\n window.dispatchEvent(new Event(SNIPPETS_ENABLED_EVENT));\n\n this._forceOnboardingVisibility(true);\n this.initialized = true;\n }\n\n uninit() {\n window.dispatchEvent(new Event(SNIPPETS_DISABLED_EVENT));\n this._forceOnboardingVisibility(false);\n if (global.RPMRemoveMessageListener) {\n global.RPMRemoveMessageListener(\"ActivityStream:MainToContent\", this._onAction);\n }\n this.initialized = false;\n }\n}\n\n/**\n * addSnippetsSubscriber - Creates a SnippetsProvider that Initializes\n * when the store has received the appropriate\n * Snippet data.\n *\n * @param {obj} store The redux store\n * @return {obj} Returns the snippets instance, asrouterContent instance and unsubscribe function\n */\nexport function addSnippetsSubscriber(store) {\n const snippets = new SnippetsProvider(store.dispatch);\n const asrouterContent = new ASRouterContent();\n\n let initializing = false;\n\n store.subscribe(async () => {\n const state = store.getState();\n const isASRouterEnabled = state.Prefs.values.asrouterExperimentEnabled && state.Prefs.values.asrouterOnboardingCohort > 0;\n // state.Prefs.values[\"feeds.snippets\"]: Should snippets be shown?\n // state.Snippets.initialized Is the snippets data initialized?\n // snippets.initialized: Is SnippetsProvider currently initialised?\n if (state.Prefs.values[\"feeds.snippets\"] &&\n // If the message center experiment is enabled, don't show snippets\n !isASRouterEnabled &&\n !state.Prefs.values.disableSnippets &&\n state.Snippets.initialized &&\n !snippets.initialized &&\n // Don't call init multiple times\n !initializing &&\n location.href !== \"about:welcome\"\n ) {\n initializing = true;\n await snippets.init({appData: state.Snippets});\n initializing = false;\n } else if (\n (state.Prefs.values[\"feeds.snippets\"] === false ||\n state.Prefs.values.disableSnippets === true) &&\n snippets.initialized\n ) {\n snippets.uninit();\n }\n\n // Turn on AS Router snippets if the experiment is enabled and the snippets pref is on;\n // otherwise, turn it off.\n if (\n (state.Prefs.values.asrouterExperimentEnabled || state.Prefs.values.asrouterOnboardingCohort > 0) &&\n state.Prefs.values[\"feeds.snippets\"] &&\n !asrouterContent.initialized) {\n asrouterContent.init();\n } else if (\n ((!state.Prefs.values.asrouterExperimentEnabled && state.Prefs.values.asrouterOnboardingCohort === 0) || !state.Prefs.values[\"feeds.snippets\"]) &&\n asrouterContent.initialized\n ) {\n asrouterContent.uninit();\n }\n });\n\n // These values are returned for testing purposes\n return {snippets, asrouterContent};\n}\n","import {actionCreators as ac, ASRouterActions as ra} from \"common/Actions.jsm\";\nimport {LocalizationProvider, Localized} from \"fluent-react\";\nimport {OUTGOING_MESSAGE_NAME as AS_GENERAL_OUTGOING_MESSAGE_NAME} from \"content-src/lib/init-store\";\nimport {ImpressionsWrapper} from \"./components/ImpressionsWrapper/ImpressionsWrapper\";\nimport {MessageContext} from \"fluent\";\nimport {OnboardingMessage} from \"./templates/OnboardingMessage/OnboardingMessage\";\nimport React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport {safeURI} from \"./template-utils\";\nimport {SimpleSnippet} from \"./templates/SimpleSnippet/SimpleSnippet\";\n\nconst INCOMING_MESSAGE_NAME = \"ASRouter:parent-to-child\";\nconst OUTGOING_MESSAGE_NAME = \"ASRouter:child-to-parent\";\n\nexport const ASRouterUtils = {\n addListener(listener) {\n global.RPMAddMessageListener(INCOMING_MESSAGE_NAME, listener);\n },\n removeListener(listener) {\n global.RPMRemoveMessageListener(INCOMING_MESSAGE_NAME, listener);\n },\n sendMessage(action) {\n global.RPMSendAsyncMessage(OUTGOING_MESSAGE_NAME, action);\n },\n blockById(id) {\n ASRouterUtils.sendMessage({type: \"BLOCK_MESSAGE_BY_ID\", data: {id}});\n },\n blockBundle(bundle) {\n ASRouterUtils.sendMessage({type: \"BLOCK_BUNDLE\", data: {bundle}});\n },\n executeAction({button_action, button_action_params}) {\n if (button_action in ra) {\n ASRouterUtils.sendMessage({type: button_action, data: {button_action_params}});\n }\n },\n unblockById(id) {\n ASRouterUtils.sendMessage({type: \"UNBLOCK_MESSAGE_BY_ID\", data: {id}});\n },\n unblockBundle(bundle) {\n ASRouterUtils.sendMessage({type: \"UNBLOCK_BUNDLE\", data: {bundle}});\n },\n getNextMessage() {\n ASRouterUtils.sendMessage({type: \"GET_NEXT_MESSAGE\"});\n },\n overrideMessage(id) {\n ASRouterUtils.sendMessage({type: \"OVERRIDE_MESSAGE\", data: {id}});\n },\n sendTelemetry(ping) {\n const payload = ac.ASRouterUserEvent(ping);\n global.RPMSendAsyncMessage(AS_GENERAL_OUTGOING_MESSAGE_NAME, payload);\n },\n getEndpoint() {\n if (window.location.href.includes(\"endpoint\")) {\n const params = new URLSearchParams(window.location.href.slice(window.location.href.indexOf(\"endpoint\")));\n try {\n const endpoint = new URL(params.get(\"endpoint\"));\n return {\n url: endpoint.href,\n snippetId: params.get(\"snippetId\")\n };\n } catch (e) {}\n }\n\n return null;\n }\n};\n\n// Note: nextProps/prevProps refer to props passed to , not \nfunction shouldSendImpressionOnUpdate(nextProps, prevProps) {\n return (nextProps.message.id && (!prevProps.message || prevProps.message.id !== nextProps.message.id));\n}\n\nfunction generateMessages(content) {\n const cx = new MessageContext(\"en-US\");\n cx.addMessages(`RichTextSnippet = ${content}`);\n return [cx];\n}\n\n// Elements allowed in snippet content\nconst ALLOWED_TAGS = {\n b: ,\n i: ,\n u: ,\n strong: ,\n em: ,\n br:
    \n};\n\n/**\n * Transform an object (tag name: {url}) into (tag name: anchor) where the url\n * is used as href, in order to render links inside a Fluent.Localized component.\n */\nexport function convertLinks(links, sendClick) {\n if (links) {\n return Object.keys(links).reduce((acc, linkTag) => {\n acc[linkTag] =
    ;\n return acc;\n }, {});\n }\n\n return null;\n}\n\n/**\n * Message wrapper used to sanitize markup and render HTML.\n */\nfunction RichText(props) {\n return (\n \n {props.text}\n \n );\n}\n\nexport class ASRouterUISurface extends React.PureComponent {\n constructor(props) {\n super(props);\n this.onMessageFromParent = this.onMessageFromParent.bind(this);\n this.sendClick = this.sendClick.bind(this);\n this.sendImpression = this.sendImpression.bind(this);\n this.sendUserActionTelemetry = this.sendUserActionTelemetry.bind(this);\n this.state = {message: {}, bundle: {}};\n }\n\n sendUserActionTelemetry(extraProps = {}) {\n const {message, bundle} = this.state;\n if (!message && !extraProps.message_id) {\n throw new Error(`You must provide a message_id for bundled messages`);\n }\n const eventType = `${message.provider || bundle.provider}_user_event`;\n ASRouterUtils.sendTelemetry({\n message_id: message.id || extraProps.message_id,\n source: extraProps.id,\n action: eventType,\n ...extraProps\n });\n }\n\n sendImpression(extraProps) {\n ASRouterUtils.sendMessage({type: \"IMPRESSION\", data: this.state.message});\n this.sendUserActionTelemetry({event: \"IMPRESSION\", ...extraProps});\n }\n\n // If link has a `metric` data attribute send it as part of the `value`\n // telemetry field which can have arbitrary values.\n // Used for router messages with links as part of the content.\n sendClick(event) {\n const metric = {\n value: event.target.dataset.metric,\n // Used for the `source` of the event. Needed to differentiate\n // from other snippet or onboarding events that may occur.\n id: \"NEWTAB_FOOTER_BAR_CONTENT\"\n };\n this.sendUserActionTelemetry({event: \"CLICK_BUTTON\", ...metric});\n }\n\n onBlockById(id) {\n return () => ASRouterUtils.blockById(id);\n }\n\n clearBundle(bundle) {\n return () => ASRouterUtils.blockBundle(bundle);\n }\n\n onMessageFromParent({data: action}) {\n switch (action.type) {\n case \"SET_MESSAGE\":\n this.setState({message: action.data});\n break;\n case \"SET_BUNDLED_MESSAGES\":\n this.setState({bundle: action.data});\n break;\n case \"CLEAR_MESSAGE\":\n if (action.data.id === this.state.message.id) {\n this.setState({message: {}});\n }\n break;\n case \"CLEAR_BUNDLE\":\n if (this.state.bundle.bundle) {\n this.setState({bundle: {}});\n }\n break;\n case \"CLEAR_ALL\":\n this.setState({message: {}, bundle: {}});\n }\n }\n\n componentWillMount() {\n const endpoint = ASRouterUtils.getEndpoint();\n ASRouterUtils.addListener(this.onMessageFromParent);\n\n // If we are loading about:welcome we want to trigger the onboarding messages\n if (this.props.document.location.href === \"about:welcome\") {\n ASRouterUtils.sendMessage({type: \"TRIGGER\", data: {trigger: {id: \"firstRun\"}}});\n } else {\n ASRouterUtils.sendMessage({type: \"CONNECT_UI_REQUEST\", data: {endpoint}});\n }\n }\n\n componentWillUnmount() {\n ASRouterUtils.removeListener(this.onMessageFromParent);\n }\n\n renderSnippets() {\n return (\n \n \n }\n UISurface=\"NEWTAB_FOOTER_BAR\"\n getNextMessage={ASRouterUtils.getNextMessage}\n onBlock={this.onBlockById(this.state.message.id)}\n sendUserActionTelemetry={this.sendUserActionTelemetry} />\n \n );\n }\n\n renderOnboarding() {\n return (\n );\n }\n\n render() {\n const {message, bundle} = this.state;\n if (!message.id && !bundle.template) { return null; }\n if (bundle.template === \"onboarding\") { return this.renderOnboarding(); }\n return this.renderSnippets();\n }\n}\n\nASRouterUISurface.defaultProps = {document: global.document};\n\nexport class ASRouterContent {\n constructor() {\n this.initialized = false;\n this.containerElement = null;\n }\n\n _mount() {\n this.containerElement = global.document.getElementById(\"snippets-container\");\n ReactDOM.render(, this.containerElement);\n }\n\n _unmount() {\n ReactDOM.unmountComponentAtNode(this.containerElement);\n }\n\n init() {\n this._mount();\n this.initialized = true;\n }\n\n uninit() {\n if (this.initialized) {\n this._unmount();\n this.initialized = false;\n }\n }\n}\n","module.exports = React;","module.exports = PropTypes;","/* eslint-env mozilla/frame-script */\n\nimport {actionCreators as ac, actionTypes as at, actionUtils as au} from \"common/Actions.jsm\";\nimport {applyMiddleware, combineReducers, createStore} from \"redux\";\n\nexport const MERGE_STORE_ACTION = \"NEW_TAB_INITIAL_STATE\";\nexport const OUTGOING_MESSAGE_NAME = \"ActivityStream:ContentToMain\";\nexport const INCOMING_MESSAGE_NAME = \"ActivityStream:MainToContent\";\nexport const EARLY_QUEUED_ACTIONS = [at.SAVE_SESSION_PERF_DATA, at.PAGE_PRERENDERED];\n\n/**\n * A higher-order function which returns a reducer that, on MERGE_STORE action,\n * will return the action.data object merged into the previous state.\n *\n * For all other actions, it merely calls mainReducer.\n *\n * Because we want this to merge the entire state object, it's written as a\n * higher order function which takes the main reducer (itself often a call to\n * combineReducers) as a parameter.\n *\n * @param {function} mainReducer reducer to call if action != MERGE_STORE_ACTION\n * @return {function} a reducer that, on MERGE_STORE_ACTION action,\n * will return the action.data object merged\n * into the previous state, and the result\n * of calling mainReducer otherwise.\n */\nfunction mergeStateReducer(mainReducer) {\n return (prevState, action) => {\n if (action.type === MERGE_STORE_ACTION) {\n return {...prevState, ...action.data};\n }\n\n return mainReducer(prevState, action);\n };\n}\n\n/**\n * messageMiddleware - Middleware that looks for SentToMain type actions, and sends them if necessary\n */\nconst messageMiddleware = store => next => action => {\n const skipLocal = action.meta && action.meta.skipLocal;\n if (au.isSendToMain(action)) {\n RPMSendAsyncMessage(OUTGOING_MESSAGE_NAME, action);\n }\n if (!skipLocal) {\n next(action);\n }\n};\n\nexport const rehydrationMiddleware = store => next => action => {\n if (store._didRehydrate) {\n return next(action);\n }\n\n const isMergeStoreAction = action.type === MERGE_STORE_ACTION;\n const isRehydrationRequest = action.type === at.NEW_TAB_STATE_REQUEST;\n\n if (isRehydrationRequest) {\n store._didRequestInitialState = true;\n return next(action);\n }\n\n if (isMergeStoreAction) {\n store._didRehydrate = true;\n return next(action);\n }\n\n // If init happened after our request was made, we need to re-request\n if (store._didRequestInitialState && action.type === at.INIT) {\n return next(ac.AlsoToMain({type: at.NEW_TAB_STATE_REQUEST}));\n }\n\n if (au.isBroadcastToContent(action) || au.isSendToOneContent(action) || au.isSendToPreloaded(action)) {\n // Note that actions received before didRehydrate will not be dispatched\n // because this could negatively affect preloading and the the state\n // will be replaced by rehydration anyway.\n return null;\n }\n\n return next(action);\n};\n\n/**\n * This middleware queues up all the EARLY_QUEUED_ACTIONS until it receives\n * the first action from main. This is useful for those actions for main which\n * require higher reliability, i.e. the action will not be lost in the case\n * that it gets sent before the main is ready to receive it. Conversely, any\n * actions allowed early are accepted to be ignorable or re-sendable.\n */\nexport const queueEarlyMessageMiddleware = store => next => action => {\n if (store._receivedFromMain) {\n next(action);\n } else if (au.isFromMain(action)) {\n next(action);\n store._receivedFromMain = true;\n // Sending out all the early actions as main is ready now\n if (store._earlyActionQueue) {\n store._earlyActionQueue.forEach(next);\n store._earlyActionQueue = [];\n }\n } else if (EARLY_QUEUED_ACTIONS.includes(action.type)) {\n store._earlyActionQueue = store._earlyActionQueue || [];\n store._earlyActionQueue.push(action);\n } else {\n // Let any other type of action go through\n next(action);\n }\n};\n\n/**\n * initStore - Create a store and listen for incoming actions\n *\n * @param {object} reducers An object containing Redux reducers\n * @param {object} intialState (optional) The initial state of the store, if desired\n * @return {object} A redux store\n */\nexport function initStore(reducers, initialState) {\n const store = createStore(\n mergeStateReducer(combineReducers(reducers)),\n initialState,\n global.RPMAddMessageListener && applyMiddleware(rehydrationMiddleware, queueEarlyMessageMiddleware, messageMiddleware)\n );\n\n store._didRehydrate = false;\n store._didRequestInitialState = false;\n\n if (global.RPMAddMessageListener) {\n global.RPMAddMessageListener(INCOMING_MESSAGE_NAME, msg => {\n try {\n store.dispatch(msg.data);\n } catch (ex) {\n console.error(\"Content msg:\", msg, \"Dispatch error: \", ex); // eslint-disable-line no-console\n dump(`Content msg: ${JSON.stringify(msg)}\\nDispatch error: ${ex}\\n${ex.stack}`);\n }\n });\n }\n\n return store;\n}\n","module.exports = Redux;","import React from \"react\";\n\nexport const VISIBLE = \"visible\";\nexport const VISIBILITY_CHANGE_EVENT = \"visibilitychange\";\n\n/**\n * Component wrapper used to send telemetry pings on every impression.\n */\nexport class ImpressionsWrapper extends React.PureComponent {\n // This sends an event when a user sees a set of new content. If content\n // changes while the page is hidden (i.e. preloaded or on a hidden tab),\n // only send the event if the page becomes visible again.\n sendImpressionOrAddListener() {\n if (this.props.document.visibilityState === VISIBLE) {\n this.props.sendImpression({id: this.props.id});\n } else {\n // We should only ever send the latest impression stats ping, so remove any\n // older listeners.\n if (this._onVisibilityChange) {\n this.props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n }\n\n // When the page becomes visible, send the impression stats ping if the section isn't collapsed.\n this._onVisibilityChange = () => {\n if (this.props.document.visibilityState === VISIBLE) {\n this.props.sendImpression({id: this.props.id});\n this.props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n }\n };\n this.props.document.addEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n }\n }\n\n componentWillUnmount() {\n if (this._onVisibilityChange) {\n this.props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n }\n }\n\n componentDidMount() {\n if (this.props.sendOnMount) {\n this.sendImpressionOrAddListener();\n }\n }\n\n componentDidUpdate(prevProps) {\n if (this.props.shouldSendImpressionOnUpdate(this.props, prevProps)) {\n this.sendImpressionOrAddListener();\n }\n }\n\n render() {\n return this.props.children;\n }\n}\n\nImpressionsWrapper.defaultProps = {\n document: global.document,\n sendOnMount: true\n};\n","module.exports = ReactDOM;","export function safeURI(url) {\n if (!url) {\n return \"\";\n }\n const {protocol} = new URL(url);\n const isAllowed = [\n \"http:\",\n \"https:\",\n \"data:\",\n \"resource:\",\n \"chrome:\"\n ].includes(protocol);\n if (!isAllowed) {\n console.warn(`The protocol ${protocol} is not allowed for template URLs.`); // eslint-disable-line no-console\n }\n return isAllowed ? url : \"\";\n}\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {addLocaleData, injectIntl, IntlProvider} from \"react-intl\";\nimport {ASRouterAdmin} from \"content-src/components/ASRouterAdmin/ASRouterAdmin\";\nimport {ConfirmDialog} from \"content-src/components/ConfirmDialog/ConfirmDialog\";\nimport {connect} from \"react-redux\";\nimport {ErrorBoundary} from \"content-src/components/ErrorBoundary/ErrorBoundary\";\nimport {ManualMigration} from \"content-src/components/ManualMigration/ManualMigration\";\nimport {PrerenderData} from \"common/PrerenderData.jsm\";\nimport React from \"react\";\nimport {Search} from \"content-src/components/Search/Search\";\nimport {Sections} from \"content-src/components/Sections/Sections\";\nimport {StartupOverlay} from \"content-src/components/StartupOverlay/StartupOverlay\";\n\nconst PrefsButton = injectIntl(props => (\n
    \n
    \n));\n\n// Add the locale data for pluralization and relative-time formatting for now,\n// this just uses english locale data. We can make this more sophisticated if\n// more features are needed.\nfunction addLocaleDataForReactIntl(locale) {\n addLocaleData([{locale, parentLocale: \"en\"}]);\n}\n\n// Returns a function will not be continuously triggered when called. The\n// function will be triggered if called again after `wait` milliseconds.\nfunction debounce(func, wait) {\n let timer;\n return (...args) => {\n if (timer) { return; }\n\n let wakeUp = () => { timer = null; };\n\n timer = setTimeout(wakeUp, wait);\n func.apply(this, args);\n };\n}\n\nexport class _Base extends React.PureComponent {\n componentWillMount() {\n const {App, locale} = this.props;\n this.sendNewTabRehydrated(App);\n addLocaleDataForReactIntl(locale);\n if (this.props.isFirstrun) {\n global.document.body.classList.add(\"welcome\", \"hide-main\");\n }\n }\n\n componentDidMount() {\n // Request state AFTER the first render to ensure we don't cause the\n // prerendered DOM to be unmounted. Otherwise, NEW_TAB_STATE_REQUEST is\n // dispatched right after the store is ready.\n if (this.props.isPrerendered) {\n this.props.dispatch(ac.AlsoToMain({type: at.NEW_TAB_STATE_REQUEST}));\n this.props.dispatch(ac.AlsoToMain({type: at.PAGE_PRERENDERED}));\n }\n }\n\n componentWillUnmount() {\n this.updateTheme();\n }\n\n hasTopStoriesSectionChanged(nextProps) {\n const nPropsSections = nextProps.Sections.find(section => section.id === \"topstories\");\n const tPropsSections = this.props.Sections.find(section => section.id === \"topstories\");\n if (nPropsSections && nPropsSections.options) {\n if (!tPropsSections || !tPropsSections.options) {\n return true;\n }\n if (nPropsSections.options.show_spocs !== tPropsSections.options.show_spocs) {\n return true;\n }\n if (nPropsSections.options.stories_endpoint !== tPropsSections.options.stories_endpoint) {\n return true;\n }\n }\n return false;\n }\n\n componentWillUpdate(nextProps) {\n this.updateTheme();\n if (this.hasTopStoriesSectionChanged(nextProps)) {\n this.renderNotified = false;\n }\n this.sendNewTabRehydrated(nextProps.App);\n }\n\n updateTheme() {\n const bodyClassName = [\n \"activity-stream\",\n // If we skipped the about:welcome overlay and removed the CSS classes\n // we don't want to add them back to the Activity Stream view\n document.body.classList.contains(\"welcome\") ? \"welcome\" : \"\",\n document.body.classList.contains(\"hide-main\") ? \"hide-main\" : \"\"\n ].filter(v => v).join(\" \");\n global.document.body.className = bodyClassName;\n }\n\n // The NEW_TAB_REHYDRATED event is used to inform feeds that their\n // data has been consumed e.g. for counting the number of tabs that\n // have rendered that data.\n sendNewTabRehydrated(App) {\n if (App && App.initialized && !this.renderNotified) {\n this.props.dispatch(ac.AlsoToMain({type: at.NEW_TAB_REHYDRATED, data: {}}));\n this.renderNotified = true;\n }\n }\n\n render() {\n const {props} = this;\n const {App, locale, strings} = props;\n const {initialized} = App;\n\n const prefs = props.Prefs.values;\n if ((prefs.asrouterExperimentEnabled || prefs.asrouterOnboardingCohort > 0) && window.location.hash === \"#asrouter\") {\n return ();\n }\n\n if (!props.isPrerendered && !initialized) {\n return null;\n }\n\n // Until we can delete the existing onboarding tour, just hide the onboarding button when users are in\n // the new simplified onboarding experiment. CSS hacks ftw\n if (prefs.asrouterOnboardingCohort > 0) {\n global.document.body.classList.add(\"hide-onboarding\");\n }\n\n return (\n \n \n \n );\n }\n}\n\nexport class BaseContent extends React.PureComponent {\n constructor(props) {\n super(props);\n this.openPreferences = this.openPreferences.bind(this);\n this.onWindowScroll = debounce(this.onWindowScroll.bind(this), 5);\n this.state = {fixedSearch: false};\n }\n\n componentDidMount() {\n global.addEventListener(\"scroll\", this.onWindowScroll);\n }\n\n componentWillUnmount() {\n global.removeEventListener(\"scroll\", this.onWindowScroll);\n }\n\n onWindowScroll() {\n const SCROLL_THRESHOLD = 34;\n if (global.scrollY > SCROLL_THRESHOLD && !this.state.fixedSearch) {\n this.setState({fixedSearch: true});\n } else if (global.scrollY <= SCROLL_THRESHOLD && this.state.fixedSearch) {\n this.setState({fixedSearch: false});\n }\n }\n\n openPreferences() {\n this.props.dispatch(ac.OnlyToMain({type: at.SETTINGS_OPEN}));\n this.props.dispatch(ac.UserEvent({event: \"OPEN_NEWTAB_PREFS\"}));\n }\n\n render() {\n const {props} = this;\n const {App} = props;\n const {initialized} = App;\n const prefs = props.Prefs.values;\n\n const shouldBeFixedToTop = PrerenderData.arePrefsValid(name => prefs[name]);\n\n const outerClassName = [\n \"outer-wrapper\",\n shouldBeFixedToTop && \"fixed-to-top\",\n prefs.showSearch && this.state.fixedSearch && \"fixed-search\"\n ].filter(v => v).join(\" \");\n\n return (\n
    \n
    \n
    \n {prefs.showSearch &&\n
    \n \n \n \n
    \n }\n
    \n {!prefs.migrationExpired &&\n
    \n \n
    \n }\n \n \n
    \n \n
    \n
    \n {this.props.isFirstrun && }\n
    );\n }\n}\n\nexport const Base = connect(state => ({App: state.App, Prefs: state.Prefs, Sections: state.Sections}))(_Base);\n","module.exports = ReactIntl;","import {ASRouterUtils} from \"../../asrouter/asrouter-content\";\nimport React from \"react\";\n\nexport class ASRouterAdmin extends React.PureComponent {\n constructor(props) {\n super(props);\n this.onMessage = this.onMessage.bind(this);\n this.findOtherBundledMessagesOfSameTemplate = this.findOtherBundledMessagesOfSameTemplate.bind(this);\n this.state = {};\n }\n\n onMessage({data: action}) {\n if (action.type === \"ADMIN_SET_STATE\") {\n this.setState(action.data);\n }\n }\n\n componentWillMount() {\n const endpoint = ASRouterUtils.getEndpoint();\n ASRouterUtils.sendMessage({type: \"ADMIN_CONNECT_STATE\", data: {endpoint}});\n ASRouterUtils.addListener(this.onMessage);\n }\n\n componentWillUnmount() {\n ASRouterUtils.removeListener(this.onMessage);\n }\n\n findOtherBundledMessagesOfSameTemplate(template) {\n return this.state.messages.filter(msg => msg.template === template && msg.bundled);\n }\n\n handleBlock(msg) {\n if (msg.bundled) {\n // If we are blocking a message that belongs to a bundle, block all other messages that are bundled of that same template\n let bundle = this.findOtherBundledMessagesOfSameTemplate(msg.template);\n return () => ASRouterUtils.blockBundle(bundle);\n }\n return () => ASRouterUtils.blockById(msg.id);\n }\n\n handleUnblock(msg) {\n if (msg.bundled) {\n // If we are unblocking a message that belongs to a bundle, unblock all other messages that are bundled of that same template\n let bundle = this.findOtherBundledMessagesOfSameTemplate(msg.template);\n return () => ASRouterUtils.unblockBundle(bundle);\n }\n return () => ASRouterUtils.unblockById(msg.id);\n }\n\n handleOverride(id) {\n return () => ASRouterUtils.overrideMessage(id);\n }\n\n renderMessageItem(msg) {\n const isCurrent = msg.id === this.state.lastMessageId;\n const isBlocked = this.state.blockList.includes(msg.id);\n const impressions = this.state.impressions[msg.id] ? this.state.impressions[msg.id].length : 0;\n\n let itemClassName = \"message-item\";\n if (isCurrent) { itemClassName += \" current\"; }\n if (isBlocked) { itemClassName += \" blocked\"; }\n\n return (\n {msg.id}
    \n \n \n {isBlocked ? null : }\n
    ({impressions} impressions)\n \n \n
    {JSON.stringify(msg, null, 2)}
    \n \n );\n }\n\n renderMessages() {\n if (!this.state.messages) {\n return null;\n }\n return (\n {this.state.messages.map(msg => this.renderMessageItem(msg))}\n
    );\n }\n\n renderProviders() {\n return (\n {this.state.providers.map((provider, i) => (\n \n \n ))}\n
    {provider.id}{provider.type === \"remote\" ? {provider.url} : \"(local)\"}
    );\n }\n\n render() {\n return (
    \n

    AS Router Admin

    \n \n

    Message Providers

    \n {this.state.providers ? this.renderProviders() : null}\n

    Messages

    \n {this.renderMessages()}\n
    );\n }\n}\n","import {actionCreators as ac, actionTypes} from \"common/Actions.jsm\";\nimport {connect} from \"react-redux\";\nimport {FormattedMessage} from \"react-intl\";\nimport React from \"react\";\n\n/**\n * ConfirmDialog component.\n * One primary action button, one cancel button.\n *\n * Content displayed is controlled by `data` prop the component receives.\n * Example:\n * data: {\n * // Any sort of data needed to be passed around by actions.\n * payload: site.url,\n * // Primary button AlsoToMain action.\n * action: \"DELETE_HISTORY_URL\",\n * // Primary button USerEvent action.\n * userEvent: \"DELETE\",\n * // Array of locale ids to display.\n * message_body: [\"confirm_history_delete_p1\", \"confirm_history_delete_notice_p2\"],\n * // Text for primary button.\n * confirm_button_string_id: \"menu_action_delete\"\n * },\n */\nexport class _ConfirmDialog extends React.PureComponent {\n constructor(props) {\n super(props);\n this._handleCancelBtn = this._handleCancelBtn.bind(this);\n this._handleConfirmBtn = this._handleConfirmBtn.bind(this);\n }\n\n _handleCancelBtn() {\n this.props.dispatch({type: actionTypes.DIALOG_CANCEL});\n this.props.dispatch(ac.UserEvent({event: actionTypes.DIALOG_CANCEL, source: this.props.data.eventSource}));\n }\n\n _handleConfirmBtn() {\n this.props.data.onConfirm.forEach(this.props.dispatch);\n }\n\n _renderModalMessage() {\n const message_body = this.props.data.body_string_id;\n\n if (!message_body) {\n return null;\n }\n\n return (\n {message_body.map(msg =>

    )}\n
    );\n }\n\n render() {\n if (!this.props.visible) {\n return null;\n }\n\n return (
    \n
    \n
    \n
    \n {this.props.data.icon && }\n {this._renderModalMessage()}\n
    \n
    \n \n \n
    \n
    \n
    );\n }\n}\n\nexport const ConfirmDialog = connect(state => state.Dialog)(_ConfirmDialog);\n","module.exports = ReactRedux;","import {FormattedMessage} from \"react-intl\";\nimport React from \"react\";\n\nexport class ErrorBoundaryFallback extends React.PureComponent {\n constructor(props) {\n super(props);\n this.windowObj = this.props.windowObj || window;\n this.onClick = this.onClick.bind(this);\n }\n\n /**\n * Since we only get here if part of the page has crashed, do a\n * forced reload to give us the best chance at recovering.\n */\n onClick() {\n this.windowObj.location.reload(true);\n }\n\n render() {\n const defaultClass = \"as-error-fallback\";\n let className;\n if (\"className\" in this.props) {\n className = `${this.props.className} ${defaultClass}`;\n } else {\n className = defaultClass;\n }\n\n // href=\"#\" to force normal link styling stuff (eg cursor on hover)\n return (\n
    \n );\n }\n}\nErrorBoundaryFallback.defaultProps = {className: \"as-error-fallback\"};\n\nexport class ErrorBoundary extends React.PureComponent {\n constructor(props) {\n super(props);\n this.state = {hasError: false};\n }\n\n componentDidCatch(error, info) {\n this.setState({hasError: true});\n }\n\n render() {\n if (!this.state.hasError) {\n return (this.props.children);\n }\n\n return ;\n }\n}\n\nErrorBoundary.defaultProps = {FallbackComponent: ErrorBoundaryFallback};\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {connect} from \"react-redux\";\nimport {FormattedMessage} from \"react-intl\";\nimport React from \"react\";\n\n/**\n * Manual migration component used to start the profile import wizard.\n * Message is presented temporarily and will go away if:\n * 1. User clicks \"No Thanks\"\n * 2. User completed the data import\n * 3. After 3 active days\n * 4. User clicks \"Cancel\" on the import wizard (currently not implemented).\n */\nexport class _ManualMigration extends React.PureComponent {\n constructor(props) {\n super(props);\n this.onLaunchTour = this.onLaunchTour.bind(this);\n this.onCancelTour = this.onCancelTour.bind(this);\n }\n\n onLaunchTour() {\n this.props.dispatch(ac.AlsoToMain({type: at.MIGRATION_START}));\n this.props.dispatch(ac.UserEvent({event: at.MIGRATION_START}));\n }\n\n onCancelTour() {\n this.props.dispatch(ac.AlsoToMain({type: at.MIGRATION_CANCEL}));\n this.props.dispatch(ac.UserEvent({event: at.MIGRATION_CANCEL}));\n }\n\n render() {\n return (
    \n

    \n \n \n

    \n
    \n \n \n
    \n
    );\n }\n}\n\nexport const ManualMigration = connect()(_ManualMigration);\n","class _PrerenderData {\n constructor(options) {\n this.initialPrefs = options.initialPrefs;\n this.initialSections = options.initialSections;\n this._setValidation(options.validation);\n }\n\n get validation() {\n return this._validation;\n }\n\n set validation(value) {\n this._setValidation(value);\n }\n\n get invalidatingPrefs() {\n return this._invalidatingPrefs;\n }\n\n // This is needed so we can use it in the constructor\n _setValidation(value = []) {\n this._validation = value;\n this._invalidatingPrefs = value.reduce((result, next) => {\n if (typeof next === \"string\") {\n result.push(next);\n return result;\n } else if (next && next.oneOf) {\n return result.concat(next.oneOf);\n } else if (next && next.indexedDB) {\n return result.concat(next.indexedDB);\n }\n throw new Error(\"Your validation configuration is not properly configured\");\n }, []);\n }\n\n arePrefsValid(getPref, indexedDBPrefs) {\n for (const prefs of this.validation) {\n // {oneOf: [\"foo\", \"bar\"]}\n if (prefs && prefs.oneOf && !prefs.oneOf.some(name => getPref(name) === this.initialPrefs[name])) {\n return false;\n\n // {indexedDB: [\"foo\", \"bar\"]}\n } else if (indexedDBPrefs && prefs && prefs.indexedDB) {\n const anyModifiedPrefs = prefs.indexedDB.some(prefName => indexedDBPrefs.some(pref => pref && pref[prefName]));\n if (anyModifiedPrefs) {\n return false;\n }\n // \"foo\"\n } else if (getPref(prefs) !== this.initialPrefs[prefs]) {\n return false;\n }\n }\n return true;\n }\n}\n\nthis.PrerenderData = new _PrerenderData({\n initialPrefs: {\n \"migrationExpired\": true,\n \"feeds.topsites\": true,\n \"showSearch\": true,\n \"topSitesRows\": 1,\n \"feeds.section.topstories\": true,\n \"feeds.section.highlights\": true,\n \"sectionOrder\": \"topsites,topstories,highlights\",\n \"collapsed\": false\n },\n // Prefs listed as invalidating will prevent the prerendered version\n // of AS from being used if their value is something other than what is listed\n // here. This is required because some preferences cause the page layout to be\n // too different for the prerendered version to be used. Unfortunately, this\n // will result in users who have modified some of their preferences not being\n // able to get the benefits of prerendering.\n validation: [\n \"feeds.topsites\",\n \"showSearch\",\n \"topSitesRows\",\n \"sectionOrder\",\n // This means if either of these are set to their default values,\n // prerendering can be used.\n {oneOf: [\"feeds.section.topstories\", \"feeds.section.highlights\"]},\n // If any component has the following preference set to `true` it will\n // invalidate the prerendered version.\n {indexedDB: [\"collapsed\"]}\n ],\n initialSections: [\n {\n enabled: true,\n icon: \"pocket\",\n id: \"topstories\",\n order: 1,\n title: {id: \"header_recommended_by\", values: {provider: \"Pocket\"}}\n },\n {\n enabled: true,\n id: \"highlights\",\n icon: \"highlights\",\n order: 2,\n title: {id: \"header_highlights\"}\n }\n ]\n});\n\nthis._PrerenderData = _PrerenderData;\nconst EXPORTED_SYMBOLS = [\"PrerenderData\", \"_PrerenderData\"];\n","/* globals ContentSearchUIController */\n\"use strict\";\n\nimport {FormattedMessage, injectIntl} from \"react-intl\";\nimport {actionCreators as ac} from \"common/Actions.jsm\";\nimport {connect} from \"react-redux\";\nimport {IS_NEWTAB} from \"content-src/lib/constants\";\nimport React from \"react\";\n\nexport class _Search extends React.PureComponent {\n constructor(props) {\n super(props);\n this.onClick = this.onClick.bind(this);\n this.onInputMount = this.onInputMount.bind(this);\n }\n\n handleEvent(event) {\n // Also track search events with our own telemetry\n if (event.detail.type === \"Search\") {\n this.props.dispatch(ac.UserEvent({event: \"SEARCH\"}));\n }\n }\n\n onClick(event) {\n window.gContentSearchController.search(event);\n }\n\n componentWillUnmount() {\n delete window.gContentSearchController;\n }\n\n onInputMount(input) {\n if (input) {\n // The \"healthReportKey\" and needs to be \"newtab\" or \"abouthome\" so that\n // BrowserUsageTelemetry.jsm knows to handle events with this name, and\n // can add the appropriate telemetry probes for search. Without the correct\n // name, certain tests like browser_UsageTelemetry_content.js will fail\n // (See github ticket #2348 for more details)\n const healthReportKey = IS_NEWTAB ? \"newtab\" : \"abouthome\";\n\n // The \"searchSource\" needs to be \"newtab\" or \"homepage\" and is sent with\n // the search data and acts as context for the search request (See\n // nsISearchEngine.getSubmission). It is necessary so that search engine\n // plugins can correctly atribute referrals. (See github ticket #3321 for\n // more details)\n const searchSource = IS_NEWTAB ? \"newtab\" : \"homepage\";\n\n // gContentSearchController needs to exist as a global so that tests for\n // the existing about:home can find it; and so it allows these tests to pass.\n // In the future, when activity stream is default about:home, this can be renamed\n window.gContentSearchController = new ContentSearchUIController(input, input.parentNode,\n healthReportKey, searchSource);\n addEventListener(\"ContentSearchClient\", this);\n } else {\n window.gContentSearchController = null;\n removeEventListener(\"ContentSearchClient\", this);\n }\n }\n\n /*\n * Do not change the ID on the input field, as legacy newtab code\n * specifically looks for the id 'newtab-search-text' on input fields\n * in order to execute searches in various tests\n */\n render() {\n return (
    \n
    \n \n \n \n \n \n
    \n
    );\n }\n}\n\nexport const Search = connect()(injectIntl(_Search));\n","export const IS_NEWTAB = global.document && global.document.documentURI === \"about:newtab\";\n","import {Card, PlaceholderCard} from \"content-src/components/Card/Card\";\nimport {FormattedMessage, injectIntl} from \"react-intl\";\nimport {actionCreators as ac} from \"common/Actions.jsm\";\nimport {CollapsibleSection} from \"content-src/components/CollapsibleSection/CollapsibleSection\";\nimport {ComponentPerfTimer} from \"content-src/components/ComponentPerfTimer/ComponentPerfTimer\";\nimport {connect} from \"react-redux\";\nimport React from \"react\";\nimport {Topics} from \"content-src/components/Topics/Topics\";\nimport {TopSites} from \"content-src/components/TopSites/TopSites\";\n\nconst VISIBLE = \"visible\";\nconst VISIBILITY_CHANGE_EVENT = \"visibilitychange\";\nconst CARDS_PER_ROW_DEFAULT = 3;\nconst CARDS_PER_ROW_COMPACT_WIDE = 4;\n\nfunction getFormattedMessage(message) {\n return typeof message === \"string\" ? {message} : ;\n}\n\nexport class Section extends React.PureComponent {\n get numRows() {\n const {rowsPref, maxRows, Prefs} = this.props;\n return rowsPref ? Prefs.values[rowsPref] : maxRows;\n }\n\n _dispatchImpressionStats() {\n const {props} = this;\n let cardsPerRow = CARDS_PER_ROW_DEFAULT;\n if (props.compactCards && global.matchMedia(`(min-width: 1072px)`).matches) {\n // If the section has compact cards and the viewport is wide enough, we show\n // 4 columns instead of 3.\n // $break-point-widest = 1072px (from _variables.scss)\n cardsPerRow = CARDS_PER_ROW_COMPACT_WIDE;\n }\n const maxCards = cardsPerRow * this.numRows;\n const cards = props.rows.slice(0, maxCards);\n\n if (this.needsImpressionStats(cards)) {\n props.dispatch(ac.ImpressionStats({\n source: props.eventSource,\n tiles: cards.map(link => ({id: link.guid}))\n }));\n this.impressionCardGuids = cards.map(link => link.guid);\n }\n }\n\n // This sends an event when a user sees a set of new content. If content\n // changes while the page is hidden (i.e. preloaded or on a hidden tab),\n // only send the event if the page becomes visible again.\n sendImpressionStatsOrAddListener() {\n const {props} = this;\n\n if (!props.shouldSendImpressionStats || !props.dispatch) {\n return;\n }\n\n if (props.document.visibilityState === VISIBLE) {\n this._dispatchImpressionStats();\n } else {\n // We should only ever send the latest impression stats ping, so remove any\n // older listeners.\n if (this._onVisibilityChange) {\n props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n }\n\n // When the page becomes visible, send the impression stats ping if the section isn't collapsed.\n this._onVisibilityChange = () => {\n if (props.document.visibilityState === VISIBLE) {\n if (!this.props.pref.collapsed) {\n this._dispatchImpressionStats();\n }\n props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n }\n };\n props.document.addEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n }\n }\n\n componentDidMount() {\n if (this.props.rows.length && !this.props.pref.collapsed) {\n this.sendImpressionStatsOrAddListener();\n }\n }\n\n componentDidUpdate(prevProps) {\n const {props} = this;\n const isCollapsed = props.pref.collapsed;\n const wasCollapsed = prevProps.pref.collapsed;\n if (\n // Don't send impression stats for the empty state\n props.rows.length &&\n (\n // We only want to send impression stats if the content of the cards has changed\n // and the section is not collapsed...\n (props.rows !== prevProps.rows && !isCollapsed) ||\n // or if we are expanding a section that was collapsed.\n (wasCollapsed && !isCollapsed)\n )\n ) {\n this.sendImpressionStatsOrAddListener();\n }\n }\n\n componentWillUnmount() {\n if (this._onVisibilityChange) {\n this.props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n }\n }\n\n needsImpressionStats(cards) {\n if (!this.impressionCardGuids || (this.impressionCardGuids.length !== cards.length)) {\n return true;\n }\n\n for (let i = 0; i < cards.length; i++) {\n if (cards[i].guid !== this.impressionCardGuids[i]) {\n return true;\n }\n }\n\n return false;\n }\n\n render() {\n const {\n id, eventSource, title, icon, rows,\n emptyState, dispatch, compactCards,\n contextMenuOptions, initialized, disclaimer,\n pref, privacyNoticeURL, isFirst, isLast\n } = this.props;\n\n const maxCardsPerRow = compactCards ? CARDS_PER_ROW_COMPACT_WIDE : CARDS_PER_ROW_DEFAULT;\n const {numRows} = this;\n const maxCards = maxCardsPerRow * numRows;\n const maxCardsOnNarrow = CARDS_PER_ROW_DEFAULT * numRows;\n\n // Show topics only for top stories and if it's not initialized yet (so\n // content doesn't shift when it is loaded) or has loaded with topics\n const shouldShowTopics = (id === \"topstories\" &&\n (!this.props.topics || this.props.topics.length > 0));\n\n const realRows = rows.slice(0, maxCards);\n\n // The empty state should only be shown after we have initialized and there is no content.\n // Otherwise, we should show placeholders.\n const shouldShowEmptyState = initialized && !rows.length;\n\n const cards = [];\n if (!shouldShowEmptyState) {\n for (let i = 0; i < maxCards; i++) {\n const link = realRows[i];\n // On narrow viewports, we only show 3 cards per row. We'll mark the rest as\n // .hide-for-narrow to hide in CSS via @media query.\n const className = (i >= maxCardsOnNarrow) ? \"hide-for-narrow\" : \"\";\n cards.push(link ? (\n \n ) : (\n \n ));\n }\n }\n\n const sectionClassName = [\n \"section\",\n compactCards ? \"compact-cards\" : \"normal-cards\"\n ].join(\" \");\n\n //
    <-- React component\n //
    <-- HTML5 element\n return (\n \n\n {!shouldShowEmptyState && (
      \n {cards}\n
    )}\n {shouldShowEmptyState &&\n
    \n
    \n {emptyState.icon && emptyState.icon.startsWith(\"moz-extension://\") ?\n :\n }\n

    \n {getFormattedMessage(emptyState.message)}\n

    \n
    \n
    }\n {shouldShowTopics && }\n
    \n
    );\n }\n}\n\nSection.defaultProps = {\n document: global.document,\n rows: [],\n emptyState: {},\n pref: {},\n title: \"\"\n};\n\nexport const SectionIntl = connect(state => ({Prefs: state.Prefs}))(injectIntl(Section));\n\nexport class _Sections extends React.PureComponent {\n renderSections() {\n const sections = [];\n const enabledSections = this.props.Sections.filter(section => section.enabled);\n const {sectionOrder, \"feeds.topsites\": showTopSites} = this.props.Prefs.values;\n // Enabled sections doesn't include Top Sites, so we add it if enabled.\n const expectedCount = enabledSections.length + ~~showTopSites;\n\n for (const sectionId of sectionOrder.split(\",\")) {\n const commonProps = {\n key: sectionId,\n isFirst: sections.length === 0,\n isLast: sections.length === expectedCount - 1\n };\n if (sectionId === \"topsites\" && showTopSites) {\n sections.push();\n } else {\n const section = enabledSections.find(s => s.id === sectionId);\n if (section) {\n sections.push();\n }\n }\n }\n return sections;\n }\n\n render() {\n return (\n
    \n {this.renderSections()}\n
    \n );\n }\n}\n\nexport const Sections = connect(state => ({Sections: state.Sections, Prefs: state.Prefs}))(_Sections);\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\n\nconst _OpenInPrivateWindow = site => ({\n id: \"menu_action_open_private_window\",\n icon: \"new-window-private\",\n action: ac.OnlyToMain({\n type: at.OPEN_PRIVATE_WINDOW,\n data: {url: site.url, referrer: site.referrer}\n }),\n userEvent: \"OPEN_PRIVATE_WINDOW\"\n});\n\nexport const GetPlatformString = platform => {\n switch (platform) {\n case \"win\":\n return \"menu_action_show_file_windows\";\n case \"macosx\":\n return \"menu_action_show_file_mac_os\";\n case \"linux\":\n return \"menu_action_show_file_linux\";\n default:\n return \"menu_action_show_file_default\";\n }\n};\n\n/**\n * List of functions that return items that can be included as menu options in a\n * LinkMenu. All functions take the site as the first parameter, and optionally\n * the index of the site.\n */\nexport const LinkMenuOptions = {\n Separator: () => ({type: \"separator\"}),\n EmptyItem: () => ({type: \"empty\"}),\n RemoveBookmark: site => ({\n id: \"menu_action_remove_bookmark\",\n icon: \"bookmark-added\",\n action: ac.AlsoToMain({\n type: at.DELETE_BOOKMARK_BY_ID,\n data: site.bookmarkGuid\n }),\n userEvent: \"BOOKMARK_DELETE\"\n }),\n AddBookmark: site => ({\n id: \"menu_action_bookmark\",\n icon: \"bookmark-hollow\",\n action: ac.AlsoToMain({\n type: at.BOOKMARK_URL,\n data: {url: site.url, title: site.title, type: site.type}\n }),\n userEvent: \"BOOKMARK_ADD\"\n }),\n OpenInNewWindow: site => ({\n id: \"menu_action_open_new_window\",\n icon: \"new-window\",\n action: ac.AlsoToMain({\n type: at.OPEN_NEW_WINDOW,\n data: {\n referrer: site.referrer,\n typedBonus: site.typedBonus,\n url: site.url\n }\n }),\n userEvent: \"OPEN_NEW_WINDOW\"\n }),\n BlockUrl: (site, index, eventSource) => ({\n id: \"menu_action_dismiss\",\n icon: \"dismiss\",\n action: ac.AlsoToMain({\n type: at.BLOCK_URL,\n data: {url: site.open_url || site.url, pocket_id: site.pocket_id}\n }),\n impression: ac.ImpressionStats({\n source: eventSource,\n block: 0,\n tiles: [{id: site.guid, pos: index}]\n }),\n userEvent: \"BLOCK\"\n }),\n\n // This is an option for web extentions which will result in remove items from\n // memory and notify the web extenion, rather than using the built-in block list.\n WebExtDismiss: (site, index, eventSource) => ({\n id: \"menu_action_webext_dismiss\",\n string_id: \"menu_action_dismiss\",\n icon: \"dismiss\",\n action: ac.WebExtEvent(at.WEBEXT_DISMISS, {\n source: eventSource,\n url: site.url,\n action_position: index\n })\n }),\n DeleteUrl: (site, index, eventSource, isEnabled, siteInfo) => ({\n id: \"menu_action_delete\",\n icon: \"delete\",\n action: {\n type: at.DIALOG_OPEN,\n data: {\n onConfirm: [\n ac.AlsoToMain({type: at.DELETE_HISTORY_URL, data: {url: site.url, pocket_id: site.pocket_id, forceBlock: site.bookmarkGuid}}),\n ac.UserEvent(Object.assign({event: \"DELETE\", source: eventSource, action_position: index}, siteInfo))\n ],\n eventSource,\n body_string_id: [\"confirm_history_delete_p1\", \"confirm_history_delete_notice_p2\"],\n confirm_button_string_id: \"menu_action_delete\",\n cancel_button_string_id: \"topsites_form_cancel_button\",\n icon: \"modal-delete\"\n }\n },\n userEvent: \"DIALOG_OPEN\"\n }),\n ShowFile: (site, index, eventSource, isEnabled, siteInfo, platform) => ({\n id: GetPlatformString(platform),\n icon: \"search\",\n action: ac.OnlyToMain({\n type: at.SHOW_DOWNLOAD_FILE,\n data: {url: site.url}\n })\n }),\n OpenFile: site => ({\n id: \"menu_action_open_file\",\n icon: \"open-file\",\n action: ac.OnlyToMain({\n type: at.OPEN_DOWNLOAD_FILE,\n data: {url: site.url}\n })\n }),\n CopyDownloadLink: site => ({\n id: \"menu_action_copy_download_link\",\n icon: \"copy\",\n action: ac.OnlyToMain({\n type: at.COPY_DOWNLOAD_LINK,\n data: {url: site.url}\n })\n }),\n GoToDownloadPage: site => ({\n id: \"menu_action_go_to_download_page\",\n icon: \"download\",\n action: ac.OnlyToMain({\n type: at.OPEN_LINK,\n data: {url: site.referrer}\n }),\n disabled: !site.referrer\n }),\n RemoveDownload: site => ({\n id: \"menu_action_remove_download\",\n icon: \"delete\",\n action: ac.OnlyToMain({\n type: at.REMOVE_DOWNLOAD_FILE,\n data: {url: site.url}\n })\n }),\n PinTopSite: ({url, searchTopSite, label}, index) => ({\n id: \"menu_action_pin\",\n icon: \"pin\",\n action: ac.AlsoToMain({\n type: at.TOP_SITES_PIN,\n data: {\n site: {\n url,\n ...(searchTopSite && {searchTopSite, label})\n },\n index\n }\n }),\n userEvent: \"PIN\"\n }),\n UnpinTopSite: site => ({\n id: \"menu_action_unpin\",\n icon: \"unpin\",\n action: ac.AlsoToMain({\n type: at.TOP_SITES_UNPIN,\n data: {site: {url: site.url}}\n }),\n userEvent: \"UNPIN\"\n }),\n SaveToPocket: (site, index, eventSource) => ({\n id: \"menu_action_save_to_pocket\",\n icon: \"pocket-save\",\n action: ac.AlsoToMain({\n type: at.SAVE_TO_POCKET,\n data: {site: {url: site.url, title: site.title}}\n }),\n impression: ac.ImpressionStats({\n source: eventSource,\n pocket: 0,\n tiles: [{id: site.guid, pos: index}]\n }),\n userEvent: \"SAVE_TO_POCKET\"\n }),\n DeleteFromPocket: site => ({\n id: \"menu_action_delete_pocket\",\n icon: \"delete\",\n action: ac.AlsoToMain({\n type: at.DELETE_FROM_POCKET,\n data: {pocket_id: site.pocket_id}\n }),\n userEvent: \"DELETE_FROM_POCKET\"\n }),\n ArchiveFromPocket: site => ({\n id: \"menu_action_archive_pocket\",\n icon: \"check\",\n action: ac.AlsoToMain({\n type: at.ARCHIVE_FROM_POCKET,\n data: {pocket_id: site.pocket_id}\n }),\n userEvent: \"ARCHIVE_FROM_POCKET\"\n }),\n EditTopSite: (site, index) => ({\n id: \"edit_topsites_button_text\",\n icon: \"edit\",\n action: {\n type: at.TOP_SITES_EDIT,\n data: {index}\n }\n }),\n CheckBookmark: site => (site.bookmarkGuid ? LinkMenuOptions.RemoveBookmark(site) : LinkMenuOptions.AddBookmark(site)),\n CheckPinTopSite: (site, index) => (site.isPinned ? LinkMenuOptions.UnpinTopSite(site) : LinkMenuOptions.PinTopSite(site, index)),\n CheckSavedToPocket: (site, index) => (site.pocket_id ? LinkMenuOptions.DeleteFromPocket(site) : LinkMenuOptions.SaveToPocket(site, index)),\n CheckBookmarkOrArchive: site => (site.pocket_id ? LinkMenuOptions.ArchiveFromPocket(site) : LinkMenuOptions.CheckBookmark(site)),\n OpenInPrivateWindow: (site, index, eventSource, isEnabled) => (isEnabled ? _OpenInPrivateWindow(site) : LinkMenuOptions.EmptyItem())\n};\n","import {actionCreators as ac} from \"common/Actions.jsm\";\nimport {connect} from \"react-redux\";\nimport {ContextMenu} from \"content-src/components/ContextMenu/ContextMenu\";\nimport {injectIntl} from \"react-intl\";\nimport {LinkMenuOptions} from \"content-src/lib/link-menu-options\";\nimport React from \"react\";\n\nconst DEFAULT_SITE_MENU_OPTIONS = [\"CheckPinTopSite\", \"EditTopSite\", \"Separator\", \"OpenInNewWindow\", \"OpenInPrivateWindow\", \"Separator\", \"BlockUrl\"];\n\nexport class _LinkMenu extends React.PureComponent {\n getOptions() {\n const {props} = this;\n const {site, index, source, isPrivateBrowsingEnabled, siteInfo, platform} = props;\n\n // Handle special case of default site\n const propOptions = (!site.isDefault || site.searchTopSite) ? props.options : DEFAULT_SITE_MENU_OPTIONS;\n\n const options = propOptions.map(o => LinkMenuOptions[o](site, index, source, isPrivateBrowsingEnabled, siteInfo, platform)).map(option => {\n const {action, impression, id, string_id, type, userEvent} = option;\n if (!type && id) {\n option.label = props.intl.formatMessage({id: string_id || id});\n option.onClick = () => {\n props.dispatch(action);\n if (userEvent) {\n const userEventData = Object.assign({\n event: userEvent,\n source,\n action_position: index\n }, siteInfo);\n props.dispatch(ac.UserEvent(userEventData));\n }\n if (impression && props.shouldSendImpressionStats) {\n props.dispatch(impression);\n }\n };\n }\n return option;\n });\n\n // This is for accessibility to support making each item tabbable.\n // We want to know which item is the first and which item\n // is the last, so we can close the context menu accordingly.\n options[0].first = true;\n options[options.length - 1].last = true;\n return options;\n }\n\n render() {\n return ();\n }\n}\n\nconst getState = state => ({isPrivateBrowsingEnabled: state.Prefs.values.isPrivateBrowsingEnabled, platform: state.Prefs.values.platform});\nexport const LinkMenu = connect(getState)(injectIntl(_LinkMenu));\n","import React from \"react\";\n\nexport class ContextMenu extends React.PureComponent {\n constructor(props) {\n super(props);\n this.hideContext = this.hideContext.bind(this);\n this.onClick = this.onClick.bind(this);\n }\n\n hideContext() {\n this.props.onUpdate(false);\n }\n\n componentDidMount() {\n setTimeout(() => {\n global.addEventListener(\"click\", this.hideContext);\n }, 0);\n }\n\n componentWillUnmount() {\n global.removeEventListener(\"click\", this.hideContext);\n }\n\n onClick(event) {\n // Eat all clicks on the context menu so they don't bubble up to window.\n // This prevents the context menu from closing when clicking disabled items\n // or the separators.\n event.stopPropagation();\n }\n\n render() {\n return (\n
      \n {this.props.options.map((option, i) => (option.type === \"separator\" ?\n (
    • ) :\n (option.type !== \"empty\" && )\n ))}\n
    \n
    );\n }\n}\n\nexport class ContextMenuItem extends React.PureComponent {\n constructor(props) {\n super(props);\n this.onClick = this.onClick.bind(this);\n this.onKeyDown = this.onKeyDown.bind(this);\n }\n\n onClick() {\n this.props.hideContext();\n this.props.option.onClick();\n }\n\n onKeyDown(event) {\n const {option} = this.props;\n switch (event.key) {\n case \"Tab\":\n // tab goes down in context menu, shift + tab goes up in context menu\n // if we're on the last item, one more tab will close the context menu\n // similarly, if we're on the first item, one more shift + tab will close it\n if ((event.shiftKey && option.first) || (!event.shiftKey && option.last)) {\n this.props.hideContext();\n }\n break;\n case \"Enter\":\n this.props.hideContext();\n option.onClick();\n break;\n }\n }\n\n render() {\n const {option} = this.props;\n return (\n
  • \n \n {option.icon && }\n {option.label}\n \n
  • );\n }\n}\n","/**\n * List of helper functions for screenshot-based images.\n *\n * There are two kinds of images:\n * 1. Remote Image: This is the image from the main process and it refers to\n * the image in the React props. This can either be an object with the `data`\n * and `path` properties, if it is a blob, or a string, if it is a normal image.\n * 2. Local Image: This is the image object in the content process and it refers\n * to the image *object* in the React component's state. All local image\n * objects have the `url` property, and an additional property `path`, if they\n * are blobs.\n */\nexport const ScreenshotUtils = {\n isBlob(isLocal, image) {\n return !!(image && image.path && ((!isLocal && image.data) || (isLocal && image.url)));\n },\n\n // This should always be called with a remote image and not a local image.\n createLocalImageObject(remoteImage) {\n if (!remoteImage) {\n return null;\n }\n if (this.isBlob(false, remoteImage)) {\n return {url: global.URL.createObjectURL(remoteImage.data), path: remoteImage.path};\n }\n return {url: remoteImage};\n },\n\n // Revokes the object URL of the image if the local image is a blob.\n // This should always be called with a local image and not a remote image.\n maybeRevokeBlobObjectURL(localImage) {\n if (this.isBlob(true, localImage)) {\n global.URL.revokeObjectURL(localImage.url);\n }\n },\n\n // Checks if remoteImage and localImage are the same.\n isRemoteImageLocal(localImage, remoteImage) {\n // Both remoteImage and localImage are present.\n if (remoteImage && localImage) {\n return this.isBlob(false, remoteImage) ?\n localImage.path === remoteImage.path :\n localImage.url === remoteImage;\n }\n\n // This will only handle the remaining three possible outcomes.\n // (i.e. everything except when both image and localImage are present)\n return !remoteImage && !localImage;\n }\n};\n","import {FormattedMessage, injectIntl} from \"react-intl\";\nimport {actionCreators as ac} from \"common/Actions.jsm\";\nimport {ErrorBoundary} from \"content-src/components/ErrorBoundary/ErrorBoundary\";\nimport React from \"react\";\nimport {SectionMenu} from \"content-src/components/SectionMenu/SectionMenu\";\nimport {SectionMenuOptions} from \"content-src/lib/section-menu-options\";\n\nconst VISIBLE = \"visible\";\nconst VISIBILITY_CHANGE_EVENT = \"visibilitychange\";\n\nfunction getFormattedMessage(message) {\n return typeof message === \"string\" ? {message} : ;\n}\n\nexport class Disclaimer extends React.PureComponent {\n constructor(props) {\n super(props);\n this.onAcknowledge = this.onAcknowledge.bind(this);\n }\n\n onAcknowledge() {\n this.props.dispatch(ac.SetPref(this.props.disclaimerPref, false));\n this.props.dispatch(ac.UserEvent({event: \"DISCLAIMER_ACKED\", source: this.props.eventSource}));\n }\n\n render() {\n const {disclaimer} = this.props;\n return (\n
    \n
    \n {getFormattedMessage(disclaimer.text)}\n {disclaimer.link &&\n \n {getFormattedMessage(disclaimer.link.title || disclaimer.link)}\n \n }\n
    \n\n \n
    \n );\n }\n}\n\nexport const DisclaimerIntl = injectIntl(Disclaimer);\n\nexport class _CollapsibleSection extends React.PureComponent {\n constructor(props) {\n super(props);\n this.onBodyMount = this.onBodyMount.bind(this);\n this.onHeaderClick = this.onHeaderClick.bind(this);\n this.onTransitionEnd = this.onTransitionEnd.bind(this);\n this.enableOrDisableAnimation = this.enableOrDisableAnimation.bind(this);\n this.onMenuButtonClick = this.onMenuButtonClick.bind(this);\n this.onMenuButtonMouseEnter = this.onMenuButtonMouseEnter.bind(this);\n this.onMenuButtonMouseLeave = this.onMenuButtonMouseLeave.bind(this);\n this.onMenuUpdate = this.onMenuUpdate.bind(this);\n this.state = {enableAnimation: true, isAnimating: false, menuButtonHover: false, showContextMenu: false};\n }\n\n componentWillMount() {\n this.props.document.addEventListener(VISIBILITY_CHANGE_EVENT, this.enableOrDisableAnimation);\n }\n\n componentWillUpdate(nextProps) {\n // Check if we're about to go from expanded to collapsed\n if (!this.props.collapsed && nextProps.collapsed) {\n // This next line forces a layout flush of the section body, which has a\n // max-height style set, so that the upcoming collapse animation can\n // animate from that height to the collapsed height. Without this, the\n // update is coalesced and there's no animation from no-max-height to 0.\n this.sectionBody.scrollHeight; // eslint-disable-line no-unused-expressions\n }\n }\n\n componentWillUnmount() {\n this.props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this.enableOrDisableAnimation);\n }\n\n enableOrDisableAnimation() {\n // Only animate the collapse/expand for visible tabs.\n const visible = this.props.document.visibilityState === VISIBLE;\n if (this.state.enableAnimation !== visible) {\n this.setState({enableAnimation: visible});\n }\n }\n\n onBodyMount(node) {\n this.sectionBody = node;\n }\n\n onHeaderClick() {\n // If this.sectionBody is unset, it means that we're in some sort of error\n // state, probably displaying the error fallback, so we won't be able to\n // compute the height, and we don't want to persist the preference.\n // If props.collapsed is undefined handler shouldn't do anything.\n if (!this.sectionBody || this.props.collapsed === undefined) {\n return;\n }\n\n // Get the current height of the body so max-height transitions can work\n this.setState({\n isAnimating: true,\n maxHeight: `${this.sectionBody.scrollHeight}px`\n });\n const {action, userEvent} = SectionMenuOptions.CheckCollapsed(this.props);\n this.props.dispatch(action);\n this.props.dispatch(ac.UserEvent({\n event: userEvent,\n source: this.props.source\n }));\n }\n\n onTransitionEnd(event) {\n // Only update the animating state for our own transition (not a child's)\n if (event.target === event.currentTarget) {\n this.setState({isAnimating: false});\n }\n }\n\n renderIcon() {\n const {icon} = this.props;\n if (icon && icon.startsWith(\"moz-extension://\")) {\n return ;\n }\n return ;\n }\n\n onMenuButtonClick(event) {\n event.preventDefault();\n this.setState({showContextMenu: true});\n }\n\n onMenuButtonMouseEnter() {\n this.setState({menuButtonHover: true});\n }\n\n onMenuButtonMouseLeave() {\n this.setState({menuButtonHover: false});\n }\n\n onMenuUpdate(showContextMenu) {\n this.setState({showContextMenu});\n }\n\n render() {\n const isCollapsible = this.props.collapsed !== undefined;\n const {enableAnimation, isAnimating, maxHeight, menuButtonHover, showContextMenu} = this.state;\n const {id, eventSource, collapsed, disclaimer, title, extraMenuOptions, showPrefName, privacyNoticeURL, dispatch, isFirst, isLast, isWebExtension} = this.props;\n const disclaimerPref = `section.${id}.showDisclaimer`;\n const needsDisclaimer = disclaimer && this.props.Prefs.values[disclaimerPref];\n const active = menuButtonHover || showContextMenu;\n return (\n \n
    \n

    \n \n {this.renderIcon()}\n {getFormattedMessage(title)}\n {isCollapsible && }\n \n

    \n
    \n \n \n \n \n \n {showContextMenu &&\n \n }\n
    \n
    \n \n \n {needsDisclaimer && }\n {this.props.children}\n
    \n \n \n );\n }\n}\n\n_CollapsibleSection.defaultProps = {\n document: global.document || {\n addEventListener: () => {},\n removeEventListener: () => {},\n visibilityState: \"hidden\"\n },\n Prefs: {values: {}}\n};\n\nexport const CollapsibleSection = injectIntl(_CollapsibleSection);\n","import {actionCreators as ac} from \"common/Actions.jsm\";\nimport {ContextMenu} from \"content-src/components/ContextMenu/ContextMenu\";\nimport {injectIntl} from \"react-intl\";\nimport React from \"react\";\nimport {SectionMenuOptions} from \"content-src/lib/section-menu-options\";\n\nconst DEFAULT_SECTION_MENU_OPTIONS = [\"MoveUp\", \"MoveDown\", \"Separator\", \"RemoveSection\", \"CheckCollapsed\", \"Separator\", \"ManageSection\"];\nconst WEBEXT_SECTION_MENU_OPTIONS = [\"MoveUp\", \"MoveDown\", \"Separator\", \"CheckCollapsed\", \"Separator\", \"ManageWebExtension\"];\n\nexport class _SectionMenu extends React.PureComponent {\n getOptions() {\n const {props} = this;\n\n const propOptions = props.isWebExtension ? [...WEBEXT_SECTION_MENU_OPTIONS] : [...DEFAULT_SECTION_MENU_OPTIONS];\n // Prepend custom options and a separator\n if (props.extraOptions) {\n propOptions.splice(0, 0, ...props.extraOptions, \"Separator\");\n }\n // Insert privacy notice before the last option (\"ManageSection\")\n if (props.privacyNoticeURL) {\n propOptions.splice(-1, 0, \"PrivacyNotice\");\n }\n\n const options = propOptions.map(o => SectionMenuOptions[o](props)).map(option => {\n const {action, id, type, userEvent} = option;\n if (!type && id) {\n option.label = props.intl.formatMessage({id});\n option.onClick = () => {\n props.dispatch(action);\n if (userEvent) {\n props.dispatch(ac.UserEvent({\n event: userEvent,\n source: props.source\n }));\n }\n };\n }\n return option;\n });\n\n // This is for accessibility to support making each item tabbable.\n // We want to know which item is the first and which item\n // is the last, so we can close the context menu accordingly.\n options[0].first = true;\n options[options.length - 1].last = true;\n return options;\n }\n\n render() {\n return ();\n }\n}\n\nexport const SectionMenu = injectIntl(_SectionMenu);\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\n\n/**\n * List of functions that return items that can be included as menu options in a\n * SectionMenu. All functions take the section as the only parameter.\n */\nexport const SectionMenuOptions = {\n Separator: () => ({type: \"separator\"}),\n MoveUp: section => ({\n id: \"section_menu_action_move_up\",\n icon: \"arrowhead-up\",\n action: ac.OnlyToMain({\n type: at.SECTION_MOVE,\n data: {id: section.id, direction: -1}\n }),\n userEvent: \"MENU_MOVE_UP\",\n disabled: !!section.isFirst\n }),\n MoveDown: section => ({\n id: \"section_menu_action_move_down\",\n icon: \"arrowhead-down\",\n action: ac.OnlyToMain({\n type: at.SECTION_MOVE,\n data: {id: section.id, direction: +1}\n }),\n userEvent: \"MENU_MOVE_DOWN\",\n disabled: !!section.isLast\n }),\n RemoveSection: section => ({\n id: \"section_menu_action_remove_section\",\n icon: \"dismiss\",\n action: ac.SetPref(section.showPrefName, false),\n userEvent: \"MENU_REMOVE\"\n }),\n CollapseSection: section => ({\n id: \"section_menu_action_collapse_section\",\n icon: \"minimize\",\n action: ac.OnlyToMain({type: at.UPDATE_SECTION_PREFS, data: {id: section.id, value: {collapsed: true}}}),\n userEvent: \"MENU_COLLAPSE\"\n }),\n ExpandSection: section => ({\n id: \"section_menu_action_expand_section\",\n icon: \"maximize\",\n action: ac.OnlyToMain({type: at.UPDATE_SECTION_PREFS, data: {id: section.id, value: {collapsed: false}}}),\n userEvent: \"MENU_EXPAND\"\n }),\n ManageSection: section => ({\n id: \"section_menu_action_manage_section\",\n icon: \"settings\",\n action: ac.OnlyToMain({type: at.SETTINGS_OPEN}),\n userEvent: \"MENU_MANAGE\"\n }),\n ManageWebExtension: section => ({\n id: \"section_menu_action_manage_webext\",\n icon: \"settings\",\n action: ac.OnlyToMain({type: at.OPEN_WEBEXT_SETTINGS, data: section.id})\n }),\n AddTopSite: section => ({\n id: \"section_menu_action_add_topsite\",\n icon: \"add\",\n action: {type: at.TOP_SITES_EDIT, data: {index: -1}},\n userEvent: \"MENU_ADD_TOPSITE\"\n }),\n AddSearchShortcut: section => ({\n id: \"section_menu_action_add_search_engine\",\n icon: \"search\",\n action: {type: at.TOP_SITES_OPEN_SEARCH_SHORTCUTS_MODAL},\n userEvent: \"MENU_ADD_SEARCH\"\n }),\n PrivacyNotice: section => ({\n id: \"section_menu_action_privacy_notice\",\n icon: \"info\",\n action: ac.OnlyToMain({\n type: at.OPEN_LINK,\n data: {url: section.privacyNoticeURL}\n }),\n userEvent: \"MENU_PRIVACY_NOTICE\"\n }),\n CheckCollapsed: section => (section.collapsed ? SectionMenuOptions.ExpandSection(section) : SectionMenuOptions.CollapseSection(section))\n};\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {perfService as perfSvc} from \"common/PerfService.jsm\";\nimport React from \"react\";\n\n// Currently record only a fixed set of sections. This will prevent data\n// from custom sections from showing up or from topstories.\nconst RECORDED_SECTIONS = [\"highlights\", \"topsites\"];\n\nexport class ComponentPerfTimer extends React.Component {\n constructor(props) {\n super(props);\n // Just for test dependency injection:\n this.perfSvc = this.props.perfSvc || perfSvc;\n\n this._sendBadStateEvent = this._sendBadStateEvent.bind(this);\n this._sendPaintedEvent = this._sendPaintedEvent.bind(this);\n this._reportMissingData = false;\n this._timestampHandled = false;\n this._recordedFirstRender = false;\n }\n\n componentDidMount() {\n if (!RECORDED_SECTIONS.includes(this.props.id)) {\n return;\n }\n\n this._maybeSendPaintedEvent();\n }\n\n componentDidUpdate() {\n if (!RECORDED_SECTIONS.includes(this.props.id)) {\n return;\n }\n\n this._maybeSendPaintedEvent();\n }\n\n /**\n * Call the given callback after the upcoming frame paints.\n *\n * @note Both setTimeout and requestAnimationFrame are throttled when the page\n * is hidden, so this callback may get called up to a second or so after the\n * requestAnimationFrame \"paint\" for hidden tabs.\n *\n * Newtabs hidden while loading will presumably be fairly rare (other than\n * preloaded tabs, which we will be filtering out on the server side), so such\n * cases should get lost in the noise.\n *\n * If we decide that it's important to find out when something that's hidden\n * has \"painted\", however, another option is to post a message to this window.\n * That should happen even faster than setTimeout, and, at least as of this\n * writing, it's not throttled in hidden windows in Firefox.\n *\n * @param {Function} callback\n *\n * @returns void\n */\n _afterFramePaint(callback) {\n requestAnimationFrame(() => setTimeout(callback, 0));\n }\n\n _maybeSendBadStateEvent() {\n // Follow up bugs:\n // https://github.com/mozilla/activity-stream/issues/3691\n if (!this.props.initialized) {\n // Remember to report back when data is available.\n this._reportMissingData = true;\n } else if (this._reportMissingData) {\n this._reportMissingData = false;\n // Report how long it took for component to become initialized.\n this._sendBadStateEvent();\n }\n }\n\n _maybeSendPaintedEvent() {\n // If we've already handled a timestamp, don't do it again.\n if (this._timestampHandled || !this.props.initialized) {\n return;\n }\n\n // And if we haven't, we're doing so now, so remember that. Even if\n // something goes wrong in the callback, we can't try again, as we'd be\n // sending back the wrong data, and we have to do it here, so that other\n // calls to this method while waiting for the next frame won't also try to\n // handle it.\n this._timestampHandled = true;\n this._afterFramePaint(this._sendPaintedEvent);\n }\n\n /**\n * Triggered by call to render. Only first call goes through due to\n * `_recordedFirstRender`.\n */\n _ensureFirstRenderTsRecorded() {\n // Used as t0 for recording how long component took to initialize.\n if (!this._recordedFirstRender) {\n this._recordedFirstRender = true;\n // topsites_first_render_ts, highlights_first_render_ts.\n const key = `${this.props.id}_first_render_ts`;\n this.perfSvc.mark(key);\n }\n }\n\n /**\n * Creates `TELEMETRY_UNDESIRED_EVENT` with timestamp in ms\n * of how much longer the data took to be ready for display than it would\n * have been the ideal case.\n * https://github.com/mozilla/ping-centre/issues/98\n */\n _sendBadStateEvent() {\n // highlights_data_ready_ts, topsites_data_ready_ts.\n const dataReadyKey = `${this.props.id}_data_ready_ts`;\n this.perfSvc.mark(dataReadyKey);\n\n try {\n const firstRenderKey = `${this.props.id}_first_render_ts`;\n // value has to be Int32.\n const value = parseInt(this.perfSvc.getMostRecentAbsMarkStartByName(dataReadyKey) -\n this.perfSvc.getMostRecentAbsMarkStartByName(firstRenderKey), 10);\n this.props.dispatch(ac.OnlyToMain({\n type: at.SAVE_SESSION_PERF_DATA,\n // highlights_data_late_by_ms, topsites_data_late_by_ms.\n data: {[`${this.props.id}_data_late_by_ms`]: value}\n }));\n } catch (ex) {\n // If this failed, it's likely because the `privacy.resistFingerprinting`\n // pref is true.\n }\n }\n\n _sendPaintedEvent() {\n // Record first_painted event but only send if topsites.\n if (this.props.id !== \"topsites\") {\n return;\n }\n\n // topsites_first_painted_ts.\n const key = `${this.props.id}_first_painted_ts`;\n this.perfSvc.mark(key);\n\n try {\n const data = {};\n data[key] = this.perfSvc.getMostRecentAbsMarkStartByName(key);\n\n this.props.dispatch(ac.OnlyToMain({\n type: at.SAVE_SESSION_PERF_DATA,\n data\n }));\n } catch (ex) {\n // If this failed, it's likely because the `privacy.resistFingerprinting`\n // pref is true. We should at least not blow up, and should continue\n // to set this._timestampHandled to avoid going through this again.\n }\n }\n\n render() {\n if (RECORDED_SECTIONS.includes(this.props.id)) {\n this._ensureFirstRenderTsRecorded();\n this._maybeSendBadStateEvent();\n }\n return this.props.children;\n }\n}\n","/* globals Services */\n\"use strict\";\n\n/* istanbul ignore if */\nif (typeof ChromeUtils !== \"undefined\") {\n ChromeUtils.import(\"resource://gre/modules/Services.jsm\");\n}\n\nlet usablePerfObj;\n\n/* istanbul ignore if */\n/* istanbul ignore else */\nif (typeof Services !== \"undefined\") {\n // Borrow the high-resolution timer from the hidden window....\n usablePerfObj = Services.appShell.hiddenDOMWindow.performance;\n} else if (typeof performance !== \"undefined\") {\n // we must be running in content space\n // eslint-disable-next-line no-undef\n usablePerfObj = performance;\n} else {\n // This is a dummy object so this file doesn't crash in the node prerendering\n // task.\n usablePerfObj = {\n now() {},\n mark() {}\n };\n}\n\nfunction _PerfService(options) {\n // For testing, so that we can use a fake Window.performance object with\n // known state.\n if (options && options.performanceObj) {\n this._perf = options.performanceObj;\n } else {\n this._perf = usablePerfObj;\n }\n}\n\n_PerfService.prototype = {\n /**\n * Calls the underlying mark() method on the appropriate Window.performance\n * object to add a mark with the given name to the appropriate performance\n * timeline.\n *\n * @param {String} name the name to give the current mark\n * @return {void}\n */\n mark: function mark(str) {\n this._perf.mark(str);\n },\n\n /**\n * Calls the underlying getEntriesByName on the appropriate Window.performance\n * object.\n *\n * @param {String} name\n * @param {String} type eg \"mark\"\n * @return {Array} Performance* objects\n */\n getEntriesByName: function getEntriesByName(name, type) {\n return this._perf.getEntriesByName(name, type);\n },\n\n /**\n * The timeOrigin property from the appropriate performance object.\n * Used to ensure that timestamps from the add-on code and the content code\n * are comparable.\n *\n * @note If this is called from a context without a window\n * (eg a JSM in chrome), it will return the timeOrigin of the XUL hidden\n * window, which appears to be the first created window (and thus\n * timeOrigin) in the browser. Note also, however, there is also a private\n * hidden window, presumably for private browsing, which appears to be\n * created dynamically later. Exactly how/when that shows up needs to be\n * investigated.\n *\n * @return {Number} A double of milliseconds with a precision of 0.5us.\n */\n get timeOrigin() {\n return this._perf.timeOrigin;\n },\n\n /**\n * Returns the \"absolute\" version of performance.now(), i.e. one that\n * should ([bug 1401406](https://bugzilla.mozilla.org/show_bug.cgi?id=1401406)\n * be comparable across both chrome and content.\n *\n * @return {Number}\n */\n absNow: function absNow() {\n return this.timeOrigin + this._perf.now();\n },\n\n /**\n * This returns the absolute startTime from the most recent performance.mark()\n * with the given name.\n *\n * @param {String} name the name to lookup the start time for\n *\n * @return {Number} the returned start time, as a DOMHighResTimeStamp\n *\n * @throws {Error} \"No Marks with the name ...\" if none are available\n *\n * @note Always surround calls to this by try/catch. Otherwise your code\n * may fail when the `privacy.resistFingerprinting` pref is true. When\n * this pref is set, all attempts to get marks will likely fail, which will\n * cause this method to throw.\n *\n * See [bug 1369303](https://bugzilla.mozilla.org/show_bug.cgi?id=1369303)\n * for more info.\n */\n getMostRecentAbsMarkStartByName(name) {\n let entries = this.getEntriesByName(name, \"mark\");\n\n if (!entries.length) {\n throw new Error(`No marks with the name ${name}`);\n }\n\n let mostRecentEntry = entries[entries.length - 1];\n return this._perf.timeOrigin + mostRecentEntry.startTime;\n }\n};\n\nthis.perfService = new _PerfService();\nconst EXPORTED_SYMBOLS = [\"_PerfService\", \"perfService\"];\n","import {FormattedMessage} from \"react-intl\";\nimport React from \"react\";\n\nexport class Topic extends React.PureComponent {\n render() {\n const {url, name} = this.props;\n return (
  • {name}
  • );\n }\n}\n\nexport class Topics extends React.PureComponent {\n render() {\n const {topics, read_more_endpoint} = this.props;\n return (\n
    \n \n
      {topics && topics.map(t => )}
    \n\n {read_more_endpoint && \n \n }\n
    \n );\n }\n}\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {MIN_CORNER_FAVICON_SIZE, MIN_RICH_FAVICON_SIZE, TOP_SITES_SOURCE} from \"./TopSitesConstants\";\nimport {CollapsibleSection} from \"content-src/components/CollapsibleSection/CollapsibleSection\";\nimport {ComponentPerfTimer} from \"content-src/components/ComponentPerfTimer/ComponentPerfTimer\";\nimport {connect} from \"react-redux\";\nimport {injectIntl} from \"react-intl\";\nimport React from \"react\";\nimport {SearchShortcutsForm} from \"./SearchShortcutsForm\";\nimport {TOP_SITES_MAX_SITES_PER_ROW} from \"common/Reducers.jsm\";\nimport {TopSiteForm} from \"./TopSiteForm\";\nimport {TopSiteList} from \"./TopSite\";\n\nfunction topSiteIconType(link) {\n if (link.customScreenshotURL) {\n return \"custom_screenshot\";\n }\n if (link.tippyTopIcon || link.faviconRef === \"tippytop\") {\n return \"tippytop\";\n }\n if (link.faviconSize >= MIN_RICH_FAVICON_SIZE) {\n return \"rich_icon\";\n }\n if (link.screenshot && link.faviconSize >= MIN_CORNER_FAVICON_SIZE) {\n return \"screenshot_with_icon\";\n }\n if (link.screenshot) {\n return \"screenshot\";\n }\n return \"no_image\";\n}\n\n/**\n * Iterates through TopSites and counts types of images.\n * @param acc Accumulator for reducer.\n * @param topsite Entry in TopSites.\n */\nfunction countTopSitesIconsTypes(topSites) {\n const countTopSitesTypes = (acc, link) => {\n acc[topSiteIconType(link)]++;\n return acc;\n };\n\n return topSites.reduce(countTopSitesTypes, {\n \"custom_screenshot\": 0,\n \"screenshot_with_icon\": 0,\n \"screenshot\": 0,\n \"tippytop\": 0,\n \"rich_icon\": 0,\n \"no_image\": 0\n });\n}\n\nexport class _TopSites extends React.PureComponent {\n constructor(props) {\n super(props);\n this.onEditFormClose = this.onEditFormClose.bind(this);\n this.onSearchShortcutsFormClose = this.onSearchShortcutsFormClose.bind(this);\n }\n\n /**\n * Dispatch session statistics about the quality of TopSites icons and pinned count.\n */\n _dispatchTopSitesStats() {\n const topSites = this._getVisibleTopSites();\n const topSitesIconsStats = countTopSitesIconsTypes(topSites);\n const topSitesPinned = topSites.filter(site => !!site.isPinned).length;\n // Dispatch telemetry event with the count of TopSites images types.\n this.props.dispatch(ac.AlsoToMain({\n type: at.SAVE_SESSION_PERF_DATA,\n data: {topsites_icon_stats: topSitesIconsStats, topsites_pinned: topSitesPinned}\n }));\n }\n\n /**\n * Return the TopSites that are visible based on prefs and window width.\n */\n _getVisibleTopSites() {\n // We hide 2 sites per row when not in the wide layout.\n let sitesPerRow = TOP_SITES_MAX_SITES_PER_ROW;\n // $break-point-widest = 1072px (from _variables.scss)\n if (!global.matchMedia(`(min-width: 1072px)`).matches) {\n sitesPerRow -= 2;\n }\n return this.props.TopSites.rows.slice(0, this.props.TopSitesRows * sitesPerRow);\n }\n\n componentDidUpdate() {\n this._dispatchTopSitesStats();\n }\n\n componentDidMount() {\n this._dispatchTopSitesStats();\n }\n\n onEditFormClose() {\n this.props.dispatch(ac.UserEvent({\n source: TOP_SITES_SOURCE,\n event: \"TOP_SITES_EDIT_CLOSE\"\n }));\n this.props.dispatch({type: at.TOP_SITES_CANCEL_EDIT});\n }\n\n onSearchShortcutsFormClose() {\n this.props.dispatch(ac.UserEvent({\n source: TOP_SITES_SOURCE,\n event: \"SEARCH_EDIT_CLOSE\"\n }));\n this.props.dispatch({type: at.TOP_SITES_CLOSE_SEARCH_SHORTCUTS_MODAL});\n }\n\n render() {\n const {props} = this;\n const {editForm, showSearchShortcutsForm} = props.TopSites;\n const extraMenuOptions = [\"AddTopSite\"];\n if (props.Prefs.values[\"improvesearch.topSiteSearchShortcuts\"]) {\n extraMenuOptions.push(\"AddSearchShortcut\");\n }\n\n return (\n \n \n
    \n {editForm &&\n
    \n
    \n
    \n \n
    \n
    \n }\n {showSearchShortcutsForm &&\n
    \n
    \n
    \n \n
    \n
    \n }\n
    \n \n );\n }\n}\n\nexport const TopSites = connect(state => ({\n TopSites: state.TopSites,\n Prefs: state.Prefs,\n TopSitesRows: state.Prefs.values.topSitesRows\n}))(injectIntl(_TopSites));\n","export const TOP_SITES_SOURCE = \"TOP_SITES\";\nexport const TOP_SITES_CONTEXT_MENU_OPTIONS = [\"CheckPinTopSite\", \"EditTopSite\", \"Separator\",\n \"OpenInNewWindow\", \"OpenInPrivateWindow\", \"Separator\", \"BlockUrl\", \"DeleteUrl\"];\n// the special top site for search shortcut experiment can only have the option to unpin (which removes) the topsite\nexport const TOP_SITES_SEARCH_SHORTCUTS_CONTEXT_MENU_OPTIONS = [\"CheckPinTopSite\", \"Separator\", \"BlockUrl\"];\n// minimum size necessary to show a rich icon instead of a screenshot\nexport const MIN_RICH_FAVICON_SIZE = 96;\n// minimum size necessary to show any icon in the top left corner with a screenshot\nexport const MIN_CORNER_FAVICON_SIZE = 16;\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {FormattedMessage} from \"react-intl\";\nimport React from \"react\";\n\nclass SelectableSearchShortcut extends React.PureComponent {\n render() {\n const {shortcut, selected} = this.props;\n const imageStyle = {backgroundImage: `url(\"${shortcut.tippyTopIcon}\")`};\n return (\n
    \n \n
    \n
    \n
    \n );\n }\n}\n\nconst getState = state => ({fxa_endpoint: state.Prefs.values.fxa_endpoint});\nexport const StartupOverlay = connect(getState)(injectIntl(_StartupOverlay));\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {perfService as perfSvc} from \"common/PerfService.jsm\";\n\nconst VISIBLE = \"visible\";\nconst VISIBILITY_CHANGE_EVENT = \"visibilitychange\";\n\nexport class DetectUserSessionStart {\n constructor(store, options = {}) {\n this._store = store;\n // Overrides for testing\n this.document = options.document || global.document;\n this._perfService = options.perfService || perfSvc;\n this._onVisibilityChange = this._onVisibilityChange.bind(this);\n }\n\n /**\n * sendEventOrAddListener - Notify immediately if the page is already visible,\n * or else set up a listener for when visibility changes.\n * This is needed for accurate session tracking for telemetry,\n * because tabs are pre-loaded.\n */\n sendEventOrAddListener() {\n if (this.document.visibilityState === VISIBLE) {\n // If the document is already visible, to the user, send a notification\n // immediately that a session has started.\n this._sendEvent();\n } else {\n // If the document is not visible, listen for when it does become visible.\n this.document.addEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n }\n }\n\n /**\n * _sendEvent - Sends a message to the main process to indicate the current\n * tab is now visible to the user, includes the\n * visibility_event_rcvd_ts time in ms from the UNIX epoch.\n */\n _sendEvent() {\n this._perfService.mark(\"visibility_event_rcvd_ts\");\n\n try {\n let visibility_event_rcvd_ts = this._perfService\n .getMostRecentAbsMarkStartByName(\"visibility_event_rcvd_ts\");\n\n this._store.dispatch(ac.AlsoToMain({\n type: at.SAVE_SESSION_PERF_DATA,\n data: {visibility_event_rcvd_ts}\n }));\n } catch (ex) {\n // If this failed, it's likely because the `privacy.resistFingerprinting`\n // pref is true. We should at least not blow up.\n }\n }\n\n /**\n * _onVisibilityChange - If the visibility has changed to visible, sends a notification\n * and removes the event listener. This should only be called once per tab.\n */\n _onVisibilityChange() {\n if (this.document.visibilityState === VISIBLE) {\n this._sendEvent();\n this.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n }\n }\n}\n","/* eslint no-magic-numbers: [0] */\n\nconst MAX_PLACEABLES = 100;\n\nconst entryIdentifierRe = /-?[a-zA-Z][a-zA-Z0-9_-]*/y;\nconst identifierRe = /[a-zA-Z][a-zA-Z0-9_-]*/y;\nconst functionIdentifierRe = /^[A-Z][A-Z_?-]*$/;\n\n/**\n * The `Parser` class is responsible for parsing FTL resources.\n *\n * It's only public method is `getResource(source)` which takes an FTL string\n * and returns a two element Array with an Object of entries generated from the\n * source as the first element and an array of SyntaxError objects as the\n * second.\n *\n * This parser is optimized for runtime performance.\n *\n * There is an equivalent of this parser in syntax/parser which is\n * generating full AST which is useful for FTL tools.\n */\nclass RuntimeParser {\n /**\n * Parse FTL code into entries formattable by the MessageContext.\n *\n * Given a string of FTL syntax, return a map of entries that can be passed\n * to MessageContext.format and a list of errors encountered during parsing.\n *\n * @param {String} string\n * @returns {Array}\n */\n getResource(string) {\n this._source = string;\n this._index = 0;\n this._length = string.length;\n this.entries = {};\n\n const errors = [];\n\n this.skipWS();\n while (this._index < this._length) {\n try {\n this.getEntry();\n } catch (e) {\n if (e instanceof SyntaxError) {\n errors.push(e);\n\n this.skipToNextEntryStart();\n } else {\n throw e;\n }\n }\n this.skipWS();\n }\n\n return [this.entries, errors];\n }\n\n /**\n * Parse the source string from the current index as an FTL entry\n * and add it to object's entries property.\n *\n * @private\n */\n getEntry() {\n // The index here should either be at the beginning of the file\n // or right after new line.\n if (this._index !== 0 &&\n this._source[this._index - 1] !== \"\\n\") {\n throw this.error(`Expected an entry to start\n at the beginning of the file or on a new line.`);\n }\n\n const ch = this._source[this._index];\n\n // We don't care about comments or sections at runtime\n if (ch === \"/\" ||\n (ch === \"#\" &&\n [\" \", \"#\", \"\\n\"].includes(this._source[this._index + 1]))) {\n this.skipComment();\n return;\n }\n\n if (ch === \"[\") {\n this.skipSection();\n return;\n }\n\n this.getMessage();\n }\n\n /**\n * Skip the section entry from the current index.\n *\n * @private\n */\n skipSection() {\n this._index += 1;\n if (this._source[this._index] !== \"[\") {\n throw this.error('Expected \"[[\" to open a section');\n }\n\n this._index += 1;\n\n this.skipInlineWS();\n this.getVariantName();\n this.skipInlineWS();\n\n if (this._source[this._index] !== \"]\" ||\n this._source[this._index + 1] !== \"]\") {\n throw this.error('Expected \"]]\" to close a section');\n }\n\n this._index += 2;\n }\n\n /**\n * Parse the source string from the current index as an FTL message\n * and add it to the entries property on the Parser.\n *\n * @private\n */\n getMessage() {\n const id = this.getEntryIdentifier();\n\n this.skipInlineWS();\n\n if (this._source[this._index] === \"=\") {\n this._index++;\n }\n\n this.skipInlineWS();\n\n const val = this.getPattern();\n\n if (id.startsWith(\"-\") && val === null) {\n throw this.error(\"Expected term to have a value\");\n }\n\n let attrs = null;\n\n if (this._source[this._index] === \" \") {\n const lineStart = this._index;\n this.skipInlineWS();\n\n if (this._source[this._index] === \".\") {\n this._index = lineStart;\n attrs = this.getAttributes();\n }\n }\n\n if (attrs === null && typeof val === \"string\") {\n this.entries[id] = val;\n } else {\n if (val === null && attrs === null) {\n throw this.error(\"Expected message to have a value or attributes\");\n }\n\n this.entries[id] = {};\n\n if (val !== null) {\n this.entries[id].val = val;\n }\n\n if (attrs !== null) {\n this.entries[id].attrs = attrs;\n }\n }\n }\n\n /**\n * Skip whitespace.\n *\n * @private\n */\n skipWS() {\n let ch = this._source[this._index];\n while (ch === \" \" || ch === \"\\n\" || ch === \"\\t\" || ch === \"\\r\") {\n ch = this._source[++this._index];\n }\n }\n\n /**\n * Skip inline whitespace (space and \\t).\n *\n * @private\n */\n skipInlineWS() {\n let ch = this._source[this._index];\n while (ch === \" \" || ch === \"\\t\") {\n ch = this._source[++this._index];\n }\n }\n\n /**\n * Skip blank lines.\n *\n * @private\n */\n skipBlankLines() {\n while (true) {\n const ptr = this._index;\n\n this.skipInlineWS();\n\n if (this._source[this._index] === \"\\n\") {\n this._index += 1;\n } else {\n this._index = ptr;\n break;\n }\n }\n }\n\n /**\n * Get identifier using the provided regex.\n *\n * By default this will get identifiers of public messages, attributes and\n * external arguments (without the $).\n *\n * @returns {String}\n * @private\n */\n getIdentifier(re = identifierRe) {\n re.lastIndex = this._index;\n const result = re.exec(this._source);\n\n if (result === null) {\n this._index += 1;\n throw this.error(`Expected an identifier [${re.toString()}]`);\n }\n\n this._index = re.lastIndex;\n return result[0];\n }\n\n /**\n * Get identifier of a Message or a Term (staring with a dash).\n *\n * @returns {String}\n * @private\n */\n getEntryIdentifier() {\n return this.getIdentifier(entryIdentifierRe);\n }\n\n /**\n * Get Variant name.\n *\n * @returns {Object}\n * @private\n */\n getVariantName() {\n let name = \"\";\n\n const start = this._index;\n let cc = this._source.charCodeAt(this._index);\n\n if ((cc >= 97 && cc <= 122) || // a-z\n (cc >= 65 && cc <= 90) || // A-Z\n cc === 95 || cc === 32) { // _ \n cc = this._source.charCodeAt(++this._index);\n } else {\n throw this.error(\"Expected a keyword (starting with [a-zA-Z_])\");\n }\n\n while ((cc >= 97 && cc <= 122) || // a-z\n (cc >= 65 && cc <= 90) || // A-Z\n (cc >= 48 && cc <= 57) || // 0-9\n cc === 95 || cc === 45 || cc === 32) { // _- \n cc = this._source.charCodeAt(++this._index);\n }\n\n // If we encountered the end of name, we want to test if the last\n // collected character is a space.\n // If it is, we will backtrack to the last non-space character because\n // the keyword cannot end with a space character.\n while (this._source.charCodeAt(this._index - 1) === 32) {\n this._index--;\n }\n\n name += this._source.slice(start, this._index);\n\n return { type: \"varname\", name };\n }\n\n /**\n * Get simple string argument enclosed in `\"`.\n *\n * @returns {String}\n * @private\n */\n getString() {\n const start = this._index + 1;\n\n while (++this._index < this._length) {\n const ch = this._source[this._index];\n\n if (ch === '\"') {\n break;\n }\n\n if (ch === \"\\n\") {\n throw this.error(\"Unterminated string expression\");\n }\n }\n\n return this._source.substring(start, this._index++);\n }\n\n /**\n * Parses a Message pattern.\n * Message Pattern may be a simple string or an array of strings\n * and placeable expressions.\n *\n * @returns {String|Array}\n * @private\n */\n getPattern() {\n // We're going to first try to see if the pattern is simple.\n // If it is we can just look for the end of the line and read the string.\n //\n // Then, if either the line contains a placeable opening `{` or the\n // next line starts an indentation, we switch to complex pattern.\n const start = this._index;\n let eol = this._source.indexOf(\"\\n\", this._index);\n\n if (eol === -1) {\n eol = this._length;\n }\n\n const firstLineContent = start !== eol ?\n this._source.slice(start, eol) : null;\n\n if (firstLineContent && firstLineContent.includes(\"{\")) {\n return this.getComplexPattern();\n }\n\n this._index = eol + 1;\n\n this.skipBlankLines();\n\n if (this._source[this._index] !== \" \") {\n // No indentation means we're done with this message. Callers should check\n // if the return value here is null. It may be OK for messages, but not OK\n // for terms, attributes and variants.\n return firstLineContent;\n }\n\n const lineStart = this._index;\n\n this.skipInlineWS();\n\n if (this._source[this._index] === \".\") {\n // The pattern is followed by an attribute. Rewind _index to the first\n // column of the current line as expected by getAttributes.\n this._index = lineStart;\n return firstLineContent;\n }\n\n if (firstLineContent) {\n // It's a multiline pattern which started on the same line as the\n // identifier. Reparse the whole pattern to make sure we get all of it.\n this._index = start;\n }\n\n return this.getComplexPattern();\n }\n\n /**\n * Parses a complex Message pattern.\n * This function is called by getPattern when the message is multiline,\n * or contains escape chars or placeables.\n * It does full parsing of complex patterns.\n *\n * @returns {Array}\n * @private\n */\n /* eslint-disable complexity */\n getComplexPattern() {\n let buffer = \"\";\n const content = [];\n let placeables = 0;\n\n let ch = this._source[this._index];\n\n while (this._index < this._length) {\n // This block handles multi-line strings combining strings separated\n // by new line.\n if (ch === \"\\n\") {\n this._index++;\n\n // We want to capture the start and end pointers\n // around blank lines and add them to the buffer\n // but only if the blank lines are in the middle\n // of the string.\n const blankLinesStart = this._index;\n this.skipBlankLines();\n const blankLinesEnd = this._index;\n\n\n if (this._source[this._index] !== \" \") {\n break;\n }\n this.skipInlineWS();\n\n if (this._source[this._index] === \"}\" ||\n this._source[this._index] === \"[\" ||\n this._source[this._index] === \"*\" ||\n this._source[this._index] === \".\") {\n this._index = blankLinesEnd;\n break;\n }\n\n buffer += this._source.substring(blankLinesStart, blankLinesEnd);\n\n if (buffer.length || content.length) {\n buffer += \"\\n\";\n }\n ch = this._source[this._index];\n continue;\n } else if (ch === \"\\\\\") {\n const ch2 = this._source[this._index + 1];\n if (ch2 === '\"' || ch2 === \"{\" || ch2 === \"\\\\\") {\n ch = ch2;\n this._index++;\n }\n } else if (ch === \"{\") {\n // Push the buffer to content array right before placeable\n if (buffer.length) {\n content.push(buffer);\n }\n if (placeables > MAX_PLACEABLES - 1) {\n throw this.error(\n `Too many placeables, maximum allowed is ${MAX_PLACEABLES}`);\n }\n buffer = \"\";\n content.push(this.getPlaceable());\n\n this._index++;\n\n ch = this._source[this._index];\n placeables++;\n continue;\n }\n\n if (ch) {\n buffer += ch;\n }\n this._index++;\n ch = this._source[this._index];\n }\n\n if (content.length === 0) {\n return buffer.length ? buffer : null;\n }\n\n if (buffer.length) {\n content.push(buffer);\n }\n\n return content;\n }\n /* eslint-enable complexity */\n\n /**\n * Parses a single placeable in a Message pattern and returns its\n * expression.\n *\n * @returns {Object}\n * @private\n */\n getPlaceable() {\n const start = ++this._index;\n\n this.skipWS();\n\n if (this._source[this._index] === \"*\" ||\n (this._source[this._index] === \"[\" &&\n this._source[this._index + 1] !== \"]\")) {\n const variants = this.getVariants();\n\n return {\n type: \"sel\",\n exp: null,\n vars: variants[0],\n def: variants[1]\n };\n }\n\n // Rewind the index and only support in-line white-space now.\n this._index = start;\n this.skipInlineWS();\n\n const selector = this.getSelectorExpression();\n\n this.skipWS();\n\n const ch = this._source[this._index];\n\n if (ch === \"}\") {\n if (selector.type === \"attr\" && selector.id.name.startsWith(\"-\")) {\n throw this.error(\n \"Attributes of private messages cannot be interpolated.\"\n );\n }\n\n return selector;\n }\n\n if (ch !== \"-\" || this._source[this._index + 1] !== \">\") {\n throw this.error('Expected \"}\" or \"->\"');\n }\n\n if (selector.type === \"ref\") {\n throw this.error(\"Message references cannot be used as selectors.\");\n }\n\n if (selector.type === \"var\") {\n throw this.error(\"Variants cannot be used as selectors.\");\n }\n\n if (selector.type === \"attr\" && !selector.id.name.startsWith(\"-\")) {\n throw this.error(\n \"Attributes of public messages cannot be used as selectors.\"\n );\n }\n\n\n this._index += 2; // ->\n\n this.skipInlineWS();\n\n if (this._source[this._index] !== \"\\n\") {\n throw this.error(\"Variants should be listed in a new line\");\n }\n\n this.skipWS();\n\n const variants = this.getVariants();\n\n if (variants[0].length === 0) {\n throw this.error(\"Expected members for the select expression\");\n }\n\n return {\n type: \"sel\",\n exp: selector,\n vars: variants[0],\n def: variants[1]\n };\n }\n\n /**\n * Parses a selector expression.\n *\n * @returns {Object}\n * @private\n */\n getSelectorExpression() {\n const literal = this.getLiteral();\n\n if (literal.type !== \"ref\") {\n return literal;\n }\n\n if (this._source[this._index] === \".\") {\n this._index++;\n\n const name = this.getIdentifier();\n this._index++;\n return {\n type: \"attr\",\n id: literal,\n name\n };\n }\n\n if (this._source[this._index] === \"[\") {\n this._index++;\n\n const key = this.getVariantKey();\n this._index++;\n return {\n type: \"var\",\n id: literal,\n key\n };\n }\n\n if (this._source[this._index] === \"(\") {\n this._index++;\n const args = this.getCallArgs();\n\n if (!functionIdentifierRe.test(literal.name)) {\n throw this.error(\"Function names must be all upper-case\");\n }\n\n this._index++;\n\n literal.type = \"fun\";\n\n return {\n type: \"call\",\n fun: literal,\n args\n };\n }\n\n return literal;\n }\n\n /**\n * Parses call arguments for a CallExpression.\n *\n * @returns {Array}\n * @private\n */\n getCallArgs() {\n const args = [];\n\n while (this._index < this._length) {\n this.skipInlineWS();\n\n if (this._source[this._index] === \")\") {\n return args;\n }\n\n const exp = this.getSelectorExpression();\n\n // MessageReference in this place may be an entity reference, like:\n // `call(foo)`, or, if it's followed by `:` it will be a key-value pair.\n if (exp.type !== \"ref\") {\n args.push(exp);\n } else {\n this.skipInlineWS();\n\n if (this._source[this._index] === \":\") {\n this._index++;\n this.skipInlineWS();\n\n const val = this.getSelectorExpression();\n\n // If the expression returned as a value of the argument\n // is not a quote delimited string or number, throw.\n //\n // We don't have to check here if the pattern is quote delimited\n // because that's the only type of string allowed in expressions.\n if (typeof val === \"string\" ||\n Array.isArray(val) ||\n val.type === \"num\") {\n args.push({\n type: \"narg\",\n name: exp.name,\n val\n });\n } else {\n this._index = this._source.lastIndexOf(\":\", this._index) + 1;\n throw this.error(\n \"Expected string in quotes, number.\");\n }\n\n } else {\n args.push(exp);\n }\n }\n\n this.skipInlineWS();\n\n if (this._source[this._index] === \")\") {\n break;\n } else if (this._source[this._index] === \",\") {\n this._index++;\n } else {\n throw this.error('Expected \",\" or \")\"');\n }\n }\n\n return args;\n }\n\n /**\n * Parses an FTL Number.\n *\n * @returns {Object}\n * @private\n */\n getNumber() {\n let num = \"\";\n let cc = this._source.charCodeAt(this._index);\n\n // The number literal may start with negative sign `-`.\n if (cc === 45) {\n num += \"-\";\n cc = this._source.charCodeAt(++this._index);\n }\n\n // next, we expect at least one digit\n if (cc < 48 || cc > 57) {\n throw this.error(`Unknown literal \"${num}\"`);\n }\n\n // followed by potentially more digits\n while (cc >= 48 && cc <= 57) {\n num += this._source[this._index++];\n cc = this._source.charCodeAt(this._index);\n }\n\n // followed by an optional decimal separator `.`\n if (cc === 46) {\n num += this._source[this._index++];\n cc = this._source.charCodeAt(this._index);\n\n // followed by at least one digit\n if (cc < 48 || cc > 57) {\n throw this.error(`Unknown literal \"${num}\"`);\n }\n\n // and optionally more digits\n while (cc >= 48 && cc <= 57) {\n num += this._source[this._index++];\n cc = this._source.charCodeAt(this._index);\n }\n }\n\n return {\n type: \"num\",\n val: num\n };\n }\n\n /**\n * Parses a list of Message attributes.\n *\n * @returns {Object}\n * @private\n */\n getAttributes() {\n const attrs = {};\n\n while (this._index < this._length) {\n if (this._source[this._index] !== \" \") {\n break;\n }\n this.skipInlineWS();\n\n if (this._source[this._index] !== \".\") {\n break;\n }\n this._index++;\n\n const key = this.getIdentifier();\n\n this.skipInlineWS();\n\n if (this._source[this._index] !== \"=\") {\n throw this.error('Expected \"=\"');\n }\n this._index++;\n\n this.skipInlineWS();\n\n const val = this.getPattern();\n\n if (val === null) {\n throw this.error(\"Expected attribute to have a value\");\n }\n\n if (typeof val === \"string\") {\n attrs[key] = val;\n } else {\n attrs[key] = {\n val\n };\n }\n\n this.skipBlankLines();\n }\n\n return attrs;\n }\n\n /**\n * Parses a list of Selector variants.\n *\n * @returns {Array}\n * @private\n */\n getVariants() {\n const variants = [];\n let index = 0;\n let defaultIndex;\n\n while (this._index < this._length) {\n const ch = this._source[this._index];\n\n if ((ch !== \"[\" || this._source[this._index + 1] === \"[\") &&\n ch !== \"*\") {\n break;\n }\n if (ch === \"*\") {\n this._index++;\n defaultIndex = index;\n }\n\n if (this._source[this._index] !== \"[\") {\n throw this.error('Expected \"[\"');\n }\n\n this._index++;\n\n const key = this.getVariantKey();\n\n this.skipInlineWS();\n\n const val = this.getPattern();\n\n if (val === null) {\n throw this.error(\"Expected variant to have a value\");\n }\n\n variants[index++] = {key, val};\n\n this.skipWS();\n }\n\n return [variants, defaultIndex];\n }\n\n /**\n * Parses a Variant key.\n *\n * @returns {String}\n * @private\n */\n getVariantKey() {\n // VariantKey may be a Keyword or Number\n\n const cc = this._source.charCodeAt(this._index);\n let literal;\n\n if ((cc >= 48 && cc <= 57) || cc === 45) {\n literal = this.getNumber();\n } else {\n literal = this.getVariantName();\n }\n\n if (this._source[this._index] !== \"]\") {\n throw this.error('Expected \"]\"');\n }\n\n this._index++;\n return literal;\n }\n\n /**\n * Parses an FTL literal.\n *\n * @returns {Object}\n * @private\n */\n getLiteral() {\n const cc0 = this._source.charCodeAt(this._index);\n\n if (cc0 === 36) { // $\n this._index++;\n return {\n type: \"ext\",\n name: this.getIdentifier()\n };\n }\n\n const cc1 = cc0 === 45 // -\n // Peek at the next character after the dash.\n ? this._source.charCodeAt(this._index + 1)\n // Or keep using the character at the current index.\n : cc0;\n\n if ((cc1 >= 97 && cc1 <= 122) || // a-z\n (cc1 >= 65 && cc1 <= 90)) { // A-Z\n return {\n type: \"ref\",\n name: this.getEntryIdentifier()\n };\n }\n\n if ((cc1 >= 48 && cc1 <= 57)) { // 0-9\n return this.getNumber();\n }\n\n if (cc0 === 34) { // \"\n return this.getString();\n }\n\n throw this.error(\"Expected literal\");\n }\n\n /**\n * Skips an FTL comment.\n *\n * @private\n */\n skipComment() {\n // At runtime, we don't care about comments so we just have\n // to parse them properly and skip their content.\n let eol = this._source.indexOf(\"\\n\", this._index);\n\n while (eol !== -1 &&\n ((this._source[eol + 1] === \"/\" && this._source[eol + 2] === \"/\") ||\n (this._source[eol + 1] === \"#\" &&\n [\" \", \"#\"].includes(this._source[eol + 2])))) {\n this._index = eol + 3;\n\n eol = this._source.indexOf(\"\\n\", this._index);\n\n if (eol === -1) {\n break;\n }\n }\n\n if (eol === -1) {\n this._index = this._length;\n } else {\n this._index = eol + 1;\n }\n }\n\n /**\n * Creates a new SyntaxError object with a given message.\n *\n * @param {String} message\n * @returns {Object}\n * @private\n */\n error(message) {\n return new SyntaxError(message);\n }\n\n /**\n * Skips to the beginning of a next entry after the current position.\n * This is used to mark the boundary of junk entry in case of error,\n * and recover from the returned position.\n *\n * @private\n */\n skipToNextEntryStart() {\n let start = this._index;\n\n while (true) {\n if (start === 0 || this._source[start - 1] === \"\\n\") {\n const cc = this._source.charCodeAt(start);\n\n if ((cc >= 97 && cc <= 122) || // a-z\n (cc >= 65 && cc <= 90) || // A-Z\n cc === 47 || cc === 91) { // /[\n this._index = start;\n return;\n }\n }\n\n start = this._source.indexOf(\"\\n\", start);\n\n if (start === -1) {\n this._index = this._length;\n return;\n }\n start++;\n }\n }\n}\n\n/**\n * Parses an FTL string using RuntimeParser and returns the generated\n * object with entries and a list of errors.\n *\n * @param {String} string\n * @returns {Array}\n */\nexport default function parse(string) {\n const parser = new RuntimeParser();\n return parser.getResource(string);\n}\n","/* global Intl */\n\n/**\n * The `FluentType` class is the base of Fluent's type system.\n *\n * Fluent types wrap JavaScript values and store additional configuration for\n * them, which can then be used in the `toString` method together with a proper\n * `Intl` formatter.\n */\nexport class FluentType {\n\n /**\n * Create an `FluentType` instance.\n *\n * @param {Any} value - JavaScript value to wrap.\n * @param {Object} opts - Configuration.\n * @returns {FluentType}\n */\n constructor(value, opts) {\n this.value = value;\n this.opts = opts;\n }\n\n /**\n * Unwrap the raw value stored by this `FluentType`.\n *\n * @returns {Any}\n */\n valueOf() {\n return this.value;\n }\n\n /**\n * Format this instance of `FluentType` to a string.\n *\n * Formatted values are suitable for use outside of the `MessageContext`.\n * This method can use `Intl` formatters memoized by the `MessageContext`\n * instance passed as an argument.\n *\n * @param {MessageContext} [ctx]\n * @returns {string}\n */\n toString() {\n throw new Error(\"Subclasses of FluentType must implement toString.\");\n }\n}\n\nexport class FluentNone extends FluentType {\n toString() {\n return this.value || \"???\";\n }\n}\n\nexport class FluentNumber extends FluentType {\n constructor(value, opts) {\n super(parseFloat(value), opts);\n }\n\n toString(ctx) {\n try {\n const nf = ctx._memoizeIntlObject(\n Intl.NumberFormat, this.opts\n );\n return nf.format(this.value);\n } catch (e) {\n // XXX Report the error.\n return this.value;\n }\n }\n\n /**\n * Compare the object with another instance of a FluentType.\n *\n * @param {MessageContext} ctx\n * @param {FluentType} other\n * @returns {bool}\n */\n match(ctx, other) {\n if (other instanceof FluentNumber) {\n return this.value === other.value;\n }\n return false;\n }\n}\n\nexport class FluentDateTime extends FluentType {\n constructor(value, opts) {\n super(new Date(value), opts);\n }\n\n toString(ctx) {\n try {\n const dtf = ctx._memoizeIntlObject(\n Intl.DateTimeFormat, this.opts\n );\n return dtf.format(this.value);\n } catch (e) {\n // XXX Report the error.\n return this.value;\n }\n }\n}\n\nexport class FluentSymbol extends FluentType {\n toString() {\n return this.value;\n }\n\n /**\n * Compare the object with another instance of a FluentType.\n *\n * @param {MessageContext} ctx\n * @param {FluentType} other\n * @returns {bool}\n */\n match(ctx, other) {\n if (other instanceof FluentSymbol) {\n return this.value === other.value;\n } else if (typeof other === \"string\") {\n return this.value === other;\n } else if (other instanceof FluentNumber) {\n const pr = ctx._memoizeIntlObject(\n Intl.PluralRules, other.opts\n );\n return this.value === pr.select(other.value);\n }\n return false;\n }\n}\n","/**\n * @overview\n *\n * The FTL resolver ships with a number of functions built-in.\n *\n * Each function take two arguments:\n * - args - an array of positional args\n * - opts - an object of key-value args\n *\n * Arguments to functions are guaranteed to already be instances of\n * `FluentType`. Functions must return `FluentType` objects as well.\n */\n\nimport { FluentNumber, FluentDateTime } from \"./types\";\n\nexport default {\n \"NUMBER\": ([arg], opts) =>\n new FluentNumber(arg.valueOf(), merge(arg.opts, opts)),\n \"DATETIME\": ([arg], opts) =>\n new FluentDateTime(arg.valueOf(), merge(arg.opts, opts)),\n};\n\nfunction merge(argopts, opts) {\n return Object.assign({}, argopts, values(opts));\n}\n\nfunction values(opts) {\n const unwrapped = {};\n for (const [name, opt] of Object.entries(opts)) {\n unwrapped[name] = opt.valueOf();\n }\n return unwrapped;\n}\n","/**\n * @overview\n *\n * The role of the Fluent resolver is to format a translation object to an\n * instance of `FluentType` or an array of instances.\n *\n * Translations can contain references to other messages or external arguments,\n * conditional logic in form of select expressions, traits which describe their\n * grammatical features, and can use Fluent builtins which make use of the\n * `Intl` formatters to format numbers, dates, lists and more into the\n * context's language. See the documentation of the Fluent syntax for more\n * information.\n *\n * In case of errors the resolver will try to salvage as much of the\n * translation as possible. In rare situations where the resolver didn't know\n * how to recover from an error it will return an instance of `FluentNone`.\n *\n * `MessageReference`, `VariantExpression`, `AttributeExpression` and\n * `SelectExpression` resolve to raw Runtime Entries objects and the result of\n * the resolution needs to be passed into `Type` to get their real value.\n * This is useful for composing expressions. Consider:\n *\n * brand-name[nominative]\n *\n * which is a `VariantExpression` with properties `id: MessageReference` and\n * `key: Keyword`. If `MessageReference` was resolved eagerly, it would\n * instantly resolve to the value of the `brand-name` message. Instead, we\n * want to get the message object and look for its `nominative` variant.\n *\n * All other expressions (except for `FunctionReference` which is only used in\n * `CallExpression`) resolve to an instance of `FluentType`. The caller should\n * use the `toString` method to convert the instance to a native value.\n *\n *\n * All functions in this file pass around a special object called `env`.\n * This object stores a set of elements used by all resolve functions:\n *\n * * {MessageContext} ctx\n * context for which the given resolution is happening\n * * {Object} args\n * list of developer provided arguments that can be used\n * * {Array} errors\n * list of errors collected while resolving\n * * {WeakSet} dirty\n * Set of patterns already encountered during this resolution.\n * This is used to prevent cyclic resolutions.\n */\n\n\nimport { FluentType, FluentNone, FluentNumber, FluentDateTime, FluentSymbol }\n from \"./types\";\nimport builtins from \"./builtins\";\n\n// Prevent expansion of too long placeables.\nconst MAX_PLACEABLE_LENGTH = 2500;\n\n// Unicode bidi isolation characters.\nconst FSI = \"\\u2068\";\nconst PDI = \"\\u2069\";\n\n\n/**\n * Helper for choosing the default value from a set of members.\n *\n * Used in SelectExpressions and Type.\n *\n * @param {Object} env\n * Resolver environment object.\n * @param {Object} members\n * Hash map of variants from which the default value is to be selected.\n * @param {Number} def\n * The index of the default variant.\n * @returns {FluentType}\n * @private\n */\nfunction DefaultMember(env, members, def) {\n if (members[def]) {\n return members[def];\n }\n\n const { errors } = env;\n errors.push(new RangeError(\"No default\"));\n return new FluentNone();\n}\n\n\n/**\n * Resolve a reference to another message.\n *\n * @param {Object} env\n * Resolver environment object.\n * @param {Object} id\n * The identifier of the message to be resolved.\n * @param {String} id.name\n * The name of the identifier.\n * @returns {FluentType}\n * @private\n */\nfunction MessageReference(env, {name}) {\n const { ctx, errors } = env;\n const message = name.startsWith(\"-\")\n ? ctx._terms.get(name)\n : ctx._messages.get(name);\n\n if (!message) {\n const err = name.startsWith(\"-\")\n ? new ReferenceError(`Unknown term: ${name}`)\n : new ReferenceError(`Unknown message: ${name}`);\n errors.push(err);\n return new FluentNone(name);\n }\n\n return message;\n}\n\n/**\n * Resolve a variant expression to the variant object.\n *\n * @param {Object} env\n * Resolver environment object.\n * @param {Object} expr\n * An expression to be resolved.\n * @param {Object} expr.id\n * An Identifier of a message for which the variant is resolved.\n * @param {Object} expr.id.name\n * Name a message for which the variant is resolved.\n * @param {Object} expr.key\n * Variant key to be resolved.\n * @returns {FluentType}\n * @private\n */\nfunction VariantExpression(env, {id, key}) {\n const message = MessageReference(env, id);\n if (message instanceof FluentNone) {\n return message;\n }\n\n const { ctx, errors } = env;\n const keyword = Type(env, key);\n\n function isVariantList(node) {\n return Array.isArray(node) &&\n node[0].type === \"sel\" &&\n node[0].exp === null;\n }\n\n if (isVariantList(message.val)) {\n // Match the specified key against keys of each variant, in order.\n for (const variant of message.val[0].vars) {\n const variantKey = Type(env, variant.key);\n if (keyword.match(ctx, variantKey)) {\n return variant;\n }\n }\n }\n\n errors.push(new ReferenceError(`Unknown variant: ${keyword.toString(ctx)}`));\n return Type(env, message);\n}\n\n\n/**\n * Resolve an attribute expression to the attribute object.\n *\n * @param {Object} env\n * Resolver environment object.\n * @param {Object} expr\n * An expression to be resolved.\n * @param {String} expr.id\n * An ID of a message for which the attribute is resolved.\n * @param {String} expr.name\n * Name of the attribute to be resolved.\n * @returns {FluentType}\n * @private\n */\nfunction AttributeExpression(env, {id, name}) {\n const message = MessageReference(env, id);\n if (message instanceof FluentNone) {\n return message;\n }\n\n if (message.attrs) {\n // Match the specified name against keys of each attribute.\n for (const attrName in message.attrs) {\n if (name === attrName) {\n return message.attrs[name];\n }\n }\n }\n\n const { errors } = env;\n errors.push(new ReferenceError(`Unknown attribute: ${name}`));\n return Type(env, message);\n}\n\n/**\n * Resolve a select expression to the member object.\n *\n * @param {Object} env\n * Resolver environment object.\n * @param {Object} expr\n * An expression to be resolved.\n * @param {String} expr.exp\n * Selector expression\n * @param {Array} expr.vars\n * List of variants for the select expression.\n * @param {Number} expr.def\n * Index of the default variant.\n * @returns {FluentType}\n * @private\n */\nfunction SelectExpression(env, {exp, vars, def}) {\n if (exp === null) {\n return DefaultMember(env, vars, def);\n }\n\n const selector = Type(env, exp);\n if (selector instanceof FluentNone) {\n return DefaultMember(env, vars, def);\n }\n\n // Match the selector against keys of each variant, in order.\n for (const variant of vars) {\n const key = Type(env, variant.key);\n const keyCanMatch =\n key instanceof FluentNumber || key instanceof FluentSymbol;\n\n if (!keyCanMatch) {\n continue;\n }\n\n const { ctx } = env;\n\n if (key.match(ctx, selector)) {\n return variant;\n }\n }\n\n return DefaultMember(env, vars, def);\n}\n\n\n/**\n * Resolve expression to a Fluent type.\n *\n * JavaScript strings are a special case. Since they natively have the\n * `toString` method they can be used as if they were a Fluent type without\n * paying the cost of creating a instance of one.\n *\n * @param {Object} env\n * Resolver environment object.\n * @param {Object} expr\n * An expression object to be resolved into a Fluent type.\n * @returns {FluentType}\n * @private\n */\nfunction Type(env, expr) {\n // A fast-path for strings which are the most common case, and for\n // `FluentNone` which doesn't require any additional logic.\n if (typeof expr === \"string\" || expr instanceof FluentNone) {\n return expr;\n }\n\n // The Runtime AST (Entries) encodes patterns (complex strings with\n // placeables) as Arrays.\n if (Array.isArray(expr)) {\n return Pattern(env, expr);\n }\n\n\n switch (expr.type) {\n case \"varname\":\n return new FluentSymbol(expr.name);\n case \"num\":\n return new FluentNumber(expr.val);\n case \"ext\":\n return ExternalArgument(env, expr);\n case \"fun\":\n return FunctionReference(env, expr);\n case \"call\":\n return CallExpression(env, expr);\n case \"ref\": {\n const message = MessageReference(env, expr);\n return Type(env, message);\n }\n case \"attr\": {\n const attr = AttributeExpression(env, expr);\n return Type(env, attr);\n }\n case \"var\": {\n const variant = VariantExpression(env, expr);\n return Type(env, variant);\n }\n case \"sel\": {\n const member = SelectExpression(env, expr);\n return Type(env, member);\n }\n case undefined: {\n // If it's a node with a value, resolve the value.\n if (expr.val !== null && expr.val !== undefined) {\n return Type(env, expr.val);\n }\n\n const { errors } = env;\n errors.push(new RangeError(\"No value\"));\n return new FluentNone();\n }\n default:\n return new FluentNone();\n }\n}\n\n/**\n * Resolve a reference to an external argument.\n *\n * @param {Object} env\n * Resolver environment object.\n * @param {Object} expr\n * An expression to be resolved.\n * @param {String} expr.name\n * Name of an argument to be returned.\n * @returns {FluentType}\n * @private\n */\nfunction ExternalArgument(env, {name}) {\n const { args, errors } = env;\n\n if (!args || !args.hasOwnProperty(name)) {\n errors.push(new ReferenceError(`Unknown external: ${name}`));\n return new FluentNone(name);\n }\n\n const arg = args[name];\n\n // Return early if the argument already is an instance of FluentType.\n if (arg instanceof FluentType) {\n return arg;\n }\n\n // Convert the argument to a Fluent type.\n switch (typeof arg) {\n case \"string\":\n return arg;\n case \"number\":\n return new FluentNumber(arg);\n case \"object\":\n if (arg instanceof Date) {\n return new FluentDateTime(arg);\n }\n default:\n errors.push(\n new TypeError(`Unsupported external type: ${name}, ${typeof arg}`)\n );\n return new FluentNone(name);\n }\n}\n\n/**\n * Resolve a reference to a function.\n *\n * @param {Object} env\n * Resolver environment object.\n * @param {Object} expr\n * An expression to be resolved.\n * @param {String} expr.name\n * Name of the function to be returned.\n * @returns {Function}\n * @private\n */\nfunction FunctionReference(env, {name}) {\n // Some functions are built-in. Others may be provided by the runtime via\n // the `MessageContext` constructor.\n const { ctx: { _functions }, errors } = env;\n const func = _functions[name] || builtins[name];\n\n if (!func) {\n errors.push(new ReferenceError(`Unknown function: ${name}()`));\n return new FluentNone(`${name}()`);\n }\n\n if (typeof func !== \"function\") {\n errors.push(new TypeError(`Function ${name}() is not callable`));\n return new FluentNone(`${name}()`);\n }\n\n return func;\n}\n\n/**\n * Resolve a call to a Function with positional and key-value arguments.\n *\n * @param {Object} env\n * Resolver environment object.\n * @param {Object} expr\n * An expression to be resolved.\n * @param {Object} expr.fun\n * FTL Function object.\n * @param {Array} expr.args\n * FTL Function argument list.\n * @returns {FluentType}\n * @private\n */\nfunction CallExpression(env, {fun, args}) {\n const callee = FunctionReference(env, fun);\n\n if (callee instanceof FluentNone) {\n return callee;\n }\n\n const posargs = [];\n const keyargs = {};\n\n for (const arg of args) {\n if (arg.type === \"narg\") {\n keyargs[arg.name] = Type(env, arg.val);\n } else {\n posargs.push(Type(env, arg));\n }\n }\n\n try {\n return callee(posargs, keyargs);\n } catch (e) {\n // XXX Report errors.\n return new FluentNone();\n }\n}\n\n/**\n * Resolve a pattern (a complex string with placeables).\n *\n * @param {Object} env\n * Resolver environment object.\n * @param {Array} ptn\n * Array of pattern elements.\n * @returns {Array}\n * @private\n */\nfunction Pattern(env, ptn) {\n const { ctx, dirty, errors } = env;\n\n if (dirty.has(ptn)) {\n errors.push(new RangeError(\"Cyclic reference\"));\n return new FluentNone();\n }\n\n // Tag the pattern as dirty for the purpose of the current resolution.\n dirty.add(ptn);\n const result = [];\n\n // Wrap interpolations with Directional Isolate Formatting characters\n // only when the pattern has more than one element.\n const useIsolating = ctx._useIsolating && ptn.length > 1;\n\n for (const elem of ptn) {\n if (typeof elem === \"string\") {\n result.push(elem);\n continue;\n }\n\n const part = Type(env, elem).toString(ctx);\n\n if (useIsolating) {\n result.push(FSI);\n }\n\n if (part.length > MAX_PLACEABLE_LENGTH) {\n errors.push(\n new RangeError(\n \"Too many characters in placeable \" +\n `(${part.length}, max allowed is ${MAX_PLACEABLE_LENGTH})`\n )\n );\n result.push(part.slice(MAX_PLACEABLE_LENGTH));\n } else {\n result.push(part);\n }\n\n if (useIsolating) {\n result.push(PDI);\n }\n }\n\n dirty.delete(ptn);\n return result.join(\"\");\n}\n\n/**\n * Format a translation into a string.\n *\n * @param {MessageContext} ctx\n * A MessageContext instance which will be used to resolve the\n * contextual information of the message.\n * @param {Object} args\n * List of arguments provided by the developer which can be accessed\n * from the message.\n * @param {Object} message\n * An object with the Message to be resolved.\n * @param {Array} errors\n * An error array that any encountered errors will be appended to.\n * @returns {FluentType}\n */\nexport default function resolve(ctx, args, message, errors = []) {\n const env = {\n ctx, args, errors, dirty: new WeakSet()\n };\n return Type(env, message).toString(ctx);\n}\n","import resolve from \"./resolver\";\nimport parse from \"./parser\";\n\n/**\n * Message contexts are single-language stores of translations. They are\n * responsible for parsing translation resources in the Fluent syntax and can\n * format translation units (entities) to strings.\n *\n * Always use `MessageContext.format` to retrieve translation units from\n * a context. Translations can contain references to other entities or\n * external arguments, conditional logic in form of select expressions, traits\n * which describe their grammatical features, and can use Fluent builtins which\n * make use of the `Intl` formatters to format numbers, dates, lists and more\n * into the context's language. See the documentation of the Fluent syntax for\n * more information.\n */\nexport class MessageContext {\n\n /**\n * Create an instance of `MessageContext`.\n *\n * The `locales` argument is used to instantiate `Intl` formatters used by\n * translations. The `options` object can be used to configure the context.\n *\n * Examples:\n *\n * const ctx = new MessageContext(locales);\n *\n * const ctx = new MessageContext(locales, { useIsolating: false });\n *\n * const ctx = new MessageContext(locales, {\n * useIsolating: true,\n * functions: {\n * NODE_ENV: () => process.env.NODE_ENV\n * }\n * });\n *\n * Available options:\n *\n * - `functions` - an object of additional functions available to\n * translations as builtins.\n *\n * - `useIsolating` - boolean specifying whether to use Unicode isolation\n * marks (FSI, PDI) for bidi interpolations.\n *\n * @param {string|Array} locales - Locale or locales of the context\n * @param {Object} [options]\n * @returns {MessageContext}\n */\n constructor(locales, { functions = {}, useIsolating = true } = {}) {\n this.locales = Array.isArray(locales) ? locales : [locales];\n\n this._terms = new Map();\n this._messages = new Map();\n this._functions = functions;\n this._useIsolating = useIsolating;\n this._intls = new WeakMap();\n }\n\n /*\n * Return an iterator over public `[id, message]` pairs.\n *\n * @returns {Iterator}\n */\n get messages() {\n return this._messages[Symbol.iterator]();\n }\n\n /*\n * Check if a message is present in the context.\n *\n * @param {string} id - The identifier of the message to check.\n * @returns {bool}\n */\n hasMessage(id) {\n return this._messages.has(id);\n }\n\n /*\n * Return the internal representation of a message.\n *\n * The internal representation should only be used as an argument to\n * `MessageContext.format`.\n *\n * @param {string} id - The identifier of the message to check.\n * @returns {Any}\n */\n getMessage(id) {\n return this._messages.get(id);\n }\n\n /**\n * Add a translation resource to the context.\n *\n * The translation resource must use the Fluent syntax. It will be parsed by\n * the context and each translation unit (message) will be available in the\n * context by its identifier.\n *\n * ctx.addMessages('foo = Foo');\n * ctx.getMessage('foo');\n *\n * // Returns a raw representation of the 'foo' message.\n *\n * Parsed entities should be formatted with the `format` method in case they\n * contain logic (references, select expressions etc.).\n *\n * @param {string} source - Text resource with translations.\n * @returns {Array}\n */\n addMessages(source) {\n const [entries, errors] = parse(source);\n for (const id in entries) {\n if (id.startsWith(\"-\")) {\n // Identifiers starting with a dash (-) define terms. Terms are private\n // and cannot be retrieved from MessageContext.\n if (this._terms.has(id)) {\n errors.push(`Attempt to override an existing term: \"${id}\"`);\n continue;\n }\n this._terms.set(id, entries[id]);\n } else {\n if (this._messages.has(id)) {\n errors.push(`Attempt to override an existing message: \"${id}\"`);\n continue;\n }\n this._messages.set(id, entries[id]);\n }\n }\n\n return errors;\n }\n\n /**\n * Format a message to a string or null.\n *\n * Format a raw `message` from the context into a string (or a null if it has\n * a null value). `args` will be used to resolve references to external\n * arguments inside of the translation.\n *\n * In case of errors `format` will try to salvage as much of the translation\n * as possible and will still return a string. For performance reasons, the\n * encountered errors are not returned but instead are appended to the\n * `errors` array passed as the third argument.\n *\n * const errors = [];\n * ctx.addMessages('hello = Hello, { $name }!');\n * const hello = ctx.getMessage('hello');\n * ctx.format(hello, { name: 'Jane' }, errors);\n *\n * // Returns 'Hello, Jane!' and `errors` is empty.\n *\n * ctx.format(hello, undefined, errors);\n *\n * // Returns 'Hello, name!' and `errors` is now:\n *\n * []\n *\n * @param {Object | string} message\n * @param {Object | undefined} args\n * @param {Array} errors\n * @returns {?string}\n */\n format(message, args, errors) {\n // optimize entities which are simple strings with no attributes\n if (typeof message === \"string\") {\n return message;\n }\n\n // optimize simple-string entities with attributes\n if (typeof message.val === \"string\") {\n return message.val;\n }\n\n // optimize entities with null values\n if (message.val === undefined) {\n return null;\n }\n\n return resolve(this, args, message, errors);\n }\n\n _memoizeIntlObject(ctor, opts) {\n const cache = this._intls.get(ctor) || {};\n const id = JSON.stringify(opts);\n\n if (!cache[id]) {\n cache[id] = new ctor(this.locales, opts);\n this._intls.set(ctor, cache);\n }\n\n return cache[id];\n }\n}\n","/*\n * CachedIterable caches the elements yielded by an iterable.\n *\n * It can be used to iterate over an iterable many times without depleting the\n * iterable.\n */\nexport default class CachedIterable {\n /**\n * Create an `CachedIterable` instance.\n *\n * @param {Iterable} iterable\n * @returns {CachedIterable}\n */\n constructor(iterable) {\n if (Symbol.asyncIterator in Object(iterable)) {\n this.iterator = iterable[Symbol.asyncIterator]();\n } else if (Symbol.iterator in Object(iterable)) {\n this.iterator = iterable[Symbol.iterator]();\n } else {\n throw new TypeError(\"Argument must implement the iteration protocol.\");\n }\n\n this.seen = [];\n }\n\n [Symbol.iterator]() {\n const { seen, iterator } = this;\n let cur = 0;\n\n return {\n next() {\n if (seen.length <= cur) {\n seen.push(iterator.next());\n }\n return seen[cur++];\n }\n };\n }\n\n [Symbol.asyncIterator]() {\n const { seen, iterator } = this;\n let cur = 0;\n\n return {\n async next() {\n if (seen.length <= cur) {\n seen.push(await iterator.next());\n }\n return seen[cur++];\n }\n };\n }\n\n /**\n * This method allows user to consume the next element from the iterator\n * into the cache.\n */\n touchNext() {\n const { seen, iterator } = this;\n if (seen.length === 0 || seen[seen.length - 1].done === false) {\n seen.push(iterator.next());\n }\n }\n}\n","/*\n * @overview\n *\n * Functions for managing ordered sequences of MessageContexts.\n *\n * An ordered iterable of MessageContext instances can represent the current\n * negotiated fallback chain of languages. This iterable can be used to find\n * the best existing translation for a given identifier.\n *\n * The mapContext* methods can be used to find the first MessageContext in the\n * given iterable which contains the translation with the given identifier. If\n * the iterable is ordered according to the result of a language negotiation\n * the returned MessageContext contains the best available translation.\n *\n * A simple function which formats translations based on the identifier might\n * be implemented as follows:\n *\n * formatString(id, args) {\n * const ctx = mapContextSync(contexts, id);\n *\n * if (ctx === null) {\n * return id;\n * }\n *\n * const msg = ctx.getMessage(id);\n * return ctx.format(msg, args);\n * }\n *\n * In order to pass an iterator to mapContext*, wrap it in CachedIterable.\n * This allows multiple calls to mapContext* without advancing and eventually\n * depleting the iterator.\n *\n * function *generateMessages() {\n * // Some lazy logic for yielding MessageContexts.\n * yield *[ctx1, ctx2];\n * }\n *\n * const contexts = new CachedIterable(generateMessages());\n * const ctx = mapContextSync(contexts, id);\n *\n */\n\n/*\n * Synchronously map an identifier or an array of identifiers to the best\n * `MessageContext` instance(s).\n *\n * @param {Iterable} iterable\n * @param {string|Array} ids\n * @returns {MessageContext|Array}\n */\nexport function mapContextSync(iterable, ids) {\n if (!Array.isArray(ids)) {\n return getContextForId(iterable, ids);\n }\n\n return ids.map(\n id => getContextForId(iterable, id)\n );\n}\n\n/*\n * Find the best `MessageContext` with the translation for `id`.\n */\nfunction getContextForId(iterable, id) {\n for (const context of iterable) {\n if (context.hasMessage(id)) {\n return context;\n }\n }\n\n return null;\n}\n\n/*\n * Asynchronously map an identifier or an array of identifiers to the best\n * `MessageContext` instance(s).\n *\n * @param {AsyncIterable} iterable\n * @param {string|Array} ids\n * @returns {Promise>}\n */\nexport async function mapContextAsync(iterable, ids) {\n if (!Array.isArray(ids)) {\n for await (const context of iterable) {\n if (context.hasMessage(ids)) {\n return context;\n }\n }\n }\n\n let remainingCount = ids.length;\n const foundContexts = new Array(remainingCount).fill(null);\n\n for await (const context of iterable) {\n // XXX Switch to const [index, id] of id.entries() when we move to Babel 7.\n // See https://github.com/babel/babel/issues/5880.\n for (let index = 0; index < ids.length; index++) {\n const id = ids[index];\n if (!foundContexts[index] && context.hasMessage(id)) {\n foundContexts[index] = context;\n remainingCount--;\n }\n\n // Return early when all ids have been mapped to contexts.\n if (remainingCount === 0) {\n return foundContexts;\n }\n }\n }\n\n return foundContexts;\n}\n","function nonBlank(line) {\n return !/^\\s*$/.test(line);\n}\n\nfunction countIndent(line) {\n const [indent] = line.match(/^\\s*/);\n return indent.length;\n}\n\n/**\n * Template literal tag for dedenting FTL code.\n *\n * Strip the common indent of non-blank lines. Remove blank lines.\n *\n * @param {Array} strings\n */\nexport function ftl(strings) {\n const [code] = strings;\n const lines = code.split(\"\\n\").filter(nonBlank);\n const indents = lines.map(countIndent);\n const common = Math.min(...indents);\n const indent = new RegExp(`^\\\\s{${common}}`);\n\n return lines.map(\n line => line.replace(indent, \"\")\n ).join(\"\\n\");\n}\n","/*\n * @module fluent\n * @overview\n *\n * `fluent` is a JavaScript implementation of Project Fluent, a localization\n * framework designed to unleash the expressive power of the natural language.\n *\n */\n\nexport { default as _parse } from \"./parser\";\n\nexport { MessageContext } from \"./context\";\nexport {\n FluentType as MessageArgument,\n FluentNumber as MessageNumberArgument,\n FluentDateTime as MessageDateTimeArgument,\n} from \"./types\";\n\nexport { default as CachedIterable } from \"./cached_iterable\";\nexport { mapContextSync, mapContextAsync } from \"./fallback\";\n\nexport { ftl } from \"./util\";\n","import { CachedIterable, mapContextSync } from \"fluent\";\n\n/*\n * `ReactLocalization` handles translation formatting and fallback.\n *\n * The current negotiated fallback chain of languages is stored in the\n * `ReactLocalization` instance in form of an iterable of `MessageContext`\n * instances. This iterable is used to find the best existing translation for\n * a given identifier.\n *\n * `Localized` components must subscribe to the changes of the\n * `ReactLocalization`'s fallback chain. When the fallback chain changes (the\n * `messages` iterable is set anew), all subscribed compontent must relocalize.\n *\n * The `ReactLocalization` class instances are exposed to `Localized` elements\n * via the `LocalizationProvider` component.\n */\nexport default class ReactLocalization {\n constructor(messages) {\n this.contexts = new CachedIterable(messages);\n this.subs = new Set();\n }\n\n /*\n * Subscribe a `Localized` component to changes of `messages`.\n */\n subscribe(comp) {\n this.subs.add(comp);\n }\n\n /*\n * Unsubscribe a `Localized` component from `messages` changes.\n */\n unsubscribe(comp) {\n this.subs.delete(comp);\n }\n\n /*\n * Set a new `messages` iterable and trigger the retranslation.\n */\n setMessages(messages) {\n this.contexts = new CachedIterable(messages);\n\n // Update all subscribed Localized components.\n this.subs.forEach(comp => comp.relocalize());\n }\n\n getMessageContext(id) {\n return mapContextSync(this.contexts, id);\n }\n\n formatCompound(mcx, msg, args) {\n const value = mcx.format(msg, args);\n\n if (msg.attrs) {\n var attrs = {};\n for (const name of Object.keys(msg.attrs)) {\n attrs[name] = mcx.format(msg.attrs[name], args);\n }\n }\n\n return { value, attrs };\n }\n\n /*\n * Find a translation by `id` and format it to a string using `args`.\n */\n getString(id, args, fallback) {\n const mcx = this.getMessageContext(id);\n\n if (mcx === null) {\n return fallback || id;\n }\n\n const msg = mcx.getMessage(id);\n return mcx.format(msg, args);\n }\n}\n\nexport function isReactLocalization(props, propName) {\n const prop = props[propName];\n\n if (prop instanceof ReactLocalization) {\n return null;\n }\n\n return new Error(\n `The ${propName} context field must be an instance of ReactLocalization.`\n );\n}\n","import { Component, Children } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport ReactLocalization, { isReactLocalization} from \"./localization\";\n\n/*\n * The Provider component for the `ReactLocalization` class.\n *\n * Exposes a `ReactLocalization` instance to all descendants via React's\n * context feature. It makes translations available to all localizable\n * elements in the descendant's render tree without the need to pass them\n * explicitly.\n *\n * \n * …\n * \n *\n * The `LocalizationProvider` component takes one prop: `messages`. It should\n * be an iterable of `MessageContext` instances in order of the user's\n * preferred languages. The `MessageContext` instances will be used by\n * `ReactLocalization` to format translations. If a translation is missing in\n * one instance, `ReactLocalization` will fall back to the next one.\n */\nexport default class LocalizationProvider extends Component {\n constructor(props) {\n super(props);\n const { messages } = props;\n\n if (messages === undefined) {\n throw new Error(\"LocalizationProvider must receive the messages prop.\");\n }\n\n if (!messages[Symbol.iterator]) {\n throw new Error(\"The messages prop must be an iterable.\");\n }\n\n this.l10n = new ReactLocalization(messages);\n }\n\n getChildContext() {\n return {\n l10n: this.l10n\n };\n }\n\n componentWillReceiveProps(next) {\n const { messages } = next;\n\n if (messages !== this.props.messages) {\n this.l10n.setMessages(messages);\n }\n }\n\n render() {\n return Children.only(this.props.children);\n }\n}\n\nLocalizationProvider.childContextTypes = {\n l10n: isReactLocalization\n};\n\nLocalizationProvider.propTypes = {\n children: PropTypes.element.isRequired,\n messages: isIterable\n};\n\nfunction isIterable(props, propName, componentName) {\n const prop = props[propName];\n\n if (Symbol.iterator in Object(prop)) {\n return null;\n }\n\n return new Error(\n `The ${propName} prop supplied to ${componentName} must be an iterable.`\n );\n}\n","import { createElement, Component } from \"react\";\n\nimport { isReactLocalization } from \"./localization\";\n\nexport default function withLocalization(Inner) {\n class WithLocalization extends Component {\n componentDidMount() {\n const { l10n } = this.context;\n\n if (l10n) {\n l10n.subscribe(this);\n }\n }\n\n componentWillUnmount() {\n const { l10n } = this.context;\n\n if (l10n) {\n l10n.unsubscribe(this);\n }\n }\n\n /*\n * Rerender this component in a new language.\n */\n relocalize() {\n // When the `ReactLocalization`'s fallback chain changes, update the\n // component.\n this.forceUpdate();\n }\n\n /*\n * Find a translation by `id` and format it to a string using `args`.\n */\n getString(id, args, fallback) {\n const { l10n } = this.context;\n\n if (!l10n) {\n return fallback || id;\n }\n\n return l10n.getString(id, args, fallback);\n }\n\n render() {\n return createElement(\n Inner,\n Object.assign(\n // getString needs to be re-bound on updates to trigger a re-render\n { getString: (...args) => this.getString(...args) },\n this.props\n )\n );\n }\n }\n\n WithLocalization.displayName = `WithLocalization(${displayName(Inner)})`;\n\n WithLocalization.contextTypes = {\n l10n: isReactLocalization\n };\n\n return WithLocalization;\n}\n\nfunction displayName(component) {\n return component.displayName || component.name || \"Component\";\n}\n","/* eslint-env browser */\n\nconst TEMPLATE = document.createElement(\"template\");\n\nexport function parseMarkup(str) {\n TEMPLATE.innerHTML = str;\n return TEMPLATE.content;\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in this directory.\n */\n\n// For HTML, certain tags should omit their close tag. We keep a whitelist for\n// those special-case tags.\n\nvar omittedCloseTags = {\n area: true,\n base: true,\n br: true,\n col: true,\n embed: true,\n hr: true,\n img: true,\n input: true,\n keygen: true,\n link: true,\n meta: true,\n param: true,\n source: true,\n track: true,\n wbr: true,\n // NOTE: menuitem's close tag should be omitted, but that causes problems.\n};\n\nexport default omittedCloseTags;\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in this directory.\n */\n\nimport omittedCloseTags from './omittedCloseTags';\n\n// For HTML, certain tags cannot have children. This has the same purpose as\n// `omittedCloseTags` except that `menuitem` should still have its closing tag.\n\nvar voidElementTags = {\n menuitem: true,\n ...omittedCloseTags,\n};\n\nexport default voidElementTags;\n","import { isValidElement, cloneElement, Component, Children } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport { isReactLocalization } from \"./localization\";\nimport { parseMarkup } from \"./markup\";\nimport VOID_ELEMENTS from \"../vendor/voidElementTags\";\n\n// Match the opening angle bracket (<) in HTML tags, and HTML entities like\n// &, &, &.\nconst reMarkup = /<|&#?\\w+;/;\n\n/*\n * Prepare props passed to `Localized` for formatting.\n */\nfunction toArguments(props) {\n const args = {};\n const elems = {};\n\n for (const [propname, propval] of Object.entries(props)) {\n if (propname.startsWith(\"$\")) {\n const name = propname.substr(1);\n args[name] = propval;\n } else if (isValidElement(propval)) {\n // We'll try to match localNames of elements found in the translation with\n // names of elements passed as props. localNames are always lowercase.\n const name = propname.toLowerCase();\n elems[name] = propval;\n }\n }\n\n return [args, elems];\n}\n\n/*\n * The `Localized` class renders its child with translated props and children.\n *\n * \n *

    {'Hello, world!'}

    \n *
    \n *\n * The `id` prop should be the unique identifier of the translation. Any\n * attributes found in the translation will be applied to the wrapped element.\n *\n * Arguments to the translation can be passed as `$`-prefixed props on\n * `Localized`.\n *\n * \n *

    {'Hello, { $username }!'}

    \n *
    \n *\n * It's recommended that the contents of the wrapped component be a string\n * expression. The string will be used as the ultimate fallback if no\n * translation is available. It also makes it easy to grep for strings in the\n * source code.\n */\nexport default class Localized extends Component {\n componentDidMount() {\n const { l10n } = this.context;\n\n if (l10n) {\n l10n.subscribe(this);\n }\n }\n\n componentWillUnmount() {\n const { l10n } = this.context;\n\n if (l10n) {\n l10n.unsubscribe(this);\n }\n }\n\n /*\n * Rerender this component in a new language.\n */\n relocalize() {\n // When the `ReactLocalization`'s fallback chain changes, update the\n // component.\n this.forceUpdate();\n }\n\n render() {\n const { l10n } = this.context;\n const { id, attrs, children } = this.props;\n const elem = Children.only(children);\n\n if (!l10n) {\n // Use the wrapped component as fallback.\n return elem;\n }\n\n const mcx = l10n.getMessageContext(id);\n\n if (mcx === null) {\n // Use the wrapped component as fallback.\n return elem;\n }\n\n const msg = mcx.getMessage(id);\n const [args, elems] = toArguments(this.props);\n const {\n value: messageValue,\n attrs: messageAttrs\n } = l10n.formatCompound(mcx, msg, args);\n\n // The default is to forbid all message attributes. If the attrs prop exists\n // on the Localized instance, only set message attributes which have been\n // explicitly allowed by the developer.\n if (attrs && messageAttrs) {\n var localizedProps = {};\n\n for (const [name, value] of Object.entries(messageAttrs)) {\n if (attrs[name]) {\n localizedProps[name] = value;\n }\n }\n }\n\n // If the wrapped component is a known void element, explicitly dismiss the\n // message value and do not pass it to cloneElement in order to avoid the\n // \"void element tags must neither have `children` nor use\n // `dangerouslySetInnerHTML`\" error.\n if (elem.type in VOID_ELEMENTS) {\n return cloneElement(elem, localizedProps);\n }\n\n // If the message has a null value, we're only interested in its attributes.\n // Do not pass the null value to cloneElement as it would nuke all children\n // of the wrapped component.\n if (messageValue === null) {\n return cloneElement(elem, localizedProps);\n }\n\n // If the message value doesn't contain any markup nor any HTML entities,\n // insert it as the only child of the wrapped component.\n if (!reMarkup.test(messageValue)) {\n return cloneElement(elem, localizedProps, messageValue);\n }\n\n // If the message contains markup, parse it and try to match the children\n // found in the translation with the props passed to this Localized.\n const translationNodes = Array.from(parseMarkup(messageValue).childNodes);\n const translatedChildren = translationNodes.map(childNode => {\n if (childNode.nodeType === childNode.TEXT_NODE) {\n return childNode.textContent;\n }\n\n // If the child is not expected just take its textContent.\n if (!elems.hasOwnProperty(childNode.localName)) {\n return childNode.textContent;\n }\n\n const sourceChild = elems[childNode.localName];\n\n // If the element passed as a prop to is a known void element,\n // explicitly dismiss any textContent which might have accidentally been\n // defined in the translation to prevent the \"void element tags must not\n // have children\" error.\n if (sourceChild.type in VOID_ELEMENTS) {\n return sourceChild;\n }\n\n // TODO Protect contents of elements wrapped in \n // https://github.com/projectfluent/fluent.js/issues/184\n // TODO Control localizable attributes on elements passed as props\n // https://github.com/projectfluent/fluent.js/issues/185\n return cloneElement(sourceChild, null, childNode.textContent);\n });\n\n return cloneElement(elem, localizedProps, ...translatedChildren);\n }\n}\n\nLocalized.contextTypes = {\n l10n: isReactLocalization\n};\n\nLocalized.propTypes = {\n children: PropTypes.element.isRequired,\n};\n","/*\n * @module fluent-react\n * @overview\n *\n\n * `fluent-react` provides React bindings for Fluent. It takes advantage of\n * React's Components system and the virtual DOM. Translations are exposed to\n * components via the provider pattern.\n *\n * \n * \n *

    {'Hello, world!'}

    \n *
    \n *
    \n *\n * Consult the documentation of the `LocalizationProvider` and the `Localized`\n * components for more information.\n */\n\nexport { default as LocalizationProvider } from \"./provider\";\nexport { default as withLocalization } from \"./with_localization\";\nexport { default as Localized } from \"./localized\";\nexport { default as ReactLocalization, isReactLocalization }\n from \"./localization\";\n","import React from \"react\";\nimport {safeURI} from \"../../template-utils\";\n\nconst ALLOWED_STYLE_TAGS = [\"color\", \"backgroundColor\"];\n\nexport const Button = props => {\n const style = {};\n\n // Add allowed style tags from props, e.g. props.color becomes style={color: props.color}\n for (const tag of ALLOWED_STYLE_TAGS) {\n if (typeof props[tag] !== \"undefined\") {\n style[tag] = props[tag];\n }\n }\n // remove border if bg is set to something custom\n if (style.backgroundColor) {\n style.border = \"0\";\n }\n\n return (\n {props.children}\n );\n};\n","import React from \"react\";\n\nexport class SnippetBase extends React.PureComponent {\n constructor(props) {\n super(props);\n this.onBlockClicked = this.onBlockClicked.bind(this);\n }\n\n onBlockClicked() {\n this.props.sendUserActionTelemetry({event: \"BLOCK\", id: this.props.UISurface});\n this.props.onBlock();\n }\n\n render() {\n const {props} = this;\n\n const containerClassName = `SnippetBaseContainer${props.className ? ` ${props.className}` : \"\"}`;\n\n return (
    \n
    \n {props.children}\n
    \n
    );\n }\n}\n","import {Button} from \"../../components/Button/Button\";\nimport React from \"react\";\nimport {safeURI} from \"../../template-utils\";\nimport {SnippetBase} from \"../../components/SnippetBase/SnippetBase\";\n\nconst DEFAULT_ICON_PATH = \"chrome://branding/content/icon64.png\";\n\nexport class SimpleSnippet extends React.PureComponent {\n constructor(props) {\n super(props);\n this.onButtonClick = this.onButtonClick.bind(this);\n }\n\n onButtonClick() {\n this.props.sendUserActionTelemetry({event: \"CLICK_BUTTON\", id: this.props.UISurface});\n }\n\n renderTitle() {\n const {title} = this.props.content;\n return title ?

    {title}

    : null;\n }\n\n renderTitleIcon() {\n const titleIcon = safeURI(this.props.content.title_icon);\n return titleIcon ? : null;\n }\n\n renderButton(className) {\n const {props} = this;\n return (\n {props.content.button_label}\n );\n }\n\n render() {\n const {props} = this;\n const hasLink = props.content.button_url && props.content.button_type === \"anchor\";\n const hasButton = props.content.button_url && !props.content.button_type;\n const className = `SimpleSnippet${props.content.tall ? \" tall\" : \"\"}`;\n return (\n \n
    \n {this.renderTitleIcon()} {this.renderTitle()}

    {props.richText || props.content.text}

    {hasLink ? this.renderButton(\"ASRouterAnchor\") : null}\n
    \n {hasButton ?
    {this.renderButton()}
    : null}\n
    );\n }\n}\n","this.Dedupe = class Dedupe {\n constructor(createKey) {\n this.createKey = createKey || this.defaultCreateKey;\n }\n\n defaultCreateKey(item) {\n return item;\n }\n\n /**\n * Dedupe any number of grouped elements favoring those from earlier groups.\n *\n * @param {Array} groups Contains an arbitrary number of arrays of elements.\n * @returns {Array} A matching array of each provided group deduped.\n */\n group(...groups) {\n const globalKeys = new Set();\n const result = [];\n for (const values of groups) {\n const valueMap = new Map();\n for (const value of values) {\n const key = this.createKey(value);\n if (!globalKeys.has(key) && !valueMap.has(key)) {\n valueMap.set(key, value);\n }\n }\n result.push(valueMap);\n valueMap.forEach((value, key) => globalKeys.add(key));\n }\n return result.map(m => Array.from(m.values()));\n }\n};\n\nconst EXPORTED_SYMBOLS = [\"Dedupe\"];\n","/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/. */\n\"use strict\";\n\nconst {actionTypes: at} = ChromeUtils.import(\"resource://activity-stream/common/Actions.jsm\", {});\nconst {Dedupe} = ChromeUtils.import(\"resource://activity-stream/common/Dedupe.jsm\", {});\n\nconst TOP_SITES_DEFAULT_ROWS = 1;\nconst TOP_SITES_MAX_SITES_PER_ROW = 8;\n\nconst dedupe = new Dedupe(site => site && site.url);\n\nconst INITIAL_STATE = {\n App: {\n // Have we received real data from the app yet?\n initialized: false\n },\n Snippets: {initialized: false},\n TopSites: {\n // Have we received real data from history yet?\n initialized: false,\n // The history (and possibly default) links\n rows: [],\n // Used in content only to dispatch action to TopSiteForm.\n editForm: null,\n // Used in content only to open the SearchShortcutsForm modal.\n showSearchShortcutsForm: false,\n // The list of available search shortcuts.\n searchShortcuts: []\n },\n Prefs: {\n initialized: false,\n values: {}\n },\n Dialog: {\n visible: false,\n data: {}\n },\n Sections: []\n};\n\nfunction App(prevState = INITIAL_STATE.App, action) {\n switch (action.type) {\n case at.INIT:\n return Object.assign({}, prevState, action.data || {}, {initialized: true});\n default:\n return prevState;\n }\n}\n\n/**\n * insertPinned - Inserts pinned links in their specified slots\n *\n * @param {array} a list of links\n * @param {array} a list of pinned links\n * @return {array} resulting list of links with pinned links inserted\n */\nfunction insertPinned(links, pinned) {\n // Remove any pinned links\n const pinnedUrls = pinned.map(link => link && link.url);\n let newLinks = links.filter(link => (link ? !pinnedUrls.includes(link.url) : false));\n newLinks = newLinks.map(link => {\n if (link && link.isPinned) {\n delete link.isPinned;\n delete link.pinIndex;\n }\n return link;\n });\n\n // Then insert them in their specified location\n pinned.forEach((val, index) => {\n if (!val) { return; }\n let link = Object.assign({}, val, {isPinned: true, pinIndex: index});\n if (index > newLinks.length) {\n newLinks[index] = link;\n } else {\n newLinks.splice(index, 0, link);\n }\n });\n\n return newLinks;\n}\n\nfunction TopSites(prevState = INITIAL_STATE.TopSites, action) {\n let hasMatch;\n let newRows;\n switch (action.type) {\n case at.TOP_SITES_UPDATED:\n if (!action.data || !action.data.links) {\n return prevState;\n }\n return Object.assign({}, prevState, {initialized: true, rows: action.data.links}, action.data.pref ? {pref: action.data.pref} : {});\n case at.TOP_SITES_PREFS_UPDATED:\n return Object.assign({}, prevState, {pref: action.data.pref});\n case at.TOP_SITES_EDIT:\n return Object.assign({}, prevState, {\n editForm: {\n index: action.data.index,\n previewResponse: null\n }\n });\n case at.TOP_SITES_CANCEL_EDIT:\n return Object.assign({}, prevState, {editForm: null});\n case at.TOP_SITES_OPEN_SEARCH_SHORTCUTS_MODAL:\n return Object.assign({}, prevState, {showSearchShortcutsForm: true});\n case at.TOP_SITES_CLOSE_SEARCH_SHORTCUTS_MODAL:\n return Object.assign({}, prevState, {showSearchShortcutsForm: false});\n case at.PREVIEW_RESPONSE:\n if (!prevState.editForm || action.data.url !== prevState.editForm.previewUrl) {\n return prevState;\n }\n return Object.assign({}, prevState, {\n editForm: {\n index: prevState.editForm.index,\n previewResponse: action.data.preview,\n previewUrl: action.data.url\n }\n });\n case at.PREVIEW_REQUEST:\n if (!prevState.editForm) {\n return prevState;\n }\n return Object.assign({}, prevState, {\n editForm: {\n index: prevState.editForm.index,\n previewResponse: null,\n previewUrl: action.data.url\n }\n });\n case at.PREVIEW_REQUEST_CANCEL:\n if (!prevState.editForm) {\n return prevState;\n }\n return Object.assign({}, prevState, {\n editForm: {\n index: prevState.editForm.index,\n previewResponse: null\n }\n });\n case at.SCREENSHOT_UPDATED:\n newRows = prevState.rows.map(row => {\n if (row && row.url === action.data.url) {\n hasMatch = true;\n return Object.assign({}, row, {screenshot: action.data.screenshot});\n }\n return row;\n });\n return hasMatch ? Object.assign({}, prevState, {rows: newRows}) : prevState;\n case at.PLACES_BOOKMARK_ADDED:\n if (!action.data) {\n return prevState;\n }\n newRows = prevState.rows.map(site => {\n if (site && site.url === action.data.url) {\n const {bookmarkGuid, bookmarkTitle, dateAdded} = action.data;\n return Object.assign({}, site, {bookmarkGuid, bookmarkTitle, bookmarkDateCreated: dateAdded});\n }\n return site;\n });\n return Object.assign({}, prevState, {rows: newRows});\n case at.PLACES_BOOKMARK_REMOVED:\n if (!action.data) {\n return prevState;\n }\n newRows = prevState.rows.map(site => {\n if (site && site.url === action.data.url) {\n const newSite = Object.assign({}, site);\n delete newSite.bookmarkGuid;\n delete newSite.bookmarkTitle;\n delete newSite.bookmarkDateCreated;\n return newSite;\n }\n return site;\n });\n return Object.assign({}, prevState, {rows: newRows});\n case at.PLACES_LINK_DELETED:\n if (!action.data) {\n return prevState;\n }\n newRows = prevState.rows.filter(site => action.data.url !== site.url);\n return Object.assign({}, prevState, {rows: newRows});\n case at.UPDATE_SEARCH_SHORTCUTS:\n return {...prevState, searchShortcuts: action.data.searchShortcuts};\n default:\n return prevState;\n }\n}\n\nfunction Dialog(prevState = INITIAL_STATE.Dialog, action) {\n switch (action.type) {\n case at.DIALOG_OPEN:\n return Object.assign({}, prevState, {visible: true, data: action.data});\n case at.DIALOG_CANCEL:\n return Object.assign({}, prevState, {visible: false});\n case at.DELETE_HISTORY_URL:\n return Object.assign({}, INITIAL_STATE.Dialog);\n default:\n return prevState;\n }\n}\n\nfunction Prefs(prevState = INITIAL_STATE.Prefs, action) {\n let newValues;\n switch (action.type) {\n case at.PREFS_INITIAL_VALUES:\n return Object.assign({}, prevState, {initialized: true, values: action.data});\n case at.PREF_CHANGED:\n newValues = Object.assign({}, prevState.values);\n newValues[action.data.name] = action.data.value;\n return Object.assign({}, prevState, {values: newValues});\n default:\n return prevState;\n }\n}\n\nfunction Sections(prevState = INITIAL_STATE.Sections, action) {\n let hasMatch;\n let newState;\n switch (action.type) {\n case at.SECTION_DEREGISTER:\n return prevState.filter(section => section.id !== action.data);\n case at.SECTION_REGISTER:\n // If section exists in prevState, update it\n newState = prevState.map(section => {\n if (section && section.id === action.data.id) {\n hasMatch = true;\n return Object.assign({}, section, action.data);\n }\n return section;\n });\n // Otherwise, append it\n if (!hasMatch) {\n const initialized = !!(action.data.rows && action.data.rows.length > 0);\n const section = Object.assign({title: \"\", rows: [], enabled: false}, action.data, {initialized});\n newState.push(section);\n }\n return newState;\n case at.SECTION_UPDATE:\n newState = prevState.map(section => {\n if (section && section.id === action.data.id) {\n // If the action is updating rows, we should consider initialized to be true.\n // This can be overridden if initialized is defined in the action.data\n const initialized = action.data.rows ? {initialized: true} : {};\n\n // Make sure pinned cards stay at their current position when rows are updated.\n // Disabling a section (SECTION_UPDATE with empty rows) does not retain pinned cards.\n if (action.data.rows && action.data.rows.length > 0 && section.rows.find(card => card.pinned)) {\n const rows = Array.from(action.data.rows);\n section.rows.forEach((card, index) => {\n if (card.pinned) {\n rows.splice(index, 0, card);\n }\n });\n return Object.assign({}, section, initialized, Object.assign({}, action.data, {rows}));\n }\n\n return Object.assign({}, section, initialized, action.data);\n }\n return section;\n });\n\n if (!action.data.dedupeConfigurations) {\n return newState;\n }\n\n action.data.dedupeConfigurations.forEach(dedupeConf => {\n newState = newState.map(section => {\n if (section.id === dedupeConf.id) {\n const dedupedRows = dedupeConf.dedupeFrom.reduce((rows, dedupeSectionId) => {\n const dedupeSection = newState.find(s => s.id === dedupeSectionId);\n const [, newRows] = dedupe.group(dedupeSection.rows, rows);\n return newRows;\n }, section.rows);\n\n return Object.assign({}, section, {rows: dedupedRows});\n }\n\n return section;\n });\n });\n\n return newState;\n case at.SECTION_UPDATE_CARD:\n return prevState.map(section => {\n if (section && section.id === action.data.id && section.rows) {\n const newRows = section.rows.map(card => {\n if (card.url === action.data.url) {\n return Object.assign({}, card, action.data.options);\n }\n return card;\n });\n return Object.assign({}, section, {rows: newRows});\n }\n return section;\n });\n case at.PLACES_BOOKMARK_ADDED:\n if (!action.data) {\n return prevState;\n }\n return prevState.map(section => Object.assign({}, section, {\n rows: section.rows.map(item => {\n // find the item within the rows that is attempted to be bookmarked\n if (item.url === action.data.url) {\n const {bookmarkGuid, bookmarkTitle, dateAdded} = action.data;\n return Object.assign({}, item, {\n bookmarkGuid,\n bookmarkTitle,\n bookmarkDateCreated: dateAdded,\n type: \"bookmark\"\n });\n }\n return item;\n })\n }));\n case at.PLACES_SAVED_TO_POCKET:\n if (!action.data) {\n return prevState;\n }\n return prevState.map(section => Object.assign({}, section, {\n rows: section.rows.map(item => {\n if (item.url === action.data.url) {\n return Object.assign({}, item, {\n open_url: action.data.open_url,\n pocket_id: action.data.pocket_id,\n title: action.data.title,\n type: \"pocket\"\n });\n }\n return item;\n })\n }));\n case at.PLACES_BOOKMARK_REMOVED:\n if (!action.data) {\n return prevState;\n }\n return prevState.map(section => Object.assign({}, section, {\n rows: section.rows.map(item => {\n // find the bookmark within the rows that is attempted to be removed\n if (item.url === action.data.url) {\n const newSite = Object.assign({}, item);\n delete newSite.bookmarkGuid;\n delete newSite.bookmarkTitle;\n delete newSite.bookmarkDateCreated;\n if (!newSite.type || newSite.type === \"bookmark\") {\n newSite.type = \"history\";\n }\n return newSite;\n }\n return item;\n })\n }));\n case at.PLACES_LINK_DELETED:\n case at.PLACES_LINK_BLOCKED:\n if (!action.data) {\n return prevState;\n }\n return prevState.map(section =>\n Object.assign({}, section, {rows: section.rows.filter(site => site.url !== action.data.url)}));\n case at.DELETE_FROM_POCKET:\n case at.ARCHIVE_FROM_POCKET:\n return prevState.map(section =>\n Object.assign({}, section, {rows: section.rows.filter(site => site.pocket_id !== action.data.pocket_id)}));\n default:\n return prevState;\n }\n}\n\nfunction Snippets(prevState = INITIAL_STATE.Snippets, action) {\n switch (action.type) {\n case at.SNIPPETS_DATA:\n return Object.assign({}, prevState, {initialized: true}, action.data);\n case at.SNIPPET_BLOCKED:\n return Object.assign({}, prevState, {blockList: prevState.blockList.concat(action.data)});\n case at.SNIPPETS_BLOCKLIST_CLEARED:\n return Object.assign({}, prevState, {blockList: []});\n case at.SNIPPETS_RESET:\n return INITIAL_STATE.Snippets;\n default:\n return prevState;\n }\n}\n\nthis.INITIAL_STATE = INITIAL_STATE;\nthis.TOP_SITES_DEFAULT_ROWS = TOP_SITES_DEFAULT_ROWS;\nthis.TOP_SITES_MAX_SITES_PER_ROW = TOP_SITES_MAX_SITES_PER_ROW;\n\nthis.reducers = {TopSites, App, Snippets, Prefs, Dialog, Sections};\n\nconst EXPORTED_SYMBOLS = [\"reducers\", \"INITIAL_STATE\", \"insertPinned\", \"TOP_SITES_DEFAULT_ROWS\", \"TOP_SITES_MAX_SITES_PER_ROW\"];\n","import React from \"react\";\n\nexport class ModalOverlay extends React.PureComponent {\n componentWillMount() {\n this.setState({active: true});\n document.body.classList.add(\"modal-open\");\n }\n\n componentWillUnmount() {\n document.body.classList.remove(\"modal-open\");\n this.setState({active: false});\n }\n\n render() {\n const {active} = this.state;\n const {title, button_label} = this.props;\n return (\n
    \n
    \n
    \n

    {title}

    \n {this.props.children}\n
    \n \n
    \n
    \n
    \n );\n }\n}\n","import {ModalOverlay} from \"../../components/ModalOverlay/ModalOverlay\";\nimport React from \"react\";\n\nclass OnboardingCard extends React.PureComponent {\n constructor(props) {\n super(props);\n this.onClick = this.onClick.bind(this);\n }\n\n onClick() {\n const {props} = this;\n props.sendUserActionTelemetry({event: \"CLICK_BUTTON\", message_id: props.id, id: props.UISurface});\n props.onAction(props.content);\n }\n\n render() {\n const {content} = this.props;\n return (\n
    \n
    \n
    \n \n

    {content.title}

    \n

    {content.text}

    \n
    \n \n \n \n
    \n
    \n );\n }\n}\n\nexport class OnboardingMessage extends React.PureComponent {\n render() {\n const {props} = this;\n return (\n \n
    \n {props.bundle.map(message => (\n \n ))}\n
    \n
    \n );\n }\n}\n","export const cardContextTypes = {\n history: {\n intlID: \"type_label_visited\",\n icon: \"history-item\"\n },\n bookmark: {\n intlID: \"type_label_bookmarked\",\n icon: \"bookmark-added\"\n },\n trending: {\n intlID: \"type_label_recommended\",\n icon: \"trending\"\n },\n now: {\n intlID: \"type_label_now\",\n icon: \"now\"\n },\n pocket: {\n intlID: \"type_label_pocket\",\n icon: \"pocket\"\n },\n download: {\n intlID: \"type_label_downloaded\",\n icon: \"download\"\n }\n};\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {cardContextTypes} from \"./types\";\nimport {connect} from \"react-redux\";\nimport {FormattedMessage} from \"react-intl\";\nimport {GetPlatformString} from \"content-src/lib/link-menu-options\";\nimport {LinkMenu} from \"content-src/components/LinkMenu/LinkMenu\";\nimport React from \"react\";\nimport {ScreenshotUtils} from \"content-src/lib/screenshot-utils\";\n\n// Keep track of pending image loads to only request once\nconst gImageLoading = new Map();\n\n/**\n * Card component.\n * Cards are found within a Section component and contain information about a link such\n * as preview image, page title, page description, and some context about if the page\n * was visited, bookmarked, trending etc...\n * Each Section can make an unordered list of Cards which will create one instane of\n * this class. Each card will then get a context menu which reflects the actions that\n * can be done on this Card.\n */\nexport class _Card extends React.PureComponent {\n constructor(props) {\n super(props);\n this.state = {\n activeCard: null,\n imageLoaded: false,\n showContextMenu: false,\n cardImage: null\n };\n this.onMenuButtonClick = this.onMenuButtonClick.bind(this);\n this.onMenuUpdate = this.onMenuUpdate.bind(this);\n this.onLinkClick = this.onLinkClick.bind(this);\n }\n\n /**\n * Helper to conditionally load an image and update state when it loads.\n */\n async maybeLoadImage() {\n // No need to load if it's already loaded or no image\n const {cardImage} = this.state;\n if (!cardImage) {\n return;\n }\n\n const imageUrl = cardImage.url;\n if (!this.state.imageLoaded) {\n // Initialize a promise to share a load across multiple card updates\n if (!gImageLoading.has(imageUrl)) {\n const loaderPromise = new Promise((resolve, reject) => {\n const loader = new Image();\n loader.addEventListener(\"load\", resolve);\n loader.addEventListener(\"error\", reject);\n loader.src = imageUrl;\n });\n\n // Save and remove the promise only while it's pending\n gImageLoading.set(imageUrl, loaderPromise);\n loaderPromise.catch(ex => ex).then(() => gImageLoading.delete(imageUrl)).catch();\n }\n\n // Wait for the image whether just started loading or reused promise\n await gImageLoading.get(imageUrl);\n\n // Only update state if we're still waiting to load the original image\n if (ScreenshotUtils.isRemoteImageLocal(this.state.cardImage, this.props.link.image) &&\n !this.state.imageLoaded) {\n this.setState({imageLoaded: true});\n }\n }\n }\n\n /**\n * Helper to obtain the next state based on nextProps and prevState.\n *\n * NOTE: Rename this method to getDerivedStateFromProps when we update React\n * to >= 16.3. We will need to update tests as well. We cannot rename this\n * method to getDerivedStateFromProps now because there is a mismatch in\n * the React version that we are using for both testing and production.\n * (i.e. react-test-render => \"16.3.2\", react => \"16.2.0\").\n *\n * See https://github.com/airbnb/enzyme/blob/master/packages/enzyme-adapter-react-16/package.json#L43.\n */\n static getNextStateFromProps(nextProps, prevState) {\n const {image} = nextProps.link;\n const imageInState = ScreenshotUtils.isRemoteImageLocal(prevState.cardImage, image);\n let nextState = null;\n\n // Image is updating.\n if (!imageInState && nextProps.link) {\n nextState = {imageLoaded: false};\n }\n\n if (imageInState) {\n return nextState;\n }\n\n // Since image was updated, attempt to revoke old image blob URL, if it exists.\n ScreenshotUtils.maybeRevokeBlobObjectURL(prevState.cardImage);\n\n nextState = nextState || {};\n nextState.cardImage = ScreenshotUtils.createLocalImageObject(image);\n\n return nextState;\n }\n\n onMenuButtonClick(event) {\n event.preventDefault();\n this.setState({\n activeCard: this.props.index,\n showContextMenu: true\n });\n }\n\n /**\n * Report to telemetry additional information about the item.\n */\n _getTelemetryInfo() {\n // Filter out \"history\" type for being the default\n if (this.props.link.type !== \"history\") {\n return {value: {card_type: this.props.link.type}};\n }\n\n return null;\n }\n\n onLinkClick(event) {\n event.preventDefault();\n if (this.props.link.type === \"download\") {\n this.props.dispatch(ac.OnlyToMain({\n type: at.SHOW_DOWNLOAD_FILE,\n data: this.props.link\n }));\n } else {\n const {altKey, button, ctrlKey, metaKey, shiftKey} = event;\n this.props.dispatch(ac.OnlyToMain({\n type: at.OPEN_LINK,\n data: Object.assign(this.props.link, {event: {altKey, button, ctrlKey, metaKey, shiftKey}})\n }));\n }\n if (this.props.isWebExtension) {\n this.props.dispatch(ac.WebExtEvent(at.WEBEXT_CLICK, {\n source: this.props.eventSource,\n url: this.props.link.url,\n action_position: this.props.index\n }));\n } else {\n this.props.dispatch(ac.UserEvent(Object.assign({\n event: \"CLICK\",\n source: this.props.eventSource,\n action_position: this.props.index\n }, this._getTelemetryInfo())));\n\n if (this.props.shouldSendImpressionStats) {\n this.props.dispatch(ac.ImpressionStats({\n source: this.props.eventSource,\n click: 0,\n tiles: [{id: this.props.link.guid, pos: this.props.index}]\n }));\n }\n }\n }\n\n onMenuUpdate(showContextMenu) {\n this.setState({showContextMenu});\n }\n\n componentDidMount() {\n this.maybeLoadImage();\n }\n\n componentDidUpdate() {\n this.maybeLoadImage();\n }\n\n // NOTE: Remove this function when we update React to >= 16.3 since React will\n // call getDerivedStateFromProps automatically. We will also need to\n // rename getNextStateFromProps to getDerivedStateFromProps.\n componentWillMount() {\n const nextState = _Card.getNextStateFromProps(this.props, this.state);\n if (nextState) {\n this.setState(nextState);\n }\n }\n\n // NOTE: Remove this function when we update React to >= 16.3 since React will\n // call getDerivedStateFromProps automatically. We will also need to\n // rename getNextStateFromProps to getDerivedStateFromProps.\n componentWillReceiveProps(nextProps) {\n const nextState = _Card.getNextStateFromProps(nextProps, this.state);\n if (nextState) {\n this.setState(nextState);\n }\n }\n\n componentWillUnmount() {\n ScreenshotUtils.maybeRevokeBlobObjectURL(this.state.cardImage);\n }\n\n render() {\n const {index, className, link, dispatch, contextMenuOptions, eventSource, shouldSendImpressionStats} = this.props;\n const {props} = this;\n const isContextMenuOpen = this.state.showContextMenu && this.state.activeCard === index;\n // Display \"now\" as \"trending\" until we have new strings #3402\n const {icon, intlID} = cardContextTypes[link.type === \"now\" ? \"trending\" : link.type] || {};\n const hasImage = this.state.cardImage || link.hasImage;\n const imageStyle = {backgroundImage: this.state.cardImage ? `url(${this.state.cardImage.url})` : \"none\"};\n const outerClassName = [\n \"card-outer\",\n className,\n isContextMenuOpen && \"active\",\n props.placeholder && \"placeholder\"\n ].filter(v => v).join(\" \");\n\n return (
  • \n \n
  • );\n }\n}\n_Card.defaultProps = {link: {}};\nexport const Card = connect(state => ({platform: state.Prefs.values.platform}))(_Card);\nexport const PlaceholderCard = props => ;\n","import {FormattedMessage} from \"react-intl\";\nimport React from \"react\";\n\nexport class TopSiteFormInput extends React.PureComponent {\n constructor(props) {\n super(props);\n this.state = {validationError: this.props.validationError};\n this.onChange = this.onChange.bind(this);\n this.onMount = this.onMount.bind(this);\n }\n\n componentWillReceiveProps(nextProps) {\n if (nextProps.shouldFocus && !this.props.shouldFocus) {\n this.input.focus();\n }\n if (nextProps.validationError && !this.props.validationError) {\n this.setState({validationError: true});\n }\n // If the component is in an error state but the value was cleared by the parent\n if (this.state.validationError && !nextProps.value) {\n this.setState({validationError: false});\n }\n }\n\n onChange(ev) {\n if (this.state.validationError) {\n this.setState({validationError: false});\n }\n this.props.onChange(ev);\n }\n\n onMount(input) {\n this.input = input;\n }\n\n render() {\n const showClearButton = this.props.value && this.props.onClear;\n const {typeUrl} = this.props;\n const {validationError} = this.state;\n\n return (