forked from mirrors/gecko-dev
		
	Differential Revision: https://phabricator.services.mozilla.com/D5914 --HG-- extra : moz-landing-system : lando
		
			
				
	
	
		
			221 lines
		
	
	
	
		
			6.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			221 lines
		
	
	
	
		
			6.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
import {actionCreators as ac, actionTypes as at} from "common/Actions.jsm";
 | 
						|
 | 
						|
const _OpenInPrivateWindow = site => ({
 | 
						|
  id: "menu_action_open_private_window",
 | 
						|
  icon: "new-window-private",
 | 
						|
  action: ac.OnlyToMain({
 | 
						|
    type: at.OPEN_PRIVATE_WINDOW,
 | 
						|
    data: {url: site.url, referrer: site.referrer},
 | 
						|
  }),
 | 
						|
  userEvent: "OPEN_PRIVATE_WINDOW",
 | 
						|
});
 | 
						|
 | 
						|
export const GetPlatformString = platform => {
 | 
						|
  switch (platform) {
 | 
						|
    case "win":
 | 
						|
      return "menu_action_show_file_windows";
 | 
						|
    case "macosx":
 | 
						|
      return "menu_action_show_file_mac_os";
 | 
						|
    case "linux":
 | 
						|
      return "menu_action_show_file_linux";
 | 
						|
    default:
 | 
						|
      return "menu_action_show_file_default";
 | 
						|
  }
 | 
						|
};
 | 
						|
 | 
						|
/**
 | 
						|
 * List of functions that return items that can be included as menu options in a
 | 
						|
 * LinkMenu. All functions take the site as the first parameter, and optionally
 | 
						|
 * the index of the site.
 | 
						|
 */
 | 
						|
