зеркало из https://github.com/mozilla/pjs.git
adding parameter passing examples
This commit is contained in:
Родитель
9bb04603da
Коммит
8e79fdf5aa
|
@ -26,10 +26,12 @@ include $(topsrcdir)/config/config.mk
|
|||
include $(topsrcdir)/config/rules.mk
|
||||
|
||||
EXPORT_RESOURCE_SAMPLES = \
|
||||
$(srcdir)/dexsimplemaster.xul \
|
||||
$(srcdir)/dexsimpledialog.xul \
|
||||
$(srcdir)/dexanimmaster.xul \
|
||||
$(srcdir)/dexanimdialog.xul \
|
||||
$(srcdir)/dexparammaster.xul \
|
||||
$(srcdir)/dexparamdialog.xul \
|
||||
$(srcdir)/dexsimplemaster.xul \
|
||||
$(srcdir)/dexsimpledialog.xul \
|
||||
$(NULL)
|
||||
|
||||
install::
|
||||
|
|
|
@ -0,0 +1,221 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet href="xul.css" type="text/css"?>
|
||||
<!DOCTYPE window>
|
||||
<!-- dialog containing a control requiring initial setup -->
|
||||
<xul:window
|
||||
xmlns:html="http://www.w3.org/TR/REC-html40"
|
||||
xmlns:xul ="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
||||
onload = "SetFromParams()"
|
||||
title = "Things to do"
|
||||
height = "200" width = "300">
|
||||
|
||||
<html: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");
|
||||
}
|
||||
]]>
|
||||
</html: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="DumpWindow()">Dump Window</html:button>
|
||||
</html:td>
|
||||
</html:tr>
|
||||
</html:table>
|
||||
|
||||
</xul:window>
|
|
@ -0,0 +1,96 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet href="xul.css" type="text/css"?>
|
||||
<!DOCTYPE window>
|
||||
<!-- Simple sample interface for bringing up a nonmodal dialog -->
|
||||
<xul:window
|
||||
xmlns:html="http://www.w3.org/TR/REC-html40"
|
||||
xmlns:xul ="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
||||
title = "Dialog creation sample">
|
||||
|
||||
<html:script>
|
||||
<![CDATA[
|
||||
var dialogWindow = null;
|
||||
|
||||
// show a nonmodal dialog, sending parameters as part of the URL
|
||||
function MakeURLDialog() {
|
||||
var newWin = window.open("resource://res/samples/dexparamdialog.xul?remind=true;prompt=Give me your money and convertible bonds", "New");
|
||||
return newWin;
|
||||
}
|
||||
|
||||
// show a nonmodal dialog, sending parameters as part of the function call
|
||||
function MakeParamDialog() {
|
||||
var newWin = window.openDialog("resource://res/samples/dexparamdialog.xul",
|
||||
"New", "chrome", {remind:true, prompt:"Give me your money and convertible bonds"});
|
||||
return newWin;
|
||||
}
|
||||
|
||||
// show a modal dialog (requires toolkit core for now)
|
||||
function ModalDialog() {
|
||||
var toolkitCore = GetToolkitCore();
|
||||
if (toolkitCore)
|
||||
toolkitCore.ShowModalDialog("resource://res/samples/dexparamdialog.xul",
|
||||
window);
|
||||
}
|
||||
|
||||
// find and load the toolkit core
|
||||
function GetToolkitCore() {
|
||||
var toolkitCore = XPAppCoresManager.Find("ToolkitCore");
|
||||
if (!toolkitCore) {
|
||||
toolkitCore = new ToolkitCore();
|
||||
if (toolkitCore)
|
||||
toolkitCore.Init("ToolkitCore");
|
||||
}
|
||||
return toolkitCore;
|
||||
}
|
||||
|
||||
// dump the contents of a JS object
|
||||
function Regurgitate(what, explain) {
|
||||
dump("***regurgitating " + explain + ": " + what + "\n");
|
||||
for (prop in what) {
|
||||
dump(" property '" + prop + "' = '" + what[prop] + "'\n");
|
||||
var subarg = what[prop];
|
||||
dump(" length "+subarg.length+"\n");
|
||||
for (subprop in subarg)
|
||||
dump(" subarg property '"+subprop+"' = '"+subarg[subprop]+"'\n");
|
||||
}
|
||||
dump("regurgitated.\n");
|
||||
}
|
||||
|
||||
// just list the properties of a JS object
|
||||
function ListProperties(what) {
|
||||
dump("**********************************************\n");
|
||||
for (prop in what)
|
||||
dump(prop + "\n");
|
||||
dump("----------------------------------------------\n");
|
||||
}
|
||||
|
||||
// display a bunch of possibly interesting properties of the last
|
||||
// dialog window we saw
|
||||
function DumpLastDialog() {
|
||||
ListProperties(dialogWindow);
|
||||
Regurgitate(dialogWindow.arguments, "sent arguments");
|
||||
Regurgitate(dialogWindow.returnArguments, "returned arguments");
|
||||
}
|
||||
]]>
|
||||
</html:script>
|
||||
|
||||
<xul:toolbox>
|
||||
<xul:toolbar>
|
||||
<!-- insert the next line should the bug where buttons don't show up
|
||||
without an image specified ever return -->
|
||||
<!-- src="resource:/res/toolbar/TB_Stop.gif" align="bottom" -->
|
||||
<xul:titledbutton
|
||||
value="URL Dialog" onclick="dialogWindow=MakeURLDialog()"
|
||||
style="background-color:rgb(192,192,192);"/>
|
||||
<xul:titledbutton
|
||||
value="Param Dialog" onclick="dialogWindow=MakeParamDialog()"
|
||||
style="background-color:rgb(192,192,192);"/>
|
||||
<xul:titledbutton
|
||||
value="Modal Dialog" onclick="ModalDialog()"
|
||||
style="background-color:rgb(192,192,192);"/>
|
||||
<xul:titledbutton
|
||||
value="Dump Window" onclick="DumpLastDialog()"
|
||||
style="background-color:rgb(192,192,192);"/>
|
||||
</xul:toolbar>
|
||||
</xul:toolbox>
|
||||
</xul:window>
|
|
@ -22,13 +22,17 @@ DIRS=sampleimages
|
|||
include <$(DEPTH)\config\rules.mak>
|
||||
|
||||
install:: $(DLL)
|
||||
$(MAKE_INSTALL) dexsimplemaster.xul $(DIST)\bin\res\samples
|
||||
$(MAKE_INSTALL) dexsimpledialog.xul $(DIST)\bin\res\samples
|
||||
$(MAKE_INSTALL) dexanimmaster.xul $(DIST)\bin\res\samples
|
||||
$(MAKE_INSTALL) dexanimdialog.xul $(DIST)\bin\res\samples
|
||||
$(MAKE_INSTALL) dexparammaster.xul $(DIST)\bin\res\samples
|
||||
$(MAKE_INSTALL) dexparamdialog.xul $(DIST)\bin\res\samples
|
||||
$(MAKE_INSTALL) dexsimplemaster.xul $(DIST)\bin\res\samples
|
||||
$(MAKE_INSTALL) dexsimpledialog.xul $(DIST)\bin\res\samples
|
||||
|
||||
clobber::
|
||||
rm -f $(DIST)\res\samples\dexsimplemaster.xul
|
||||
rm -f $(DIST)\res\samples\dexsimpledialog.xul
|
||||
rm -f $(DIST)\res\samples\dexanimmaster.xul
|
||||
rm -f $(DIST)\res\samples\dexanimdialog.xul
|
||||
rm -f $(DIST)\res\samples\dexparammaster.xul
|
||||
rm -f $(DIST)\res\samples\dexparamdialog.xul
|
||||
rm -f $(DIST)\res\samples\dexsimplemaster.xul
|
||||
rm -f $(DIST)\res\samples\dexsimpledialog.xul
|
||||
|
|
Загрузка…
Ссылка в новой задаче