ginebra2/chrome/bedrockchrome/contextmenu.snippet/ViewContextMenu.js
author hgs
Tue, 29 Jun 2010 00:46:29 -0400
changeset 3 0954f5dd2cd0
child 9 b39122337a00
permissions -rw-r--r--
201026
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3
hgs
parents:
diff changeset
     1
// This file contains the functions used to create the context menu for the browser's
hgs
parents:
diff changeset
     2
// main content web view.
hgs
parents:
diff changeset
     3
hgs
parents:
diff changeset
     4
hgs
parents:
diff changeset
     5
 // Context menu spec:
hgs
parents:
diff changeset
     6
 // ------------------
hgs
parents:
diff changeset
     7
 //Images---Options to be shown under an "Links/Pictures" tab
hgs
parents:
diff changeset
     8
 // Save
hgs
parents:
diff changeset
     9
 // Share
hgs
parents:
diff changeset
    10
 //
hgs
parents:
diff changeset
    11
 //Images that are also links---Options to be shown under an "Links/Pictures" tab
hgs
parents:
diff changeset
    12
 // Open link in new window
hgs
parents:
diff changeset
    13
 // Save
hgs
parents:
diff changeset
    14
 // Share
hgs
parents:
diff changeset
    15
 //
hgs
parents:
diff changeset
    16
 //URLs-- Options to be shown under a "Links/Picture" tab
hgs
parents:
diff changeset
    17
 // Open link in new window
hgs
parents:
diff changeset
    18
 // Share
hgs
parents:
diff changeset
    19
 //
hgs
parents:
diff changeset
    20
 // Note: the options offered for a link or a picture or a combo
hgs
parents:
diff changeset
    21
 // link/picture are slightly different, but the right set should
hgs
parents:
diff changeset
    22
 // always be shown under a single tab contextual to what's been
hgs
parents:
diff changeset
    23
 // pressed.
hgs
parents:
diff changeset
    24
 //
hgs
parents:
diff changeset
    25
 // If no link or picture has been long-pressed and the user is in
hgs
parents:
diff changeset
    26
 // the CMB - say to see page options or the view switcher--the user
hgs
parents:
diff changeset
    27
 // can still press on the Links/Pictures tab. Because there is no
hgs
parents:
diff changeset
    28
 // known context to present options, we instead show menu items for
hgs
parents:
diff changeset
    29
 // the combined link/image object as grayed out with text on top
hgs
parents:
diff changeset
    30
 // approximating this: "Long-press on a web link or picture to use
hgs
parents:
diff changeset
    31
 // these actions."
hgs
parents:
diff changeset
    32
hgs
parents:
diff changeset
    33
function viewMenu_getImageItems(imageUrl) {
hgs
parents:
diff changeset
    34
    var items  = new Array();
hgs
parents:
diff changeset
    35
    items =
hgs
parents:
diff changeset
    36
        [
hgs
parents:
diff changeset
    37
         {
hgs
parents:
diff changeset
    38
             "text": window.localeDelegate.translateText("txt_browser_content_view_menu_image_save_image"), // "Save Image",
hgs
parents:
diff changeset
    39
             "onclick": function() {
hgs
parents:
diff changeset
    40
                 if (window.downloads != null) {
hgs
parents:
diff changeset
    41
                     window.downloads.downloadImage(imageUrl);
hgs
parents:
diff changeset
    42
                 } else {
hgs
parents:
diff changeset
    43
                     alert("Save " + imageUrl);
hgs
parents:
diff changeset
    44
                 }
hgs
parents:
diff changeset
    45
             },
hgs
parents:
diff changeset
    46
         },
hgs
parents:
diff changeset
    47
        ]
hgs
parents:
diff changeset
    48
    ;
hgs
parents:
diff changeset
    49
    return items;
hgs
parents:
diff changeset
    50
}
hgs
parents:
diff changeset
    51
hgs
parents:
diff changeset
    52
