зеркало из https://github.com/mozilla/gecko-dev.git
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
This commit is contained in:
Родитель
80dafc6927
Коммит
3bb8b396bb
|
@ -1,6 +1,7 @@
|
||||||
import {actionCreators as ac, actionTypes as at} from "common/Actions.jsm";
|
import {actionCreators as ac, actionTypes as at} from "common/Actions.jsm";
|
||||||
import {FormattedMessage} from "react-intl";
|
import {FormattedMessage} from "react-intl";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
|
import {TOP_SITES_SOURCE} from "./TopSitesConstants";
|
||||||
|
|
||||||
class SelectableSearchShortcut extends React.PureComponent {
|
class SelectableSearchShortcut extends React.PureComponent {
|
||||||
render() {
|
render() {
|
||||||
|
@ -74,7 +75,7 @@ export class SearchShortcutsForm extends React.PureComponent {
|
||||||
if (shortcut.isSelected && !alreadyPinned) {
|
if (shortcut.isSelected && !alreadyPinned) {
|
||||||
pinQueue.push(this._searchTopSite(shortcut));
|
pinQueue.push(this._searchTopSite(shortcut));
|
||||||
} else if (!shortcut.isSelected && alreadyPinned) {
|
} 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()
|
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,
|
type: at.TOP_SITES_UNPIN,
|
||||||
data: {site: shortcut}
|
data: {site: shortcut}
|
||||||
}));
|
}));
|
||||||
|
this.props.dispatch(ac.UserEvent({
|
||||||
|
source: TOP_SITES_SOURCE,
|
||||||
|
event: "SEARCH_EDIT_DELETE",
|
||||||
|
value: {search_vendor: shortcut.searchVendor}
|
||||||
|
}));
|
||||||
});
|
});
|
||||||
|
|
||||||
this.props.onClose();
|
this.props.onClose();
|
||||||
|
@ -115,7 +126,8 @@ export class SearchShortcutsForm extends React.PureComponent {
|
||||||
return {
|
return {
|
||||||
url: shortcut.url,
|
url: shortcut.url,
|
||||||
searchTopSite: true,
|
searchTopSite: true,
|
||||||
label: shortcut.keyword
|
label: shortcut.keyword,
|
||||||
|
searchVendor: shortcut.shortURL
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,6 +17,7 @@ export class TopSiteLink extends React.PureComponent {
|
||||||
super(props);
|
super(props);
|
||||||
this.state = {screenshotImage: null};
|
this.state = {screenshotImage: null};
|
||||||
this.onDragEvent = this.onDragEvent.bind(this);
|
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);
|
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() {
|
render() {
|
||||||
const {children, className, defaultStyle, isDraggable, link, onClick, title} = this.props;
|
const {children, className, defaultStyle, isDraggable, link, onClick, title} = this.props;
|
||||||
const topSiteOuterClassName = `top-site-outer${className ? ` ${className}` : ""}${link.isDragged ? " dragged" : ""}${link.searchTopSite ? " search-shortcut" : ""}`;
|
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 (<li className={topSiteOuterClassName} onDrop={this.onDragEvent} onDragOver={this.onDragEvent} onDragEnter={this.onDragEvent} onDragLeave={this.onDragEvent} {...draggableProps}>
|
return (<li className={topSiteOuterClassName} onDrop={this.onDragEvent} onDragOver={this.onDragEvent} onDragEnter={this.onDragEvent} onDragLeave={this.onDragEvent} {...draggableProps}>
|
||||||
<div className="top-site-inner">
|
<div className="top-site-inner">
|
||||||
<a href={!link.searchTopSite && link.url} onClick={onClick} draggable={true}>
|
<a href={!link.searchTopSite && link.url} tabIndex="0" onKeyPress={this.onKeyPress} onClick={onClick} draggable={true}>
|
||||||
<div className="tile" aria-hidden={true} data-fallback={letterFallback}>
|
<div className="tile" aria-hidden={true} data-fallback={letterFallback}>
|
||||||
<div className={imageClassName} style={imageStyle} />
|
<div className={imageClassName} style={imageStyle} />
|
||||||
{link.searchTopSite && <div className="top-site-icon search-topsite" />}
|
{link.searchTopSite && <div className="top-site-icon search-topsite" />}
|
||||||
|
|
|
@ -64,10 +64,15 @@ export class _TopSites extends React.PureComponent {
|
||||||
const topSites = this._getVisibleTopSites();
|
const topSites = this._getVisibleTopSites();
|
||||||
const topSitesIconsStats = countTopSitesIconsTypes(topSites);
|
const topSitesIconsStats = countTopSitesIconsTypes(topSites);
|
||||||
const topSitesPinned = topSites.filter(site => !!site.isPinned).length;
|
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.
|
// Dispatch telemetry event with the count of TopSites images types.
|
||||||
this.props.dispatch(ac.AlsoToMain({
|
this.props.dispatch(ac.AlsoToMain({
|
||||||
type: at.SAVE_SESSION_PERF_DATA,
|
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
|
||||||
|
}
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4065,10 +4065,15 @@ class _TopSites extends react__WEBPACK_IMPORTED_MODULE_6___default.a.PureCompone
|
||||||
const topSites = this._getVisibleTopSites();
|
const topSites = this._getVisibleTopSites();
|
||||||
const topSitesIconsStats = countTopSitesIconsTypes(topSites);
|
const topSitesIconsStats = countTopSitesIconsTypes(topSites);
|
||||||
const topSitesPinned = topSites.filter(site => !!site.isPinned).length;
|
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.
|
// Dispatch telemetry event with the count of TopSites images types.
|
||||||
this.props.dispatch(common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].AlsoToMain({
|
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,
|
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_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__ = __webpack_require__(5);
|
||||||
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);
|
/* 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) {
|
if (shortcut.isSelected && !alreadyPinned) {
|
||||||
pinQueue.push(this._searchTopSite(shortcut));
|
pinQueue.push(this._searchTopSite(shortcut));
|
||||||
} else if (!shortcut.isSelected && alreadyPinned) {
|
} 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()
|
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,
|
type: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionTypes"].TOP_SITES_UNPIN,
|
||||||
data: { site: shortcut }
|
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();
|
this.props.onClose();
|
||||||
|
@ -4341,7 +4358,8 @@ class SearchShortcutsForm extends react__WEBPACK_IMPORTED_MODULE_2___default.a.P
|
||||||
return {
|
return {
|
||||||
url: shortcut.url,
|
url: shortcut.url,
|
||||||
searchTopSite: true,
|
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);
|
super(props);
|
||||||
this.state = { screenshotImage: null };
|
this.state = { screenshotImage: null };
|
||||||
this.onDragEvent = this.onDragEvent.bind(this);
|
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);
|
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() {
|
render() {
|
||||||
const { children, className, defaultStyle, isDraggable, link, onClick, title } = this.props;
|
const { children, className, defaultStyle, isDraggable, link, onClick, title } = this.props;
|
||||||
const topSiteOuterClassName = `top-site-outer${className ? ` ${className}` : ""}${link.isDragged ? " dragged" : ""}${link.searchTopSite ? " search-shortcut" : ""}`;
|
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" },
|
{ className: "top-site-inner" },
|
||||||
react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement(
|
react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement(
|
||||||
"a",
|
"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(
|
react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement(
|
||||||
"div",
|
"div",
|
||||||
{ className: "tile", "aria-hidden": true, "data-fallback": letterFallback },
|
{ className: "tile", "aria-hidden": true, "data-fallback": letterFallback },
|
||||||
|
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -223,6 +223,7 @@ and losing focus. | :one:
|
||||||
| `rich_icon` | [Optional] Number of topsites that display a high quality favicon. | :one:
|
| `rich_icon` | [Optional] Number of topsites that display a high quality favicon. | :one:
|
||||||
| `no_image` | [Optional] Number of topsites that have no screenshot. | :one:
|
| `no_image` | [Optional] Number of topsites that have no screenshot. | :one:
|
||||||
| `topsites_pinned` | [Optional] Number of topsites that are pinned. | :one:
|
| `topsites_pinned` | [Optional] Number of topsites that are pinned. | :one:
|
||||||
|
| `topsites_search_shortcuts` | [Optional] Number of search shortcut topsites. | :one:
|
||||||
| `visibility_event_rcvd_ts` | [Optional][Server Counter][Server Alert for too many omissions] DOMHighResTimeStamp of when the page itself receives an event that document.visibilityState == visible. | :one:
|
| `visibility_event_rcvd_ts` | [Optional][Server Counter][Server Alert for too many omissions] DOMHighResTimeStamp of when the page itself receives an event that document.visibilityState == visible. | :one:
|
||||||
| `tiles` | [Required] A list of tile objects for the Pocket articles. Each tile object mush have a ID, and optionally a "pos" property to indicate the tile position | :one:
|
| `tiles` | [Required] A list of tile objects for the Pocket articles. Each tile object mush have a ID, and optionally a "pos" property to indicate the tile position | :one:
|
||||||
| `click` | [Optional] An integer to record the 0-based index when user clicks on a Pocket tile. | :one:
|
| `click` | [Optional] An integer to record the 0-based index when user clicks on a Pocket tile. | :one:
|
||||||
|
|
|
@ -110,11 +110,10 @@ A user event ping includes some basic metadata (tab id, addon version, etc.) as
|
||||||
#### Adding a search shortcut
|
#### Adding a search shortcut
|
||||||
```js
|
```js
|
||||||
{
|
{
|
||||||
"event": "ADD_SEARCH_SHORTCUT",
|
"event": "SEARCH_EDIT_ADD",
|
||||||
"source": "TOP_SITES",
|
"source": "TOP_SITES",
|
||||||
"action_position": 2,
|
"action_position": 2,
|
||||||
"value": {
|
"value": {
|
||||||
"card_type": "search",
|
|
||||||
"search_vendor": "google"
|
"search_vendor": "google"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -129,14 +128,13 @@ A user event ping includes some basic metadata (tab id, addon version, etc.) as
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Editing a search shortcut
|
#### Deleting a search shortcut
|
||||||
```js
|
```js
|
||||||
{
|
{
|
||||||
"event": "EDIT_SEARCH_SHORTCUT",
|
"event": "SEARCH_EDIT_DELETE",
|
||||||
"source": "TOP_SITES",
|
"source": "TOP_SITES",
|
||||||
"action_position": 2,
|
"action_position": 2,
|
||||||
"value": {
|
"value": {
|
||||||
"card_type": "search",
|
|
||||||
"search_vendor": "google"
|
"search_vendor": "google"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -441,6 +439,9 @@ perf: {
|
||||||
// The number of Top Sites that are pinned.
|
// The number of Top Sites that are pinned.
|
||||||
"topsites_pinned": 3,
|
"topsites_pinned": 3,
|
||||||
|
|
||||||
|
// The number of search shortcut Top Sites.
|
||||||
|
"topsites_search_shortcuts": 2,
|
||||||
|
|
||||||
// How much longer the data took, in milliseconds, to be ready for display
|
// How much longer the data took, in milliseconds, to be ready for display
|
||||||
// than it would have been in the ideal case. The user currently sees placeholder
|
// than it would have been in the ideal case. The user currently sees placeholder
|
||||||
// cards instead of real cards for approximately this length of time. This is
|
// cards instead of real cards for approximately this length of time. This is
|
||||||
|
|
|
@ -648,7 +648,9 @@ this.TopSitesFeed = class TopSitesFeed {
|
||||||
this.refresh({broadcast: true});
|
this.refresh({broadcast: true});
|
||||||
break;
|
break;
|
||||||
case SEARCH_SHORTCUTS_EXPERIMENT:
|
case SEARCH_SHORTCUTS_EXPERIMENT:
|
||||||
if (!action.data.value) {
|
if (action.data.value) {
|
||||||
|
this.updateCustomSearchShortcuts();
|
||||||
|
} else {
|
||||||
this.disableSearchImprovements();
|
this.disableSearchImprovements();
|
||||||
}
|
}
|
||||||
this.refresh({broadcast: true});
|
this.refresh({broadcast: true});
|
||||||
|
|
|
@ -173,6 +173,7 @@ section_menu_action_expand_section=Επέκταση ενότητας
|
||||||
section_menu_action_manage_section=Διαχείριση ενότητας
|
section_menu_action_manage_section=Διαχείριση ενότητας
|
||||||
section_menu_action_manage_webext=Διαχείριση επέκτασης
|
section_menu_action_manage_webext=Διαχείριση επέκτασης
|
||||||
section_menu_action_add_topsite=Προσθήκη κορυφαίας ιστοσελίδας
|
section_menu_action_add_topsite=Προσθήκη κορυφαίας ιστοσελίδας
|
||||||
|
section_menu_action_add_search_engine=Προσθήκη μηχανής αναζήτησης
|
||||||
section_menu_action_move_up=Μετακίνηση επάνω
|
section_menu_action_move_up=Μετακίνηση επάνω
|
||||||
section_menu_action_move_down=Μετακίνηση κάτω
|
section_menu_action_move_down=Μετακίνηση κάτω
|
||||||
section_menu_action_privacy_notice=Σημείωση απορρήτου
|
section_menu_action_privacy_notice=Σημείωση απορρήτου
|
||||||
|
@ -201,4 +202,3 @@ firstrun_privacy_notice=Σημείωση Απορρήτου
|
||||||
|
|
||||||
firstrun_continue_to_login=Συνέχεια
|
firstrun_continue_to_login=Συνέχεια
|
||||||
firstrun_skip_login=Παράλειψη βήματος
|
firstrun_skip_login=Παράλειψη βήματος
|
||||||
section_menu_action_add_search_engine=Προσθήκη μηχανής αναζήτησης
|
|
||||||
|
|
|
@ -173,6 +173,7 @@ section_menu_action_expand_section=Expand Section
|
||||||
section_menu_action_manage_section=Manage Section
|
section_menu_action_manage_section=Manage Section
|
||||||
section_menu_action_manage_webext=Manage Extension
|
section_menu_action_manage_webext=Manage Extension
|
||||||
section_menu_action_add_topsite=Add Top Site
|
section_menu_action_add_topsite=Add Top Site
|
||||||
|
section_menu_action_add_search_engine=Add Search Engine
|
||||||
section_menu_action_move_up=Move Up
|
section_menu_action_move_up=Move Up
|
||||||
section_menu_action_move_down=Move Down
|
section_menu_action_move_down=Move Down
|
||||||
section_menu_action_privacy_notice=Privacy Notice
|
section_menu_action_privacy_notice=Privacy Notice
|
||||||
|
@ -201,4 +202,3 @@ firstrun_privacy_notice=Privacy Notice
|
||||||
|
|
||||||
firstrun_continue_to_login=Continue
|
firstrun_continue_to_login=Continue
|
||||||
firstrun_skip_login=Skip this step
|
firstrun_skip_login=Skip this step
|
||||||
section_menu_action_add_search_engine=Add Search Engine
|
|
||||||
|
|
|
@ -173,6 +173,7 @@ section_menu_action_expand_section=Expandir sección
|
||||||
section_menu_action_manage_section=Administrar sección
|
section_menu_action_manage_section=Administrar sección
|
||||||
section_menu_action_manage_webext=Administrar extensión
|
section_menu_action_manage_webext=Administrar extensión
|
||||||
section_menu_action_add_topsite=Agregar Sitio más visitado
|
section_menu_action_add_topsite=Agregar Sitio más visitado
|
||||||
|
section_menu_action_add_search_engine=Agregar buscador
|
||||||
section_menu_action_move_up=Subir
|
section_menu_action_move_up=Subir
|
||||||
section_menu_action_move_down=Bajar
|
section_menu_action_move_down=Bajar
|
||||||
section_menu_action_privacy_notice=Nota de privacidad
|
section_menu_action_privacy_notice=Nota de privacidad
|
||||||
|
@ -201,4 +202,3 @@ firstrun_privacy_notice=Anuncio de privacidad
|
||||||
|
|
||||||
firstrun_continue_to_login=Continuar
|
firstrun_continue_to_login=Continuar
|
||||||
firstrun_skip_login=Saltear este paso
|
firstrun_skip_login=Saltear este paso
|
||||||
section_menu_action_add_search_engine=Agregar buscador
|
|
||||||
|
|
|
@ -173,6 +173,7 @@ section_menu_action_expand_section=Szakasz lenyitása
|
||||||
section_menu_action_manage_section=Szakasz kezelése
|
section_menu_action_manage_section=Szakasz kezelése
|
||||||
section_menu_action_manage_webext=Kiterjesztés kezelése
|
section_menu_action_manage_webext=Kiterjesztés kezelése
|
||||||
section_menu_action_add_topsite=Hozzáadás a népszerű oldalakhoz
|
section_menu_action_add_topsite=Hozzáadás a népszerű oldalakhoz
|
||||||
|
section_menu_action_add_search_engine=Keresőszolgáltatás hozzáadása
|
||||||
section_menu_action_move_up=Mozgatás felfelé
|
section_menu_action_move_up=Mozgatás felfelé
|
||||||
section_menu_action_move_down=Mozgatás lefelé
|
section_menu_action_move_down=Mozgatás lefelé
|
||||||
section_menu_action_privacy_notice=Adatvédelmi nyilatkozat
|
section_menu_action_privacy_notice=Adatvédelmi nyilatkozat
|
||||||
|
@ -201,4 +202,3 @@ firstrun_privacy_notice=Adatvédelmi nyilatkozatot
|
||||||
|
|
||||||
firstrun_continue_to_login=Folytatás
|
firstrun_continue_to_login=Folytatás
|
||||||
firstrun_skip_login=Lépés kihagyása
|
firstrun_skip_login=Lépés kihagyása
|
||||||
section_menu_action_add_search_engine=Keresőszolgáltatás hozzáadása
|
|
||||||
|
|
|
@ -173,6 +173,7 @@ section_menu_action_expand_section=Bentangkan Bagian
|
||||||
section_menu_action_manage_section=Kelola Bagian
|
section_menu_action_manage_section=Kelola Bagian
|
||||||
section_menu_action_manage_webext=Kelola Ekstensi
|
section_menu_action_manage_webext=Kelola Ekstensi
|
||||||
section_menu_action_add_topsite=Tambah Situs Pilihan
|
section_menu_action_add_topsite=Tambah Situs Pilihan
|
||||||
|
section_menu_action_add_search_engine=Tambahkan Mesin Pencari
|
||||||
section_menu_action_move_up=Naikkan
|
section_menu_action_move_up=Naikkan
|
||||||
section_menu_action_move_down=Turunkan
|
section_menu_action_move_down=Turunkan
|
||||||
section_menu_action_privacy_notice=Kebijakan Privasi
|
section_menu_action_privacy_notice=Kebijakan Privasi
|
||||||
|
@ -201,4 +202,3 @@ firstrun_privacy_notice=Pernyataan Privasi
|
||||||
|
|
||||||
firstrun_continue_to_login=Lanjutkan
|
firstrun_continue_to_login=Lanjutkan
|
||||||
firstrun_skip_login=Lewati langkah ini
|
firstrun_skip_login=Lewati langkah ini
|
||||||
section_menu_action_add_search_engine=Tambahkan Mesin Pencari
|
|
||||||
|
|
|
@ -201,4 +201,3 @@ firstrun_privacy_notice=informativa sulla privacy
|
||||||
|
|
||||||
firstrun_continue_to_login=Continua
|
firstrun_continue_to_login=Continua
|
||||||
firstrun_skip_login=Ignora questo passaggio
|
firstrun_skip_login=Ignora questo passaggio
|
||||||
section_menu_action_add_search_engine=Aggiungi motore di ricerca
|
|
||||||
|
|
|
@ -19,6 +19,8 @@ header_recommended_by={provider} ശുപാർശ ചെയ്തത്
|
||||||
type_label_visited=സന്ദർശിച്ചത്
|
type_label_visited=സന്ദർശിച്ചത്
|
||||||
type_label_bookmarked=അടയാളപ്പെടുത്തിയത്
|
type_label_bookmarked=അടയാളപ്പെടുത്തിയത്
|
||||||
type_label_recommended=ട്രെൻഡിംഗ്
|
type_label_recommended=ട്രെൻഡിംഗ്
|
||||||
|
type_label_pocket=പോക്കറ്റിലേക്ക് സംരക്ഷിച്ചു
|
||||||
|
type_label_downloaded=ഡൗൺലോഡ് ചെയ്തവ
|
||||||
|
|
||||||
# LOCALIZATION NOTE (menu_action_*): These strings are displayed in a context
|
# LOCALIZATION NOTE (menu_action_*): These strings are displayed in a context
|
||||||
# menu and are meant as a call to action for a given page.
|
# menu and are meant as a call to action for a given page.
|
||||||
|
@ -29,10 +31,10 @@ menu_action_remove_bookmark=അടയാളം മാറ്റുക
|
||||||
menu_action_open_new_window=പുതിയ ജാലകത്തിൽ തുറക്കുക
|
menu_action_open_new_window=പുതിയ ജാലകത്തിൽ തുറക്കുക
|
||||||
menu_action_open_private_window=പുതിയ രസഹ്യജാലകത്തിൽ തുറക്കുക
|
menu_action_open_private_window=പുതിയ രസഹ്യജാലകത്തിൽ തുറക്കുക
|
||||||
menu_action_dismiss=പുറത്താക്കുക
|
menu_action_dismiss=പുറത്താക്കുക
|
||||||
menu_action_delete=ചരിത്രത്തിൽ നിന്ന് ഒഴിവാക്കുക
|
menu_action_delete=നാള്വഴിയിൽ നിന്ന് ഒഴിവാക്കുക
|
||||||
menu_action_pin=പിൻ ചെയ്യുക
|
menu_action_pin=പിൻ ചെയ്യുക
|
||||||
menu_action_unpin=അൺപിൻ ചെയ്യുക
|
menu_action_unpin=അൺപിൻ ചെയ്യുക
|
||||||
confirm_history_delete_p1=നിങ്ങളുടെ ചരിത്രത്തിൽ നിന്ന് ഈ പേജിന്റെ എല്ലാ ഉദാഹരണങ്ങളും ഇല്ലാതാക്കാൻ നിങ്ങൾ താൽപ്പര്യപ്പെടുന്നുവെന്ന് തീർച്ചയാണോ?
|
confirm_history_delete_p1=നിങ്ങളുടെ നാള്വഴിയിൽ നിന്ന് ഈ പേജിന്റെ എല്ലാ ഉദാഹരണങ്ങളും ഇല്ലാതാക്കാൻ നിങ്ങൾ താൽപ്പര്യപ്പെടുന്നുവെന്ന് തീർച്ചയാണോ?
|
||||||
# LOCALIZATION NOTE (confirm_history_delete_notice_p2): this string is displayed in
|
# LOCALIZATION NOTE (confirm_history_delete_notice_p2): this string is displayed in
|
||||||
# the same dialog as confirm_history_delete_p1. "This action" refers to deleting a
|
# the same dialog as confirm_history_delete_p1. "This action" refers to deleting a
|
||||||
# page from history.
|
# page from history.
|
||||||
|
@ -119,7 +121,7 @@ topstories_empty_state=നിങ്ങൾ ഇവിടെ വരെ എത്ത
|
||||||
|
|
||||||
# LOCALIZATION NOTE (manual_migration_explanation2): This message is shown to encourage users to
|
# LOCALIZATION NOTE (manual_migration_explanation2): This message is shown to encourage users to
|
||||||
# import their browser profile from another browser they might be using.
|
# import their browser profile from another browser they might be using.
|
||||||
manual_migration_explanation2=മറ്റൊരു ബ്രൗസറിൽ നിന്നുള്ള ബുക്ക്മാർക്കുകൾ, ചരിത്രം, പാസ്വേഡുകൾ എന്നിവ ഉപയോഗിച്ച് ഫയർഫോക്സ് പരീക്ഷിക്കുക.
|
manual_migration_explanation2=മറ്റൊരു ബ്രൗസറിൽ നിന്നുള്ള ബുക്ക്മാർക്കുകൾ, നാൾവഴികൾ, പാസ്വേഡുകൾ എന്നിവ ഉപയോഗിച്ച് ഫയർഫോക്സ് പരീക്ഷിക്കുക.
|
||||||
# LOCALIZATION NOTE (manual_migration_cancel_button): This message is shown on a button that cancels the
|
# LOCALIZATION NOTE (manual_migration_cancel_button): This message is shown on a button that cancels the
|
||||||
# process of importing another browser’s profile into Firefox.
|
# process of importing another browser’s profile into Firefox.
|
||||||
manual_migration_cancel_button=വേണ്ട, നന്ദി
|
manual_migration_cancel_button=വേണ്ട, നന്ദി
|
||||||
|
@ -141,6 +143,7 @@ manual_migration_import_button=ഇപ്പോൾ ഇറക്കുമതി
|
||||||
# firstrun_form_header is displayed more boldly as the call to action.
|
# firstrun_form_header is displayed more boldly as the call to action.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# LOCALIZATION NOTE (firstrun_extra_legal_links): {terms} is equal to firstrun_terms_of_service, and
|
# LOCALIZATION NOTE (firstrun_extra_legal_links): {terms} is equal to firstrun_terms_of_service, and
|
||||||
# {privacy} is equal to firstrun_privacy_notice. {terms} and {privacy} are clickable links.
|
# {privacy} is equal to firstrun_privacy_notice. {terms} and {privacy} are clickable links.
|
||||||
|
|
||||||
|
|
|
@ -173,6 +173,7 @@ section_menu_action_expand_section=Utvid seksjon
|
||||||
section_menu_action_manage_section=Handter seksjon
|
section_menu_action_manage_section=Handter seksjon
|
||||||
section_menu_action_manage_webext=Handter utviding
|
section_menu_action_manage_webext=Handter utviding
|
||||||
section_menu_action_add_topsite=Legg til mest besøkte
|
section_menu_action_add_topsite=Legg til mest besøkte
|
||||||
|
section_menu_action_add_search_engine=Legg til søkjemotor
|
||||||
section_menu_action_move_up=Flytt opp
|
section_menu_action_move_up=Flytt opp
|
||||||
section_menu_action_move_down=Flytt ned
|
section_menu_action_move_down=Flytt ned
|
||||||
section_menu_action_privacy_notice=Personvernmerknad
|
section_menu_action_privacy_notice=Personvernmerknad
|
||||||
|
@ -201,4 +202,3 @@ firstrun_privacy_notice=Personvernpraksis
|
||||||
|
|
||||||
firstrun_continue_to_login=Fortset
|
firstrun_continue_to_login=Fortset
|
||||||
firstrun_skip_login=Hopp over dette steget
|
firstrun_skip_login=Hopp over dette steget
|
||||||
section_menu_action_add_search_engine=Legg til søkjemotor
|
|
||||||
|
|
|
@ -173,6 +173,7 @@ section_menu_action_expand_section=Expandir secção
|
||||||
section_menu_action_manage_section=Gerir secção
|
section_menu_action_manage_section=Gerir secção
|
||||||
section_menu_action_manage_webext=Gerir extensão
|
section_menu_action_manage_webext=Gerir extensão
|
||||||
section_menu_action_add_topsite=Adicionar site mais visitado
|
section_menu_action_add_topsite=Adicionar site mais visitado
|
||||||
|
section_menu_action_add_search_engine=Adicionar motor de pesquisa
|
||||||
section_menu_action_move_up=Mover para cima
|
section_menu_action_move_up=Mover para cima
|
||||||
section_menu_action_move_down=Mover para baixo
|
section_menu_action_move_down=Mover para baixo
|
||||||
section_menu_action_privacy_notice=Aviso de privacidade
|
section_menu_action_privacy_notice=Aviso de privacidade
|
||||||
|
@ -201,4 +202,3 @@ firstrun_privacy_notice=Aviso de privacidade
|
||||||
|
|
||||||
firstrun_continue_to_login=Continuar
|
firstrun_continue_to_login=Continuar
|
||||||
firstrun_skip_login=Saltar este passo
|
firstrun_skip_login=Saltar este passo
|
||||||
section_menu_action_add_search_engine=Adicionar motor de pesquisa
|
|
||||||
|
|
|
@ -173,6 +173,7 @@ section_menu_action_expand_section=Expandera sektion
|
||||||
section_menu_action_manage_section=Hantera sektion
|
section_menu_action_manage_section=Hantera sektion
|
||||||
section_menu_action_manage_webext=Hantera tillägg
|
section_menu_action_manage_webext=Hantera tillägg
|
||||||
section_menu_action_add_topsite=Lägg till mest besökta
|
section_menu_action_add_topsite=Lägg till mest besökta
|
||||||
|
section_menu_action_add_search_engine=Lägg till sökmotor
|
||||||
section_menu_action_move_up=Flytta upp
|
section_menu_action_move_up=Flytta upp
|
||||||
section_menu_action_move_down=Flytta ner
|
section_menu_action_move_down=Flytta ner
|
||||||
section_menu_action_privacy_notice=Sekretesspolicy
|
section_menu_action_privacy_notice=Sekretesspolicy
|
||||||
|
@ -201,4 +202,3 @@ firstrun_privacy_notice=Sekretesspolicy
|
||||||
|
|
||||||
firstrun_continue_to_login=Fortsätt
|
firstrun_continue_to_login=Fortsätt
|
||||||
firstrun_skip_login=Hoppa över det här steget
|
firstrun_skip_login=Hoppa över det här steget
|
||||||
section_menu_action_add_search_engine=Lägg till sökmotor
|
|
||||||
|
|
|
@ -173,6 +173,7 @@ section_menu_action_expand_section=展开板块
|
||||||
section_menu_action_manage_section=管理板块
|
section_menu_action_manage_section=管理板块
|
||||||
section_menu_action_manage_webext=管理扩展
|
section_menu_action_manage_webext=管理扩展
|
||||||
section_menu_action_add_topsite=添加常用网站
|
section_menu_action_add_topsite=添加常用网站
|
||||||
|
section_menu_action_add_search_engine=添加搜索引擎
|
||||||
section_menu_action_move_up=上移
|
section_menu_action_move_up=上移
|
||||||
section_menu_action_move_down=下移
|
section_menu_action_move_down=下移
|
||||||
section_menu_action_privacy_notice=隐私声明
|
section_menu_action_privacy_notice=隐私声明
|
||||||
|
@ -201,4 +202,3 @@ firstrun_privacy_notice=隐私声明
|
||||||
|
|
||||||
firstrun_continue_to_login=继续
|
firstrun_continue_to_login=继续
|
||||||
firstrun_skip_login=跳过此步骤
|
firstrun_skip_login=跳过此步骤
|
||||||
section_menu_action_add_search_engine=添加搜索引擎
|
|
||||||
|
|
|
@ -13,11 +13,12 @@ cd /activity-stream && npm install . && npm run buildmc
|
||||||
|
|
||||||
# Build latest m-c with Activity Stream changes
|
# Build latest m-c with Activity Stream changes
|
||||||
cd /mozilla-central && ./mach build \
|
cd /mozilla-central && ./mach build \
|
||||||
&& ./mach test browser_parsable_css \
|
|
||||||
&& ./mach lint -l codespell browser/components/newtab \
|
&& ./mach lint -l codespell browser/components/newtab \
|
||||||
&& ./mach test browser/components/newtab/test/browser --headless \
|
&& ./mach test --log-tbpl test_run_log \
|
||||||
&& ./mach test browser/components/newtab/test/xpcshell \
|
browser_parsable_css \
|
||||||
&& ./mach test browser/components/preferences/in-content/tests/browser_hometab_restore_defaults.js --headless \
|
browser/components/newtab \
|
||||||
&& ./mach test browser/components/preferences/in-content/tests/browser_newtab_menu.js --headless \
|
browser/components/preferences/in-content/tests/browser_hometab_restore_defaults.js \
|
||||||
&& ./mach test browser/components/enterprisepolicies/tests/browser/browser_policy_set_homepage.js --headless \
|
browser/components/preferences/in-content/tests/browser_newtab_menu.js \
|
||||||
&& ./mach test browser/components/preferences/in-content/tests/browser_search_subdialogs_within_preferences_1.js --headless
|
browser/components/enterprisepolicies/tests/browser/browser_policy_set_homepage.js \
|
||||||
|
browser/components/preferences/in-content/tests/browser_search_subdialogs_within_preferences_1.js \
|
||||||
|
&& ! grep -q TEST-UNEXPECTED test_run_log
|
||||||
|
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше
Загрузка…
Ссылка в новой задаче