зеркало из https://github.com/mozilla/gecko-dev.git
Fix 48876: make d&d and modifier-/middle-click possible throughout the app and implement selection within link (50673). Also fixes 59520, 48780, 48632, 57588, 59132. r=jag sr=alecf
This commit is contained in:
Родитель
8c9593d2f1
Коммит
8c6d09b89b
|
@ -53,14 +53,20 @@
|
|||
persist="screenX screenY width height"
|
||||
>
|
||||
|
||||
<script language="JavaScript" src="chrome://editor/content/editor.js"/>
|
||||
<script type="text/javascript" src="chrome://editor/content/editor.js"/>
|
||||
<!--
|
||||
Loaded by editorOverlay.js
|
||||
<script language="JavaScript" src="chrome://editor/content/ComposerCommands.js"/>
|
||||
<script type="text/javascript" src="chrome://editor/content/ComposerCommands.js"/>
|
||||
-->
|
||||
<script language="JavaScript" src="chrome://editor/content/EditorCommandsDebug.js"/>
|
||||
<script language="JavaScript" src="chrome://editor/content/EditorContextMenu.js"/>
|
||||
<script language="javascript" src="chrome://global/content/strres.js"/>
|
||||
<script type="text/javascript" src="chrome://editor/content/EditorCommandsDebug.js"/>
|
||||
<script type="text/javascript" src="chrome://editor/content/EditorContextMenu.js"/>
|
||||
<script type="text/javascript" src="chrome://global/content/strres.js"/>
|
||||
<script type="text/javascript" src="chrome://communicator/content/contentAreaUtils.js"/>
|
||||
<script type="text/javascript" src="chrome://communicator/content/contentAreaDD.js"/>
|
||||
<script type="text/javascript" src="chrome://global/content/nsJSSupportsUtils.js"/>
|
||||
<script type="text/javascript" src="chrome://global/content/nsJSComponentManager.js"/>
|
||||
<script type="text/javascript" src="chrome://global/content/nsTransferable.js"/>
|
||||
<script type="text/javascript" src="chrome://global/content/nsDragAndDrop.js"/>
|
||||
|
||||
<popupset id="aTooltipSet" />
|
||||
<popupset id="editorContentContextSet"/>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||
*
|
||||
* The contents of this file are subject to the Netscape Public
|
||||
* License Version 1.1 (the "License"); you may not use this file
|
||||
|
@ -1022,32 +1022,32 @@ nsFrame::HandlePress(nsIPresContext* aPresContext,
|
|||
// link and steal all its glory.
|
||||
PRBool isEditor = PR_FALSE;
|
||||
shell->GetDisplayNonTextSelection ( &isEditor );
|
||||
if ( !isEditor ) {
|
||||
nsKeyEvent* keyEvent = (nsKeyEvent*)aEvent;
|
||||
if (!isEditor && !keyEvent->isAlt) {
|
||||
nsCOMPtr<nsIContent> content;
|
||||
GetContent ( getter_AddRefs(content) );
|
||||
if ( content ) {
|
||||
do {
|
||||
// are we an anchor with an href? If so, bail out now!
|
||||
nsCOMPtr<nsIAtom> tag;
|
||||
content->GetTag(*getter_AddRefs(tag));
|
||||
if ( tag.get() == nsHTMLAtoms::a ) {
|
||||
// Fix for bug #53326: Make sure we bail only
|
||||
// in the presence of an href with a value!
|
||||
nsAutoString href;
|
||||
if (NS_CONTENT_ATTR_HAS_VALUE == content->GetAttribute(kNameSpaceID_None, nsHTMLAtoms::href, href))
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
// now try the parent
|
||||
nsIContent* parent;
|
||||
content->GetParent(parent);
|
||||
content = dont_AddRef(parent);
|
||||
} while ( content );
|
||||
}
|
||||
} // if browser, not editor
|
||||
GetContent (getter_AddRefs(content));
|
||||
while (content) {
|
||||
// are we an anchor with an href? If so, bail out now!
|
||||
nsCOMPtr<nsIAtom> tag;
|
||||
content->GetTag(*getter_AddRefs(tag));
|
||||
if ( tag.get() == nsHTMLAtoms::a ) {
|
||||
// Fix for bug #53326: Make sure we bail only
|
||||
// in the presence of an href with a value!
|
||||
nsAutoString href;
|
||||
if (NS_CONTENT_ATTR_HAS_VALUE == content->GetAttribute(kNameSpaceID_None, nsHTMLAtoms::href, href))
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
// now try the parent
|
||||
nsIContent* parent;
|
||||
content->GetParent(parent);
|
||||
content = dont_AddRef(parent);
|
||||
|
||||
} // if browser, not editor
|
||||
}
|
||||
|
||||
// check whether style allows selection
|
||||
// if not, don't tell selection the mouse event even occured.
|
||||
// if not, don't tell selection the mouse event even occurred.
|
||||
PRBool selectable;
|
||||
PRUint8 selectStyle;
|
||||
rv = IsSelectable(&selectable, &selectStyle);
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||
*
|
||||
* The contents of this file are subject to the Netscape Public
|
||||
* License Version 1.1 (the "License"); you may not use this file
|
||||
|
@ -1022,32 +1022,32 @@ nsFrame::HandlePress(nsIPresContext* aPresContext,
|
|||
// link and steal all its glory.
|
||||
PRBool isEditor = PR_FALSE;
|
||||
shell->GetDisplayNonTextSelection ( &isEditor );
|
||||
if ( !isEditor ) {
|
||||
nsKeyEvent* keyEvent = (nsKeyEvent*)aEvent;
|
||||
if (!isEditor && !keyEvent->isAlt) {
|
||||
nsCOMPtr<nsIContent> content;
|
||||
GetContent ( getter_AddRefs(content) );
|
||||
if ( content ) {
|
||||
do {
|
||||
// are we an anchor with an href? If so, bail out now!
|
||||
nsCOMPtr<nsIAtom> tag;
|
||||
content->GetTag(*getter_AddRefs(tag));
|
||||
if ( tag.get() == nsHTMLAtoms::a ) {
|
||||
// Fix for bug #53326: Make sure we bail only
|
||||
// in the presence of an href with a value!
|
||||
nsAutoString href;
|
||||
if (NS_CONTENT_ATTR_HAS_VALUE == content->GetAttribute(kNameSpaceID_None, nsHTMLAtoms::href, href))
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
// now try the parent
|
||||
nsIContent* parent;
|
||||
content->GetParent(parent);
|
||||
content = dont_AddRef(parent);
|
||||
} while ( content );
|
||||
}
|
||||
} // if browser, not editor
|
||||
GetContent (getter_AddRefs(content));
|
||||
while (content) {
|
||||
// are we an anchor with an href? If so, bail out now!
|
||||
nsCOMPtr<nsIAtom> tag;
|
||||
content->GetTag(*getter_AddRefs(tag));
|
||||
if ( tag.get() == nsHTMLAtoms::a ) {
|
||||
// Fix for bug #53326: Make sure we bail only
|
||||
// in the presence of an href with a value!
|
||||
nsAutoString href;
|
||||
if (NS_CONTENT_ATTR_HAS_VALUE == content->GetAttribute(kNameSpaceID_None, nsHTMLAtoms::href, href))
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
// now try the parent
|
||||
nsIContent* parent;
|
||||
content->GetParent(parent);
|
||||
content = dont_AddRef(parent);
|
||||
|
||||
} // if browser, not editor
|
||||
}
|
||||
|
||||
// check whether style allows selection
|
||||
// if not, don't tell selection the mouse event even occured.
|
||||
// if not, don't tell selection the mouse event even occurred.
|
||||
PRBool selectable;
|
||||
PRUint8 selectStyle;
|
||||
rv = IsSelectable(&selectable, &selectStyle);
|
||||
|
|
|
@ -50,19 +50,25 @@ Rights Reserved.
|
|||
windowtype="mail:3pane">
|
||||
|
||||
|
||||
<script src="chrome://global/content/strres.js"/>
|
||||
<script src="chrome://messenger/content/widgetglue.js"/>
|
||||
<script src="chrome://messenger/content/commandglue.js"/>
|
||||
<script src="chrome://messenger/content/shareglue.js"/>
|
||||
<script src="chrome://messenger/content/msgViewNavigation.js"/>
|
||||
<script src="chrome://messenger/content/mailWindow.js"/>
|
||||
<script src="chrome://messenger/content/msgMail3PaneWindow.js"/>
|
||||
<script src="chrome://messenger/content/mail3PaneWindowCommands.js"/>
|
||||
<script src="chrome://messenger/content/mailContextMenus.js"/>
|
||||
<script src="chrome://messenger/content/messengerdnd.js"/>
|
||||
<script src="chrome://messenger/content/accountUtils.js"/>
|
||||
<script src="chrome://navigator/content/nsContextMenu.js"/>
|
||||
<script src="chrome://navigator/content/navigator.js"/>
|
||||
<script type="text/javascript" src="chrome://global/content/strres.js"/>
|
||||
<script type="text/javascript" src="chrome://messenger/content/widgetglue.js"/>
|
||||
<script type="text/javascript" src="chrome://messenger/content/commandglue.js"/>
|
||||
<script type="text/javascript" src="chrome://messenger/content/shareglue.js"/>
|
||||
<script type="text/javascript" src="chrome://messenger/content/msgViewNavigation.js"/>
|
||||
<script type="text/javascript" src="chrome://messenger/content/mailWindow.js"/>
|
||||
<script type="text/javascript" src="chrome://messenger/content/msgMail3PaneWindow.js"/>
|
||||
<script type="text/javascript" src="chrome://messenger/content/mail3PaneWindowCommands.js"/>
|
||||
<script type="text/javascript" src="chrome://messenger/content/mailContextMenus.js"/>
|
||||
<script type="text/javascript" src="chrome://messenger/content/messengerdnd.js"/>
|
||||
<script type="text/javascript" src="chrome://messenger/content/accountUtils.js"/>
|
||||
<script type="text/javascript" src="chrome://navigator/content/nsContextMenu.js"/>
|
||||
<script type="text/javascript" src="chrome://navigator/content/navigator.js"/>
|
||||
<script type="text/javascript" src="chrome://communicator/content/contentAreaUtils.js"/>
|
||||
<script type="text/javascript" src="chrome://communicator/content/contentAreaDD.js"/>
|
||||
<script type="text/javascript" src="chrome://global/content/nsJSSupportsUtils.js"/>
|
||||
<script type="text/javascript" src="chrome://global/content/nsJSComponentManager.js"/>
|
||||
<script type="text/javascript" src="chrome://global/content/nsTransferable.js"/>
|
||||
<script type="text/javascript" src="chrome://global/content/nsDragAndDrop.js"/>
|
||||
|
||||
<commands id="commands">
|
||||
<commandset id="CommandUpdate_Mail"
|
||||
|
@ -130,7 +136,7 @@ Rights Reserved.
|
|||
<splitter id="gray_vertical_splitter" collapse="before" persist="state"/>
|
||||
<tree id="threadTree" flex="2" persist="width" style="width:0px" context="threadPaneContext" class="window-focusborder" focusring="false"/>
|
||||
</box>
|
||||
<!-- if you change this id, please change GetThreadAndMessagePaneSplitter() and MsgToggleMessagePnae() -->
|
||||
<!-- if you change this id, please change GetThreadAndMessagePaneSplitter() and MsgToggleMessagePane() -->
|
||||
<splitter id="threadpane-splitter" collapse="after" persist="state"
|
||||
onclick="OnClickThreadAndMessagePaneSplitter()" orient="vertical" autostretch="never">
|
||||
<grippy/>
|
||||
|
@ -140,7 +146,7 @@ Rights Reserved.
|
|||
<toolbox id="msgHeaderView"/>
|
||||
|
||||
<!-- message view -->
|
||||
<iframe id="messagepane" context="messagePaneContext" style="height: 0px" flex="1" name="messagepane" type="content-primary" src="about:blank"/>
|
||||
<iframe id="messagepane" context="messagePaneContext" style="height: 0px" flex="1" name="messagepane" type="content-primary" src="about:blank" onclick="contentAreaClick(event);" ondraggesture="nsDragAndDrop.startDrag(event, contentAreaDNDObserver);"/>
|
||||
</box>
|
||||
<statusbar id="status-bar">
|
||||
<statusbarpanel id="unreadMessageCount" style="min-width: 5px"/>
|
||||
|
|
|
@ -45,15 +45,21 @@ Rights Reserved.
|
|||
windowtype="mail:messageWindow">
|
||||
|
||||
|
||||
<script src="chrome://global/content/strres.js"/>
|
||||
<script src="chrome://messenger/content/shareglue.js"/>
|
||||
<script src="chrome://messenger/content/commandglue.js"/>
|
||||
<script src="chrome://messenger/content/mailWindow.js"/>
|
||||
<script src="chrome://messenger/content/messageWindow.js"/>
|
||||
<script src="chrome://messenger/content/accountUtils.js"/>
|
||||
<script src="chrome://navigator/content/nsContextMenu.js"/>
|
||||
<script src="chrome://navigator/content/navigator.js"/>
|
||||
<script src="chrome://messenger/content/mailContextMenus.js"/>
|
||||
<script type="text/javascript" src="chrome://global/content/strres.js"/>
|
||||
<script type="text/javascript" src="chrome://messenger/content/shareglue.js"/>
|
||||
<script type="text/javascript" src="chrome://messenger/content/commandglue.js"/>
|
||||
<script type="text/javascript" src="chrome://messenger/content/mailWindow.js"/>
|
||||
<script type="text/javascript" src="chrome://messenger/content/messageWindow.js"/>
|
||||
<script type="text/javascript" src="chrome://messenger/content/accountUtils.js"/>
|
||||
<script type="text/javascript" src="chrome://navigator/content/nsContextMenu.js"/>
|
||||
<script type="text/javascript" src="chrome://navigator/content/navigator.js"/>
|
||||
<script type="text/javascript" src="chrome://messenger/content/mailContextMenus.js"/>
|
||||
<script type="text/javascript" src="chrome://communicator/content/contentAreaUtils.js"/>
|
||||
<script type="text/javascript" src="chrome://communicator/content/contentAreaDD.js"/>
|
||||
<script type="text/javascript" src="chrome://global/content/nsJSSupportsUtils.js"/>
|
||||
<script type="text/javascript" src="chrome://global/content/nsJSComponentManager.js"/>
|
||||
<script type="text/javascript" src="chrome://global/content/nsTransferable.js"/>
|
||||
<script type="text/javascript" src="chrome://global/content/nsDragAndDrop.js"/>
|
||||
|
||||
<commands id="commands">
|
||||
<commandset id="CommandUpdate_Mail"
|
||||
|
@ -90,7 +96,7 @@ Rights Reserved.
|
|||
<toolbox id="msgHeaderView"/>
|
||||
|
||||
<!-- message view -->
|
||||
<iframe id="messagepane" context="messagePaneContext" style="height: 0px" flex="1" name="messagepane" type="content-primary" src="about:blank"/>
|
||||
<iframe id="messagepane" context="messagePaneContext" style="height: 0px" flex="1" name="messagepane" type="content-primary" src="about:blank" onclick="contentAreaClick(event);" ondraggesture="nsDragAndDrop.startDrag(event, contentAreaDNDObserver);"/>
|
||||
</box>
|
||||
|
||||
|
||||
|
|
|
@ -56,19 +56,25 @@ Rights Reserved.
|
|||
windowtype="mail:3pane">
|
||||
|
||||
|
||||
<script src="chrome://global/content/strres.js"></script>
|
||||
<script src="chrome://messenger/content/widgetglue.js"></script>
|
||||
<script src="chrome://messenger/content/commandglue.js"></script>
|
||||
<script src="chrome://messenger/content/shareglue.js"></script>
|
||||
<script src="chrome://messenger/content/msgViewNavigation.js"></script>
|
||||
<script src="chrome://messenger/content/mailWindow.js"></script>
|
||||
<script src="chrome://messenger/content/msgMail3PaneWindow.js"></script>
|
||||
<script src="chrome://messenger/content/mail3PaneWindowCommands.js"></script>
|
||||
<script src="chrome://messenger/content/mailContextMenus.js"></script>
|
||||
<script src="chrome://messenger/content/messengerdnd.js"></script>
|
||||
<script src="chrome://messenger/content/accountUtils.js"></script>
|
||||
<script src="chrome://navigator/content/nsContextMenu.js"></script>
|
||||
<script src="chrome://navigator/content/navigator.js"></script>
|
||||
<script type="text/javascript" src="chrome://global/content/strres.js"/>
|
||||
<script type="text/javascript" src="chrome://messenger/content/widgetglue.js"/>
|
||||
<script type="text/javascript" src="chrome://messenger/content/commandglue.js"/>
|
||||
<script type="text/javascript" src="chrome://messenger/content/shareglue.js"/>
|
||||
<script type="text/javascript" src="chrome://messenger/content/msgViewNavigation.js"/>
|
||||
<script type="text/javascript" src="chrome://messenger/content/mailWindow.js"/>
|
||||
<script type="text/javascript" src="chrome://messenger/content/msgMail3PaneWindow.js"/>
|
||||
<script type="text/javascript" src="chrome://messenger/content/mail3PaneWindowCommands.js"/>
|
||||
<script type="text/javascript" src="chrome://messenger/content/mailContextMenus.js"/>
|
||||
<script type="text/javascript" src="chrome://messenger/content/messengerdnd.js"/>
|
||||
<script type="text/javascript" src="chrome://messenger/content/accountUtils.js"/>
|
||||
<script type="text/javascript" src="chrome://navigator/content/nsContextMenu.js"/>
|
||||
<script type="text/javascript" src="chrome://navigator/content/navigator.js"/>
|
||||
<script type="text/javascript" src="chrome://communicator/content/contentAreaUtils.js"/>
|
||||
<script type="text/javascript" src="chrome://communicator/content/contentAreaDD.js"/>
|
||||
<script type="text/javascript" src="chrome://global/content/nsJSSupportsUtils.js"/>
|
||||
<script type="text/javascript" src="chrome://global/content/nsJSComponentManager.js"/>
|
||||
<script type="text/javascript" src="chrome://global/content/nsTransferable.js"/>
|
||||
<script type="text/javascript" src="chrome://global/content/nsDragAndDrop.js"/>
|
||||
|
||||
<commands id="commands">
|
||||
|
||||
|
@ -144,7 +150,7 @@ Rights Reserved.
|
|||
<grippy/>
|
||||
</splitter>
|
||||
|
||||
<box id="messagepanebox" align="vertical" flex="3" persist="collapsed height" class="window-focusborder" focusring="false">
|
||||
<box id="messagepanebox" align="vertical" flex="3" persist="collapsed height" class="window-focusborder" focusring="false" onclick="contentAreaClick(event);" ondraggesture="nsDragAndDrop.startDrag(event, contentAreaDNDObserver);">
|
||||
<toolbox id="msgHeaderView"/>
|
||||
|
||||
<iframe id="messagepane" context="messagePaneContext" style="height: 0px" flex="1" name="messagepane" type="content-primary" src="about:blank"/>
|
||||
|
|
|
@ -1686,22 +1686,14 @@ var attachmentBucketObserver = {
|
|||
onDrop: function (aEvent, aData, aDragSession)
|
||||
{
|
||||
aData = aData.length ? aData[0] : aData;
|
||||
if (aData.flavour != "application/x-moz-file")
|
||||
return;
|
||||
|
||||
var dataObj = aData.data.data.QueryInterface(Components.interfaces.nsIFile);
|
||||
if (!dataObj)
|
||||
return;
|
||||
|
||||
var fileURL = nsJSComponentManager.createInstance("@mozilla.org/network/standard-url;1", "nsIFileURL");
|
||||
fileURL.file = dataObj;
|
||||
AddAttachment(fileURL.spec);
|
||||
if (aData.flavour == "text/x-moz-url") {
|
||||
aData = aData.data.data;
|
||||
AddAttachment(aData);
|
||||
}
|
||||
},
|
||||
|
||||
onDragOver: function (aEvent, aFlavour, aDragSession)
|
||||
{
|
||||
if (aFlavour != "application/x-moz-file")
|
||||
return;
|
||||
var attachmentBucket = document.getElementById("attachmentBucket");
|
||||
attachmentBucket.setAttribute("dragover", "true");
|
||||
},
|
||||
|
@ -1715,6 +1707,7 @@ var attachmentBucketObserver = {
|
|||
getSupportedFlavours: function ()
|
||||
{
|
||||
var flavourList = { };
|
||||
flavourList["text/x-moz-url"] = { width: 2, iid: "nsISupportsWString" };
|
||||
flavourList["application/x-moz-file"] = { width: 2, iid: "nsIFile" };
|
||||
return flavourList;
|
||||
}
|
||||
|
|
|
@ -4,7 +4,6 @@ comm.jar:
|
|||
content/navigator/openLocation.xul (resources/content/openLocation.xul)
|
||||
content/navigator/viewsource.js (resources/content/viewsource.js)
|
||||
content/navigator/viewSource.xul (resources/content/viewSource.xul)
|
||||
content/navigator/viewSourceDD.js (resources/content/viewSourceDD.js)
|
||||
content/navigator/pageInfo.js (resources/content/pageInfo.js)
|
||||
content/navigator/pageInfo.xul (resources/content/pageInfo.xul)
|
||||
content/navigator/navigator.xul (resources/content/navigator.xul)
|
||||
|
|
|
@ -36,7 +36,6 @@ CHROME_CONTENT = \
|
|||
tooltip.js \
|
||||
openLocation.js \
|
||||
viewsource.js \
|
||||
viewSourceDD.js \
|
||||
navigator.xul \
|
||||
sessionHistoryUI.js \
|
||||
keywords.js \
|
||||
|
|
|
@ -30,7 +30,6 @@ CHROME_CONTENT = \
|
|||
.\openLocation.js \
|
||||
.\openLocation.xul \
|
||||
.\viewsource.js \
|
||||
.\viewSourceDD.js \
|
||||
.\viewSource.xul \
|
||||
.\pageInfo.js \
|
||||
.\pageInfo.xul \
|
||||
|
|
|
@ -74,28 +74,6 @@ catch (ex)
|
|||
// focused frame URL
|
||||
var gFocusedURL = null;
|
||||
|
||||
/**
|
||||
* Save the document at a given location to disk
|
||||
**/
|
||||
function savePage( url )
|
||||
{
|
||||
// Default is to save current page.
|
||||
url = url ? url : window._content.location.href;
|
||||
// Use stream xfer component to prompt for destination and save.
|
||||
var xfer = getService("@mozilla.org/appshell/component/xfer;1", "nsIStreamTransfer");
|
||||
try {
|
||||
// Save; use page in cache if possible.
|
||||
var postData = appCore.postData;
|
||||
xfer.SelectFileAndTransferLocationSpec( url, window, "", "", true, postData );
|
||||
return true;
|
||||
}
|
||||
catch( exception ) {
|
||||
// suppress NS_ERROR_ABORT exceptions for cancellation
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* We can avoid adding multiple load event listeners and save some time by adding
|
||||
* one listener that calls all real handlers.
|
||||
|
@ -602,22 +580,12 @@ function Shutdown()
|
|||
|
||||
function gotoHistoryIndex( aEvent )
|
||||
{
|
||||
var index = aEvent.target.getAttribute("index");
|
||||
if (index)
|
||||
{
|
||||
appCore.gotoHistoryIndex(index);
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
var id = aEvent.target.getAttribute("id");
|
||||
if (id == "menuitem-back")
|
||||
BrowserBack();
|
||||
else if (id == "menuitem-forward")
|
||||
BrowserForward();
|
||||
}
|
||||
|
||||
return false;
|
||||
var index = aEvent.target.getAttribute("index");
|
||||
if (index) {
|
||||
appCore.gotoHistoryIndex(index);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function BrowserBack()
|
||||
|
@ -671,62 +639,48 @@ function BrowserHome()
|
|||
RefreshUrlbar();
|
||||
}
|
||||
|
||||
function OpenBookmarkURL(node, datasources)
|
||||
{
|
||||
// what is the meaning of the return value from this function?
|
||||
|
||||
if (node.getAttribute('container') == "true") {
|
||||
return false;
|
||||
}
|
||||
function OpenBookmarkURL(event, datasources)
|
||||
{
|
||||
// what is the meaning of the return value from this function?
|
||||
var node = event.target;
|
||||
if (node.getAttribute('container') == "true")
|
||||
return null;
|
||||
|
||||
var url = node.getAttribute('id');
|
||||
try
|
||||
{
|
||||
// add support for IE favorites under Win32, and NetPositive URLs under BeOS
|
||||
var rdf = Components.classes["@mozilla.org/rdf/rdf-service;1"].getService();
|
||||
if (rdf) rdf = rdf.QueryInterface(Components.interfaces.nsIRDFService);
|
||||
if (rdf && datasources)
|
||||
{
|
||||
var src = rdf.GetResource(url, true);
|
||||
var prop = rdf.GetResource("http://home.netscape.com/NC-rdf#URL", true);
|
||||
var target = datasources.GetTarget(src, prop, true);
|
||||
if (target) target = target.QueryInterface(Components.interfaces.nsIRDFLiteral);
|
||||
if (target) target = target.Value;
|
||||
if (target) url = target;
|
||||
}
|
||||
}
|
||||
catch(ex)
|
||||
{
|
||||
}
|
||||
|
||||
// Ignore "NC:" urls.
|
||||
if (url.substring(0, 3) == "NC:") {
|
||||
return false;
|
||||
var url = node.getAttribute('id');
|
||||
try {
|
||||
// add support for IE favorites under Win32, and NetPositive URLs under BeOS
|
||||
var rdf = Components.classes["@mozilla.org/rdf/rdf-service;1"].getService();
|
||||
if (rdf)
|
||||
rdf = rdf.QueryInterface(Components.interfaces.nsIRDFService);
|
||||
if (rdf && datasources) {
|
||||
var src = rdf.GetResource(url, true);
|
||||
var prop = rdf.GetResource("http://home.netscape.com/NC-rdf#URL", true);
|
||||
var target = datasources.GetTarget(src, prop, true);
|
||||
if (target)
|
||||
target = target.QueryInterface(Components.interfaces.nsIRDFLiteral);
|
||||
if (target)
|
||||
target = target.Value;
|
||||
if (target)
|
||||
url = target;
|
||||
}
|
||||
// Check if we have a browser window
|
||||
if ( window._content == null )
|
||||
{
|
||||
window.openDialog( getBrowserURL(), "_blank", "chrome,all,dialog=no", url );
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
//window._content.location.href = url;
|
||||
if (appCore)
|
||||
{
|
||||
appCore.loadUrl(url);
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
dump("BrowserAppCore is not initialised\n");
|
||||
return false;
|
||||
}
|
||||
RefreshUrlbar();
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
catch(ex) {
|
||||
return null;
|
||||
}
|
||||
// Ignore "NC:" urls.
|
||||
if (url.substring(0, 3) == "NC:")
|
||||
return null;
|
||||
|
||||
// Check if we have a browser window
|
||||
if (!window._content) {
|
||||
window.openDialog( getBrowserURL(), "_blank", "chrome,all,dialog=no", url );
|
||||
return true;
|
||||
}
|
||||
else {
|
||||
loadURI(url);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function OpenSearch(tabName, forceDialogFlag, searchStr)
|
||||
{
|
||||
|
@ -928,50 +882,6 @@ function RevealSearchPanel()
|
|||
return Components.classesByID[ cid ].getService( iid );
|
||||
}
|
||||
|
||||
function openNewWindowWith( url ) {
|
||||
|
||||
// URL Loading Security Check
|
||||
const nsIStandardURL = Components.interfaces.nsIStandardURL;
|
||||
const nsIURI = Components.interfaces.nsIURI;
|
||||
const stdURL = Components.classes["@mozilla.org/network/standard-url;1"];
|
||||
|
||||
var sourceURL = stdURL.createInstance(nsIStandardURL);
|
||||
var focusedWindow = document.commandDispatcher.focusedWindow;
|
||||
var sourceWin = isDocumentFrame(focusedWindow) ? focusedWindow.location.href : window._content.location.href;
|
||||
sourceURL.init(nsIStandardURL.URLTYPE_STANDARD, 80, sourceWin, null);
|
||||
|
||||
var targetURL = stdURL.createInstance(nsIStandardURL);
|
||||
targetURL.init(nsIStandardURL.URLTYPE_STANDARD, 80, url, null);
|
||||
|
||||
const nsIScriptSecurityManager = Components.interfaces.nsIScriptSecurityManager;
|
||||
var secMan = Components.classes["@mozilla.org/scriptsecuritymanager;1"].getService().
|
||||
QueryInterface(nsIScriptSecurityManager);
|
||||
secMan.CheckLoadURI(sourceURL, targetURL, nsIScriptSecurityManager.STANDARD);
|
||||
|
||||
var newWin;
|
||||
var wintype = document.firstChild.getAttribute('windowtype');
|
||||
|
||||
// if and only if the current window is a browser window and it has a document with a character
|
||||
// set, then extract the current charset menu setting from the current document and use it to
|
||||
// initialize the new browser window...
|
||||
if (window && (wintype == "navigator:browser") && window._content && window._content.document)
|
||||
{
|
||||
var DocCharset = window._content.document.characterSet;
|
||||
charsetArg = "charset="+DocCharset;
|
||||
dump("*** Current document charset: " + DocCharset + "\n");
|
||||
|
||||
//we should "inherit" the charset menu setting in a new window
|
||||
newWin = window.openDialog( getBrowserURL(), "_blank", "chrome,all,dialog=no", url, charsetArg );
|
||||
}
|
||||
else // forget about the charset information.
|
||||
{
|
||||
newWin = window.openDialog( getBrowserURL(), "_blank", "chrome,all,dialog=no", url );
|
||||
}
|
||||
|
||||
// Fix new window.
|
||||
newWin.saveFileAndPos = true;
|
||||
}
|
||||
|
||||
function BrowserOpenFileWindow()
|
||||
{
|
||||
// Get filepicker component.
|
||||
|
@ -1003,7 +913,6 @@ function RevealSearchPanel()
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
function BrowserAddBookmark(url,title)
|
||||
{
|
||||
var bmks = Components.classes["@mozilla.org/browser/bookmarks-service;1"].getService();
|
||||
|
@ -1486,6 +1395,15 @@ function BrowserEditBookmarks()
|
|||
}
|
||||
}
|
||||
|
||||
function loadURI(href)
|
||||
{
|
||||
var content = document.getElementById("content")
|
||||
var boxObject = content.boxObject.QueryInterface(Components.interfaces.nsIBrowserBoxObject)
|
||||
var docShell = boxObject.docShell
|
||||
var webNavigation = docShell.QueryInterface(Components.interfaces.nsIWebNavigation)
|
||||
return webNavigation.loadURI(href, 0);
|
||||
}
|
||||
|
||||
function BrowserLoadURL()
|
||||
{
|
||||
// rjc: added support for URL shortcuts (3/30/1999)
|
||||
|
@ -1570,94 +1488,6 @@ function BrowserEditBookmarks()
|
|||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
function findParentNode(node, parentNode)
|
||||
{
|
||||
while (node) {
|
||||
var nodeName = node.localName;
|
||||
if (nodeName == "")
|
||||
return null;
|
||||
nodeName = nodeName.toLowerCase();
|
||||
if (nodeName == "" || nodeName == "body" ||
|
||||
nodeName == "html" || nodeName == "#document") {
|
||||
return null;
|
||||
}
|
||||
if (nodeName == parentNode)
|
||||
return node;
|
||||
node = node.parentNode;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
// Called whenever the user clicks in the content area,
|
||||
// except when left-clicking on links (special case)
|
||||
// should always return true for click to go through
|
||||
function contentAreaClick(event)
|
||||
{
|
||||
var target = event.originalTarget;
|
||||
var linkNode;
|
||||
switch (target.localName.toLowerCase()) {
|
||||
case "a":
|
||||
linkNode = event.target;
|
||||
break;
|
||||
case "area":
|
||||
if (event.target.href)
|
||||
linkNode = event.target;
|
||||
break;
|
||||
default:
|
||||
linkNode = findParentNode(target, "a");
|
||||
break;
|
||||
}
|
||||
if (linkNode)
|
||||
return handleLinkClick(event, linkNode);
|
||||
|
||||
if (event.button == 2 &&
|
||||
!findParentNode(target, "scrollbar") &&
|
||||
pref.GetBoolPref("middlemouse.paste")) {
|
||||
return middleMousePaste(event);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
function handleLinkClick(event, node)
|
||||
{
|
||||
switch (event.button) {
|
||||
case 1: // if left button clicked
|
||||
if (event.metaKey || event.ctrlKey) { // and meta or ctrl are down
|
||||
openNewWindowWith(node.href); // open link in new window
|
||||
event.preventBubble();
|
||||
return true;
|
||||
}
|
||||
if (event.shiftKey) // if shift is down
|
||||
return savePage(node.href); // save the link
|
||||
if (event.altKey) // if alt is down
|
||||
; // select text within link (not implemented)
|
||||
break;
|
||||
case 2: // if middle button clicked
|
||||
if (pref.GetBoolPref("middlemouse.openNewWindow")) { // and the pref is on
|
||||
openNewWindowWith(node.href); // open link in new window
|
||||
event.preventBubble();
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
function middleMousePaste(event)
|
||||
{
|
||||
var url = readFromClipboard();
|
||||
//dump ("Loading URL on clipboard: '" + url + "'; length = " + url.length + "\n");
|
||||
if (url) {
|
||||
var urlBar = document.getElementById("urlbar");
|
||||
urlBar.value = url;
|
||||
BrowserLoadURL();
|
||||
event.preventBubble();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function OpenMessenger()
|
||||
{
|
||||
|
|
|
@ -55,21 +55,23 @@ Contributor(s): ______________________________________. -->
|
|||
screenX="10" screenY="10"
|
||||
persist="screenX screenY width height sizemode">
|
||||
|
||||
<script language="javascript" src="chrome://global/content/nsJSSupportsUtils.js"></script>
|
||||
<script language="javascript" src="chrome://global/content/nsJSComponentManager.js"></script>
|
||||
<script language="javascript" src="chrome://global/content/nsUserSettings.js"></script>
|
||||
<script language="javascript" src="chrome://global/content/nsTransferable.js"></script>
|
||||
<script language="javascript" src="chrome://global/content/nsClipboard.js"></script>
|
||||
<script language="javascript" src="chrome://global/content/nsDragAndDrop.js"></script>
|
||||
<script language="javascript" src="chrome://global/content/strres.js"></script>
|
||||
<script language="javascript" src="chrome://communicator/content/bookmarks/bookmarks.js"></script>
|
||||
<script language="javascript" src="chrome://navigator/content/navigator.js"></script>
|
||||
<script language="javascript" src="nsContextMenu.js"></script>
|
||||
<script language="javascript" src="tooltip.js"></script>
|
||||
<script language="javascript" src="navigatorDD.js"></script>
|
||||
<script type="text/javascript" src="chrome://global/content/nsJSSupportsUtils.js"/>
|
||||
<script type="text/javascript" src="chrome://global/content/nsJSComponentManager.js"/>
|
||||
<script type="text/javascript" src="chrome://global/content/nsUserSettings.js"/>
|
||||
<script type="text/javascript" src="chrome://global/content/nsTransferable.js"/>
|
||||
<script type="text/javascript" src="chrome://global/content/nsClipboard.js"/>
|
||||
<script type="text/javascript" src="chrome://global/content/nsDragAndDrop.js"/>
|
||||
<script type="text/javascript" src="chrome://global/content/strres.js"/>
|
||||
<script type="text/javascript" src="chrome://communicator/content/contentAreaUtils.js"/>
|
||||
<script type="text/javascript" src="chrome://communicator/content/contentAreaDD.js"/>
|
||||
<script type="text/javascript" src="chrome://communicator/content/bookmarks/bookmarks.js"/>
|
||||
<script type="text/javascript" src="chrome://navigator/content/navigator.js"/>
|
||||
<script type="text/javascript" src="nsContextMenu.js"/>
|
||||
<script type="text/javascript" src="tooltip.js"/>
|
||||
<script type="text/javascript" src="navigatorDD.js"/>
|
||||
|
||||
<!-- UI services -->
|
||||
<script language="javascript" src="chrome://navigator/content/sessionHistoryUI.js"></script>
|
||||
<script type="text/javascript" src="chrome://navigator/content/sessionHistoryUI.js"/>
|
||||
|
||||
<commands id="commands">
|
||||
<commandset id="globalEditMenuItems"/>
|
||||
|
@ -98,6 +100,11 @@ Contributor(s): ______________________________________. -->
|
|||
</popup>
|
||||
</popupset>
|
||||
|
||||
<popupset>
|
||||
<popup id="backMenu" oncreate="BrowserBackMenu(event);" oncommand="gotoHistoryIndex(event);"/>
|
||||
<popup id="forwardMenu" oncreate="BrowserForwardMenu(event);" oncommand="gotoHistoryIndex(event);"/>
|
||||
</popupset>
|
||||
|
||||
<!-- Context menu -->
|
||||
<script language="javascript">
|
||||
// Global variable that holds the nsContextMenu instance.
|
||||
|
@ -269,16 +276,14 @@ Contributor(s): ______________________________________. -->
|
|||
grippytooltip="aTooltip" grippytooltiptext="&navigationBar.tooltip;"
|
||||
tbautostretch="always">
|
||||
<box id="nav-bar-buttons">
|
||||
<menubutton class="menubutton-dual toolbar top" id="back-button" value="&backButton.label;"
|
||||
crop="right" observes="canGoBack" oncommand="gotoHistoryIndex(event);"
|
||||
tooltip="aTooltip"
|
||||
buttonaction="BrowserBack();" buttontooltiptext="&backButton.tooltip;">
|
||||
<menubutton id="back-button" value="&backButton.label;" buttontooltiptext="&backButton.tooltip;"
|
||||
oncommand="gotoHistoryIndex(event);" buttonaction="BrowserBack();" context="backMenu"
|
||||
class="menubutton-dual toolbar top" crop="right" tooltip="aTooltip" observes="canGoBack">
|
||||
<menupopup oncreate="BrowserBackMenu(event);"/>
|
||||
</menubutton>
|
||||
<menubutton class="menubutton-dual toolbar top" id="forward-button"
|
||||
crop="right" observes="canGoForward" tooltip="aTooltip"
|
||||
oncommand="gotoHistoryIndex(event);" buttonaction="BrowserForward();"
|
||||
value="&forwardButton.label;" buttontooltiptext="&forwardButton.tooltip;">
|
||||
<menubutton id="forward-button" value="&forwardButton.label;" buttontooltiptext="&forwardButton.tooltip;"
|
||||
oncommand="gotoHistoryIndex(event);" buttonaction="BrowserForward();" context="forwardMenu"
|
||||
class="menubutton-dual toolbar top" crop="right" tooltip="aTooltip" observes="canGoForward">
|
||||
<menupopup oncreate="BrowserForwardMenu(event);"/>
|
||||
</menubutton>
|
||||
|
||||
|
@ -391,7 +396,7 @@ Contributor(s): ______________________________________. -->
|
|||
<button class="button-toolbar bookmarkitem" uri="rdf:*"
|
||||
tooltip="aTooltip" tooltiptext="rdf:http://home.netscape.com/NC-rdf#URL"
|
||||
value="rdf:http://home.netscape.com/NC-rdf#Name" crop="right"
|
||||
oncommand="OpenBookmarkURL(event.target, document.getElementById('innermostBox').database);"/>
|
||||
oncommand="OpenBookmarkURL(event, document.getElementById('innermostBox').database);"/>
|
||||
</rule>
|
||||
|
||||
<rule iscontainer="true">
|
||||
|
|
|
@ -266,157 +266,6 @@ var personalToolbarObserver = {
|
|||
}
|
||||
};
|
||||
|
||||
var contentAreaDNDObserver = {
|
||||
onDragStart: function (aEvent)
|
||||
{
|
||||
dump("dragstart\n");
|
||||
var htmlstring = null;
|
||||
var textstring = null;
|
||||
var isLink = false;
|
||||
var domselection = window._content.getSelection();
|
||||
if (domselection && !domselection.isCollapsed &&
|
||||
domselection.containsNode(aEvent.target,false))
|
||||
{
|
||||
var privateSelection = domselection.QueryInterface(Components.interfaces.nsISelectionPrivate);
|
||||
if (privateSelection)
|
||||
{
|
||||
// the window has a selection so we should grab that rather than looking for specific elements
|
||||
htmlstring = privateSelection.toStringWithFormat("text/html", 128+256, 0);
|
||||
textstring = privateSelection.toStringWithFormat("text/plain", 0, 0);
|
||||
dump("we cool?\n");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
dump("didnt get here\n");
|
||||
switch (aEvent.target.localName)
|
||||
{
|
||||
case 'AREA':
|
||||
case 'IMG':
|
||||
var imgsrc = aEvent.target.getAttribute("src");
|
||||
var baseurl = window._content.location.href;
|
||||
// need to do some stuff with the window._content.location (path?)
|
||||
// to get base URL for image.
|
||||
|
||||
textstring = imgsrc;
|
||||
htmlstring = "<img src=\"" + textstring + "\">";
|
||||
if ((linkNode = this.findEnclosingLink(aEvent.target))) {
|
||||
htmlstring = '<a href="' + linkNode.href + '">' + htmlstring + '</a>';
|
||||
textstring = linkNode.href;
|
||||
}
|
||||
break;
|
||||
case 'A':
|
||||
isLink = true;
|
||||
if (aEvent.target.href)
|
||||
{
|
||||
textstring = aEvent.target.getAttribute("href");
|
||||
htmlstring = "<a href=\"" + textstring + "\">" + textstring + "</a>";
|
||||
}
|
||||
else if (aEvent.target.name)
|
||||
{
|
||||
textstring = aEvent.target.getAttribute("name");
|
||||
htmlstring = "<a name=\"" + textstring + "\">" + textstring + "</a>"
|
||||
}
|
||||
break;
|
||||
default:
|
||||
case '#text':
|
||||
case 'LI':
|
||||
case 'OL':
|
||||
case 'DD':
|
||||
var node = this.findEnclosingLink(aEvent.target);
|
||||
textstring = "";
|
||||
//select node now!
|
||||
if (node)
|
||||
textstring = node.href;
|
||||
if (textstring != "")
|
||||
{
|
||||
htmlstring = "<a href=\"" + textstring + "\">" + textstring + "</a>";
|
||||
var parent = node.parentNode;
|
||||
if (parent)
|
||||
{
|
||||
var nodelist = parent.childNodes;
|
||||
var index;
|
||||
for (index = 0; index<nodelist.length; index++)
|
||||
{
|
||||
if (nodelist.item(index) == node)
|
||||
break;
|
||||
}
|
||||
if (index >= nodelist.length)
|
||||
throw Components.results.NS_ERROR_FAILURE;
|
||||
if (domselection)
|
||||
{
|
||||
domselection.collapse(parent,index);
|
||||
domselection.extend(parent,index+1);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
throw Components.results.NS_ERROR_FAILURE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
var flavourList = { };
|
||||
flavourList["text/html"] = { width: 2, data: htmlstring };
|
||||
if (isLink)
|
||||
flavourList["text/x-moz-url"] = { width: 2, data: textstring + " " + "( TEMP TITLE )" };
|
||||
flavourList["text/unicode"] = { width: 2, data: textstring };
|
||||
return flavourList;
|
||||
},
|
||||
|
||||
onDragOver: function (aEvent, aFlavour, aDragSession)
|
||||
{
|
||||
// if the drag originated w/in this content area, bail early. This avoids loading
|
||||
// a URL dragged from the content area into the very same content area (which is
|
||||
// almost never the desired action). This code is a bit too simplistic and may
|
||||
// have problems with nested frames, but that's not my problem ;)
|
||||
if ( aDragSession.sourceDocument == window._content.document )
|
||||
aDragSession.canDrop = false;
|
||||
},
|
||||
|
||||
onDrop: function (aEvent, aData, aDragSession)
|
||||
{
|
||||
var data = aData.length ? aData[0] : aData;
|
||||
var url = retrieveURLFromData(data);
|
||||
if (url.length == 0)
|
||||
return;
|
||||
// valid urls don't contain spaces ' '; if we have a space it isn't a valid url so bail out
|
||||
var urlstr = url.toString();
|
||||
if ( urlstr.indexOf(" ", 0) != -1 )
|
||||
return;
|
||||
|
||||
var urlBar = document.getElementById("urlbar");
|
||||
urlBar.value = url;
|
||||
BrowserLoadURL();
|
||||
},
|
||||
|
||||
getSupportedFlavours: function ()
|
||||
{
|
||||
var flavourList = { };
|
||||
//flavourList["moz/toolbaritem"] = { width: 2 };
|
||||
flavourList["text/x-moz-url"] = { width: 2, iid: "nsISupportsWString" };
|
||||
flavourList["text/unicode"] = { width: 2, iid: "nsISupportsWString" };
|
||||
flavourList["application/x-moz-file"] = { width: 2, iid: "nsIFile" };
|
||||
return flavourList;
|
||||
},
|
||||
|
||||
findEnclosingLink: function (aNode)
|
||||
{
|
||||
while (aNode) {
|
||||
var nodeName = aNode.localName;
|
||||
if (!nodeName) return null;
|
||||
nodeName = nodeName.toLowerCase();
|
||||
if (!nodeName || nodeName == "body" ||
|
||||
nodeName == "html" || nodeName == "#document")
|
||||
return null;
|
||||
if (nodeName == "a" && aNode.href)
|
||||
return aNode;
|
||||
aNode = aNode.parentNode;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
||||
//
|
||||
// DragProxyIcon
|
||||
//
|
||||
|
@ -494,24 +343,3 @@ var homeButtonObserver = {
|
|||
return flavourList;
|
||||
}
|
||||
};
|
||||
|
||||
function retrieveURLFromData (aData)
|
||||
{
|
||||
switch (aData.flavour)
|
||||
{
|
||||
case "text/unicode":
|
||||
case "text/x-moz-url":
|
||||
return aData.data.data; // XXX this is busted.
|
||||
break;
|
||||
case "application/x-moz-file":
|
||||
var dataObj = aData.data.data.QueryInterface(Components.interfaces.nsIFile);
|
||||
if (dataObj)
|
||||
{
|
||||
var fileURL = nsJSComponentManager.createInstance("@mozilla.org/network/standard-url;1",
|
||||
"nsIFileURL");
|
||||
fileURL.file = dataObj;
|
||||
return fileURL.spec;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
|
|
@ -7,44 +7,44 @@
|
|||
<!DOCTYPE window SYSTEM "chrome://navigator/locale/viewSource.dtd" >
|
||||
<window id="main-window" xmlns:html="http://www.w3.org/1999/xhtml"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
||||
onload="onLoadViewSource()"
|
||||
onload="onLoadViewSource();"
|
||||
title="&mainWindow.title;"
|
||||
titlemodifier="&mainWindow.titlemodifier;"
|
||||
titlepreface="&mainWindow.preface;"
|
||||
titlemenuseparator ="&mainWindow.titlemodifierseperator;"
|
||||
windowtype="Browser:view-source"
|
||||
windowtype="navigator:view-source"
|
||||
align="vertical" width="640" height="480"
|
||||
screenX="10" screenY="10"
|
||||
persist="screenX screenY width height sizemode">
|
||||
|
||||
|
||||
<script language="javascript" src="chrome://global/content/nsJSSupportsUtils.js"></script>
|
||||
<script language="javascript" src="chrome://global/content/nsJSComponentManager.js"></script>
|
||||
<script language="javascript" src="chrome://global/content/nsTransferable.js"></script>
|
||||
<script language="javascript" src="chrome://global/content/nsDragAndDrop.js"></script>
|
||||
|
||||
<script language="javascript" src="chrome://navigator/content/viewSourceDD.js"></script>
|
||||
<script language="javascript" src="chrome://navigator/content/viewsource.js"></script>
|
||||
<script type="text/javascript" src="chrome://global/content/nsJSSupportsUtils.js"/>
|
||||
<script type="text/javascript" src="chrome://global/content/nsJSComponentManager.js"/>
|
||||
<script type="text/javascript" src="chrome://global/content/nsTransferable.js"/>
|
||||
<script type="text/javascript" src="chrome://global/content/nsDragAndDrop.js"/>
|
||||
<script type="text/javascript" src="chrome://communicator/content/contentAreaDD.js"/>
|
||||
<script type="text/javascript" src="chrome://navigator/content/viewsource.js"/>
|
||||
|
||||
<broadcasterset id="broadcasterset"/>
|
||||
|
||||
<commands id="commands">
|
||||
<commandset id="globalEditMenuItems"/>
|
||||
<commandset id="selectEditMenuItems"/>
|
||||
<commandset id="undoEditMenuItems"/>
|
||||
<commandset id="clipboardEditMenuItems"/>
|
||||
</commands>
|
||||
<commands id="commands">
|
||||
<commandset id="globalEditMenuItems"/>
|
||||
<commandset id="selectEditMenuItems"/>
|
||||
<commandset id="undoEditMenuItems"/>
|
||||
<commandset id="clipboardEditMenuItems"/>
|
||||
</commands>
|
||||
|
||||
<!-- keys are appended from the overlay -->
|
||||
<keyset id="keyset"/>
|
||||
|
||||
<!-- Menu -->
|
||||
|
||||
<box id="appcontent" align="vertical" flex="1"
|
||||
ondragover="nsDragAndDrop.dragOver(event, contentAreaDNDObserver);"
|
||||
ondraggesture="nsDragAndDrop.startDrag(event, contentAreaDNDObserver);">
|
||||
<box id="appcontent" align="vertical" flex="1"
|
||||
ondragover="nsDragAndDrop.dragOver(event, contentAreaDNDObserver);"
|
||||
ondraggesture="nsDragAndDrop.startDrag(event, contentAreaDNDObserver);"
|
||||
ondragdrop="nsDragAndDrop.drop(event, contentAreaDNDObserver);">
|
||||
|
||||
<iframe id="content-frame" type="content-primary" name="content" src="about:blank" flex="1"/>
|
||||
<iframe id="content-frame" type="content-primary" name="content" src="about:blank" flex="1"/>
|
||||
|
||||
</box>
|
||||
|
||||
|
|
|
@ -1,64 +0,0 @@
|
|||
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||
*
|
||||
* The contents of this file are subject to the Netscape Public
|
||||
* License Version 1.1 (the "License"); you may not use this file
|
||||
* except in compliance with the License. You may obtain a copy of
|
||||
* the License at http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS
|
||||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
* implied. See the License for the specific language governing
|
||||
* rights and limitations under the License.
|
||||
*
|
||||
* The Original Code is mozilla.org code.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All
|
||||
* Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*/
|
||||
|
||||
var contentAreaDNDObserver = {
|
||||
onDragStart: function (aEvent)
|
||||
{
|
||||
var htmlstring = null;
|
||||
var textstring = null;
|
||||
var domselection = window._content.getSelection();
|
||||
if (domselection && !domselection.isCollapsed &&
|
||||
domselection.containsNode(aEvent.target,false))
|
||||
{
|
||||
// the window has a selection so we should grab that rather than looking for specific elements
|
||||
htmlstring = domselection.toString("text/html", 128+256, 0);
|
||||
textstring = domselection.toString("text/plain", 0, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
throw Components.results.NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
var flavourList = { };
|
||||
flavourList["text/html"] = { width: 2, data: htmlstring };
|
||||
flavourList["text/unicode"] = { width: 2, data: textstring };
|
||||
return flavourList;
|
||||
},
|
||||
|
||||
onDragOver: function (aEvent, aFlavour, aDragSession)
|
||||
{
|
||||
aDragSession.canDrop = false;
|
||||
},
|
||||
|
||||
onDrop: function (aEvent, aData, aDragSession)
|
||||
{
|
||||
// can't accept drops
|
||||
},
|
||||
|
||||
getSupportedFlavours: function ()
|
||||
{
|
||||
var flavourList = { };
|
||||
flavourList["text/unicode"] = { width: 2, iid: "nsISupportsWString" };
|
||||
return flavourList;
|
||||
}
|
||||
|
||||
};
|
|
@ -4,54 +4,59 @@ var appCore = null;
|
|||
|
||||
function onLoadViewSource()
|
||||
{
|
||||
|
||||
try {
|
||||
createBrowserInstance();
|
||||
if (appCore == null) {
|
||||
// Give up.
|
||||
dump("Giving up...\n");
|
||||
window.close();
|
||||
}
|
||||
|
||||
// Initialize browser instance..
|
||||
appCore.setWebShellWindow(window);
|
||||
if ( window._content ) {
|
||||
dump("Setting content window\n");
|
||||
appCore.setContentWindow( window._content );
|
||||
}
|
||||
}
|
||||
|
||||
catch(ex) {
|
||||
dump("Failed to create and initialiaze the AppCore...\n");
|
||||
}
|
||||
|
||||
var docShellElement = document.getElementById("content-frame");
|
||||
var docShell = docShellElement.docShell;
|
||||
docShell.viewMode = Components.interfaces.nsIDocShell.viewSource;
|
||||
var webNav = docShell.QueryInterface(Components.interfaces.nsIWebNavigation);
|
||||
|
||||
try {
|
||||
if ( window.arguments && window.arguments[1] ) {
|
||||
if (window.arguments[1].indexOf('charset=') != -1) {
|
||||
var arrayArgComponents = window.arguments[1].split('=');
|
||||
if (arrayArgComponents) {
|
||||
if (appCore != null) {
|
||||
dump("*** SetDocumentCharset(" + arrayArgComponents[1] + ")\n");
|
||||
appCore.SetDocumentCharset(arrayArgComponents[1]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
catch(ex) {
|
||||
dump("*** Failed to SetDocumentCharset...\n");
|
||||
}
|
||||
|
||||
var loadFlags = Components.interfaces.nsIWebNavigation.LOAD_FLAGS_NONE;
|
||||
webNav.loadURI(window.arguments[0], loadFlags);
|
||||
viewSource(window.arguments[0]);
|
||||
}
|
||||
|
||||
function viewSource(url)
|
||||
{
|
||||
if (!url)
|
||||
return; // throw Components.results.NS_ERROR_FAILURE;
|
||||
try {
|
||||
createBrowserInstance();
|
||||
if (appCore == null) {
|
||||
// Give up.
|
||||
dump("Giving up...\n");
|
||||
window.close();
|
||||
return false;
|
||||
}
|
||||
|
||||
// Initialize browser instance..
|
||||
appCore.setWebShellWindow(window);
|
||||
if ( window._content ) {
|
||||
dump("Setting content window\n");
|
||||
appCore.setContentWindow( window._content );
|
||||
}
|
||||
}
|
||||
|
||||
catch(ex) {
|
||||
dump("Failed to create and initialiaze the AppCore...\n");
|
||||
}
|
||||
|
||||
var docShellElement = document.getElementById("content-frame");
|
||||
var docShell = docShellElement.docShell;
|
||||
docShell.viewMode = Components.interfaces.nsIDocShell.viewSource;
|
||||
var webNav = docShell.QueryInterface(Components.interfaces.nsIWebNavigation);
|
||||
|
||||
try {
|
||||
if (window.arguments && window.arguments[1]) {
|
||||
if (window.arguments[1].indexOf('charset=') != -1) {
|
||||
var arrayArgComponents = window.arguments[1].split('=');
|
||||
if (arrayArgComponents) {
|
||||
dump("*** SetDocumentCharset(" + arrayArgComponents[1] + ")\n");
|
||||
appCore.SetDocumentCharset(arrayArgComponents[1]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
catch(ex) {
|
||||
dump("*** Failed to SetDocumentCharset...\n");
|
||||
}
|
||||
|
||||
var loadFlags = Components.interfaces.nsIWebNavigation.LOAD_FLAGS_NONE;
|
||||
webNav.loadURI(url, loadFlags);
|
||||
return true;
|
||||
}
|
||||
|
||||
function createBrowserInstance()
|
||||
{
|
||||
|
|
|
@ -14,6 +14,8 @@ comm.jar:
|
|||
content/communicator/platformEditorBindings.xul (resources/content/win/platformEditorBindings.xul)
|
||||
content/communicator/platformGlobalOverlay.xul (resources/content/win/platformGlobalOverlay.xul)
|
||||
content/communicator/builtinURLs.js (resources/content/builtinURLs.js)
|
||||
content/communicator/contentAreaUtils.js (resources/content/contentAreaUtils.js)
|
||||
content/communicator/contentAreaDD.js (resources/content/contentAreaDD.js)
|
||||
|
||||
en-US.jar:
|
||||
locale/en-US/communicator/contents.rdf (resources/locale/en-US/contents.rdf)
|
||||
|
|
|
@ -0,0 +1,236 @@
|
|||
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||
*
|
||||
* The contents of this file are subject to the Netscape Public
|
||||
* License Version 1.1 (the "License"); you may not use this file
|
||||
* except in compliance with the License. You may obtain a copy of
|
||||
* the License at http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS
|
||||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
* implied. See the License for the specific language governing
|
||||
* rights and limitations under the License.
|
||||
*
|
||||
* The Original Code is mozilla.org code.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All
|
||||
* Rights Reserved.
|
||||
*
|
||||
* Contributors:
|
||||
*
|
||||
* Alec Flett <alecf@netscape.com>
|
||||
* Ben Goodger <ben@netscape.com>
|
||||
* Mike Pinkerton <pinkerton@netscape.com>
|
||||
* Blake Ross <blakeross@telocity.com>
|
||||
*
|
||||
*/
|
||||
|
||||
var gSourceDocument, wasDrag;
|
||||
var contentAreaDNDObserver = {
|
||||
onDragStart: function (aEvent)
|
||||
{
|
||||
dump("dragstart\n");
|
||||
var htmlstring = null;
|
||||
var textstring = null;
|
||||
var isLink = false;
|
||||
var domselection = window._content.getSelection();
|
||||
if (domselection && !domselection.isCollapsed &&
|
||||
domselection.containsNode(aEvent.target,false))
|
||||
{
|
||||
var privateSelection = domselection.QueryInterface(Components.interfaces.nsISelectionPrivate);
|
||||
if (privateSelection)
|
||||
{
|
||||
// the window has a selection so we should grab that rather than looking for specific elements
|
||||
htmlstring = privateSelection.toStringWithFormat("text/html", 128+256, 0);
|
||||
textstring = privateSelection.toStringWithFormat("text/plain", 0, 0);
|
||||
dump("we cool?\n");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (aEvent.altKey && this.findEnclosingLink(aEvent.target))
|
||||
return false;
|
||||
switch (aEvent.originalTarget.localName)
|
||||
{
|
||||
case '#text':
|
||||
var node = this.findEnclosingLink(aEvent.target);
|
||||
textstring = "";
|
||||
//select node now!
|
||||
if (node)
|
||||
textstring = node.href;
|
||||
if (textstring != "")
|
||||
{
|
||||
htmlstring = "<a href=\"" + textstring + "\">" + textstring + "</a>";
|
||||
var parent = node.parentNode;
|
||||
if (parent)
|
||||
{
|
||||
var nodelist = parent.childNodes;
|
||||
var index;
|
||||
for (index = 0; index<nodelist.length; index++)
|
||||
{
|
||||
if (nodelist.item(index) == node)
|
||||
break;
|
||||
}
|
||||
if (index >= nodelist.length)
|
||||
throw Components.results.NS_ERROR_FAILURE;
|
||||
if (domselection)
|
||||
{
|
||||
domselection.collapse(parent,index);
|
||||
domselection.extend(parent,index+1);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
throw Components.results.NS_ERROR_FAILURE;
|
||||
break;
|
||||
case 'AREA':
|
||||
case 'IMG':
|
||||
var imgsrc = aEvent.target.getAttribute("src");
|
||||
var baseurl = window._content.location.href;
|
||||
// need to do some stuff with the window._content.location (path?)
|
||||
// to get base URL for image.
|
||||
|
||||
textstring = imgsrc;
|
||||
htmlstring = "<img src=\"" + textstring + "\">";
|
||||
if ((linkNode = this.findEnclosingLink(aEvent.target))) {
|
||||
htmlstring = '<a href="' + linkNode.href + '">' + htmlstring + '</a>';
|
||||
textstring = linkNode.href;
|
||||
}
|
||||
break;
|
||||
case 'A':
|
||||
isLink = true;
|
||||
if (aEvent.target.href)
|
||||
{
|
||||
textstring = aEvent.target.getAttribute("href");
|
||||
htmlstring = "<a href=\"" + textstring + "\">" + textstring + "</a>";
|
||||
}
|
||||
else if (aEvent.target.name)
|
||||
{
|
||||
textstring = aEvent.target.getAttribute("name");
|
||||
htmlstring = "<a name=\"" + textstring + "\">" + textstring + "</a>"
|
||||
}
|
||||
break;
|
||||
case 'LI':
|
||||
case 'OL':
|
||||
case 'DD':
|
||||
default:
|
||||
var node = this.findEnclosingLink(aEvent.target);
|
||||
textstring = "";
|
||||
//select node now!
|
||||
if (node)
|
||||
textstring = node.href;
|
||||
if (textstring != "")
|
||||
{
|
||||
htmlstring = "<a href=\"" + textstring + "\">" + textstring + "</a>";
|
||||
var parent = node.parentNode;
|
||||
if (parent)
|
||||
{
|
||||
var nodelist = parent.childNodes;
|
||||
var index;
|
||||
for (index = 0; index<nodelist.length; index++)
|
||||
{
|
||||
if (nodelist.item(index) == node)
|
||||
break;
|
||||
}
|
||||
if (index >= nodelist.length)
|
||||
throw Components.results.NS_ERROR_FAILURE;
|
||||
if (domselection)
|
||||
{
|
||||
domselection.collapse(parent,index);
|
||||
domselection.extend(parent,index+1);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
throw Components.results.NS_ERROR_FAILURE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
var flavourList = { };
|
||||
flavourList["text/html"] = { width: 2, data: htmlstring };
|
||||
if (isLink)
|
||||
flavourList["text/x-moz-url"] = { width: 2, data: textstring };
|
||||
flavourList["text/unicode"] = { width: 2, data: textstring };
|
||||
return flavourList;
|
||||
},
|
||||
|
||||
onDragOver: function (aEvent, aFlavour, aDragSession)
|
||||
{
|
||||
// if the drag originated w/in this content area, bail early. This avoids loading
|
||||
// a URL dragged from the content area into the very same content area (which is
|
||||
// almost never the desired action). This code is a bit too simplistic and may
|
||||
// have problems with nested frames, but that's not my problem ;)
|
||||
if (aDragSession.sourceDocument == window._content.document)
|
||||
aDragSession.canDrop = false;
|
||||
},
|
||||
|
||||
onDrop: function (aEvent, aData, aDragSession)
|
||||
{
|
||||
var data = aData.length ? aData[0] : aData;
|
||||
var url = retrieveURLFromData(data);
|
||||
if (url.length == 0)
|
||||
return true;
|
||||
// valid urls don't contain spaces ' '; if we have a space it isn't a valid url so bail out
|
||||
var urlstr = url.toString();
|
||||
if ( urlstr.indexOf(" ", 0) != -1 )
|
||||
return true;
|
||||
switch (document.firstChild.getAttribute('windowtype')) {
|
||||
case "navigator:browser":
|
||||
var urlBar = document.getElementById("urlbar");
|
||||
urlBar.value = url;
|
||||
BrowserLoadURL();
|
||||
break;
|
||||
case "navigator:view-source":
|
||||
viewSource(url);
|
||||
break;
|
||||
default:
|
||||
}
|
||||
},
|
||||
|
||||
getSupportedFlavours: function ()
|
||||
{
|
||||
var flavourList = { };
|
||||
flavourList["text/x-moz-url"] = { width: 2, iid: "nsISupportsWString" };
|
||||
flavourList["text/unicode"] = { width: 2, iid: "nsISupportsWString" };
|
||||
flavourList["application/x-moz-file"] = { width: 2, iid: "nsIFile" };
|
||||
return flavourList;
|
||||
},
|
||||
|
||||
findEnclosingLink: function (aNode)
|
||||
{
|
||||
while (aNode) {
|
||||
var nodeName = aNode.localName;
|
||||
if (!nodeName) return null;
|
||||
nodeName = nodeName.toLowerCase();
|
||||
if (!nodeName || nodeName == "body" ||
|
||||
nodeName == "html" || nodeName == "#document")
|
||||
return null;
|
||||
if (nodeName == "a")
|
||||
return aNode;
|
||||
aNode = aNode.parentNode;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
function retrieveURLFromData (aData)
|
||||
{
|
||||
switch (aData.flavour) {
|
||||
case "text/unicode":
|
||||
case "text/x-moz-url":
|
||||
return aData.data.data; // XXX this is busted.
|
||||
break;
|
||||
case "application/x-moz-file":
|
||||
var dataObj = aData.data.data.QueryInterface(Components.interfaces.nsIFile);
|
||||
if (dataObj) {
|
||||
var fileURL = nsJSComponentManager.createInstance("@mozilla.org/network/standard-url;1",
|
||||
"nsIFileURL");
|
||||
fileURL.file = dataObj;
|
||||
return fileURL.spec;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
|
@ -0,0 +1,167 @@
|
|||
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||
*
|
||||
* The contents of this file are subject to the Netscape Public
|
||||
* License Version 1.1 (the "License"); you may not use this file
|
||||
* except in compliance with the License. You may obtain a copy of
|
||||
* the License at http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS
|
||||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
* implied. See the License for the specific language governing
|
||||
* rights and limitations under the License.
|
||||
*
|
||||
* The Original Code is mozilla.org code.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All
|
||||
* Rights Reserved.
|
||||
*
|
||||
* Contributors:
|
||||
*
|
||||
* Alec Flett <alecf@netscape.com>
|
||||
* Ben Goodger <ben@netscape.com>
|
||||
* Mike Pinkerton <pinkerton@netscape.com>
|
||||
* Blake Ross <blakeross@telocity.com>
|
||||
*/
|
||||
|
||||
var pref = null;
|
||||
pref = Components.classes["@mozilla.org/preferences;1"];
|
||||
pref = pref.getService();
|
||||
pref = pref.QueryInterface(Components.interfaces.nsIPref);
|
||||
|
||||
function findParentNode(node, parentNode)
|
||||
{
|
||||
while (node) {
|
||||
var nodeName = node.localName;
|
||||
if (!nodeName)
|
||||
return null;
|
||||
nodeName = nodeName.toLowerCase();
|
||||
if (nodeName == "body" || nodeName == "html" ||
|
||||
nodeName == "#document") {
|
||||
return null;
|
||||
}
|
||||
if (nodeName == parentNode)
|
||||
return node;
|
||||
node = node.parentNode;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
// Called whenever the user clicks in the content area,
|
||||
// except when left-clicking on links (special case)
|
||||
// should always return true for click to go through
|
||||
function contentAreaClick(event)
|
||||
{
|
||||
var target = event.originalTarget;
|
||||
var linkNode;
|
||||
switch (target.localName.toLowerCase()) {
|
||||
case "a":
|
||||
linkNode = event.target;
|
||||
break;
|
||||
case "area":
|
||||
if (event.target.href)
|
||||
linkNode = event.target;
|
||||
break;
|
||||
default:
|
||||
linkNode = findParentNode(target, "a");
|
||||
break;
|
||||
}
|
||||
if (linkNode) {
|
||||
handleLinkClick(event, linkNode.href);
|
||||
return true;
|
||||
}
|
||||
if (pref && event.button == 2 &&
|
||||
!findParentNode(target, "scrollbar") &&
|
||||
pref.GetBoolPref("middlemouse.paste")) {
|
||||
middleMousePaste(event);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
function handleLinkClick(event, href)
|
||||
{
|
||||
switch (event.button) {
|
||||
case 1: // if left button clicked
|
||||
if (event.metaKey || event.ctrlKey) { // and meta or ctrl are down
|
||||
openNewWindowWith(href); // open link in new window
|
||||
event.preventBubble();
|
||||
return true;
|
||||
}
|
||||
if (event.shiftKey) { // if shift is down
|
||||
savePage(href); // save the link
|
||||
return true;
|
||||
}
|
||||
if (event.altKey) // if alt is down
|
||||
return true; // do nothing
|
||||
return false;
|
||||
case 2: // if middle button clicked
|
||||
if (pref && pref.GetBoolPref("middlemouse.openNewWindow")) { // and the pref is on
|
||||
openNewWindowWith(href); // open link in new window
|
||||
event.preventBubble();
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function middleMousePaste(event)
|
||||
{
|
||||
var url = readFromClipboard();
|
||||
//dump ("Loading URL on clipboard: '" + url + "'; length = " + url.length + "\n");
|
||||
if (url) {
|
||||
var urlBar = document.getElementById("urlbar");
|
||||
urlBar.value = url;
|
||||
BrowserLoadURL();
|
||||
event.preventBubble();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function openNewWindowWith( url ) {
|
||||
var newWin;
|
||||
var wintype = document.firstChild.getAttribute('windowtype');
|
||||
|
||||
// if and only if the current window is a browser window and it has a document with a character
|
||||
// set, then extract the current charset menu setting from the current document and use it to
|
||||
// initialize the new browser window...
|
||||
if (window && (wintype == "navigator:browser") &&
|
||||
window._content && window._content.document) {
|
||||
var DocCharset = window._content.document.characterSet;
|
||||
charsetArg = "charset="+DocCharset;
|
||||
dump("*** Current document charset: " + DocCharset + "\n");
|
||||
|
||||
//we should "inherit" the charset menu setting in a new window
|
||||
newWin = window.openDialog( getBrowserURL(), "_blank", "chrome,all,dialog=no", url, charsetArg );
|
||||
}
|
||||
else { // forget about the charset information.
|
||||
newWin = window.openDialog( getBrowserURL(), "_blank", "chrome,all,dialog=no", url );
|
||||
}
|
||||
|
||||
// Fix new window.
|
||||
newWin.saveFileAndPos = true;
|
||||
}
|
||||
|
||||
function savePage(url)
|
||||
{
|
||||
var postData = null; // No post data, usually.
|
||||
// Default is to save current page.
|
||||
if ( !url )
|
||||
url = window._content.location.href;
|
||||
// Post data comes from appcore.
|
||||
try {
|
||||
postData = window.appCore.postData;
|
||||
} catch(e) {
|
||||
}
|
||||
// Use stream xfer component to prompt for destination and save.
|
||||
var xfer = Components.classes["@mozilla.org/appshell/component/xfer;1"].getService(Components.interfaces["nsIStreamTransfer"]);
|
||||
try {
|
||||
xfer.SelectFileAndTransferLocationSpec( url, window, "", "", true, postData );
|
||||
} catch( exception ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
|
@ -50,10 +50,10 @@
|
|||
<tree id="bookmarksTree" class="bookmarks-panel-tree" context="contextual" ref="NC:BookmarksRoot"
|
||||
flex="1" multiple="true" flags="dont-test-empty"
|
||||
ondragover="return DragOverTree(event);"
|
||||
ondraggesture="return BeginDragTree(event);"
|
||||
ondraggesture="event.preventBubble(); return BeginDragTree(event);"
|
||||
ondragdrop="return DropOnTree(event);"
|
||||
datasources="rdf:bookmarks rdf:files rdf:localsearch rdf:internetsearch rdf:httpindex"
|
||||
onclick="return clicked(event, event.target.parentNode.parentNode)">
|
||||
onclick="event.preventBubble(); return clicked(event, event.target.parentNode.parentNode)">
|
||||
|
||||
<template>
|
||||
<rule rdf:type="http://home.netscape.com/NC-rdf#BookmarkSeparator">
|
||||
|
|
|
@ -81,7 +81,9 @@
|
|||
<box id="sidebar-panels" align="vertical"
|
||||
datasources="rdf:null"
|
||||
ref="urn:sidebar:current-panel-list"
|
||||
persist='last-selected-panel height collapsed' flex="1*">
|
||||
persist='last-selected-panel height collapsed' flex="1*"
|
||||
onclick="return contentAreaClick(event);"
|
||||
ondraggesture="nsDragAndDrop.startDrag(event, contentAreaDNDObserver);">
|
||||
<template id="sidebar-template">
|
||||
<rule>
|
||||
<conditions>
|
||||
|
@ -100,7 +102,7 @@
|
|||
</bindings>
|
||||
<action>
|
||||
<box uri="?panel" class="box-texttab texttab-sidebar"
|
||||
onclick="SidebarSelectPanel(this,false,false)" align="left"
|
||||
oncommand="SidebarSelectPanel(this,false,false)" align="left"
|
||||
hidden="true" value="?title" exclude="?exclude" />
|
||||
<box uri="?panel" flex='1*' hidden="true" orient="vertical"
|
||||
loadstate="never loaded">
|
||||
|
|
Загрузка…
Ссылка в новой задаче