mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-07 12:15:51 +00:00
bug 25071 - add "view background image" to context menu
patch by gervase.markham@univ.ox.ac.uk r=timeless, sr=blizzard
This commit is contained in:
parent
c61580b85c
commit
fc1d27c930
@ -97,6 +97,10 @@
|
||||
<menuitem id="context-viewimage"
|
||||
label="&viewImageCmd.label;"
|
||||
oncommand="contextMenu.viewImage();"/>
|
||||
<menuitem id="context-viewbgimage"
|
||||
label="&viewBGImageCmd.label;"
|
||||
accesskey="&viewBGImageCmd.accesskey;"
|
||||
oncommand="contextMenu.viewBGImage();"/>
|
||||
<menuseparator id="context-sep-view"/>
|
||||
<!-- Misc ==================================== -->
|
||||
<menuitem id="context-bookmarkpage"
|
||||
@ -125,10 +129,6 @@
|
||||
<menuitem id="context-saveimage"
|
||||
accesskey="&saveImageCmd.accesskey;"
|
||||
oncommand="contextMenu.saveImage();"/>
|
||||
<menuitem id="context-savebgimage"
|
||||
label="&saveBGImageCmd.label;"
|
||||
accesskey="&saveBGImageCmd.accesskey;"
|
||||
oncommand="contextMenu.saveBGImage();"/>
|
||||
<menuseparator id="context-sep-save"/>
|
||||
<!-- Clipboard =============================== -->
|
||||
<menuitem id="context-selectall"
|
||||
@ -159,6 +159,7 @@
|
||||
<!-- Metadata ================================ -->
|
||||
<menuitem id="context-metadata"
|
||||
label="&metadataCmd.label;"
|
||||
accesskey="&metadataCmd.accesskey;"
|
||||
oncommand="contextMenu.showMetadata();"/>
|
||||
</popup>
|
||||
</popupset>
|
||||
|
@ -21,6 +21,7 @@
|
||||
* Contributor(s):
|
||||
* William A. ("PowerGUI") Law <law@netscape.com>
|
||||
* Blake Ross <blakeross@telocity.com>
|
||||
* Gervase Markham <gerv@gerv.net>
|
||||
*/
|
||||
|
||||
/*------------------------------ nsContextMenu ---------------------------------
|
||||
@ -33,17 +34,18 @@
|
||||
| longer term, this code will be restructured to make it more reusable. |
|
||||
------------------------------------------------------------------------------*/
|
||||
function nsContextMenu( xulMenu ) {
|
||||
this.target = null;
|
||||
this.menu = null;
|
||||
this.onTextInput = false;
|
||||
this.onImage = false;
|
||||
this.onLink = false;
|
||||
this.target = null;
|
||||
this.menu = null;
|
||||
this.onTextInput = false;
|
||||
this.onImage = false;
|
||||
this.onLink = false;
|
||||
this.onMailtoLink = false;
|
||||
this.onSaveableLink = false;
|
||||
this.link = false;
|
||||
this.inFrame = false;
|
||||
this.hasBGImage = false;
|
||||
this.inDirList = false;
|
||||
this.shouldDisplay = true;
|
||||
this.link = false;
|
||||
this.inFrame = false;
|
||||
this.hasBGImage = false;
|
||||
this.inDirList = false;
|
||||
this.shouldDisplay = true;
|
||||
|
||||
// Initialize new menu.
|
||||
this.initMenu( xulMenu );
|
||||
@ -110,9 +112,6 @@ nsContextMenu.prototype = {
|
||||
// Save link depends on whether we're in a link.
|
||||
this.showItem( "context-savelink", this.onSaveableLink );
|
||||
|
||||
// Save background image depends on whether there is one.
|
||||
this.showItem( "context-savebgimage", this.hasBGImage );
|
||||
|
||||
// Save image depends on whether there is one.
|
||||
this.showItem( "context-saveimage", this.onImage );
|
||||
if (this.onImage){ //if onImage, let's get the imagename into the context menu
|
||||
@ -144,6 +143,9 @@ nsContextMenu.prototype = {
|
||||
// View Image depends on whether an image was clicked on.
|
||||
this.showItem( "context-viewimage", this.onImage );
|
||||
|
||||
// View background image depends on whether there is one.
|
||||
this.showItem( "context-viewbgimage", this.hasBGImage && !this.onImage );
|
||||
|
||||
// Remove separator if all items are removed.
|
||||
this.showItem( "context-sep-view", !this.inDirList || this.inFrame || this.onImage );
|
||||
},
|
||||
@ -182,19 +184,21 @@ nsContextMenu.prototype = {
|
||||
this.showItem( "context-copyimage", this.onImage );
|
||||
},
|
||||
initMetadataItems : function () {
|
||||
// Show unless in directory listing.
|
||||
// Metadata for directory listings could ofcource be added if wanted
|
||||
this.setItemAttr( "context-metadata", "disabled", this.inDirList ? "true" : null );
|
||||
// Show if user clicked on something which has metadata.
|
||||
this.showItem( "context-metadata", this.onMetaDataItem );
|
||||
this.showItem( "context-sep-clip", this.onMetaDataItem );
|
||||
},
|
||||
// Set various context menu attributes based on the state of the world.
|
||||
setTarget : function ( node ) {
|
||||
// Initialize contextual info.
|
||||
this.onImage = false;
|
||||
this.onMetaDataItem = false;
|
||||
this.onTextInput = false;
|
||||
this.imageURL = "";
|
||||
this.onLink = false;
|
||||
this.inFrame = false;
|
||||
this.hasBGImage = false;
|
||||
this.bgImageURL = "";
|
||||
|
||||
// Remember the node that was clicked.
|
||||
this.target = node;
|
||||
@ -263,10 +267,10 @@ nsContextMenu.prototype = {
|
||||
} else if ( this.target.tagName.toUpperCase() == "TEXTAREA" ) {
|
||||
this.onTextInput = true;
|
||||
} else if ( this.target.getAttribute( "background" ) ) {
|
||||
this.onImage = true;
|
||||
// Convert background attribute to absolute URL.
|
||||
this.imageURL = this.makeURLAbsolute( this.target.ownerDocument,
|
||||
this.target.getAttribute( "background" ) );
|
||||
this.hasBGImage = true;
|
||||
// Convert background attribute to absolute URL.
|
||||
this.bgImageURL = this.makeURLAbsolute( this.target.baseURI,
|
||||
this.target.getAttribute( "background" ) );
|
||||
} else if ( "HTTPIndex" in _content &&
|
||||
_content.HTTPIndex instanceof Components.interfaces.nsIHTTPIndex ) {
|
||||
this.inDirList = true;
|
||||
@ -316,38 +320,63 @@ nsContextMenu.prototype = {
|
||||
}
|
||||
}
|
||||
|
||||
// We have meta data on images.
|
||||
this.onMetaDataItem = this.onImage;
|
||||
|
||||
// See if the user clicked in a frame.
|
||||
if ( this.target.ownerDocument != window._content.document ) {
|
||||
this.inFrame = true;
|
||||
}
|
||||
|
||||
// Bubble up looking for an input or textarea
|
||||
var elem = this.target;
|
||||
while ( elem && !this.onTextInput ) {
|
||||
// Test for element types of interest.
|
||||
if ( elem.nodeType == 1 ) {
|
||||
// Clicked on a link.
|
||||
this.onTextInput = this.isTargetATextBox(elem);
|
||||
}
|
||||
elem = elem.parentNode;
|
||||
}
|
||||
|
||||
// Bubble out, looking for link.
|
||||
// Bubble out, looking for items of interest
|
||||
elem = this.target;
|
||||
while ( elem && !this.onLink ) {
|
||||
// Test for element types of interest.
|
||||
if ( elem.nodeType == 1 &&
|
||||
( elem.tagName.toUpperCase() == "A"
|
||||
||
|
||||
elem.tagName.toUpperCase() == "AREA"
|
||||
||
|
||||
elem.getAttributeNS("http://www.w3.org/1999/xlink","type") == "simple")) {
|
||||
// Clicked on a link.
|
||||
this.onLink = true;
|
||||
// Remember corresponding element.
|
||||
this.link = elem;
|
||||
// Remember if it is saveable.
|
||||
this.onSaveableLink = this.isLinkSaveable( this.link );
|
||||
while ( elem ) {
|
||||
if ( elem.nodeType == 1 ) {
|
||||
var tagname = elem.tagName.toUpperCase();
|
||||
|
||||
// Link?
|
||||
if ( !this.onLink &&
|
||||
( tagname === "A" ||
|
||||
tagname === "AREA" ||
|
||||
elem.getAttributeNS( "http://www.w3.org/1999/xlink", "type") == "simple" ) ) {
|
||||
// Clicked on a link.
|
||||
this.onLink = true;
|
||||
this.onMetaDataItem = true;
|
||||
// Remember corresponding element.
|
||||
this.link = elem;
|
||||
// Remember if it is saveable.
|
||||
this.onSaveableLink = this.isLinkSaveable( this.link );
|
||||
}
|
||||
|
||||
// Text input?
|
||||
if ( !this.onTextInput ) {
|
||||
// Clicked on a link.
|
||||
this.onTextInput = this.isTargetATextBox(elem);
|
||||
}
|
||||
|
||||
// Metadata item?
|
||||
if ( !this.onMetaDataItem ) {
|
||||
// We currently display metadata on anything which fits
|
||||
// the below test.
|
||||
if ( ( tagname === "BLOCKQUOTE" && elem.cite ) ||
|
||||
( tagname === "Q" && elem.cite ) ||
|
||||
( tagname === "TABLE" && elem.summary ) ||
|
||||
( ( tagname === "INS" || tagname === "DEL" ) &&
|
||||
( elem.cite || elem.dateTime ) ) ||
|
||||
elem.title ||
|
||||
elem.lang ) {
|
||||
dump("On metadata item.\n");
|
||||
this.onMetaDataItem = true;
|
||||
}
|
||||
}
|
||||
|
||||
// Background image?
|
||||
if ( !this.hasBGImage && elem.background ) {
|
||||
this.hasBGImage = true;
|
||||
// Convert background attribute to absolute URL.
|
||||
this.bgImageURL = this.makeURLAbsolute( elem.baseURI,
|
||||
elem.background );
|
||||
}
|
||||
}
|
||||
elem = elem.parentNode;
|
||||
}
|
||||
@ -412,10 +441,14 @@ nsContextMenu.prototype = {
|
||||
viewFrameInfo : function () {
|
||||
BrowserPageInfo(this.target.ownerDocument);
|
||||
},
|
||||
// Open new window with the URL of the image.
|
||||
// Change current window to the URL of the image.
|
||||
viewImage : function () {
|
||||
openTopWin( this.imageURL );
|
||||
},
|
||||
// Change current window to the URL of the background image.
|
||||
viewBGImage : function () {
|
||||
openTopWin( this.bgImageURL );
|
||||
},
|
||||
// Save URL of clicked-on frame.
|
||||
saveFrame : function () {
|
||||
this.savePage( this.target.ownerDocument.location.href, true );
|
||||
@ -428,11 +461,6 @@ nsContextMenu.prototype = {
|
||||
saveImage : function () {
|
||||
this.savePage( this.imageURL, true );
|
||||
},
|
||||
// Save URL of background image.
|
||||
saveBGImage : function () {
|
||||
this.savePage( this.bgImageURL(), true );
|
||||
},
|
||||
|
||||
// Open Metadata window for node
|
||||
showMetadata : function () {
|
||||
window.openDialog( "chrome://navigator/content/metadata.xul",
|
||||
|
@ -5,17 +5,17 @@
|
||||
<!ENTITY editLinkCmd.accesskey "e">
|
||||
<!ENTITY openFrameCmd.label "Open Frame in New Window">
|
||||
<!ENTITY openFrameCmd.accesskey "o">
|
||||
<!ENTITY showOnlyThisFrameCmd.label "Show Only This Frame">
|
||||
<!ENTITY showOnlyThisFrameCmd.accesskey "w">
|
||||
<!ENTITY goBackCmd.label "Back">
|
||||
<!ENTITY goBackCmd.accesskey "b">
|
||||
<!ENTITY goForwardCmd.label "Forward">
|
||||
<!ENTITY goForwardCmd.accesskey "f">
|
||||
<!ENTITY showOnlyThisFrameCmd.label "Show Only This Frame">
|
||||
<!ENTITY showOnlyThisFrameCmd.accesskey "w">
|
||||
<!ENTITY goBackCmd.label "Back">
|
||||
<!ENTITY goBackCmd.accesskey "b">
|
||||
<!ENTITY goForwardCmd.label "Forward">
|
||||
<!ENTITY goForwardCmd.accesskey "f">
|
||||
<!ENTITY reloadCmd.label "Reload">
|
||||
<!ENTITY reloadCmd.accesskey "r">
|
||||
<!ENTITY reloadCmd.commandkey "r">
|
||||
<!ENTITY stopCmd.label "Stop">
|
||||
<!ENTITY stopCmd.accesskey "s">
|
||||
<!ENTITY stopCmd.label "Stop">
|
||||
<!ENTITY stopCmd.accesskey "s">
|
||||
<!ENTITY reloadFrameCmd.label "Reload Frame">
|
||||
<!ENTITY reloadFrameCmd.accesskey "r">
|
||||
<!ENTITY viewPageSourceCmd.label "View Page Source">
|
||||
@ -28,6 +28,8 @@
|
||||
<!ENTITY viewFrameInfoCmd.accesskey "i">
|
||||
<!ENTITY viewImageCmd.label "View Image">
|
||||
<!ENTITY viewImageCmd.accesskey "w">
|
||||
<!ENTITY viewBGImageCmd.label "View Background Image">
|
||||
<!ENTITY viewBGImageCmd.accesskey "w">
|
||||
<!ENTITY bookmarkPageCmd.label "Bookmark this Page">
|
||||
<!ENTITY bookmarkPageCmd.accesskey "b">
|
||||
<!ENTITY bookmarkLinkCmd.label "Bookmark this Link">
|
||||
@ -40,8 +42,6 @@
|
||||
<!ENTITY saveLinkCmd.label "Save Link As...">
|
||||
<!ENTITY saveLinkCmd.accesskey "a">
|
||||
<!ENTITY saveImageCmd.accesskey "a">
|
||||
<!ENTITY saveBGImageCmd.label "Save Background Image As...">
|
||||
<!ENTITY saveBGImageCmd.accesskey "a">
|
||||
<!ENTITY copyCmd.label "Copy">
|
||||
<!ENTITY copyCmd.accesskey "c">
|
||||
<!ENTITY selectAllCmd.label "Select All">
|
||||
@ -51,7 +51,8 @@
|
||||
<!ENTITY copyImageCmd.label "Copy Image Location">
|
||||
<!ENTITY copyImageCmd.accesskey "m">
|
||||
<!ENTITY metadataCmd.label "Properties">
|
||||
<!ENTITY pasteCmd.label "Paste">
|
||||
<!ENTITY pasteCmd.accesskey "p">
|
||||
<!ENTITY cutCmd.label "Cut">
|
||||
<!ENTITY cutCmd.accesskey "u">
|
||||
<!ENTITY metadataCmd.accesskey "">
|
||||
<!ENTITY pasteCmd.label "Paste">
|
||||
<!ENTITY pasteCmd.accesskey "p">
|
||||
<!ENTITY cutCmd.label "Cut">
|
||||
<!ENTITY cutCmd.accesskey "u">
|
||||
|
Loading…
Reference in New Issue
Block a user