function viewMenu_getLinkItems(linkUrl) {
hgs
parents:
diff changeset
    53
    const maxWindowCount = 5;
hgs
parents:
diff changeset
    54
    var items = new Array();
hgs
parents:
diff changeset
    55
    items =
hgs
parents:
diff changeset
    56
        [
hgs
parents:
diff changeset
    57
         {
hgs
parents:
diff changeset
    58
             "text": window.localeDelegate.translateText("txt_browser_content_view_menu_link_open_link"), // "Open Link In New Window",
hgs
parents:
diff changeset
    59
             "onclick": function() {
hgs
parents:
diff changeset
    60
                 pageController.LoadInNewWindow(linkUrl);
hgs
parents:
diff changeset
    61
             },
hgs
parents:
diff changeset
    62
             "disabled": (pageController.pageCount() >= maxWindowCount) ? "true" : "false",
hgs
parents:
diff changeset
    63
         },
hgs
parents:
diff changeset
    64
        ]
hgs
parents:
diff changeset
    65
    ;
hgs
parents:
diff changeset
    66
    return items;
hgs
parents:
diff changeset
    67
}
hgs
parents:
diff changeset
    68
hgs
parents:
diff changeset
    69
function viewMenu_getNavMenuData(current) {
hgs
parents:
diff changeset
    70
    return {
hgs
parents:
diff changeset
    71
         "text": window.localeDelegate.translateText("txt_browser_content_view_menu_tab_navigation"), // "Navigation",
hgs
parents:
diff changeset
    72
         "iconHighlighted": "contextmenu.snippet/icons/nav_selected.png",
hgs
parents:
diff changeset
    73
         "icon": "contextmenu.snippet/icons/nav_deselected.png",
hgs
parents:
diff changeset
    74
         "current": current ? "true" : "false",
hgs
parents:
diff changeset
    75
         "menuItems":
hgs
parents:
diff changeset
    76
             [
hgs
parents:
diff changeset
    77
               {
hgs
parents:
diff changeset
    78
                 "text": window.localeDelegate.translateText("txt_browser_content_view_menu_nav_bookmarks"),
hgs
parents:
diff changeset
    79
                 "onclick": chrome_showBookmarksView,
hgs
parents:
diff changeset
    80
               },
hgs
parents:
diff changeset
    81
               {
hgs
parents:
diff changeset
    82
                 "text": window.localeDelegate.translateText("txt_browser_content_view_menu_nav_history"),
hgs
parents:
diff changeset
    83
                 "onclick": chrome_showHistoryView,
hgs
parents:
diff changeset
    84
               },
hgs
parents:
diff changeset
    85
               {
hgs
parents:
diff changeset
    86
                 "text": window.localeDelegate.translateText("txt_browser_content_view_menu_nav_windows"),
hgs
parents:
diff changeset
    87
                 "onclick": chrome_showWindowsView,
hgs
parents:
diff changeset
    88
               },
hgs
parents:
diff changeset
    89
               {
hgs
parents:
diff changeset
    90
                 "text": window.localeDelegate.translateText("txt_browser_content_view_menu_nav_settings"),
hgs
parents:
diff changeset
    91
                 "onclick": chrome_showSettingsView,
hgs
parents:
diff changeset
    92
               },
hgs
parents:
diff changeset
    93
               {
hgs
parents:
diff changeset
    94
                 "text": window.localeDelegate.translateText("txt_browser_content_view_menu_nav_exit"),
hgs
parents:
diff changeset
    95
                 "onclick": window.app.quit,
hgs
parents:
diff changeset
    96
               },               
hgs
parents:
diff changeset
    97
             ],
hgs
parents:
diff changeset
    98
    };
hgs
parents:
diff changeset
    99
}
hgs
parents:
diff changeset
   100
hgs
parents:
diff changeset
   101
