pjs/xpfe/browser/samples/dexparamdialog.xul

228 строки
7.9 KiB
XML

<?xml version="1.0"?>
<!DOCTYPE window>
<!-- DO NOT LOCALIZE: this file is source documentation; not part of the build -->
<!-- dialog containing a control requiring initial setup, expecting
initial settings to be passed in as parameters -->
<xul:window
xmlns:html="http://www.w3.org/1999/xhtml"
xmlns:xul ="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
onload = "SetFromParams()"
title = "Things to do"
height = "200" width = "300">
<script>
<![CDATA[
var debug = true;
// Initialize controls from parameters sent through the URL
function SetFromURL() {
// dump a bunch of diagnostics
if (debug) {
dump("In SetFromURL...\n");
dump("param string is '" + location.search + "', length " +
location.search.length + "\n");
var debugSetting = GetNamedParam(location.search.substring(1,location.search.length), "remind");
if (debugSetting) {
dump("'remind' parameter = '" + debugSetting + "'\n");
} else
dump("'remind' setting not found\n");
if (document.getElementById("remind"))
dump("found 'remind' element in document\n");
else
dump("'remind' element missing from document\n");
dump("Finishing SetFromURL...\n");
}
// set checkbox from "remind=xxx" name=value pair
var params = location.search.substring(1, location.search.length);
var setting = GetNamedParam(params, "remind");
if (setting)
setting = setting.toLowerCase() == "true";
else
setting = false;
var checkbox = document.getElementById("remind");
if (checkbox)
checkbox.checked = setting;
// set prompt text from "prompt=xxx" name=value pair
var setting = GetNamedParam(params, "prompt");
control = document.getElementById("prompt");
if (control && setting) {
control = control.firstChild;
if (control && control.nodeType == 3) // TEXT_NODE
control.data = setting;
}
}
// Initialize controls from parameters sent through openDialog
function SetFromParams() {
// dump a bunch of diagnostics
if (debug) {
var debugSetting;
var debugControl;
dump("In SetFromParams...\n");
if (window.arguments) {
dump("arguments exist\n");
if (window.arguments[0]) {
dump(" arguments[0] exists\n");
if (window.arguments[0].remind) {
dump(" arguments[0].remind exists\n");
debugSetting = window.arguments[0].remind;
dump(" it's " + debugSetting +
", type " + typeof debugSetting + "\n");
} else
dump("arguments[0].remind does not exist\n");
if (window.arguments[0].prompt) {
dump(" arguments[0].prompt exists\n");
debugSetting = window.arguments[0].prompt;
dump(" it's " + debugSetting +
", type " + typeof debugSetting + "\n");
} else
dump("arguments[0].prompt does not exist (or it's just false)\n");
} else
dump("arguments[0] does not exist\n");
} else
dump("no arguments\n");
debugControl = document.getElementById("remind");
if (debugControl)
dump("found 'remind' element in document "+
typeof debugControl+"\n");
else
dump("'remind' element missing from document\n");
debugControl = document.getElementById("prompt");
if (debugControl) {
dump("found 'prompt' element in document "+
typeof debugControl+"\n");
debugControl = debugControl.firstChild;
if (debugControl) {
dump("found prompt's first child. type " + debugControl.nodeName + "\n");
} else
dump("couldn't find prompt's first child\n");
} else
dump("'prompt' element missing from document\n");
dump("Finishing SetFromParams...\n");
}
// look in arguments[0] for an object with interesting properties and values
// set checkbox from its value, if present
if (window.arguments && window.arguments[0]) {
var setting;
var control;
// set checkbox from the value of argment[0]'s "value" property
setting = window.arguments[0].remind;
if (setting) { // (exists and true)
control = document.getElementById("remind");
if (control)
control.checked = setting;
}
// set prompt from the value of argment[0]'s "prompt" property
setting = window.arguments[0].prompt;
if (setting) {
if (typeof setting == "string") {
control = document.getElementById("prompt");
if (control) {
control = control.firstChild;
if (control && control.nodeType == 3) // TEXT_NODE
control.data = setting;
}
}
}
}
}
// OK button handler
// return the setting of the "remind" checkbox in two equivalent ways
// and then close the window (disabled for now, since that crashes)
function DoOK() {
var checkbox = document.getElementById("remind");
if (checkbox) {
// attach a property to ourselves, which can be queried from outside
window.returnArguments = checkbox.checked;
// additionally, if we were given an openDialog parameter, set its value
if (window.arguments && window.arguments[0])
window.arguments[0].remind = checkbox.checked;
}
// var toolkitCore = GetToolkitCore();
// if (toolkitCore)
// toolkitCore.CloseWindow(window);
window.close();
}
function GetToolkitCore() {
var toolkitCore = XPAppCoresManager.Find("ToolkitCore");
if (!toolkitCore) {
toolkitCore = new ToolkitCore();
if (toolkitCore)
toolkitCore.Init("ToolkitCore");
}
return toolkitCore;
}
// params is a list of name=value parameters separated by semicolons
// or ampersands. To pass parameters containing either character,
// string together parameters escape()d separately, separated by ;.
// this function returns the value of the named pair, or null
// if it found nothing.
function GetNamedParam(params, name) {
if (debug)
dump("GetNamedParam looking for '" + name + "' in '" + params + "'\n");
var re = new RegExp(name+" *=([^&;]+)");
var match = re(params);
if (match) {
if (debug)
dump(" matched regexp. found '" + match[1] + "'\n");
return unescape(match[1]);
}
return null;
}
function DumpWindow() {
dump("**********************************************\n");
for (prop in window)
dump(prop + "\n");
dump("----------------------------------------------\n");
}
]]>
</script>
<html:table>
<html:tr>
<html:td html:id="prompt">Give me your money</html:td>
</html:tr>
<html:tr>
<html:td>
<!-- note the html namespace on the id attribute, which
seems at this time to be required by getAttribute() -->
<html:input type="checkbox" html:id="remind"/>Remind me
</html:td>
</html:tr>
<html:tr>
<html:td>
<html:button onclick="DoOK()">OK</html:button>
</html:td>
</html:tr>
<html:tr>
<html:td>
<html:button onclick="SetFromURL()">Startup from URL</html:button>
</html:td>
</html:tr>
<html:tr>
<html:td>
<html:button onclick="SetFromParams()">Startup from Params</html:button>
</html:td>
</html:tr>
<html:tr>
<html:td>
<html:button onclick="sizeToContent()">Size To Content</html:button>
</html:td>
</html:tr>
<html:tr>
<html:td>
<html:button onclick="DumpWindow()">Dump Window</html:button>
</html:td>
</html:tr>
</html:table>
</xul:window>