export const LinkMenuOptions = {
 | 
						|
  Separator: () => ({type: "separator"}),
 | 
						|
  EmptyItem: () => ({type: "empty"}),
 | 
						|
  RemoveBookmark: site => ({
 | 
						|
    id: "menu_action_remove_bookmark",
 | 
						|
    icon: "bookmark-added",
 | 
						|
    action: ac.AlsoToMain({
 | 
						|
      type: at.DELETE_BOOKMARK_BY_ID,
 | 
						|
      data: site.bookmarkGuid,
 | 
						|
    }),
 | 
						|
    userEvent: "BOOKMARK_DELETE",
 | 
						|
  }),
 | 
						|
  AddBookmark: site => ({
 | 
						|
    id: "menu_action_bookmark",
 | 
						|
    icon: "bookmark-hollow",
 | 
						|
    action: ac.AlsoToMain({
 | 
						|
      type: at.BOOKMARK_URL,
 | 
						|
      data: {url: site.url, title: site.title, type: site.type},
 | 
						|
    }),
 | 
						|
    userEvent: "BOOKMARK_ADD",
 | 
						|
  }),
 | 
						|
  OpenInNewWindow: site => ({
 | 
						|
    id: "menu_action_open_new_window",
 | 
						|
    icon: "new-window",
 | 
						|
    action: ac.AlsoToMain({
 | 
						|
      type: at.OPEN_NEW_WINDOW,
 | 
						|
      data: {
 | 
						|
        referrer: site.referrer,
 | 
						|
        typedBonus: site.typedBonus,
 | 
						|
        url: site.url,
 | 
						|
      },
 | 
						|
    }),
 | 
						|
    userEvent: "OPEN_NEW_WINDOW",
 | 
						|
  }),
 | 
						|
  BlockUrl: (site, index, eventSource) => ({
 | 
						|
    id: "menu_action_dismiss",
 | 
						|
    icon: "dismiss",
 | 
						|
    action: ac.AlsoToMain({
 | 
						|
      type: at.BLOCK_URL,
 | 
						|
      data: {url: site.open_url || site.url, pocket_id: site.pocket_id},
 | 
						|
    }),
 | 
						|
    impression: ac.ImpressionStats({
 | 
						|
      source: eventSource,
 | 
						|
      block: 0,
 | 
						|
      tiles: [{id: site.guid, pos: index}],
 | 
						|
    }),
 | 
						|
    userEvent: "BLOCK",
 | 
						|
  }),
 | 
						|
 | 
						|
  // This is an option for web extentions which will result in remove items from
 | 
						|
  // memory and notify the web extenion, rather than using the built-in block list.
 | 
						|
  WebExtDismiss: (site, index, eventSource) => ({
 | 
						|
    id: "menu_action_webext_dismiss",
 | 
						|
    string_id: "menu_action_dismiss",
 | 
						|
    icon: "dismiss",
 | 
						|
    action: ac.WebExtEvent(at.WEBEXT_DISMISS, {
 | 
						|
      source: eventSource,
 | 
						|
      url: site.url,
 | 
						|
      action_position: index,
 | 
						|
    }),
 | 
						|
  }),
 | 
						|
  DeleteUrl: (site, index, eventSource, isEnabled, siteInfo) => ({
 | 
						|
    id: "menu_action_delete",
 | 
						|
    icon: "delete",
 | 
						|
    action: {
 | 
						|
      type: at.DIALOG_OPEN,
 | 
						|
      data: {
 | 
						|
        onConfirm: [
 | 
						|
          ac.AlsoToMain({type: at.DELETE_HISTORY_URL, data: {url: site.url, pocket_id: site.pocket_id, forceBlock: site.bookmarkGuid}}),
 | 
						|
          ac.UserEvent(Object.assign({event: "DELETE", source: eventSource, action_position: index}, siteInfo)),
 | 
						|
        ],
 | 
						|
        eventSource,
 | 
						|
        body_string_id: ["confirm_history_delete_p1", "confirm_history_delete_notice_p2"],
 | 
						|
        confirm_button_string_id: "menu_action_delete",
 | 
						|
        cancel_button_string_id: "topsites_form_cancel_button",
 | 
						|
        icon: "modal-delete",
 | 
						|
      },
 | 
						|
    },
 | 
						|
    userEvent: "DIALOG_OPEN",
 | 
						|
  }),
 | 
						|
  ShowFile: (site, index, eventSource, isEnabled, siteInfo, platform) => ({
 | 
						|
    id: GetPlatformString(platform),
 | 
						|
    icon: "search",
 | 
						|
    action: ac.OnlyToMain({
 | 
						|
      type: at.SHOW_DOWNLOAD_FILE,
 | 
						|
      data: {url: site.url},
 | 
						|
    }),
 | 
						|
  }),
 | 
						|
  OpenFile: site => ({
 | 
						|
    id: "menu_action_open_file",
 | 
						|
    icon: "open-file",
 | 
						|
    action: ac.OnlyToMain({
 | 
						|
      type: at.OPEN_DOWNLOAD_FILE,
 | 
						|
      data: {url: site.url},
 | 
						|
    }),
 | 
						|
  }),
 | 
						|
  CopyDownloadLink: site => ({
 | 
						|
    id: "menu_action_copy_download_link",
 | 
						|
    icon: "copy",
 | 
						|
    action: ac.OnlyToMain({
 | 
						|
      type: at.COPY_DOWNLOAD_LINK,
 | 
						|
      data: {url: site.url},
 | 
						|
    }),
 | 
						|
  }),
 | 
						|
  GoToDownloadPage: site => ({
 | 
						|
    id: "menu_action_go_to_download_page",
 | 
						|
    icon: "download",
 | 
						|
    action: ac.OnlyToMain({
 | 
						|
      type: at.OPEN_LINK,
 | 
						|
      data: {url: site.referrer},
 | 
						|
    }),
 | 
						|
    disabled: !site.referrer,
 | 
						|
  }),
 | 
						|
  RemoveDownload: site => ({
 | 
						|
    id: "menu_action_remove_download",
 | 
						|
    icon: "delete",
 | 
						|
    action: ac.OnlyToMain({
 | 
						|
      type: at.REMOVE_DOWNLOAD_FILE,
 | 
						|
      data: {url: site.url},
 | 
						|
    }),
 | 
						|
  }),
 | 
						|
  PinTopSite: ({url, searchTopSite, label}, index) => ({
 | 
						|
    id: "menu_action_pin",
 | 
						|
    icon: "pin",
 | 
						|
    action: ac.AlsoToMain({
 | 
						|
      type: at.TOP_SITES_PIN,
 | 
						|
      data: {
 | 
						|
        site: {
 | 
						|
          url,
 | 
						|
          ...(searchTopSite && {searchTopSite, label}),
 | 
						|
        },
 | 
						|
        index,
 | 
						|
      },
 | 
						|
    }),
 | 
						|
    userEvent: "PIN",
 | 
						|
  }),
 | 
						|
  UnpinTopSite: site => ({
 | 
						|
    id: "menu_action_unpin",
 | 
						|
    icon: "unpin",
 | 
						|
    action: ac.AlsoToMain({
 | 
						|
      type: at.TOP_SITES_UNPIN,
 | 
						|
      data: {site: {url: site.url}},
 | 
						|
    }),
 | 
						|
    userEvent: "UNPIN",
 | 
						|
  }),
 | 
						|
  SaveToPocket: (site, index, eventSource) => ({
 | 
						|
    id: "menu_action_save_to_pocket",
 | 
						|
    icon: "pocket-save",
 | 
						|
    action: ac.AlsoToMain({
 | 
						|
      type: at.SAVE_TO_POCKET,
 | 
						|
      data: {site: {url: site.url, title: site.title}},
 | 
						|
    }),
 | 
						|
    impression: ac.ImpressionStats({
 | 
						|
      source: eventSource,
 | 
						|
      pocket: 0,
 | 
						|
      tiles: [{id: site.guid, pos: index}],
 | 
						|
    }),
 | 
						|
    userEvent: "SAVE_TO_POCKET",
 | 
						|
  }),
 | 
						|
  DeleteFromPocket: site => ({
 | 
						|
    id: "menu_action_delete_pocket",
 | 
						|
    icon: "delete",
 | 
						|
    action: ac.AlsoToMain({
 | 
						|
      type: at.DELETE_FROM_POCKET,
 | 
						|
      data: {pocket_id: site.pocket_id},
 | 
						|
    }),
 | 
						|
    userEvent: "DELETE_FROM_POCKET",
 | 
						|
  }),
 | 
						|
  ArchiveFromPocket: site => ({
 | 
						|
    id: "menu_action_archive_pocket",
 | 
						|
    icon: "check",
 | 
						|
    action: ac.AlsoToMain({
 | 
						|
      type: at.ARCHIVE_FROM_POCKET,
 | 
						|
      data: {pocket_id: site.pocket_id},
 | 
						|
    }),
 | 
						|
    userEvent: "ARCHIVE_FROM_POCKET",
 | 
						|
  }),
 | 
						|
  EditTopSite: (site, index) => ({
 | 
						|
    id: "edit_topsites_button_text",
 | 
						|
    icon: "edit",
 | 
						|
    action: {
 | 
						|
      type: at.TOP_SITES_EDIT,
 | 
						|
      data: {index},
 | 
						|
    },
 | 
						|
  }),
 | 
						|
  CheckBookmark: site => (site.bookmarkGuid ? LinkMenuOptions.RemoveBookmark(site) : LinkMenuOptions.AddBookmark(site)),
 | 
						|
  CheckPinTopSite: (site, index) => (site.isPinned ? LinkMenuOptions.UnpinTopSite(site) : LinkMenuOptions.PinTopSite(site, index)),
 | 
						|
  CheckSavedToPocket: (site, index) => (site.pocket_id ? LinkMenuOptions.DeleteFromPocket(site) : LinkMenuOptions.SaveToPocket(site, index)),
 | 
						|
  CheckBookmarkOrArchive: site => (site.pocket_id ? LinkMenuOptions.ArchiveFromPocket(site) : LinkMenuOptions.CheckBookmark(site)),
 | 
						|
  OpenInPrivateWindow: (site, index, eventSource, isEnabled) => (isEnabled ? _OpenInPrivateWindow(site) : LinkMenuOptions.EmptyItem()),
 | 
						|
};
 |