function viewMenu_getPageMenuData(current) {
hgs
parents:
diff changeset
   102
hgs
parents:
diff changeset
   103
    var popupsBlocked =  pageController.getPopupSettings();
hgs
parents:
diff changeset
   104
    return {
hgs
parents:
diff changeset
   105
         "text": window.localeDelegate.translateText("txt_browser_content_view_menu_tab_page"), // "Page",
hgs
parents:
diff changeset
   106
         "iconHighlighted": "contextmenu.snippet/icons/page_selected.png",
hgs
parents:
diff changeset
   107
         "icon": "contextmenu.snippet/icons/page_deselected.png",
hgs
parents:
diff changeset
   108
         "current": current ? "true" : "false",
hgs
parents:
diff changeset
   109
         "menuItems":
hgs
parents:
diff changeset
   110
             [
hgs
parents:
diff changeset
   111
               {
hgs
parents:
diff changeset
   112
                 "text": window.localeDelegate.translateText("txt_browser_content_view_menu_page_add_bookmark"), // "Add Bookmark",
hgs
parents:
diff changeset
   113
                 "onclick": function() {
hgs
parents:
diff changeset
   114
                   launchBookmarkDialog(pageController.currentDocTitle, pageController.currentDocUrl,0),
hgs
parents:
diff changeset
   115
                 },
hgs
parents:
diff changeset
   116
               },
hgs
parents:
diff changeset
   117
               {
hgs
parents:
diff changeset
   118
                 "text": (popupsBlocked ) ?
hgs
parents:
diff changeset
   119
                    window.localeDelegate.translateText("txt_browser_content_view_menu_page_allow_popups"): 
hgs
parents:
diff changeset
   120
                    window.localeDelegate.translateText("txt_browser_content_view_menu_page_block_popups"), // "Block/Allow Pop-ups"
hgs
parents:
diff changeset
   121
                  "onclick": function() {
hgs
parents:
diff changeset
   122
                    pageController.savePopupSettings(!popupsBlocked);
hgs
parents:
diff changeset
   123
                 },
hgs
parents:
diff changeset
   124
               },
hgs
parents:
diff changeset
   125
               {
hgs
parents:
diff changeset
   126
                 "text": window.localeDelegate.translateText("txt_browser_content_view_menu_page_share"), // "Share",
hgs
parents:
diff changeset
   127
                 "onclick": function() {
hgs
parents:
diff changeset
   128
                 var tempUrl = pageController.currentDocUrl;
hgs
parents:
diff changeset
   129
                 pageController.share(tempUrl);    
hgs
parents:
diff changeset
   130
                },                 
hgs
parents:
diff changeset
   131
               },
hgs
parents:
diff changeset
   132
             ],
hgs
parents:
diff changeset
   133
    };
hgs
parents:
diff changeset
   134
}
hgs
parents:
diff changeset
   135
hgs
parents:
diff changeset
   136
// Return a data structure representing the context menu for the main web view based
hgs
parents:
diff changeset
   137
// on the information in contextEvent.
hgs
parents:
diff changeset
   138
