You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@struts.apache.org by mr...@apache.org on 2006/04/14 01:47:17 UTC
svn commit: r393978 [12/25] - in
/incubator/webwork2/action/src/main/resources/org/apache/struts/action2/static/dojo:
./ demos/ demos/widget/ demos/widget/EditorTree/
demos/widget/EditorTree/static/ demos/widget/Mail/ demos/widget/images/
src/ src/alg/...
Added: incubator/webwork2/action/src/main/resources/org/apache/struts/action2/static/dojo/src/hostenv_jsc.js
URL: http://svn.apache.org/viewcvs/incubator/webwork2/action/src/main/resources/org/apache/struts/action2/static/dojo/src/hostenv_jsc.js?rev=393978&view=auto
==============================================================================
--- incubator/webwork2/action/src/main/resources/org/apache/struts/action2/static/dojo/src/hostenv_jsc.js (added)
+++ incubator/webwork2/action/src/main/resources/org/apache/struts/action2/static/dojo/src/hostenv_jsc.js Thu Apr 13 16:46:55 2006
@@ -0,0 +1,76 @@
+/*
+ Copyright (c) 2004-2005, The Dojo Foundation
+ All Rights Reserved.
+
+ Licensed under the Academic Free License version 2.1 or above OR the
+ modified BSD license. For more information on Dojo licensing, see:
+
+ http://dojotoolkit.org/community/licensing.shtml
+*/
+
+/*
+ * JScript .NET jsc
+ *
+ */
+
+dojo.hostenv.name_ = 'jsc';
+
+// Sanity check this is the right hostenv.
+// See the Rotor source code jscript/engine/globalobject.cs for what globals
+// are available.
+if((typeof ScriptEngineMajorVersion != 'function')||(ScriptEngineMajorVersion() < 7)){
+ dj_throw("attempt to use JScript .NET host environment with inappropriate ScriptEngine");
+}
+
+// for more than you wanted to know about why this import is required even if
+// we fully qualify all symbols, see
+// http://groups.google.com/groups?th=f050c7aeefdcbde2&rnum=12
+import System;
+
+dojo.hostenv.getText = function(uri){
+ if(!System.IO.File.Exists(uri)){
+ // dj_throw("No such file '" + uri + "'");
+ return 0;
+ }
+ var reader = new System.IO.StreamReader(uri);
+ var contents : String = reader.ReadToEnd();
+ return contents;
+}
+
+dojo.hostenv.loadUri = function(uri){
+ var contents = this.getText(uri);
+ if(!contents){
+ dj_throw("got no back contents from uri '" + uri + "': " + contents);
+ }
+ // TODO: in JScript .NET, eval will not affect the symbol table of the current code?
+ var value = dj_eval(contents);
+ dojo.debug("jsc eval of contents returned: ", value);
+ return 1;
+
+ // for an example doing runtime code compilation, see:
+ // http://groups.google.com/groups?selm=eQ1aeciCBHA.1644%40tkmsftngp05&rnum=6
+ // Microsoft.JScript or System.CodeDom.Compiler ?
+ // var engine = new Microsoft.JScript.Vsa.VsaEngine()
+ // what about loading a js file vs. a dll?
+ // GetObject("script:" . uri);
+}
+
+/* The System.Environment object is useful:
+ print ("CommandLine='" + System.Environment.CommandLine + "' " +
+ "program name='" + System.Environment.GetCommandLineArgs()[0] + "' " +
+ "CurrentDirectory='" + System.Environment.CurrentDirectory + "' " +
+ "StackTrace='" + System.Environment.StackTrace + "'");
+*/
+
+// same as System.Console.WriteLine
+// sigh; Rotor treats symbol "print" at parse time without actually putting it
+// in the builtin symbol table.
+// Note that the print symbol is not available if jsc is run with the "/print-"
+// option.
+dojo.hostenv.println = function(s){
+ print(s); // = print
+}
+
+dojo.hostenv.getLibraryScriptUri = function(){
+ return System.Environment.GetCommandLineArgs()[0];
+}
Added: incubator/webwork2/action/src/main/resources/org/apache/struts/action2/static/dojo/src/hostenv_rhino.js
URL: http://svn.apache.org/viewcvs/incubator/webwork2/action/src/main/resources/org/apache/struts/action2/static/dojo/src/hostenv_rhino.js?rev=393978&view=auto
==============================================================================
--- incubator/webwork2/action/src/main/resources/org/apache/struts/action2/static/dojo/src/hostenv_rhino.js (added)
+++ incubator/webwork2/action/src/main/resources/org/apache/struts/action2/static/dojo/src/hostenv_rhino.js Thu Apr 13 16:46:55 2006
@@ -0,0 +1,176 @@
+/*
+ Copyright (c) 2004-2005, The Dojo Foundation
+ All Rights Reserved.
+
+ Licensed under the Academic Free License version 2.1 or above OR the
+ modified BSD license. For more information on Dojo licensing, see:
+
+ http://dojotoolkit.org/community/licensing.shtml
+*/
+
+/*
+* Rhino host environment
+*/
+
+// make jsc shut up (so we can use jsc for sanity checking)
+/*@cc_on
+@if (@_jscript_version >= 7)
+var loadClass; var print; var load; var quit; var version; var Packages; var java;
+@end
+@*/
+
+// TODO: not sure what we gain from the next line, anyone?
+//if (typeof loadClass == 'undefined') { dj_throw("attempt to use Rhino host environment when no 'loadClass' global"); }
+
+dojo.hostenv.name_ = 'rhino';
+dojo.hostenv.getVersion = function() {return version()};
+
+// see comments in spidermonkey loadUri
+dojo.hostenv.loadUri = function(uri, cb){
+ dojo.debug("uri: "+uri);
+ try{
+ // FIXME: what about remote URIs?
+ var found = true;
+ if(!(new java.io.File(uri)).exists()){
+ try{
+ // try it as a file first, URL second
+ (new java.io.URL(uri)).openStream();
+ }catch(e){
+ found = false;
+ }
+ }
+ if(!found){
+ dojo.debug(uri+" does not exist");
+ if(cb){ cb(0); }
+ return 0;
+ }
+ var ok = load(uri);
+ // dojo.debug(typeof ok);
+ dojo.debug("rhino load('", uri, "') returned. Ok: ", ok);
+ if(cb){ cb(1); }
+ return 1;
+ }catch(e){
+ dojo.debug("rhino load('", uri, "') failed");
+ if(cb){ cb(0); }
+ return 0;
+ }
+}
+
+dojo.hostenv.println = print;
+dojo.hostenv.exit = function(exitcode){
+ quit(exitcode);
+}
+
+// Hack to determine current script...
+//
+// These initial attempts failed:
+// 1. get an EcmaError and look at e.getSourceName(): try {eval ("static in return")} catch(e) { ...
+// Won't work because NativeGlobal.java only does a put of "name" and "message", not a wrapped reflecting object.
+// Even if the EcmaError object had the sourceName set.
+//
+// 2. var e = Packages.org.mozilla.javascript.Context.getCurrentContext().reportError('');
+// Won't work because it goes directly to the errorReporter, not the return value.
+// We want context.interpreterSourceFile and context.interpreterLine, which are used in static Context.getSourcePositionFromStack
+// (set by Interpreter.java at interpretation time, if in interpreter mode).
+//
+// 3. var e = Packages.org.mozilla.javascript.Context.getCurrentContext().reportRuntimeError('');
+// This returns an object, but e.message still does not have source info.
+// In compiler mode, perhaps not set; in interpreter mode, perhaps not used by errorReporter?
+//
+// What we found works is to do basically the same hack as is done in getSourcePositionFromStack,
+// making a new java.lang.Exception() and then calling printStackTrace on a string stream.
+// We have to parse the string for the .js files (different from the java files).
+// This only works however in compiled mode (-opt 0 or higher).
+// In interpreter mode, entire stack is java.
+// When compiled, printStackTrace is like:
+// java.lang.Exception
+// at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
+// at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
+// at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
+// at java.lang.reflect.Constructor.newInstance(Constructor.java:274)
+// at org.mozilla.javascript.NativeJavaClass.constructSpecific(NativeJavaClass.java:228)
+// at org.mozilla.javascript.NativeJavaClass.construct(NativeJavaClass.java:185)
+// at org.mozilla.javascript.ScriptRuntime.newObject(ScriptRuntime.java:1269)
+// at org.mozilla.javascript.gen.c2.call(/Users/mda/Sites/burstproject/testrhino.js:27)
+// ...
+// at org.mozilla.javascript.tools.shell.Main.main(Main.java:76)
+//
+// Note may get different answers based on:
+// Context.setOptimizationLevel(-1)
+// Context.setGeneratingDebug(true)
+// Context.setGeneratingSource(true)
+//
+// Some somewhat helpful posts:
+// http://groups.google.com/groups?hl=en&lr=&ie=UTF-8&oe=UTF-8&safe=off&selm=9v9n0g%246gr1%40ripley.netscape.com
+// http://groups.google.com/groups?hl=en&lr=&ie=UTF-8&oe=UTF-8&safe=off&selm=3BAA2DC4.6010702%40atg.com
+//
+// Note that Rhino1.5R5 added source name information in some exceptions.
+// But this seems not to help in command-line Rhino, because Context.java has an error reporter
+// so no EvaluationException is thrown.
+
+// do it by using java java.lang.Exception
+function dj_rhino_current_script_via_java(depth) {
+ var optLevel = Packages.org.mozilla.javascript.Context.getCurrentContext().getOptimizationLevel();
+ if (optLevel == -1) dj_unimplemented("getCurrentScriptURI (determine current script path for rhino when interpreter mode)", '');
+ var caw = new java.io.CharArrayWriter();
+ var pw = new java.io.PrintWriter(caw);
+ var exc = new java.lang.Exception();
+ exc.printStackTrace(pw);
+ var s = caw.toString();
+ // we have to exclude the ones with or without line numbers because they put double entries in:
+ // at org.mozilla.javascript.gen.c3._c4(/Users/mda/Sites/burstproject/burst/Runtime.js:56)
+ // at org.mozilla.javascript.gen.c3.call(/Users/mda/Sites/burstproject/burst/Runtime.js)
+ var matches = s.match(/[^\(]*\.js\)/gi);
+ if(!matches){
+ throw Error("cannot parse printStackTrace output: " + s);
+ }
+
+ // matches[0] is entire string, matches[1] is this function, matches[2] is caller, ...
+ var fname = ((typeof depth != 'undefined')&&(depth)) ? matches[depth + 1] : matches[matches.length - 1];
+ var fname = matches[3];
+ if(!fname){ fname = matches[1]; }
+ // print("got fname '" + fname + "' from stack string '" + s + "'");
+ if (!fname) throw Error("could not find js file in printStackTrace output: " + s);
+ //print("Rhino getCurrentScriptURI returning '" + fname + "' from: " + s);
+ return fname;
+}
+
+// UNUSED: leverage new support in native exception for getSourceName
+/*
+function dj_rhino_current_script_via_eval_exception() {
+ var exc;
+ // 'ReferenceError: "undefinedsymbol" is not defined.'
+ try {eval ("undefinedsymbol()") } catch(e) {exc = e;}
+ // 'Error: whatever'
+ // try{throw Error("whatever");} catch(e) {exc = e;}
+ // 'SyntaxError: identifier is a reserved word'
+ // try {eval ("static in return")} catch(e) { exc = e; }
+ print("got exception: '" + exc + "'");
+ print("exc.stack=" + (typeof exc.stack));
+ var sn = exc.getSourceName();
+ print("SourceName=" + sn);
+ return sn;
+}
+*/
+
+// reading a file from disk in Java is a humiliating experience by any measure.
+// Lets avoid that and just get the freaking text
+function readText(uri){
+ // NOTE: we intentionally avoid handling exceptions, since the caller will
+ // want to know
+ var jf = new java.io.File(uri);
+ var sb = new java.lang.StringBuffer();
+ var input = new java.io.BufferedReader(new java.io.FileReader(jf));
+ var line = "";
+ while((line = input.readLine()) != null){
+ sb.append(line);
+ sb.append(java.lang.System.getProperty("line.separator"));
+ }
+ return sb.toString();
+}
+
+// call this now because later we may not be on the top of the stack
+if(!djConfig.libraryScriptUri.length){
+ djConfig.libraryScriptUri = dj_rhino_current_script_via_java(1);
+}
+
Added: incubator/webwork2/action/src/main/resources/org/apache/struts/action2/static/dojo/src/hostenv_spidermonkey.js
URL: http://svn.apache.org/viewcvs/incubator/webwork2/action/src/main/resources/org/apache/struts/action2/static/dojo/src/hostenv_spidermonkey.js?rev=393978&view=auto
==============================================================================
--- incubator/webwork2/action/src/main/resources/org/apache/struts/action2/static/dojo/src/hostenv_spidermonkey.js (added)
+++ incubator/webwork2/action/src/main/resources/org/apache/struts/action2/static/dojo/src/hostenv_spidermonkey.js Thu Apr 13 16:46:55 2006
@@ -0,0 +1,80 @@
+/*
+ Copyright (c) 2004-2005, The Dojo Foundation
+ All Rights Reserved.
+
+ Licensed under the Academic Free License version 2.1 or above OR the
+ modified BSD license. For more information on Dojo licensing, see:
+
+ http://dojotoolkit.org/community/licensing.shtml
+*/
+
+/*
+ * SpiderMonkey host environment
+ */
+
+dojo.hostenv.name_ = 'spidermonkey';
+
+dojo.hostenv.println = print;
+dojo.hostenv.exit = function(exitcode){
+ quit(exitcode);
+}
+
+// version() returns 0, sigh. and build() returns nothing but just prints.
+dojo.hostenv.getVersion = function(){ return version(); }
+
+// make jsc shut up (so we can use jsc for sanity checking)
+/*@cc_on
+@if (@_jscript_version >= 7)
+var line2pc; var print; var load; var quit;
+@end
+@*/
+
+if(typeof line2pc == 'undefined'){
+ dojo.raise("attempt to use SpiderMonkey host environment when no 'line2pc' global");
+}
+
+/*
+ * This is a hack that determines the current script file by parsing a generated
+ * stack trace (relying on the non-standard "stack" member variable of the
+ * SpiderMonkey Error object).
+ * If param depth is passed in, it'll return the script file which is that far down
+ * the stack, but that does require that you know how deep your stack is when you are
+ * calling.
+ */
+function dj_spidermonkey_current_file(depth){
+ var s = '';
+ try{
+ throw Error("whatever");
+ }catch(e){
+ s = e.stack;
+ }
+ // lines are like: bu_getCurrentScriptURI_spidermonkey("ScriptLoader.js")@burst/Runtime.js:101
+ var matches = s.match(/[^@]*\.js/gi);
+ if(!matches){
+ dojo.raise("could not parse stack string: '" + s + "'");
+ }
+ var fname = (typeof depth != 'undefined' && depth) ? matches[depth + 1] : matches[matches.length - 1];
+ if(!fname){
+ dojo.raise("could not find file name in stack string '" + s + "'");
+ }
+ //print("SpiderMonkeyRuntime got fname '" + fname + "' from stack string '" + s + "'");
+ return fname;
+}
+
+// call this now because later we may not be on the top of the stack
+//dojo.hostenv.getLibraryScriptUri = dj_spidermonkey_current_file;
+if(!dojo.hostenv.library_script_uri_){
+ dojo.hostenv.library_script_uri_ = dj_spidermonkey_current_file(0);
+}
+
+dojo.hostenv.loadUri = function(uri){
+ // spidermonkey load() evaluates the contents into the global scope (which
+ // is what we want).
+ // TODO: sigh, load() does not return a useful value.
+ // Perhaps it is returning the value of the last thing evaluated?
+ var ok = load(uri);
+ // dojo.debug("spidermonkey load(", uri, ") returned ", ok);
+ return 1;
+}
+
+
Added: incubator/webwork2/action/src/main/resources/org/apache/struts/action2/static/dojo/src/hostenv_svg.js
URL: http://svn.apache.org/viewcvs/incubator/webwork2/action/src/main/resources/org/apache/struts/action2/static/dojo/src/hostenv_svg.js?rev=393978&view=auto
==============================================================================
--- incubator/webwork2/action/src/main/resources/org/apache/struts/action2/static/dojo/src/hostenv_svg.js (added)
+++ incubator/webwork2/action/src/main/resources/org/apache/struts/action2/static/dojo/src/hostenv_svg.js Thu Apr 13 16:46:55 2006
@@ -0,0 +1,223 @@
+/*
+ Copyright (c) 2004-2005, The Dojo Foundation
+ All Rights Reserved.
+
+ Licensed under the Academic Free License version 2.1 or above OR the
+ modified BSD license. For more information on Dojo licensing, see:
+
+ http://dojotoolkit.org/community/licensing.shtml
+*/
+
+// hostenv_svg
+if(typeof window == 'undefined'){
+ dj_throw("attempt to use adobe svg hostenv when no window object");
+}
+dojo.debug = function(){
+ if (!djConfig.isDebug) { return; }
+ var args = arguments;
+ var isJUM = dj_global["jum"];
+ var s = isJUM ? "": "DEBUG: ";
+ for (var i = 0; i < args.length; ++i){ s += args[i]; }
+ if (isJUM){ // this seems to be the only way to get JUM to "play nice"
+ jum.debug(s);
+ } else{
+ dojo.hostenv.println(s);
+ }
+};
+
+// set up dojo.render.
+dojo.render.name = navigator.appName;
+dojo.render.ver = parseFloat(navigator.appVersion, 10);
+switch(navigator.platform){
+ case "MacOS":
+ dojo.render.os.osx = true;
+ break;
+ case "Linux":
+ dojo.render.os.linux = true;
+ break;
+ case "Windows":
+ dojo.render.os.win = true;
+ break;
+ default:
+ dojo.render.os.linux = true;
+ break;
+};
+dojo.render.svg.capable = true;
+dojo.render.svg.support.builtin = true;
+// FIXME the following two is a big-ass hack for now.
+dojo.render.svg.moz = ((navigator.userAgent.indexOf("Gecko") >= 0) && (!((navigator.appVersion.indexOf("Konqueror") >= 0) || (navigator.appVersion.indexOf("Safari") >= 0))));
+dojo.render.svg.adobe = (window.parseXML != null);
+
+// agent-specific implementations.
+
+// from old hostenv_adobesvg.
+dojo.hostenv.startPackage("dojo.hostenv");
+dojo.hostenv.println = function(s){
+ try {
+ var ti = document.createElement("text");
+ ti.setAttribute("x","50");
+ ti.setAttribute("y", (25 + 15 * document.getElementsByTagName("text").length));
+ ti.appendChild(document.createTextNode(s));
+ document.documentElement.appendChild(ti);
+ } catch(e){ }
+};
+dojo.hostenv.name_ = "svg";
+
+// expected/defined by bootstrap1.js
+dojo.hostenv.setModulePrefix = function(module, prefix){ };
+dojo.hostenv.getModulePrefix = function(module){ };
+dojo.hostenv.getTextStack = [];
+dojo.hostenv.loadUriStack = [];
+dojo.hostenv.loadedUris = [];
+dojo.hostenv.modules_ = {};
+dojo.hostenv.modulesLoadedFired = false;
+dojo.hostenv.modulesLoadedListeners = [];
+dojo.hostenv.getText = function(uri, cb, data){
+ if (!cb) var cb = function(result){ window.alert(result); };
+ if (!data) {
+ window.getUrl(uri, cb);
+ } else {
+ window.postUrl(uri, data, cb);
+ }
+};
+dojo.hostenv.getLibaryScriptUri = function(){ };
+
+dojo.hostenv.loadUri = function(uri){ };
+dojo.hostenv.loadUriAndCheck = function(uri, module){ };
+
+// aliased in bootstrap2, don't ignore
+// we are going to kill loadModule for the first round of SVG stuff, and include shit manually.
+dojo.hostenv.loadModule = function(moduleName){
+ // just like startPackage, but this time we're just checking to make sure it exists already.
+ var a = moduleName.split(".");
+ var currentObj = window;
+ var s = [];
+ for (var i = 0; i < a.length; i++){
+ if (a[i] == "*") continue;
+ s.push(a[i]);
+ if (!currentObj[a[i]]){
+ dj_throw("dojo.require('" + moduleName + "'): module does not exist.");
+ } else currentObj = currentObj[a[i]];
+ }
+ return;
+};
+dojo.hostenv.startPackage = function(moduleName){
+ var a = moduleName.split(".");
+ var currentObj = window;
+ var s = [];
+ for (var i = 0; i < a.length; i++){
+ if (a[i] == "*") continue;
+ s.push(a[i]);
+ if (!currentObj[a[i]]) currentObj[a[i]] = {};
+ currentObj = currentObj[a[i]];
+ }
+ return;
+};
+
+// wrapper objects for ASVG
+if (window.parseXML){
+ window.XMLSerialzer = function(){
+ // based on WebFX RichTextControl getXHTML() function.
+ function nodeToString(n, a) {
+ function fixText(s) { return String(s).replace(/\&/g, "&").replace(/>/g, ">").replace(/</g, "<"); }
+ function fixAttribute(s) { return fixText(s).replace(/\"/g, """); }
+ switch (n.nodeType) {
+ case 1: { // ELEMENT
+ var name = n.nodeName;
+ a.push("<" + name);
+ for (var i = 0; i < n.attributes.length; i++) {
+ if (n.attributes.item(i).specified) {
+ a.push(" " + n.attributes.item(i).nodeName.toLowerCase() + "=\"" + fixAttribute(n.attributes.item(i).nodeValue) + "\"");
+ }
+ }
+ if (n.canHaveChildren || n.hasChildNodes()) {
+ a.push(">");
+ for (var i = 0; i < n.childNodes.length; i++) nodeToString(n.childNodes.item(i), a);
+ a.push("</" + name + ">\n");
+ } else a.push(" />\n");
+ break;
+ }
+ case 3: { // TEXT
+ a.push(fixText(n.nodeValue));
+ break;
+ }
+ case 4: { // CDATA
+ a.push("<![CDA" + "TA[\n" + n.nodeValue + "\n]" + "]>");
+ break;
+ }
+ case 7:{ // PROCESSING INSTRUCTION
+ a.push(n.nodeValue);
+ if (/(^<\?xml)|(^<\!DOCTYPE)/.test(n.nodeValue)) a.push("\n");
+ break;
+ }
+ case 8:{ // COMMENT
+ a.push("<!-- " + n.nodeValue + " -->\n");
+ break;
+ }
+ case 9: // DOCUMENT
+ case 11:{ // DOCUMENT FRAGMENT
+ for (var i = 0; i < n.childNodes.length; i++) nodeToString(n.childNodes.item(i), a);
+ break;
+ }
+ default:{
+ a.push("<!--\nNot Supported:\n\n" + "nodeType: " + n.nodeType + "\nnodeName: " + n.nodeName + "\n-->");
+ }
+ }
+ }
+ this.serializeToString = function(node){
+ var a = [];
+ nodeToString(node, a);
+ return a.join("");
+ };
+ };
+
+ window.DOMParser = function(){
+ // mimetype is basically ignored
+ this.parseFromString = function(s){
+ return parseXML(s, window.document);
+ }
+ };
+
+ window.XMLHttpRequest = function(){
+ // we ignore the setting and getting of content-type.
+ var uri = null;
+ var method = "POST";
+ var isAsync = true;
+ var cb = function(d){
+ this.responseText = d.content;
+ try {
+ this.responseXML = parseXML(this.responseText, window.document);
+ } catch(e){}
+ this.status = "200";
+ this.statusText = "OK";
+ if (!d.success) {
+ this.status = "500";
+ this.statusText = "Internal Server Error";
+ }
+ this.onload();
+ this.onreadystatechange();
+ };
+ this.onload = function(){};
+ this.readyState = 4;
+ this.onreadystatechange = function(){};
+ this.status = 0;
+ this.statusText = "";
+ this.responseBody = null;
+ this.responseStream = null;
+ this.responseXML = null;
+ this.responseText = null;
+ this.abort = function(){ return; };
+ this.getAllResponseHeaders = function(){ return []; };
+ this.getResponseHeader = function(n){ return null; };
+ this.setRequestHeader = function(nm, val){ };
+ this.open = function(meth, url, async){
+ method = meth;
+ uri = url;
+ };
+ this.send = function(data){
+ var d = data || null;
+ if (method == "GET") getURL(uri, cb);
+ else postURL(uri, data, cb);
+ };
+ };
+}
Added: incubator/webwork2/action/src/main/resources/org/apache/struts/action2/static/dojo/src/hostenv_wsh.js
URL: http://svn.apache.org/viewcvs/incubator/webwork2/action/src/main/resources/org/apache/struts/action2/static/dojo/src/hostenv_wsh.js?rev=393978&view=auto
==============================================================================
--- incubator/webwork2/action/src/main/resources/org/apache/struts/action2/static/dojo/src/hostenv_wsh.js (added)
+++ incubator/webwork2/action/src/main/resources/org/apache/struts/action2/static/dojo/src/hostenv_wsh.js Thu Apr 13 16:46:55 2006
@@ -0,0 +1,46 @@
+/*
+ Copyright (c) 2004-2005, The Dojo Foundation
+ All Rights Reserved.
+
+ Licensed under the Academic Free License version 2.1 or above OR the
+ modified BSD license. For more information on Dojo licensing, see:
+
+ http://dojotoolkit.org/community/licensing.shtml
+*/
+
+/*
+ * WSH
+ */
+
+dojo.hostenv.name_ = 'wsh';
+
+// make jsc shut up (so can sanity check)
+/*@cc_on
+@if (@_jscript_version >= 7)
+var WScript;
+@end
+@*/
+
+// make sure we are in right environment
+if(typeof WScript == 'undefined'){
+ dj_throw("attempt to use WSH host environment when no WScript global");
+}
+
+dojo.hostenv.println = WScript.Echo;
+
+dojo.hostenv.getCurrentScriptUri = function(){
+ return WScript.ScriptFullName();
+}
+
+dojo.hostenv.getText = function(fpath){
+ var fso = new ActiveXObject("Scripting.FileSystemObject");
+ var istream = fso.OpenTextFile(fpath, 1); // iomode==1 means read only
+ if(!istream){
+ return null;
+ }
+ var contents = istream.ReadAll();
+ istream.Close();
+ return contents;
+}
+
+dojo.hostenv.exit = function(exitcode){ WScript.Quit(exitcode); }
Added: incubator/webwork2/action/src/main/resources/org/apache/struts/action2/static/dojo/src/html.js
URL: http://svn.apache.org/viewcvs/incubator/webwork2/action/src/main/resources/org/apache/struts/action2/static/dojo/src/html.js?rev=393978&view=auto
==============================================================================
--- incubator/webwork2/action/src/main/resources/org/apache/struts/action2/static/dojo/src/html.js (added)
+++ incubator/webwork2/action/src/main/resources/org/apache/struts/action2/static/dojo/src/html.js Thu Apr 13 16:46:55 2006
@@ -0,0 +1,987 @@
+/*
+ Copyright (c) 2004-2005, The Dojo Foundation
+ All Rights Reserved.
+
+ Licensed under the Academic Free License version 2.1 or above OR the
+ modified BSD license. For more information on Dojo licensing, see:
+
+ http://dojotoolkit.org/community/licensing.shtml
+*/
+
+dojo.provide("dojo.html");
+dojo.require("dojo.dom");
+dojo.require("dojo.style");
+dojo.require("dojo.string");
+
+dojo.lang.mixin(dojo.html, dojo.dom);
+dojo.lang.mixin(dojo.html, dojo.style);
+
+// FIXME: we are going to assume that we can throw any and every rendering
+// engine into the IE 5.x box model. In Mozilla, we do this w/ CSS.
+// Need to investigate for KHTML and Opera
+
+dojo.html.clearSelection = function(){
+ try{
+ if(window["getSelection"]){
+ if(dojo.render.html.safari){
+ // pulled from WebCore/ecma/kjs_window.cpp, line 2536
+ window.getSelection().collapse();
+ }else{
+ window.getSelection().removeAllRanges();
+ }
+ }else if(document.selection){
+ if(document.selection.empty){
+ document.selection.empty();
+ }else if(document.selection.clear){
+ document.selection.clear();
+ }
+ }
+ return true;
+ }catch(e){
+ dojo.debug(e);
+ return false;
+ }
+}
+
+dojo.html.disableSelection = function(element){
+ element = dojo.byId(element)||dojo.html.body();
+ var h = dojo.render.html;
+
+ if(h.mozilla){
+ element.style.MozUserSelect = "none";
+ }else if(h.safari){
+ element.style.KhtmlUserSelect = "none";
+ }else if(h.ie){
+ element.unselectable = "on";
+ }else{
+ return false;
+ }
+ return true;
+}
+
+dojo.html.enableSelection = function(element){
+ element = dojo.byId(element)||dojo.html.body();
+
+ var h = dojo.render.html;
+ if(h.mozilla){
+ element.style.MozUserSelect = "";
+ }else if(h.safari){
+ element.style.KhtmlUserSelect = "";
+ }else if(h.ie){
+ element.unselectable = "off";
+ }else{
+ return false;
+ }
+ return true;
+}
+
+dojo.html.selectElement = function(element){
+ element = dojo.byId(element);
+ if(document.selection && dojo.html.body().createTextRange){ // IE
+ var range = dojo.html.body().createTextRange();
+ range.moveToElementText(element);
+ range.select();
+ }else if(window["getSelection"]){
+ var selection = window.getSelection();
+ // FIXME: does this work on Safari?
+ if(selection["selectAllChildren"]){ // Mozilla
+ selection.selectAllChildren(element);
+ }
+ }
+}
+
+dojo.html.isSelectionCollapsed = function(){
+ if(document["selection"]){ // IE
+ return document.selection.createRange().text == "";
+ }else if(window["getSelection"]){
+ var selection = window.getSelection();
+ if(dojo.lang.isString(selection)){ // Safari
+ return selection == "";
+ }else{ // Mozilla/W3
+ return selection.isCollapsed;
+ }
+ }
+}
+
+dojo.html.getEventTarget = function(evt){
+ if(!evt) { evt = window.event || {} };
+ if(evt.srcElement) {
+ return evt.srcElement;
+ } else if(evt.target) {
+ return evt.target;
+ }
+ return null;
+}
+
+// FIXME: should the next set of functions take an optional document to operate
+// on so as to be useful for getting this information from iframes?
+dojo.html.getScrollTop = function(){
+ return document.documentElement.scrollTop || dojo.html.body().scrollTop || 0;
+}
+
+dojo.html.getScrollLeft = function(){
+ return document.documentElement.scrollLeft || dojo.html.body().scrollLeft || 0;
+}
+
+dojo.html.getDocumentWidth = function(){
+ dojo.deprecated("dojo.html.getDocument* has been deprecated in favor of dojo.html.getViewport*");
+ return dojo.html.getViewportWidth();
+}
+
+dojo.html.getDocumentHeight = function(){
+ dojo.deprecated("dojo.html.getDocument* has been deprecated in favor of dojo.html.getViewport*");
+ return dojo.html.getViewportHeight();
+}
+
+dojo.html.getDocumentSize = function(){
+ dojo.deprecated("dojo.html.getDocument* has been deprecated in favor of dojo.html.getViewport*");
+ return dojo.html.getViewportSize();
+}
+
+dojo.html.getViewportWidth = function(){
+ var w = 0;
+
+ if(window.innerWidth){
+ w = window.innerWidth;
+ }
+
+ if(dojo.exists(document, "documentElement.clientWidth")){
+ // IE6 Strict
+ var w2 = document.documentElement.clientWidth;
+ // this lets us account for scrollbars
+ if(!w || w2 && w2 < w) {
+ w = w2;
+ }
+ return w;
+ }
+
+ if(document.body){
+ // IE
+ return document.body.clientWidth;
+ }
+
+ return 0;
+}
+
+dojo.html.getViewportHeight = function(){
+ if (window.innerHeight){
+ return window.innerHeight;
+ }
+
+ if (dojo.exists(document, "documentElement.clientHeight")){
+ // IE6 Strict
+ return document.documentElement.clientHeight;
+ }
+
+ if (document.body){
+ // IE
+ return document.body.clientHeight;
+ }
+
+ return 0;
+}
+
+dojo.html.getViewportSize = function(){
+ var ret = [dojo.html.getViewportWidth(), dojo.html.getViewportHeight()];
+ ret.w = ret[0];
+ ret.h = ret[1];
+ return ret;
+}
+
+dojo.html.getScrollOffset = function(){
+ var ret = [0, 0];
+
+ if(window.pageYOffset){
+ ret = [window.pageXOffset, window.pageYOffset];
+ }else if(dojo.exists(document, "documentElement.scrollTop")){
+ ret = [document.documentElement.scrollLeft, document.documentElement.scrollTop];
+ } else if(document.body){
+ ret = [document.body.scrollLeft, document.body.scrollTop];
+ }
+
+ ret.x = ret[0];
+ ret.y = ret[1];
+ return ret;
+}
+
+dojo.html.getParentOfType = function(node, type){
+ dojo.deprecated("dojo.html.getParentOfType has been deprecated in favor of dojo.html.getParentByType*");
+ return dojo.html.getParentByType(node, type);
+}
+
+dojo.html.getParentByType = function(node, type) {
+ var parent = dojo.byId(node);
+ type = type.toLowerCase();
+ while((parent)&&(parent.nodeName.toLowerCase()!=type)){
+ if(parent==(document["body"]||document["documentElement"])){
+ return null;
+ }
+ parent = parent.parentNode;
+ }
+ return parent;
+}
+
+// RAR: this function comes from nwidgets and is more-or-less unmodified.
+// We should probably look ant Burst and f(m)'s equivalents
+dojo.html.getAttribute = function(node, attr){
+ node = dojo.byId(node);
+ // FIXME: need to add support for attr-specific accessors
+ if((!node)||(!node.getAttribute)){
+ // if(attr !== 'nwType'){
+ // alert("getAttr of '" + attr + "' with bad node");
+ // }
+ return null;
+ }
+ var ta = typeof attr == 'string' ? attr : new String(attr);
+
+ // first try the approach most likely to succeed
+ var v = node.getAttribute(ta.toUpperCase());
+ if((v)&&(typeof v == 'string')&&(v!="")){ return v; }
+
+ // try returning the attributes value, if we couldn't get it as a string
+ if(v && v.value){ return v.value; }
+
+ // this should work on Opera 7, but it's a little on the crashy side
+ if((node.getAttributeNode)&&(node.getAttributeNode(ta))){
+ return (node.getAttributeNode(ta)).value;
+ }else if(node.getAttribute(ta)){
+ return node.getAttribute(ta);
+ }else if(node.getAttribute(ta.toLowerCase())){
+ return node.getAttribute(ta.toLowerCase());
+ }
+ return null;
+}
+
+/**
+ * Determines whether or not the specified node carries a value for the
+ * attribute in question.
+ */
+dojo.html.hasAttribute = function(node, attr){
+ node = dojo.byId(node);
+ return dojo.html.getAttribute(node, attr) ? true : false;
+}
+
+/**
+ * Returns the string value of the list of CSS classes currently assigned
+ * directly to the node in question. Returns an empty string if no class attribute
+ * is found;
+ */
+dojo.html.getClass = function(node){
+ node = dojo.byId(node);
+ if(!node){ return ""; }
+ var cs = "";
+ if(node.className){
+ cs = node.className;
+ }else if(dojo.html.hasAttribute(node, "class")){
+ cs = dojo.html.getAttribute(node, "class");
+ }
+ return dojo.string.trim(cs);
+}
+
+/**
+ * Returns an array of CSS classes currently assigned
+ * directly to the node in question. Returns an empty array if no classes
+ * are found;
+ */
+dojo.html.getClasses = function(node) {
+ node = dojo.byId(node);
+ var c = dojo.html.getClass(node);
+ return (c == "") ? [] : c.split(/\s+/g);
+}
+
+/**
+ * Returns whether or not the specified classname is a portion of the
+ * class list currently applied to the node. Does not cover cascaded
+ * styles, only classes directly applied to the node.
+ */
+dojo.html.hasClass = function(node, classname){
+ node = dojo.byId(node);
+ return dojo.lang.inArray(dojo.html.getClasses(node), classname);
+}
+
+/**
+ * Adds the specified class to the beginning of the class list on the
+ * passed node. This gives the specified class the highest precidence
+ * when style cascading is calculated for the node. Returns true or
+ * false; indicating success or failure of the operation, respectively.
+ */
+dojo.html.prependClass = function(node, classStr){
+ node = dojo.byId(node);
+ if(!node){ return false; }
+ classStr += " " + dojo.html.getClass(node);
+ return dojo.html.setClass(node, classStr);
+}
+
+/**
+ * Adds the specified class to the end of the class list on the
+ * passed &node;. Returns &true; or &false; indicating success or failure.
+ */
+dojo.html.addClass = function(node, classStr){
+ node = dojo.byId(node);
+ if (!node) { return false; }
+ if (dojo.html.hasClass(node, classStr)) {
+ return false;
+ }
+ classStr = dojo.string.trim(dojo.html.getClass(node) + " " + classStr);
+ return dojo.html.setClass(node, classStr);
+}
+
+/**
+ * Clobbers the existing list of classes for the node, replacing it with
+ * the list given in the 2nd argument. Returns true or false
+ * indicating success or failure.
+ */
+dojo.html.setClass = function(node, classStr){
+ node = dojo.byId(node);
+ if(!node){ return false; }
+ var cs = new String(classStr);
+ try{
+ if(typeof node.className == "string"){
+ node.className = cs;
+ }else if(node.setAttribute){
+ node.setAttribute("class", classStr);
+ node.className = cs;
+ }else{
+ return false;
+ }
+ }catch(e){
+ dojo.debug("dojo.html.setClass() failed", e);
+ }
+ return true;
+}
+
+/**
+ * Removes the className from the node;. Returns
+ * true or false indicating success or failure.
+ */
+dojo.html.removeClass = function(node, classStr, allowPartialMatches){
+ node = dojo.byId(node);
+ if(!node){ return false; }
+ var classStr = dojo.string.trim(new String(classStr));
+
+ try{
+ var cs = dojo.html.getClasses(node);
+ var nca = [];
+ if(allowPartialMatches){
+ for(var i = 0; i<cs.length; i++){
+ if(cs[i].indexOf(classStr) == -1){
+ nca.push(cs[i]);
+ }
+ }
+ }else{
+ for(var i=0; i<cs.length; i++){
+ if(cs[i] != classStr){
+ nca.push(cs[i]);
+ }
+ }
+ }
+ dojo.html.setClass(node, nca.join(" "));
+ }catch(e){
+ dojo.debug("dojo.html.removeClass() failed", e);
+ }
+
+ return true;
+}
+
+/**
+ * Replaces 'oldClass' and adds 'newClass' to node
+ */
+dojo.html.replaceClass = function(node, newClass, oldClass) {
+ node = dojo.byId(node);
+ dojo.html.removeClass(node, oldClass);
+ dojo.html.addClass(node, newClass);
+}
+
+// Enum type for getElementsByClass classMatchType arg:
+dojo.html.classMatchType = {
+ ContainsAll : 0, // all of the classes are part of the node's class (default)
+ ContainsAny : 1, // any of the classes are part of the node's class
+ IsOnly : 2 // only all of the classes are part of the node's class
+}
+
+
+/**
+ * Returns an array of nodes for the given classStr, children of a
+ * parent, and optionally of a certain nodeType
+ */
+dojo.html.getElementsByClass = function(classStr, parent, nodeType, classMatchType){
+ parent = dojo.byId(parent);
+ if(!parent){ parent = document; }
+ var classes = classStr.split(/\s+/g);
+ var nodes = [];
+ if( classMatchType != 1 && classMatchType != 2 ) classMatchType = 0; // make it enum
+ var reClass = new RegExp("(\\s|^)((" + classes.join(")|(") + "))(\\s|$)");
+
+ // FIXME: doesn't have correct parent support!
+ if(!nodeType){ nodeType = "*"; }
+ var candidateNodes = parent.getElementsByTagName(nodeType);
+
+ outer:
+ for(var i = 0; i < candidateNodes.length; i++) {
+ var node = candidateNodes[i];
+ var nodeClasses = dojo.html.getClasses(node);
+ if(nodeClasses.length == 0) { continue outer; }
+ var matches = 0;
+
+ for(var j = 0; j < nodeClasses.length; j++) {
+ if( reClass.test(nodeClasses[j]) ) {
+ if( classMatchType == dojo.html.classMatchType.ContainsAny ) {
+ nodes.push(node);
+ continue outer;
+ } else {
+ matches++;
+ }
+ } else {
+ if( classMatchType == dojo.html.classMatchType.IsOnly ) {
+ continue outer;
+ }
+ }
+ }
+
+ if( matches == classes.length ) {
+ if( classMatchType == dojo.html.classMatchType.IsOnly && matches == nodeClasses.length ) {
+ nodes.push(node);
+ } else if( classMatchType == dojo.html.classMatchType.ContainsAll ) {
+ nodes.push(node);
+ }
+ }
+ }
+
+ return nodes;
+}
+dojo.html.getElementsByClassName = dojo.html.getElementsByClass;
+
+/**
+ * Calculates the mouse's direction of gravity relative to the centre
+ * of the given node.
+ * <p>
+ * If you wanted to insert a node into a DOM tree based on the mouse
+ * position you might use the following code:
+ * <pre>
+ * if (gravity(node, e) & gravity.NORTH) { [insert before]; }
+ * else { [insert after]; }
+ * </pre>
+ *
+ * @param node The node
+ * @param e The event containing the mouse coordinates
+ * @return The directions, NORTH or SOUTH and EAST or WEST. These
+ * are properties of the function.
+ */
+dojo.html.gravity = function(node, e){
+ node = dojo.byId(node);
+ var mousex = e.pageX || e.clientX + dojo.html.body().scrollLeft;
+ var mousey = e.pageY || e.clientY + dojo.html.body().scrollTop;
+
+ with (dojo.html) {
+ var nodecenterx = getAbsoluteX(node) + (getInnerWidth(node) / 2);
+ var nodecentery = getAbsoluteY(node) + (getInnerHeight(node) / 2);
+ }
+
+ with (dojo.html.gravity) {
+ return ((mousex < nodecenterx ? WEST : EAST) |
+ (mousey < nodecentery ? NORTH : SOUTH));
+ }
+}
+
+dojo.html.gravity.NORTH = 1;
+dojo.html.gravity.SOUTH = 1 << 1;
+dojo.html.gravity.EAST = 1 << 2;
+dojo.html.gravity.WEST = 1 << 3;
+
+dojo.html.overElement = function(element, e){
+ element = dojo.byId(element);
+ var mousex = e.pageX || e.clientX + dojo.html.body().scrollLeft;
+ var mousey = e.pageY || e.clientY + dojo.html.body().scrollTop;
+
+ with(dojo.html){
+ var top = getAbsoluteY(element);
+ var bottom = top + getInnerHeight(element);
+ var left = getAbsoluteX(element);
+ var right = left + getInnerWidth(element);
+ }
+
+ return (mousex >= left && mousex <= right &&
+ mousey >= top && mousey <= bottom);
+}
+
+/**
+ * Attempts to return the text as it would be rendered, with the line breaks
+ * sorted out nicely. Unfinished.
+ */
+dojo.html.renderedTextContent = function(node){
+ node = dojo.byId(node);
+ var result = "";
+ if (node == null) { return result; }
+ for (var i = 0; i < node.childNodes.length; i++) {
+ switch (node.childNodes[i].nodeType) {
+ case 1: // ELEMENT_NODE
+ case 5: // ENTITY_REFERENCE_NODE
+ var display = "unknown";
+ try {
+ display = dojo.style.getStyle(node.childNodes[i], "display");
+ } catch(E) {}
+ switch (display) {
+ case "block": case "list-item": case "run-in":
+ case "table": case "table-row-group": case "table-header-group":
+ case "table-footer-group": case "table-row": case "table-column-group":
+ case "table-column": case "table-cell": case "table-caption":
+ // TODO: this shouldn't insert double spaces on aligning blocks
+ result += "\n";
+ result += dojo.html.renderedTextContent(node.childNodes[i]);
+ result += "\n";
+ break;
+
+ case "none": break;
+
+ default:
+ if(node.childNodes[i].tagName && node.childNodes[i].tagName.toLowerCase() == "br") {
+ result += "\n";
+ } else {
+ result += dojo.html.renderedTextContent(node.childNodes[i]);
+ }
+ break;
+ }
+ break;
+ case 3: // TEXT_NODE
+ case 2: // ATTRIBUTE_NODE
+ case 4: // CDATA_SECTION_NODE
+ var text = node.childNodes[i].nodeValue;
+ var textTransform = "unknown";
+ try {
+ textTransform = dojo.style.getStyle(node, "text-transform");
+ } catch(E) {}
+ switch (textTransform){
+ case "capitalize": text = dojo.string.capitalize(text); break;
+ case "uppercase": text = text.toUpperCase(); break;
+ case "lowercase": text = text.toLowerCase(); break;
+ default: break; // leave as is
+ }
+ // TODO: implement
+ switch (textTransform){
+ case "nowrap": break;
+ case "pre-wrap": break;
+ case "pre-line": break;
+ case "pre": break; // leave as is
+ default:
+ // remove whitespace and collapse first space
+ text = text.replace(/\s+/, " ");
+ if (/\s$/.test(result)) { text.replace(/^\s/, ""); }
+ break;
+ }
+ result += text;
+ break;
+ default:
+ break;
+ }
+ }
+ return result;
+}
+
+dojo.html.setActiveStyleSheet = function(title){
+ var i, a, main;
+ for(i=0; (a = document.getElementsByTagName("link")[i]); i++){
+ if(a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title")){
+ a.disabled = true;
+ if (a.getAttribute("title") == title) { a.disabled = false; }
+ }
+ }
+}
+
+dojo.html.getActiveStyleSheet = function(){
+ var i, a;
+ // FIXME: getElementsByTagName returns a live collection. This seems like a
+ // bad key for iteration.
+ for(i=0; (a = document.getElementsByTagName("link")[i]); i++){
+ if (a.getAttribute("rel").indexOf("style") != -1 &&
+ a.getAttribute("title") && !a.disabled) { return a.getAttribute("title"); }
+ }
+ return null;
+}
+
+dojo.html.getPreferredStyleSheet = function(){
+ var i, a;
+ for(i=0; (a = document.getElementsByTagName("link")[i]); i++){
+ if(a.getAttribute("rel").indexOf("style") != -1
+ && a.getAttribute("rel").indexOf("alt") == -1
+ && a.getAttribute("title")) { return a.getAttribute("title"); }
+ }
+ return null;
+}
+
+dojo.html.body = function(){
+ return document.body || document.getElementsByTagName("body")[0];
+}
+
+dojo.html.createNodesFromText = function(txt, trim){
+ if(trim) { txt = dojo.string.trim(txt); }
+
+ var tn = document.createElement("div");
+ // tn.style.display = "none";
+ tn.style.visibility= "hidden";
+ document.body.appendChild(tn);
+ var tableType = "none";
+ if((/^<t[dh][\s\r\n>]/i).test(dojo.string.trimStart(txt))) {
+ txt = "<table><tbody><tr>" + txt + "</tr></tbody></table>";
+ tableType = "cell";
+ } else if((/^<tr[\s\r\n>]/i).test(dojo.string.trimStart(txt))) {
+ txt = "<table><tbody>" + txt + "</tbody></table>";
+ tableType = "row";
+ } else if((/^<(thead|tbody|tfoot)[\s\r\n>]/i).test(dojo.string.trimStart(txt))) {
+ txt = "<table>" + txt + "</table>";
+ tableType = "section";
+ }
+ tn.innerHTML = txt;
+ tn.normalize();
+
+ var parent = null;
+ switch(tableType) {
+ case "cell":
+ parent = tn.getElementsByTagName("tr")[0];
+ break;
+ case "row":
+ parent = tn.getElementsByTagName("tbody")[0];
+ break;
+ case "section":
+ parent = tn.getElementsByTagName("table")[0];
+ break;
+ default:
+ parent = tn;
+ break;
+ }
+
+ /* this doesn't make much sense, I'm assuming it just meant trim() so wrap was replaced with trim
+ if(wrap){
+ var ret = [];
+ // start hack
+ var fc = tn.firstChild;
+ ret[0] = ((fc.nodeValue == " ")||(fc.nodeValue == "\t")) ? fc.nextSibling : fc;
+ // end hack
+ // tn.style.display = "none";
+ document.body.removeChild(tn);
+ return ret;
+ }
+ */
+ var nodes = [];
+ for(var x=0; x<parent.childNodes.length; x++){
+ nodes.push(parent.childNodes[x].cloneNode(true));
+ }
+ tn.style.display = "none"; // FIXME: why do we do this?
+ document.body.removeChild(tn);
+ return nodes;
+}
+
+// FIXME: this should be removed after 0.2 release
+if(!dojo.evalObjPath("dojo.dom.createNodesFromText")){
+ dojo.dom.createNodesFromText = function() {
+ dojo.deprecated("dojo.dom.createNodesFromText", "use dojo.html.createNodesFromText instead");
+ return dojo.html.createNodesFromText.apply(dojo.html, arguments);
+ }
+}
+
+dojo.html.isVisible = function(node){
+ node = dojo.byId(node);
+ // FIXME: this should also look at visibility!
+ return dojo.style.getComputedStyle(node||this.domNode, "display") != "none";
+}
+
+dojo.html.show = function(node){
+ node = dojo.byId(node);
+ if(node.style){
+ node.style.display = dojo.lang.inArray(['tr', 'td', 'th'], node.tagName.toLowerCase()) ? "" : "block";
+ }
+}
+
+dojo.html.hide = function(node){
+ node = dojo.byId(node);
+ if(node.style){
+ node.style.display = "none";
+ }
+}
+
+dojo.html.toggleVisible = function(node) {
+ if(dojo.html.isVisible(node)) {
+ dojo.html.hide(node);
+ return false;
+ } else {
+ dojo.html.show(node);
+ return true;
+ }
+}
+
+/**
+ * Like dojo.dom.isTag, except case-insensitive
+**/
+dojo.html.isTag = function(node /* ... */) {
+ node = dojo.byId(node);
+ if(node && node.tagName) {
+ var arr = dojo.lang.map(dojo.lang.toArray(arguments, 1),
+ function(a) { return String(a).toLowerCase(); });
+ return arr[ dojo.lang.find(node.tagName.toLowerCase(), arr) ] || "";
+ }
+ return "";
+}
+
+// in: coordinate array [x,y,w,h] or dom node
+// return: coordinate array
+dojo.html.toCoordinateArray = function(coords, includeScroll) {
+ if(dojo.lang.isArray(coords)){
+ // coords is already an array (of format [x,y,w,h]), just return it
+ while ( coords.length < 4 ) { coords.push(0); }
+ while ( coords.length > 4 ) { coords.pop(); }
+ var ret = coords;
+ } else {
+ // coords is an dom object (or dom object id); return it's coordinates
+ var node = dojo.byId(coords);
+ var ret = [
+ dojo.html.getAbsoluteX(node, includeScroll),
+ dojo.html.getAbsoluteY(node, includeScroll),
+ dojo.html.getInnerWidth(node),
+ dojo.html.getInnerHeight(node)
+ ];
+ }
+ ret.x = ret[0];
+ ret.y = ret[1];
+ ret.w = ret[2];
+ ret.h = ret[3];
+ return ret;
+};
+
+/* TODO: merge placeOnScreen and placeOnScreenPoint to make 1 function that allows you
+ * to define which corner(s) you want to bind to. Something like so:
+ *
+ * kes(node, desiredX, desiredY, "TR")
+ * kes(node, [desiredX, desiredY], ["TR", "BL"])
+ *
+ * TODO: make this function have variable call sigs
+ *
+ * kes(node, ptArray, cornerArray, padding, hasScroll)
+ * kes(node, ptX, ptY, cornerA, cornerB, cornerC, paddingArray, hasScroll)
+ */
+
+/**
+ * Keeps 'node' in the visible area of the screen while trying to
+ * place closest to desiredX, desiredY. The input coordinates are
+ * expected to be the desired screen position, not accounting for
+ * scrolling. If you already accounted for scrolling, set 'hasScroll'
+ * to true. Set padding to either a number or array for [paddingX, paddingY]
+ * to put some buffer around the element you want to position.
+ * NOTE: node is assumed to be absolutely or relatively positioned.
+ *
+ * Alternate call sig:
+ * placeOnScreen(node, [x, y], padding, hasScroll)
+ *
+ * Examples:
+ * placeOnScreen(node, 100, 200)
+ * placeOnScreen("myId", [800, 623], 5)
+ * placeOnScreen(node, 234, 3284, [2, 5], true)
+ */
+dojo.html.placeOnScreen = function(node, desiredX, desiredY, padding, hasScroll) {
+ if(dojo.lang.isArray(desiredX)) {
+ hasScroll = padding;
+ padding = desiredY;
+ desiredY = desiredX[1];
+ desiredX = desiredX[0];
+ }
+
+ if(!isNaN(padding)) {
+ padding = [Number(padding), Number(padding)];
+ } else if(!dojo.lang.isArray(padding)) {
+ padding = [0, 0];
+ }
+
+ var scroll = dojo.html.getScrollOffset();
+ var view = dojo.html.getViewportSize();
+
+ node = dojo.byId(node);
+ var w = node.offsetWidth + padding[0];
+ var h = node.offsetHeight + padding[1];
+
+ if(hasScroll) {
+ desiredX -= scroll.x;
+ desiredY -= scroll.y;
+ }
+
+ var x = desiredX + w;
+ if(x > view.w) {
+ x = view.w - w;
+ } else {
+ x = desiredX;
+ }
+ x = Math.max(padding[0], x) + scroll.x;
+
+ var y = desiredY + h;
+ if(y > view.h) {
+ y = view.h - h;
+ } else {
+ y = desiredY;
+ }
+ y = Math.max(padding[1], y) + scroll.y;
+
+ node.style.left = x + "px";
+ node.style.top = y + "px";
+
+ var ret = [x, y];
+ ret.x = x;
+ ret.y = y;
+ return ret;
+}
+
+/**
+ * Like placeOnScreenPoint except that it attempts to keep one of the node's
+ * corners at desiredX, desiredY. Also note that padding is only taken into
+ * account if none of the corners can be kept and thus placeOnScreenPoint falls
+ * back to placeOnScreen to place the node.
+ *
+ * Examples placing node at mouse position (where e = [Mouse event]):
+ * placeOnScreenPoint(node, e.clientX, e.clientY);
+ */
+dojo.html.placeOnScreenPoint = function(node, desiredX, desiredY, padding, hasScroll) {
+ if(dojo.lang.isArray(desiredX)) {
+ hasScroll = padding;
+ padding = desiredY;
+ desiredY = desiredX[1];
+ desiredX = desiredX[0];
+ }
+
+ var scroll = dojo.html.getScrollOffset();
+ var view = dojo.html.getViewportSize();
+
+ node = dojo.byId(node);
+ var w = node.offsetWidth;
+ var h = node.offsetHeight;
+
+ if(hasScroll) {
+ desiredX -= scroll.x;
+ desiredY -= scroll.y;
+ }
+
+ var x = -1, y = -1;
+ //dojo.debug(desiredX + w, "<=", view.w, "&&", desiredY + h, "<=", view.h);
+ if(desiredX + w <= view.w && desiredY + h <= view.h) { // TL
+ x = desiredX;
+ y = desiredY;
+ //dojo.debug("TL", x, y);
+ }
+
+ //dojo.debug(desiredX, "<=", view.w, "&&", desiredY + h, "<=", view.h);
+ if((x < 0 || y < 0) && desiredX <= view.w && desiredY + h <= view.h) { // TR
+ x = desiredX - w;
+ y = desiredY;
+ //dojo.debug("TR", x, y);
+ }
+
+ //dojo.debug(desiredX + w, "<=", view.w, "&&", desiredY, "<=", view.h);
+ if((x < 0 || y < 0) && desiredX + w <= view.w && desiredY <= view.h) { // BL
+ x = desiredX;
+ y = desiredY - h;
+ //dojo.debug("BL", x, y);
+ }
+
+ //dojo.debug(desiredX, "<=", view.w, "&&", desiredY, "<=", view.h);
+ if((x < 0 || y < 0) && desiredX <= view.w && desiredY <= view.h) { // BR
+ x = desiredX - w;
+ y = desiredY - h;
+ //dojo.debug("BR", x, y);
+ }
+
+ if(x < 0 || y < 0 || (x + w > view.w) || (y + h > view.h)) {
+ return dojo.html.placeOnScreen(node, desiredX, desiredY, padding, hasScroll);
+ }
+
+ x += scroll.x;
+ y += scroll.y;
+
+ node.style.left = x + "px";
+ node.style.top = y + "px";
+
+ var ret = [x, y];
+ ret.x = x;
+ ret.y = y;
+ return ret;
+}
+
+/**
+ * For IE z-index schenanigans
+ * See Dialog widget for sample use
+ */
+dojo.html.BackgroundIframe = function() {
+ if(this.ie) {
+ this.iframe = document.createElement("<iframe frameborder='0' src='about:blank'>");
+ var s = this.iframe.style;
+ s.position = "absolute";
+ s.left = s.top = "0px";
+ s.zIndex = 2;
+ s.display = "none";
+ dojo.style.setOpacity(this.iframe, 0.0);
+ dojo.html.body().appendChild(this.iframe);
+ } else {
+ this.enabled = false;
+ }
+}
+dojo.lang.extend(dojo.html.BackgroundIframe, {
+ ie: dojo.render.html.ie,
+ enabled: true,
+ visibile: false,
+ iframe: null,
+ sizeNode: null,
+ sizeCoords: null,
+
+ size: function(node /* or coords */) {
+ if(!this.ie || !this.enabled) { return; }
+
+ if(dojo.dom.isNode(node)) {
+ this.sizeNode = node;
+ } else if(arguments.length > 0) {
+ this.sizeNode = null;
+ this.sizeCoords = node;
+ }
+ this.update();
+ },
+
+ update: function() {
+ if(!this.ie || !this.enabled) { return; }
+
+ if(this.sizeNode) {
+ this.sizeCoords = dojo.html.toCoordinateArray(this.sizeNode, true);
+ } else if(this.sizeCoords) {
+ this.sizeCoords = dojo.html.toCoordinateArray(this.sizeCoords, true);
+ } else {
+ return;
+ }
+
+ var s = this.iframe.style;
+ var dims = this.sizeCoords;
+ s.width = dims.w + "px";
+ s.height = dims.h + "px";
+ s.left = dims.x + "px";
+ s.top = dims.y + "px";
+ },
+
+ setZIndex: function(node /* or number */) {
+ if(!this.ie || !this.enabled) { return; }
+
+ if(dojo.dom.isNode(node)) {
+ this.iframe.zIndex = dojo.html.getStyle(node, "z-index") - 1;
+ } else if(!isNaN(node)) {
+ this.iframe.zIndex = node;
+ }
+ },
+
+ show: function(node /* or coords */) {
+ if(!this.ie || !this.enabled) { return; }
+
+ this.size(node);
+ this.iframe.style.display = "block";
+ },
+
+ hide: function() {
+ if(!this.ie) { return; }
+ var s = this.iframe.style;
+ s.display = "none";
+ s.width = s.height = "1px";
+ },
+
+ remove: function() {
+ dojo.dom.removeNode(this.iframe);
+ }
+});
Added: incubator/webwork2/action/src/main/resources/org/apache/struts/action2/static/dojo/src/iCalendar.js
URL: http://svn.apache.org/viewcvs/incubator/webwork2/action/src/main/resources/org/apache/struts/action2/static/dojo/src/iCalendar.js?rev=393978&view=auto
==============================================================================
--- incubator/webwork2/action/src/main/resources/org/apache/struts/action2/static/dojo/src/iCalendar.js (added)
+++ incubator/webwork2/action/src/main/resources/org/apache/struts/action2/static/dojo/src/iCalendar.js Thu Apr 13 16:46:55 2006
@@ -0,0 +1,264 @@
+/*
+ Copyright (c) 2004-2005, The Dojo Foundation
+ All Rights Reserved.
+
+ Licensed under the Academic Free License version 2.1 or above OR the
+ modified BSD license. For more information on Dojo licensing, see:
+
+ http://dojotoolkit.org/community/licensing.shtml
+*/
+
+dojo.provide("dojo.iCalendar");
+dojo.provide("dojo.iCalendar.Component");
+dojo.provide("dojo.iCalendar.Property");
+dojo.require("dojo.text.textDirectory");
+dojo.require("dojo.date");
+// iCalendar support adapted from Paul Sowden's iCalendar work
+
+dojo.iCalendar = function (/* string */calbody) {
+ // summary
+ // Main iCalendar Object.
+ // In actuality it is a VCALENDAR component.
+
+ // ugly ugly way to inherit
+ for (prop in dojo.iCalendar.Component.prototype) {
+ this[prop] = dojo.iCalendar.Component.prototype[prop];
+ }
+
+ dojo.iCalendar.Component.call(this, "VCALENDAR", calbody);
+}
+
+dojo.lang.extend(dojo.iCalendar, {
+ getEvents: function (/* string */ startDate, /* string */ endDate) {
+ // summary
+ // retrieve an array of events that fall between startDate and endDate
+
+ var evts = [];
+
+ if (dojo.lang.isString(startDate)) {
+ var start = dojo.date.fromIso8601(startDate);
+ } else {
+ start = startDate;
+ }
+
+ if (dojo.lang.isString(endDate)) {
+ var end = dojo.date.fromIso8601(endDate);
+ } else {
+ end = endDate;
+ }
+
+ //dojo.debug("getting events between " + start+ " and " + end);
+ //dojo.debug("Total events to search: " + this.components.length.toString());
+ for (var x=0; x<this.components.length; x++) {
+ if (this.components[x].name == "VEVENT") {
+ evtStart = dojo.date.fromIso8601(this.components[x].dtstart.value);
+ evtEnd= dojo.date.fromIso8601(this.components[x].dtend.value);
+
+ if (((evtStart >= start) && (evtStart <= end)) || ((evtStart <= end) && (evtEnd >= start))) {
+ //dojo.debug("Outside of range: " + evtStart + " " + evtEnd);
+ evts.push(this.components[x]);
+ }
+ }
+ }
+ return /* array */ evts;
+ }
+});
+
+
+dojo.iCalendar.fromText = function (/* string */text) {
+ // summary
+ // Parse text of an iCalendar and return an array of iCalendar objects
+
+ var properties = dojo.textDirectoryTokeniser.tokenise(text);
+ var calendars = [];
+
+ for (var i = 0, begun = false; i < properties.length; i++) {
+ var prop = properties[i];
+ //dojo.debug("Property Name: " + prop.name + " = " + prop.value);
+ if (!begun) {
+ if (prop.name == 'BEGIN' && prop.value == 'VCALENDAR') {
+ begun = true;
+ var calbody = [];
+ }
+ } else if (prop.name == 'END' && prop.value == 'VCALENDAR') {
+ calendars.push(new dojo.iCalendar(calbody));
+ begun = false;
+ } else {
+ calbody.push(prop);
+ }
+ }
+ return /* array */calendars;
+}
+
+dojo.iCalendar.Component = function (/* string */ name, /* string */ body) {
+ // summary
+ // A component is the basic container of all this stuff. A VCALENDAR is a component that
+ // holds VEVENT Componenets for example. A particular component is made up of its own
+ // properties as well as other components that it holds.
+
+ this.name = name;
+ this.properties = [];
+ this.components = [];
+
+ for (var i = 0, context = ''; i < body.length; i++) {
+ if (context == '') {
+ if (body[i].name == 'BEGIN') {
+ context = body[i].value;
+ var childprops = [];
+ } else {
+ this.addProperty(new dojo.iCalendar.Property(body[i]));
+ }
+ } else if (body[i].name == 'END' && body[i].value == context) {
+ this.addComponent(new dojo.iCalendar.Component(context, childprops));
+ context = '';
+ } else {
+ childprops.push(body[i]);
+ }
+ }
+}
+
+dojo.lang.extend(dojo.iCalendar.Component, {
+
+ addProperty: function (prop) {
+ // summary
+ // push a nuew propertie onto a component.
+ this.properties.push(prop);
+ this[prop.name.toLowerCase()] = prop;
+ },
+
+ addComponent: function (prop) {
+ // summary
+ // add a component to this components list of children.
+ this.components.push(prop);
+ },
+
+
+ toString: function () {
+ // summary
+ // output a string representation of this component.
+ return "[iCalendar.Component; " + this.name + ", " + this.properties.length +
+ " properties, " + this.components.length + " components]";
+ }
+});
+
+dojo.iCalendar.Property = function (prop) {
+ // summary
+ // A single property of a component.
+
+ // unpack the values
+ this.name = prop.name;
+ this.group = prop.group;
+ this.params = prop.params;
+ this.value = prop.value;
+}
+
+dojo.lang.extend(dojo.iCalendar.Property, {
+ toString: function () {
+ // summary
+ // output a string reprensentation of this component.
+ return "[iCalenday.Property; " + this.name + ": " + this.value + "]";
+ }
+});
+
+/*
+ * Here is a whole load of stuff that could go towards making this
+ * class validating, but right now I'm not caring
+ */
+
+/*
+
+
+dojo.iCalendar.VEVENT = function () {}
+
+dojo.iCalendar.VEVENT.prototype.addProperty = function (prop) {
+
+}
+
+dojo.iCalendar.VTODO = function () {}
+dojo.iCalendar.VJOURNAL = function () {}
+dojo.iCalendar.VFREEBUSY = function () {}
+dojo.iCalendar.VTIMEZONE = function () {}
+
+var _ = function (n, oc, req) {
+ return {name: n, required: (req) ? true : false,
+ occurance: (oc == '*' || !oc) ? -1 : oc}
+}
+
+var VEVENT = [
+ // these can occur once only
+ _("class", 1), _("created", 1), _("description", 1), _("dtstart", 1),
+ _("geo", 1), _("last-mod", 1), _("location", 1), _("organizer", 1),
+ _("priority", 1), _("dtstamp", 1), _("seq", 1), _("status", 1),
+ _("summary", 1), _("transp", 1), _("uid", 1), _("url", 1), _("recurid", 1),
+ // these two are exclusive
+ [_("dtend", 1), _("duration", 1)],
+ // these can occur many times over
+ _("attach"), _("attendee"), _("categories"), _("comment"), _("contact"),
+ _("exdate"), _("exrule"), _("rstatus"), _("related"), _("resources"),
+ _("rdate"), _("rrule")
+]
+
+
+var VTODO = [
+ // these can occur once only
+ _("class", 1), _("completed", 1), _("created", 1), _("description", 1),
+ _("dtstart", 1), _("geo", 1), _("last-mod", 1), _("location", 1),
+ _("organizer", 1), _("percent", 1), _("priority", 1), _("dtstamp", 1),
+ _("seq", 1), _("status", 1), _("summary", 1), _("uid", 1), _("url", 1),
+ _("recurid", 1),
+ // these two are exclusive
+ [_("due", 1), _("duration", 1)],
+ // these can occur many times over
+ _("attach"), _("attendee"), _("categories"), _("comment"), _("contact"),
+ _("exdate"), _("exrule"), _("rstatus"), _("related"), _("resources"),
+ _("rdate"), _("rrule")
+]
+
+var VJOURNAL = [
+ // these can occur once only
+ _("class", 1), _("created", 1), _("description", 1), _("dtstart", 1),
+ _("last-mod", 1), _("organizer", 1), _("dtstamp", 1), _("seq", 1),
+ _("status", 1), _("summary", 1), _("uid", 1), _("url", 1), _("recurid", 1),
+ // these can occur many times over
+ _("attach"), _("attendee"), _("categories"), _("comment"), _("contact"),
+ _("exdate"), _("exrule"), _("related"), _("rstatus"), _("rdate"), _("rrule")
+]
+
+var VFREEBUSY = [
+ // these can occur once only
+ _("contact"), _("dtstart", 1), _("dtend"), _("duration"),
+ _("organizer", 1), _("dtstamp", 1), _("uid", 1), _("url", 1),
+ // these can occur many times over
+ _("attendee"), _("comment"), _("freebusy"), _("rstatus")
+]
+
+var VTIMEZONE = [
+ _("tzid", 1, true), _("last-mod", 1), _("tzurl", 1)
+
+ // one of 'standardc' or 'daylightc' must occur
+ // and each may occur more than once.
+]
+
+var STANDARD = [
+ _("dtstart", 1, true), _("tzoffsett", 1, true), _("tzoffsetfrom", 1, true),
+ _("comment"), _("rdate"), _("rrule"), _("tzname")];
+var daylight = standard;
+
+var VALARM = [
+
+[_("action", 1, true), _("trigger", 1, true), [_("duration", 1), _("repeat", 1)],
+_("attach", 1)];
+
+[_("action", 1, true), _("description", 1, true), _("trigger", 1, true),
+[_("duration", 1), _("repeat", 1)]];
+
+[_("action", 1, true), _("description", 1, true), _("trigger", 1, true),
+_("summary", 1, true), _("attendee", "*", true),
+[_("duration", 1), _("repeat", 1)],
+_("attach", 1)];
+
+[_("action", 1, true), _("attach", 1, true), _("trigger", 1, true),
+[_("duration", 1), _("repeat", 1)],
+_("description", 1)];
+
+]*/
Added: incubator/webwork2/action/src/main/resources/org/apache/struts/action2/static/dojo/src/io.js
URL: http://svn.apache.org/viewcvs/incubator/webwork2/action/src/main/resources/org/apache/struts/action2/static/dojo/src/io.js?rev=393978&view=auto
==============================================================================
--- incubator/webwork2/action/src/main/resources/org/apache/struts/action2/static/dojo/src/io.js (added)
+++ incubator/webwork2/action/src/main/resources/org/apache/struts/action2/static/dojo/src/io.js Thu Apr 13 16:46:55 2006
@@ -0,0 +1,317 @@
+/*
+ Copyright (c) 2004-2005, The Dojo Foundation
+ All Rights Reserved.
+
+ Licensed under the Academic Free License version 2.1 or above OR the
+ modified BSD license. For more information on Dojo licensing, see:
+
+ http://dojotoolkit.org/community/licensing.shtml
+*/
+
+dojo.provide("dojo.io.IO");
+dojo.require("dojo.string");
+
+/******************************************************************************
+ * Notes about dojo.io design:
+ *
+ * The dojo.io.* package has the unenviable task of making a lot of different
+ * types of I/O feel natural, despite a universal lack of good (or even
+ * reasonable!) I/O capability in the host environment. So lets pin this down
+ * a little bit further.
+ *
+ * Rhino:
+ * perhaps the best situation anywhere. Access to Java classes allows you
+ * to do anything one might want in terms of I/O, both synchronously and
+ * async. Can open TCP sockets and perform low-latency client/server
+ * interactions. HTTP transport is available through Java HTTP client and
+ * server classes. Wish it were always this easy.
+ *
+ * xpcshell:
+ * XPCOM for I/O. A cluster-fuck to be sure.
+ *
+ * spidermonkey:
+ * S.O.L.
+ *
+ * Browsers:
+ * Browsers generally do not provide any useable filesystem access. We are
+ * therefore limited to HTTP for moving information to and from Dojo
+ * instances living in a browser.
+ *
+ * XMLHTTP:
+ * Sync or async, allows reading of arbitrary text files (including
+ * JS, which can then be eval()'d), writing requires server
+ * cooperation and is limited to HTTP mechanisms (POST and GET).
+ *
+ * <iframe> hacks:
+ * iframe document hacks allow browsers to communicate asynchronously
+ * with a server via HTTP POST and GET operations. With significant
+ * effort and server cooperation, low-latency data transit between
+ * client and server can be acheived via iframe mechanisms (repubsub).
+ *
+ * SVG:
+ * Adobe's SVG viewer implements helpful primitives for XML-based
+ * requests, but receipt of arbitrary text data seems unlikely w/o
+ * <![CDATA[]]> sections.
+ *
+ *
+ * A discussion between Dylan, Mark, Tom, and Alex helped to lay down a lot
+ * the IO API interface. A transcript of it can be found at:
+ * http://dojotoolkit.org/viewcvs/viewcvs.py/documents/irc/irc_io_api_log.txt?rev=307&view=auto
+ *
+ * Also referenced in the design of the API was the DOM 3 L&S spec:
+ * http://www.w3.org/TR/2004/REC-DOM-Level-3-LS-20040407/load-save.html
+ ******************************************************************************/
+
+// a map of the available transport options. Transports should add themselves
+// by calling add(name)
+dojo.io.transports = [];
+dojo.io.hdlrFuncNames = [ "load", "error" ]; // we're omitting a progress() event for now
+
+dojo.io.Request = function(url, mimetype, transport, changeUrl){
+ if((arguments.length == 1)&&(arguments[0].constructor == Object)){
+ this.fromKwArgs(arguments[0]);
+ }else{
+ this.url = url;
+ if(mimetype){ this.mimetype = mimetype; }
+ if(transport){ this.transport = transport; }
+ if(arguments.length >= 4){ this.changeUrl = changeUrl; }
+ }
+}
+
+dojo.lang.extend(dojo.io.Request, {
+
+ /** The URL to hit */
+ url: "",
+
+ /** The mime type used to interrpret the response body */
+ mimetype: "text/plain",
+
+ /** The HTTP method to use */
+ method: "GET",
+
+ /** An Object containing key-value pairs to be included with the request */
+ content: undefined, // Object
+
+ /** The transport medium to use */
+ transport: undefined, // String
+
+ /** If defined the URL of the page is physically changed */
+ changeUrl: undefined, // String
+
+ /** A form node to use in the request */
+ formNode: undefined, // HTMLFormElement
+
+ /** Whether the request should be made synchronously */
+ sync: false,
+
+ bindSuccess: false,
+
+ /** Cache/look for the request in the cache before attempting to request?
+ * NOTE: this isn't a browser cache, this is internal and would only cache in-page
+ */
+ useCache: false,
+
+ /** Prevent the browser from caching this by adding a query string argument to the URL */
+ preventCache: false,
+
+ // events stuff
+ load: function(type, data, evt){ },
+ error: function(type, error){ },
+ handle: function(){ },
+
+ // the abort method needs to be filled in by the transport that accepts the
+ // bind() request
+ abort: function(){ },
+
+ // backButton: function(){ },
+ // forwardButton: function(){ },
+
+ fromKwArgs: function(kwArgs){
+ // normalize args
+ if(kwArgs["url"]){ kwArgs.url = kwArgs.url.toString(); }
+ if(!kwArgs["method"] && kwArgs["formNode"] && kwArgs["formNode"].method) {
+ kwArgs.method = kwArgs["formNode"].method;
+ }
+
+ // backwards compatibility
+ if(!kwArgs["handle"] && kwArgs["handler"]){ kwArgs.handle = kwArgs.handler; }
+ if(!kwArgs["load"] && kwArgs["loaded"]){ kwArgs.load = kwArgs.loaded; }
+ if(!kwArgs["changeUrl"] && kwArgs["changeURL"]) { kwArgs.changeUrl = kwArgs.changeURL; }
+
+ // encoding fun!
+ kwArgs.encoding = dojo.lang.firstValued(kwArgs["encoding"], djConfig["bindEncoding"], "");
+
+ kwArgs.sendTransport = dojo.lang.firstValued(kwArgs["sendTransport"], djConfig["ioSendTransport"], true);
+
+ var isFunction = dojo.lang.isFunction;
+ for(var x=0; x<dojo.io.hdlrFuncNames.length; x++){
+ var fn = dojo.io.hdlrFuncNames[x];
+ if(isFunction(kwArgs[fn])){ continue; }
+ if(isFunction(kwArgs["handle"])){
+ kwArgs[fn] = kwArgs.handle;
+ }
+ // handler is aliased above, shouldn't need this check
+ /* else if(dojo.lang.isObject(kwArgs.handler)){
+ if(isFunction(kwArgs.handler[fn])){
+ kwArgs[fn] = kwArgs.handler[fn]||kwArgs.handler["handle"]||function(){};
+ }
+ }*/
+ }
+ dojo.lang.mixin(this, kwArgs);
+ }
+
+});
+
+dojo.io.Error = function(msg, type, num){
+ this.message = msg;
+ this.type = type || "unknown"; // must be one of "io", "parse", "unknown"
+ this.number = num || 0; // per-substrate error number, not normalized
+}
+
+dojo.io.transports.addTransport = function(name){
+ this.push(name);
+ // FIXME: do we need to handle things that aren't direct children of the
+ // dojo.io namespace? (say, dojo.io.foo.fooTransport?)
+ this[name] = dojo.io[name];
+}
+
+// binding interface, the various implementations register their capabilities
+// and the bind() method dispatches
+dojo.io.bind = function(request){
+ // if the request asks for a particular implementation, use it
+ if(!(request instanceof dojo.io.Request)){
+ try{
+ request = new dojo.io.Request(request);
+ }catch(e){ dojo.debug(e); }
+ }
+ var tsName = "";
+ if(request["transport"]){
+ tsName = request["transport"];
+ // FIXME: it would be good to call the error handler, although we'd
+ // need to use setTimeout or similar to accomplish this and we can't
+ // garuntee that this facility is available.
+ if(!this[tsName]){ return request; }
+ }else{
+ // otherwise we do our best to auto-detect what available transports
+ // will handle
+ for(var x=0; x<dojo.io.transports.length; x++){
+ var tmp = dojo.io.transports[x];
+ if((this[tmp])&&(this[tmp].canHandle(request))){
+ tsName = tmp;
+ }
+ }
+ if(tsName == ""){ return request; }
+ }
+ this[tsName].bind(request);
+ request.bindSuccess = true;
+ return request;
+}
+
+dojo.io.queueBind = function(request){
+ if(!(request instanceof dojo.io.Request)){
+ try{
+ request = new dojo.io.Request(request);
+ }catch(e){ dojo.debug(e); }
+ }
+
+ // make sure we get called if/when we get a response
+ var oldLoad = request.load;
+ request.load = function(){
+ dojo.io._queueBindInFlight = false;
+ var ret = oldLoad.apply(this, arguments);
+ dojo.io._dispatchNextQueueBind();
+ return ret;
+ }
+
+ var oldErr = request.error;
+ request.error = function(){
+ dojo.io._queueBindInFlight = false;
+ var ret = oldErr.apply(this, arguments);
+ dojo.io._dispatchNextQueueBind();
+ return ret;
+ }
+
+ dojo.io._bindQueue.push(request);
+ dojo.io._dispatchNextQueueBind();
+ return request;
+}
+
+dojo.io._dispatchNextQueueBind = function(){
+ if(!dojo.io._queueBindInFlight){
+ dojo.io._queueBindInFlight = true;
+ dojo.io.bind(dojo.io._bindQueue.shift());
+ }
+}
+dojo.io._bindQueue = [];
+dojo.io._queueBindInFlight = false;
+
+dojo.io.argsFromMap = function(map, encoding){
+ var control = new Object();
+ var mapStr = "";
+ var enc = /utf/i.test(encoding||"") ? encodeURIComponent : dojo.string.encodeAscii;
+ for(var x in map){
+ if(!control[x]){
+ mapStr+= enc(x)+"="+enc(map[x])+"&";
+ }
+ }
+
+ return mapStr;
+}
+
+/*
+dojo.io.sampleTranport = new function(){
+ this.canHandle = function(kwArgs){
+ // canHandle just tells dojo.io.bind() if this is a good transport to
+ // use for the particular type of request.
+ if(
+ (
+ (kwArgs["mimetype"] == "text/plain") ||
+ (kwArgs["mimetype"] == "text/html") ||
+ (kwArgs["mimetype"] == "text/javascript")
+ )&&(
+ (kwArgs["method"] == "get") ||
+ ( (kwArgs["method"] == "post") && (!kwArgs["formNode"]) )
+ )
+ ){
+ return true;
+ }
+
+ return false;
+ }
+
+ this.bind = function(kwArgs){
+ var hdlrObj = {};
+
+ // set up a handler object
+ for(var x=0; x<dojo.io.hdlrFuncNames.length; x++){
+ var fn = dojo.io.hdlrFuncNames[x];
+ if(typeof kwArgs.handler == "object"){
+ if(typeof kwArgs.handler[fn] == "function"){
+ hdlrObj[fn] = kwArgs.handler[fn]||kwArgs.handler["handle"];
+ }
+ }else if(typeof kwArgs[fn] == "function"){
+ hdlrObj[fn] = kwArgs[fn];
+ }else{
+ hdlrObj[fn] = kwArgs["handle"]||function(){};
+ }
+ }
+
+ // build a handler function that calls back to the handler obj
+ var hdlrFunc = function(evt){
+ if(evt.type == "onload"){
+ hdlrObj.load("load", evt.data, evt);
+ }else if(evt.type == "onerr"){
+ var errObj = new dojo.io.Error("sampleTransport Error: "+evt.msg);
+ hdlrObj.error("error", errObj);
+ }
+ }
+
+ // the sample transport would attach the hdlrFunc() when sending the
+ // request down the pipe at this point
+ var tgtURL = kwArgs.url+"?"+dojo.io.argsFromMap(kwArgs.content);
+ // sampleTransport.sendRequest(tgtURL, hdlrFunc);
+ }
+
+ dojo.io.transports.addTransport("sampleTranport");
+}
+*/
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
For additional commands, e-mail: dev-help@struts.apache.org