mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-09 19:35:51 +00:00
Bug #15916; cleaned up context menu generation to make it faster; rev=hyatt@netscape.com
This commit is contained in:
parent
d07c34991f
commit
0e4600ac24
@ -86,120 +86,116 @@ Contributor(s): ______________________________________. -->
|
||||
var contextMenu = null;
|
||||
</html:script>
|
||||
<popupset>
|
||||
<!-- This is the skeleton context menu. It is populated and emptied
|
||||
dynamically, from the template (see below) via the oncreate/ondestroy
|
||||
handlers.
|
||||
<!-- This is the context menu for the content-area of the navigator
|
||||
window. It contains each and every possible menu choice. The
|
||||
appropriate items are hidden/shown upon display, based on what
|
||||
the user has clicked-on.
|
||||
-->
|
||||
<popup id="context"
|
||||
oncreate="contextMenu = new nsContextMenu( this );"
|
||||
ondestroy="contextMenu.onDestroy(); contextMenu = null;"/>
|
||||
ondestroy="contextMenu.onDestroy(); contextMenu = null;">
|
||||
|
||||
<!-- This is the context menu template used to populate the actual
|
||||
content menu on demand. It holds everything and is whittled down
|
||||
based on the specific content element that is "context menu-ed."
|
||||
-->
|
||||
<popup id="context-template">
|
||||
<!-- Open ==================================== -->
|
||||
<menuitem id="template-openlink"
|
||||
<menuitem id="context-openlink"
|
||||
value="&openLinkCmd.label;"
|
||||
accesskey=""
|
||||
oncommand="contextMenu.openLink();"/>
|
||||
<menuitem id="template-editlink"
|
||||
<menuitem id="context-editlink"
|
||||
value="&editLinkCmd.label;"
|
||||
accesskey=""
|
||||
oncommand="contextMenu.editLink();"/>
|
||||
<menuitem id="template-openframe"
|
||||
<menuitem id="context-openframe"
|
||||
value="&openFrameCmd.label;"
|
||||
accesskey=""
|
||||
oncommand="contextMenu.openFrame();"/>
|
||||
<menuseparator id="context-sep-open"/>
|
||||
<!-- Navigation ============================== -->
|
||||
<menuitem id="template-back"
|
||||
<menuitem id="context-back"
|
||||
value="&goBackCmd.label;"
|
||||
accesskey="&goBackCmd.accesskey;"
|
||||
oncommand="BrowserBack()"/>
|
||||
<menuitem id="template-forward"
|
||||
<menuitem id="context-forward"
|
||||
value="&goForwardCmd.label;"
|
||||
accesskey="&goForwardCmd.accesskey;"
|
||||
oncommand="BrowserForward()"/>
|
||||
<menuitem id="template-reload"
|
||||
<menuitem id="context-reload"
|
||||
value="&reloadCmd.label;"
|
||||
accesskey=""
|
||||
oncommand="BrowserReallyReload(0);"/>
|
||||
<menuitem id="template-stop"
|
||||
<menuitem id="context-stop"
|
||||
value="&stopCmd.label;"
|
||||
accesskey=""
|
||||
oncommand="BrowserStop();"/>
|
||||
<menuseparator/>
|
||||
<!-- View ==================================== -->
|
||||
<menuitem id="template-viewsource"
|
||||
<menuitem id="context-viewsource"
|
||||
value="&viewPageSourceCmd.label;"
|
||||
accesskey=""
|
||||
oncommand="BrowserViewSource();"/>
|
||||
<menuitem id="template-viewframesource"
|
||||
<menuitem id="context-viewframesource"
|
||||
value="&viewFrameSourceCmd.label;"
|
||||
accesskey=""
|
||||
oncommand="contextMenu.viewFrameSource();"/>
|
||||
<menuitem id="template-viewinfo"
|
||||
<menuitem id="context-viewinfo"
|
||||
value="&viewPageInfoCmd.label;"
|
||||
accesskey=""
|
||||
oncommand="contextMenu.viewInfo();"/>
|
||||
<menuitem id="template-viewframeinfo"
|
||||
<menuitem id="context-viewframeinfo"
|
||||
value="&viewFrameInfoCmd.label;"
|
||||
accesskey=""
|
||||
oncommand="contextMenu.viewFrameInfo();"/>
|
||||
<menuitem id="template-viewimage"
|
||||
<menuitem id="context-viewimage"
|
||||
value="&viewImageCmd.label;"
|
||||
accesskey=""
|
||||
oncommand="contextMenu.viewImage();"/>
|
||||
<menuseparator/>
|
||||
<!-- Misc ==================================== -->
|
||||
<menuitem id="template-bookmarkpage"
|
||||
<menuitem id="context-bookmarkpage"
|
||||
value="&bookmarkPageCmd.label;"
|
||||
accesskey="&bookmarkPageCmd.accesskey;"
|
||||
oncommand="BrowserAddBookmark( window.content.location.href,
|
||||
window.content.document.title )"/>
|
||||
<menuitem id="template-sendpage"
|
||||
<menuitem id="context-sendpage"
|
||||
value="&sendPageCmd.label;"
|
||||
accesskey="&sendPageCmd.accesskey;"
|
||||
oncommand="BrowserSendPage();"/>
|
||||
<menuseparator/>
|
||||
<!-- Save ==================================== -->
|
||||
<menuitem id="template-savepage"
|
||||
<menuitem id="context-savepage"
|
||||
value="&savePageCmd.label;"
|
||||
accesskey="&savePageCmd.accesskey;"
|
||||
oncommand="contextMenu.savePage();"/>
|
||||
<menuitem id="template-saveframe"
|
||||
<menuitem id="context-saveframe"
|
||||
value="&saveFrameCmd.label;"
|
||||
accesskey="&saveFrameCmd.accesskey;"
|
||||
oncommand="contextMenu.saveFrame();"/>
|
||||
<menuitem id="template-savelink"
|
||||
<menuitem id="context-savelink"
|
||||
value="&saveLinkCmd.label;"
|
||||
accesskey="&saveLinkCmd.accesskey;"
|
||||
oncommand="contextMenu.saveLink();"/>
|
||||
<menuitem id="template-saveimage"
|
||||
<menuitem id="context-saveimage"
|
||||
value="&saveImageCmd.label;"
|
||||
accesskey="&saveImageCmd.accesskey;"
|
||||
oncommand="contextMenu.saveImage();"/>
|
||||
<menuitem id="template-savebgimage"
|
||||
<menuitem id="context-savebgimage"
|
||||
value="&saveBGImageCmd.label;"
|
||||
accesskey="&saveBGImageCmd.accesskey;"
|
||||
oncommand="contextMenu.saveBGImage();"/>
|
||||
<menuseparator/>
|
||||
<!-- Clipboard =============================== -->
|
||||
<menuitem id="template-selectall"
|
||||
<menuitem id="context-selectall"
|
||||
value="&selectAllCmd.label;"
|
||||
accesskey="&selectAllCmd.accesskey;"
|
||||
oncommand="BrowserSelectAll();"/>
|
||||
<menuitem id="template-copy"
|
||||
<menuitem id="context-copy"
|
||||
value="©Cmd.label;"
|
||||
accesskey="©Cmd.accesskey;"
|
||||
oncommand="BrowserCopy();"/>
|
||||
<menuitem id="template-copylink"
|
||||
<menuitem id="context-copylink"
|
||||
value="©LinkCmd.label;"
|
||||
accesskey="©LinkCmd.accesskey;"
|
||||
oncommand="contextMenu.copyLink();"/>
|
||||
<menuitem id="template-copyimage"
|
||||
<menuitem id="context-copyimage"
|
||||
value="©ImageCmd.label;"
|
||||
accesskey="©ImageCmd.accesskey;"
|
||||
oncommand="contextMenu.copyImage();"/>
|
||||
|
@ -86,120 +86,116 @@ Contributor(s): ______________________________________. -->
|
||||
var contextMenu = null;
|
||||
</html:script>
|
||||
<popupset>
|
||||
<!-- This is the skeleton context menu. It is populated and emptied
|
||||
dynamically, from the template (see below) via the oncreate/ondestroy
|
||||
handlers.
|
||||
<!-- This is the context menu for the content-area of the navigator
|
||||
window. It contains each and every possible menu choice. The
|
||||
appropriate items are hidden/shown upon display, based on what
|
||||
the user has clicked-on.
|
||||
-->
|
||||
<popup id="context"
|
||||
oncreate="contextMenu = new nsContextMenu( this );"
|
||||
ondestroy="contextMenu.onDestroy(); contextMenu = null;"/>
|
||||
ondestroy="contextMenu.onDestroy(); contextMenu = null;">
|
||||
|
||||
<!-- This is the context menu template used to populate the actual
|
||||
content menu on demand. It holds everything and is whittled down
|
||||
based on the specific content element that is "context menu-ed."
|
||||
-->
|
||||
<popup id="context-template">
|
||||
<!-- Open ==================================== -->
|
||||
<menuitem id="template-openlink"
|
||||
<menuitem id="context-openlink"
|
||||
value="&openLinkCmd.label;"
|
||||
accesskey=""
|
||||
oncommand="contextMenu.openLink();"/>
|
||||
<menuitem id="template-editlink"
|
||||
<menuitem id="context-editlink"
|
||||
value="&editLinkCmd.label;"
|
||||
accesskey=""
|
||||
oncommand="contextMenu.editLink();"/>
|
||||
<menuitem id="template-openframe"
|
||||
<menuitem id="context-openframe"
|
||||
value="&openFrameCmd.label;"
|
||||
accesskey=""
|
||||
oncommand="contextMenu.openFrame();"/>
|
||||
<menuseparator id="context-sep-open"/>
|
||||
<!-- Navigation ============================== -->
|
||||
<menuitem id="template-back"
|
||||
<menuitem id="context-back"
|
||||
value="&goBackCmd.label;"
|
||||
accesskey="&goBackCmd.accesskey;"
|
||||
oncommand="BrowserBack()"/>
|
||||
<menuitem id="template-forward"
|
||||
<menuitem id="context-forward"
|
||||
value="&goForwardCmd.label;"
|
||||
accesskey="&goForwardCmd.accesskey;"
|
||||
oncommand="BrowserForward()"/>
|
||||
<menuitem id="template-reload"
|
||||
<menuitem id="context-reload"
|
||||
value="&reloadCmd.label;"
|
||||
accesskey=""
|
||||
oncommand="BrowserReallyReload(0);"/>
|
||||
<menuitem id="template-stop"
|
||||
<menuitem id="context-stop"
|
||||
value="&stopCmd.label;"
|
||||
accesskey=""
|
||||
oncommand="BrowserStop();"/>
|
||||
<menuseparator/>
|
||||
<!-- View ==================================== -->
|
||||
<menuitem id="template-viewsource"
|
||||
<menuitem id="context-viewsource"
|
||||
value="&viewPageSourceCmd.label;"
|
||||
accesskey=""
|
||||
oncommand="BrowserViewSource();"/>
|
||||
<menuitem id="template-viewframesource"
|
||||
<menuitem id="context-viewframesource"
|
||||
value="&viewFrameSourceCmd.label;"
|
||||
accesskey=""
|
||||
oncommand="contextMenu.viewFrameSource();"/>
|
||||
<menuitem id="template-viewinfo"
|
||||
<menuitem id="context-viewinfo"
|
||||
value="&viewPageInfoCmd.label;"
|
||||
accesskey=""
|
||||
oncommand="contextMenu.viewInfo();"/>
|
||||
<menuitem id="template-viewframeinfo"
|
||||
<menuitem id="context-viewframeinfo"
|
||||
value="&viewFrameInfoCmd.label;"
|
||||
accesskey=""
|
||||
oncommand="contextMenu.viewFrameInfo();"/>
|
||||
<menuitem id="template-viewimage"
|
||||
<menuitem id="context-viewimage"
|
||||
value="&viewImageCmd.label;"
|
||||
accesskey=""
|
||||
oncommand="contextMenu.viewImage();"/>
|
||||
<menuseparator/>
|
||||
<!-- Misc ==================================== -->
|
||||
<menuitem id="template-bookmarkpage"
|
||||
<menuitem id="context-bookmarkpage"
|
||||
value="&bookmarkPageCmd.label;"
|
||||
accesskey="&bookmarkPageCmd.accesskey;"
|
||||
oncommand="BrowserAddBookmark( window.content.location.href,
|
||||
window.content.document.title )"/>
|
||||
<menuitem id="template-sendpage"
|
||||
<menuitem id="context-sendpage"
|
||||
value="&sendPageCmd.label;"
|
||||
accesskey="&sendPageCmd.accesskey;"
|
||||
oncommand="BrowserSendPage();"/>
|
||||
<menuseparator/>
|
||||
<!-- Save ==================================== -->
|
||||
<menuitem id="template-savepage"
|
||||
<menuitem id="context-savepage"
|
||||
value="&savePageCmd.label;"
|
||||
accesskey="&savePageCmd.accesskey;"
|
||||
oncommand="contextMenu.savePage();"/>
|
||||
<menuitem id="template-saveframe"
|
||||
<menuitem id="context-saveframe"
|
||||
value="&saveFrameCmd.label;"
|
||||
accesskey="&saveFrameCmd.accesskey;"
|
||||
oncommand="contextMenu.saveFrame();"/>
|
||||
<menuitem id="template-savelink"
|
||||
<menuitem id="context-savelink"
|
||||
value="&saveLinkCmd.label;"
|
||||
accesskey="&saveLinkCmd.accesskey;"
|
||||
oncommand="contextMenu.saveLink();"/>
|
||||
<menuitem id="template-saveimage"
|
||||
<menuitem id="context-saveimage"
|
||||
value="&saveImageCmd.label;"
|
||||
accesskey="&saveImageCmd.accesskey;"
|
||||
oncommand="contextMenu.saveImage();"/>
|
||||
<menuitem id="template-savebgimage"
|
||||
<menuitem id="context-savebgimage"
|
||||
value="&saveBGImageCmd.label;"
|
||||
accesskey="&saveBGImageCmd.accesskey;"
|
||||
oncommand="contextMenu.saveBGImage();"/>
|
||||
<menuseparator/>
|
||||
<!-- Clipboard =============================== -->
|
||||
<menuitem id="template-selectall"
|
||||
<menuitem id="context-selectall"
|
||||
value="&selectAllCmd.label;"
|
||||
accesskey="&selectAllCmd.accesskey;"
|
||||
oncommand="BrowserSelectAll();"/>
|
||||
<menuitem id="template-copy"
|
||||
<menuitem id="context-copy"
|
||||
value="©Cmd.label;"
|
||||
accesskey="©Cmd.accesskey;"
|
||||
oncommand="BrowserCopy();"/>
|
||||
<menuitem id="template-copylink"
|
||||
<menuitem id="context-copylink"
|
||||
value="©LinkCmd.label;"
|
||||
accesskey="©LinkCmd.accesskey;"
|
||||
oncommand="contextMenu.copyLink();"/>
|
||||
<menuitem id="template-copyimage"
|
||||
<menuitem id="context-copyimage"
|
||||
value="©ImageCmd.label;"
|
||||
accesskey="©ImageCmd.accesskey;"
|
||||
oncommand="contextMenu.copyImage();"/>
|
||||
|
@ -46,9 +46,8 @@ function nsContextMenu( xulMenu ) {
|
||||
|
||||
// Prototype for nsContextMenu "class."
|
||||
nsContextMenu.prototype = {
|
||||
// Remove all the children which we added at oncreate.
|
||||
// onDestroy is a no-op at this point.
|
||||
onDestroy : function () {
|
||||
this.removeAllItems();
|
||||
},
|
||||
// Initialize context menu.
|
||||
initMenu : function ( popup, event ) {
|
||||
@ -58,23 +57,6 @@ nsContextMenu.prototype = {
|
||||
// Get contextual info.
|
||||
this.setTarget( document.popupNode );
|
||||
|
||||
// Populate menu from template.
|
||||
var template = document.getElementById( "context-template" );
|
||||
var items = template.childNodes;
|
||||
for ( var i = 0; i < items.length; i++ ) {
|
||||
// Replicate item.
|
||||
//var item = items.item(i).cloneNode( false );
|
||||
|
||||
// cloneNode not implemented, fake it.
|
||||
var item = this.cloneNode( items.item(i) );
|
||||
|
||||
// Change id.
|
||||
item.setAttribute( "id", item.getAttribute( "id" ).replace( "template-", "context-" ) );
|
||||
|
||||
// Add it to popup menu.
|
||||
this.menu.appendChild( item );
|
||||
}
|
||||
|
||||
// Initialize (disable/remove) menu items.
|
||||
this.initItems();
|
||||
},
|
||||
@ -90,24 +72,14 @@ nsContextMenu.prototype = {
|
||||
var needSep = false;
|
||||
|
||||
// Remove open/edit link if not applicable.
|
||||
if ( !this.onLink ) {
|
||||
this.removeItem( "context-openlink" );
|
||||
this.removeItem( "context-editlink" );
|
||||
} else {
|
||||
needSep = true;
|
||||
}
|
||||
this.showItem( "context-openlink", this.onLink );
|
||||
this.showItem( "context-editlink", this.onLink );
|
||||
|
||||
// Remove open frame if not applicable.
|
||||
if ( !this.inFrame ) {
|
||||
this.removeItem( "context-openframe" );
|
||||
} else {
|
||||
needSep = true;
|
||||
}
|
||||
this.showItem( "context-openframe", this.inFrame );
|
||||
|
||||
if ( !needSep ) {
|
||||
// Remove separator after open items.
|
||||
this.removeItem( "context-sep-open" );
|
||||
}
|
||||
// Remove separator after open items if neither link nor frame.
|
||||
this.showItem( "context-sep-open", this.onLink && !this.inFrame );
|
||||
},
|
||||
initNavigationItems : function () {
|
||||
// Back determined by canGoBack broadcaster.
|
||||
@ -125,49 +97,37 @@ nsContextMenu.prototype = {
|
||||
// Save page is always OK.
|
||||
|
||||
// Save frame as depends on whether we're in a frame.
|
||||
if ( !this.inFrame ) {
|
||||
this.removeItem( "context-saveframe" );
|
||||
}
|
||||
this.showItem( "context-saveframe", this.inFrame );
|
||||
|
||||
// Save link depends on whether we're in a link.
|
||||
if ( !this.onLink ) {
|
||||
this.removeItem( "context-savelink" );
|
||||
}
|
||||
this.showItem( "context-savelink", this.onLink );
|
||||
|
||||
// Save background image depends on whether there is one.
|
||||
if ( !this.hasBGImage ) {
|
||||
this.removeItem( "context-savebgimage" );
|
||||
}
|
||||
this.showItem( "context-savebgimage", this.hasBGImage );
|
||||
|
||||
// Save image depends on whether there is one.
|
||||
if ( !this.onImage ) {
|
||||
this.removeItem( "context-saveimage" );
|
||||
}
|
||||
this.showItem( "context-saveimage", this.onImage );
|
||||
},
|
||||
initViewItems : function () {
|
||||
// View source is always OK.
|
||||
|
||||
// View frame source depends on whether we're in a frame.
|
||||
if ( !this.inFrame ) {
|
||||
this.removeItem( "context-viewframesource" );
|
||||
}
|
||||
this.showItem( "context-viewframesource", this.inFrame );
|
||||
|
||||
// View Info don't work no way no how.
|
||||
this.removeItem( "context-viewinfo" );
|
||||
this.showItem( "context-viewinfo", false );
|
||||
|
||||
// View Frame Info isn't working, either.
|
||||
this.removeItem( "context-viewframeinfo" );
|
||||
this.showItem( "context-viewframeinfo", false );
|
||||
|
||||
// View Image depends on whether an image was clicked on.
|
||||
if ( !this.onImage ) {
|
||||
this.removeItem( "context-viewimage" );
|
||||
}
|
||||
this.showItem( "context-viewimage", this.onImage );
|
||||
},
|
||||
initMiscItems : function () {
|
||||
// Add bookmark always OK.
|
||||
|
||||
// Send Page not working yet.
|
||||
this.removeItem( "context-sendpage" );
|
||||
this.showItem( "context-sendpage", false );
|
||||
},
|
||||
initClipboardItems : function () {
|
||||
// Select All is always OK.
|
||||
@ -176,14 +136,10 @@ nsContextMenu.prototype = {
|
||||
this.setItemAttr( "context-copy", "disabled", this.isNoTextSelected() );
|
||||
|
||||
// Copy link location depends on whether we're on a link.
|
||||
if ( !this.onLink ) {
|
||||
this.removeItem( "context-copylink" );
|
||||
}
|
||||
this.showItem( "context-copylink", this.onLink );
|
||||
|
||||
// Copy image location depends on whether we're on an image.
|
||||
if ( !this.onImage ) {
|
||||
this.removeItem( "context-copyimage" );
|
||||
}
|
||||
this.showItem( "context-copyimage", this.onImage );
|
||||
},
|
||||
// Set various context menu attributes based on the state of the world.
|
||||
setTarget : function ( node ) {
|
||||
@ -319,8 +275,8 @@ nsContextMenu.prototype = {
|
||||
this.copyToClipboard( this.imageURL() );
|
||||
},
|
||||
// Utilities
|
||||
// Remove one item (specified via name or the item element itself).
|
||||
removeItem : function ( itemOrId ) {
|
||||
// Show/hide one item (specified via name or the item element itself).
|
||||
showItem : function ( itemOrId, show ) {
|
||||
var item = null;
|
||||
if ( itemOrId.constructor == String ) {
|
||||
// Argument specifies item id.
|
||||
@ -330,18 +286,21 @@ nsContextMenu.prototype = {
|
||||
item = itemOrId;
|
||||
}
|
||||
if ( item ) {
|
||||
// Change id so it doesn't interfere with this menu
|
||||
// the next time it is displayed.
|
||||
//item.setAttribute( "id", "_dead" );
|
||||
this.menu.removeChild( item );
|
||||
}
|
||||
},
|
||||
// Remove all menu items.
|
||||
removeAllItems : function () {
|
||||
if ( this.menu ) {
|
||||
var items = this.menu.childNodes;
|
||||
for ( var i = 0; i < items.length; i++ ) {
|
||||
this.removeItem( items[i] );
|
||||
var styleIn = item.getAttribute( "style" );
|
||||
var styleOut = styleIn;
|
||||
if ( show ) {
|
||||
// Remove style="display:none;".
|
||||
styleOut.replace( "display:none;", "" );
|
||||
} else {
|
||||
// Set style="display:none;".
|
||||
if ( styleOut.indexOf( "display:none;" ) == -1 ) {
|
||||
// Add style the first time we need to.
|
||||
styleOut += "display:none;";
|
||||
}
|
||||
}
|
||||
// Only set style if it's different.
|
||||
if ( styleIn != styleOut ) {
|
||||
item.setAttribute( "style", styleOut );
|
||||
}
|
||||
}
|
||||
},
|
||||
|
Loading…
Reference in New Issue
Block a user