function viewMenu_getWebViewContextMenuData(contextEvent) {
hgs
parents:
diff changeset
   139
    var tabList = new Array;
hgs
parents:
diff changeset
   140
    var linkUrl = contextEvent != undefined ? contextEvent.linkUrl : "";
hgs
parents:
diff changeset
   141
    var imageUrl = contextEvent != undefined ? contextEvent.imageUrl : "";
hgs
parents:
diff changeset
   142
    var isLink = linkUrl != "";
hgs
parents:
diff changeset
   143
    var isImage = imageUrl != "";
hgs
parents:
diff changeset
   144
    var isLinkOrImage = isLink || isImage;
hgs
parents:
diff changeset
   145
hgs
parents:
diff changeset
   146
    // Build Navigation tab and its menu.
hgs
parents:
diff changeset
   147
    if (contextEvent == undefined)
hgs
parents:
diff changeset
   148
      tabList = tabList.concat(viewMenu_getNavMenuData(true));
hgs
parents:
diff changeset
   149
    else
hgs
parents:
diff changeset
   150
      tabList = tabList.concat(viewMenu_getNavMenuData(false));
hgs
parents:
diff changeset
   151
hgs
parents:
diff changeset
   152
    var linkMenuItems = new Array();
hgs
parents:
diff changeset
   153
hgs
parents:
diff changeset
   154
    // Get image related menu items.
hgs
parents:
diff changeset
   155
    if (isImage || !isLinkOrImage)
hgs
parents:
diff changeset
   156
        linkMenuItems = linkMenuItems.concat(viewMenu_getImageItems(imageUrl));
hgs
parents:
diff changeset
   157
hgs
parents:
diff changeset
   158
    // Get link related menu items.
hgs
parents:
diff changeset
   159
    if (isLink || !isLinkOrImage)
hgs
parents:
diff changeset
   160
        linkMenuItems = linkMenuItems.concat(viewMenu_getLinkItems(linkUrl));
hgs
parents:
diff changeset
   161
hgs
parents:
diff changeset
   162
    linkMenuItems = linkMenuItems.concat(
hgs
parents:
diff changeset
   163
         [
hgs
parents:
diff changeset
   164
             {
hgs
parents:
diff changeset
   165
                 "text": window.localeDelegate.translateText("txt_browser_content_view_menu_link_share_link"), // "Share"
hgs
parents:
diff changeset
   166
                 "onclick": function() {
hgs
parents:
diff changeset
   167
                  if ( isImage || !isLinkOrImage)
hgs
parents:
diff changeset
   168
                      {
hgs
parents:
diff changeset
   169
               	      pageController.share(imageUrl); 
hgs
parents:
diff changeset
   170
                      }
hgs
parents:
diff changeset
   171
                  else
hgs
parents:
diff changeset
   172
                      { 
hgs
parents:
diff changeset
   173
             	        pageController.share(linkUrl); 
hgs
parents:
diff changeset
   174
         	      }
hgs
parents:
diff changeset
   175
                 },
hgs
parents:
diff changeset
   176
             }
hgs
parents:
diff changeset
   177
         ]);
hgs
parents:
diff changeset
   178
hgs
parents:
diff changeset
   179
    // Build image/link tab and menu data.
hgs
parents:
diff changeset
   180
    tabList = tabList.concat( {
hgs
parents:
diff changeset
   181
         "text": (isLink && isImage || !isLink && !isImage)
hgs
parents:
diff changeset
   182
            ? window.localeDelegate.translateText("txt_browser_content_view_menu_tab_link_image") // "Link/image"
hgs
parents:
diff changeset
   183
            : (isLink
hgs
parents:
diff changeset
   184
               ? window.localeDelegate.translateText("txt_browser_content_view_menu_tab_link") // "Link"
hgs
parents:
diff changeset
   185
               : window.localeDelegate.translateText("txt_browser_content_view_menu_tab_image")), // "image"
hgs
parents:
diff changeset
   186
         "icon": "contextmenu.snippet/icons/links_deselected.png",
hgs
parents:
diff changeset
   187
         "iconHighlighted": "contextmenu.snippet/icons/links_selected.png",
hgs
parents:
diff changeset
   188
         "current": isLinkOrImage ? "true" : "false",
hgs
parents:
diff changeset
   189
         "disabled": isLinkOrImage ? "false" : "true",
hgs
parents:
diff changeset
   190
         "menuItems": linkMenuItems,
hgs
parents:
diff changeset
   191
    });
hgs
parents:
diff changeset
   192
hgs
parents:
diff changeset
   193
    // Build Page tab and menu data.
hgs
parents:
diff changeset
   194
    if (contextEvent == undefined)
hgs
parents:
diff changeset
   195
      tabList = tabList.concat(viewMenu_getPageMenuData(false));
hgs
parents:
diff changeset
   196
    else
hgs
parents:
diff changeset
   197
      tabList = tabList.concat(viewMenu_getPageMenuData(!isLinkOrImage));
hgs
parents:
diff changeset
   198
hgs
parents:
diff changeset
   199
    // Combine the tabs and return them.
hgs
parents:
diff changeset
   200
    return {
hgs
parents:
diff changeset
   201
        "tabs": tabList
hgs
parents:
diff changeset
   202
    };
hgs
parents:
diff changeset
   203
}
hgs
parents:
diff changeset
   204
hgs
parents:
diff changeset
   205
// Initialize the WebView's context menu.
hgs
parents:
diff changeset
   206
function viewMenu_initWebViewContextMenu() {
hgs
parents:
diff changeset
   207
    // Connect to the view's contextEvent signal.
hgs
parents:
diff changeset
   208
    views.WebView.contextEvent.connect(
hgs
parents:
diff changeset
   209
        function(contextEvent) {
hgs
parents:
diff changeset
   210
            //printProp(contextEvent);
hgs
parents:
diff changeset
   211
            cm_TheContextMenu.show(viewMenu_getWebViewContextMenuData(contextEvent));
hgs
parents:
diff changeset
   212
        }
hgs
parents:
diff changeset
   213
    );
hgs
parents:
diff changeset
   214
}
hgs
parents:
diff changeset
   215
hgs
parents:
diff changeset
   216
chrome.chromeComplete.connect(viewMenu_initWebViewContextMenu);