mirror of
https://github.com/rn10950/RetroZilla.git
synced 2024-11-15 04:00:12 +01:00
205 lines
7.3 KiB
JavaScript
205 lines
7.3 KiB
JavaScript
/* ***** BEGIN LICENSE BLOCK *****
|
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
|
*
|
|
* The contents of this file are subject to the Mozilla 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/MPL/
|
|
*
|
|
* 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 the Platform for Privacy Preferences.
|
|
*
|
|
* The Initial Developer of the Original Code is
|
|
* Netscape Communications Corporation.
|
|
* Portions created by the Initial Developer are Copyright (C) 2002
|
|
* the Initial Developer. All Rights Reserved.
|
|
*
|
|
* Contributor(s): Harish Dhurvasula <harishd@netscape.com>
|
|
*
|
|
* Alternatively, the contents of this file may be used under the terms of
|
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
|
* of those above. If you wish to allow use of your version of this file only
|
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
|
* use your version of this file under the terms of the MPL, indicate your
|
|
* decision by deleting the provisions above and replace them with the notice
|
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
|
* the provisions above, a recipient may use your version of this file under
|
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
|
*
|
|
* ***** END LICENSE BLOCK ***** */
|
|
|
|
const nsIDocShell = Components.interfaces.nsIDocShell;
|
|
|
|
var gBrowser = null;
|
|
var gDocument = null;
|
|
|
|
function renderMachineReadable()
|
|
{
|
|
var xsltp = window.arguments[0];
|
|
var source = window.arguments[1];
|
|
var style = window.arguments[2];
|
|
var policyuri = window.arguments[3].clone().QueryInterface(nsIURL);
|
|
policyuri.ref = "";
|
|
|
|
try {
|
|
var docshell = getBrowser().docShell.QueryInterface(nsIDocShell);
|
|
|
|
// For browser security do not allow javascript on the transformed document.
|
|
docshell.allowJavascript = false;
|
|
|
|
// Set the policy url on the result document ( fabricated ) where
|
|
// the transformation would result. Also, set the policy uri on the
|
|
// docshell for named anchors to work correctly.
|
|
var resultDocument = getDocument();
|
|
docshell.setCurrentURI(policyuri);
|
|
|
|
xsltp.reset();
|
|
xsltp.setParameter("", "policyUri", policyuri.spec);
|
|
xsltp.importStylesheet(style);
|
|
|
|
var result = xsltp.transformToFragment(source, resultDocument);
|
|
|
|
// XXX Replacing the documentElement makes scrollbars disappear.
|
|
// See http://bugzilla.mozilla.org/show_bug.cgi?id=205725.
|
|
//while (resultDocument.lastChild} {
|
|
// resultDocument.removeChild(resultDocument.lastChild);
|
|
//}
|
|
// XXX appendChild of a DocumentFragment should work but doesn't.
|
|
// See http://bugzilla.mozilla.org/show_bug.cgi?id=209027.
|
|
//resultDocument.appendChild(result);
|
|
transferToDocument(result, resultDocument);
|
|
|
|
document.title = resultDocument.getElementById("topic").firstChild.nodeValue;
|
|
}
|
|
catch (ex) {
|
|
alertMessage(getBundle().GetStringFromName("InternalError"));
|
|
}
|
|
}
|
|
|
|
// XXX Temporary function to workaround disappearing scrollbars
|
|
// and bug in document.appendChild(DocumentFragment).
|
|
// See http://bugzilla.mozilla.org/show_bug.cgi?id=205725
|
|
// and http://bugzilla.mozilla.org/show_bug.cgi?id=209027.
|
|
function transferToDocument(aResult, aResultDocument)
|
|
{
|
|
var docElement = aResultDocument.documentElement;
|
|
while (aResultDocument.firstChild &&
|
|
aResultDocument.firstChild != docElement) {
|
|
aResultDocument.removeChild(aResultDocument.firstChild);
|
|
}
|
|
while (docElement.lastChild) {
|
|
docElement.removeChild(docElement.lastChild);
|
|
}
|
|
while (aResultDocument.lastChild &&
|
|
aResultDocument.lastChild != docElement) {
|
|
aResultDocument.removeChild(aResultDocument.lastChild);
|
|
}
|
|
var pastDocumentElement = false;
|
|
for (var i = 0; i < aResult.childNodes.length; ++i) {
|
|
var childNode = aResult.childNodes.item(i);
|
|
if (childNode instanceof HTMLElement) {
|
|
while (childNode.firstChild) {
|
|
aResultDocument.documentElement.appendChild(childNode.removeChild(childNode.firstChild));
|
|
}
|
|
pastDocumentElement = true;
|
|
}
|
|
else {
|
|
if (pastDocumentElement) {
|
|
aResultDocument.appendChild(childNode);
|
|
}
|
|
else {
|
|
aResultDocument.insertBefore(childNode, aResultDocument.documentElement);
|
|
}
|
|
// We removed the node from the list, which will cause it
|
|
// to shrink by one element. "i" is now pointing to the
|
|
// node that used to be _after_ the node we just removed.
|
|
// Decrement i, so when it increments (at the start of the
|
|
// next iteration) we'll point at the right place.
|
|
--i;
|
|
}
|
|
}
|
|
}
|
|
|
|
function getBrowser()
|
|
{
|
|
if (!gBrowser)
|
|
gBrowser = document.getElementById("content");
|
|
return gBrowser;
|
|
}
|
|
|
|
function getDocument()
|
|
{
|
|
if (!gDocument)
|
|
gDocument = getBrowser().contentDocument;
|
|
return gDocument;
|
|
}
|
|
|
|
function p3pSummarySavePage()
|
|
{
|
|
try
|
|
{
|
|
// make user pick target file
|
|
const kIFilePicker = Components.interfaces.nsIFilePicker;
|
|
var fp = Components.classes["@mozilla.org/filepicker;1"].
|
|
createInstance(kIFilePicker);
|
|
|
|
fp.init(window, getBundle().GetStringFromName("savePolicy.title"),
|
|
kIFilePicker.modeSave);
|
|
fp.appendFilters(kIFilePicker.filterAll | kIFilePicker.filterHTML);
|
|
fp.defaultString = document.title;
|
|
fp.defaultExtension = "html";
|
|
|
|
var rv = fp.show();
|
|
|
|
// write ``pretty printed'' source to file
|
|
if (rv == kIFilePicker.returnOK || rv == kIFilePicker.returnReplace)
|
|
{
|
|
const kIPersist = Components.interfaces.nsIWebBrowserPersist;
|
|
var persistor = Components.
|
|
classes["@mozilla.org/embedding/browser/nsWebBrowserPersist;1"].
|
|
createInstance(kIPersist);
|
|
|
|
persistor.saveDocument(getDocument(), fp.file, null, "text/html",
|
|
kIPersist.ENCODE_FLAGS_FORMATTED |
|
|
kIPersist.ENCODE_FLAGS_ENCODE_BASIC_ENTITIES, 0);
|
|
}
|
|
}
|
|
catch (ex)
|
|
{
|
|
try
|
|
{
|
|
alertMessage(getBundle().GetStringFromName("saveError"));
|
|
}
|
|
catch (ex)
|
|
{
|
|
}
|
|
}
|
|
}
|
|
|
|
/* This method displays additional information, in an alert box, upon request.
|
|
* Note that since javascript is disabled, for security reasons, in the policy viewer
|
|
* we have to capture the specific event, that bubbles up to the chrome, containing
|
|
* the requested message.
|
|
*/
|
|
function captureContentClick(aEvent)
|
|
{
|
|
if (aEvent.target.hasAttribute("message"))
|
|
alertMessage(aEvent.target.getAttribute("message"));
|
|
|
|
return true;
|
|
}
|
|
|
|
function updateSavePageItems()
|
|
{
|
|
var autoDownload = Components.classes["@mozilla.org/preferences-service;1"]
|
|
.getService(Components.interfaces.nsIPrefBranch)
|
|
.getBoolPref("browser.download.autoDownload");
|
|
goSetMenuValue("savepage", autoDownload ? "valueSave" : "valueSaveAs");
|
|
}
|