From: <rm...@us...> - 2010-04-28 01:52:16
|
Revision: 10811 http://wonder.svn.sourceforge.net/wonder/?rev=10811&view=rev Author: rmendis Date: 2010-04-28 01:52:08 +0000 (Wed, 28 Apr 2010) Log Message: ----------- Importing framework for jQuery support in WOnder Added Paths: ----------- trunk/Wonder/Frameworks/Ajax/ERJQuery/.classpath trunk/Wonder/Frameworks/Ajax/ERJQuery/.project trunk/Wonder/Frameworks/Ajax/ERJQuery/.settings/ trunk/Wonder/Frameworks/Ajax/ERJQuery/.settings/org.eclipse.core.resources.prefs trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/ trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/AjaxUploadButton.api trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/AjaxUploadButton.wo/ trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/AjaxUploadButton.wo/AjaxUploadButton.html trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/AjaxUploadButton.wo/AjaxUploadButton.wod trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/AjaxUploadButton.wo/AjaxUploadButton.woo trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/AjaxUploadContainer.api trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/AjaxUploadContainer.wo/ trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/AjaxUploadContainer.wo/AjaxUploadContainer.html trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/AjaxUploadContainer.wo/AjaxUploadContainer.wod trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/AjaxUploadContainer.wo/AjaxUploadContainer.woo trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/WXGenericContainer.api trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/WXGenericContainer.wo/ trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/WXGenericContainer.wo/WXGenericContainer.html trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/WXGenericContainer.wo/WXGenericContainer.wod trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/WXGenericContainer.wo/WXGenericContainer.woo trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/jQueryGetLink.api trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/jQueryGetLink.wo/ trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/jQueryGetLink.wo/jQueryGetLink.html trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/jQueryGetLink.wo/jQueryGetLink.wod trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/jQueryGetLink.wo/jQueryGetLink.woo trunk/Wonder/Frameworks/Ajax/ERJQuery/Libraries/ trunk/Wonder/Frameworks/Ajax/ERJQuery/Resources/ trunk/Wonder/Frameworks/Ajax/ERJQuery/Resources/Properties trunk/Wonder/Frameworks/Ajax/ERJQuery/Sources/ trunk/Wonder/Frameworks/Ajax/ERJQuery/Sources/er/ trunk/Wonder/Frameworks/Ajax/ERJQuery/Sources/er/jquery/ trunk/Wonder/Frameworks/Ajax/ERJQuery/Sources/er/jquery/jQueryGet.java trunk/Wonder/Frameworks/Ajax/ERJQuery/Sources/er/jquery/jQueryGetLink.java trunk/Wonder/Frameworks/Ajax/ERJQuery/Sources/er/jquery/support/ trunk/Wonder/Frameworks/Ajax/ERJQuery/Sources/er/jquery/support/WXGenericContainer.java trunk/Wonder/Frameworks/Ajax/ERJQuery/Sources/er/jquery/widgets/ trunk/Wonder/Frameworks/Ajax/ERJQuery/Sources/er/jquery/widgets/AjaxUpload.java trunk/Wonder/Frameworks/Ajax/ERJQuery/Sources/er/jquery/widgets/AjaxUploadButton.java trunk/Wonder/Frameworks/Ajax/ERJQuery/Sources/er/jquery/widgets/AjaxUploadContainer.java trunk/Wonder/Frameworks/Ajax/ERJQuery/WebServerResources/ trunk/Wonder/Frameworks/Ajax/ERJQuery/WebServerResources/ajaxupload.js trunk/Wonder/Frameworks/Ajax/ERJQuery/WebServerResources/jquery-1.4.js trunk/Wonder/Frameworks/Ajax/ERJQuery/build.properties trunk/Wonder/Frameworks/Ajax/ERJQuery/build.xml trunk/Wonder/Frameworks/Ajax/ERJQuery/pom.xml trunk/Wonder/Frameworks/Ajax/ERJQuery/woproject/ trunk/Wonder/Frameworks/Ajax/ERJQuery/woproject/classes.exclude.patternset trunk/Wonder/Frameworks/Ajax/ERJQuery/woproject/classes.include.patternset trunk/Wonder/Frameworks/Ajax/ERJQuery/woproject/resources.exclude.patternset trunk/Wonder/Frameworks/Ajax/ERJQuery/woproject/resources.include.patternset trunk/Wonder/Frameworks/Ajax/ERJQuery/woproject/wsresources.exclude.patternset trunk/Wonder/Frameworks/Ajax/ERJQuery/woproject/wsresources.include.patternset Added: trunk/Wonder/Frameworks/Ajax/ERJQuery/.classpath =================================================================== --- trunk/Wonder/Frameworks/Ajax/ERJQuery/.classpath (rev 0) +++ trunk/Wonder/Frameworks/Ajax/ERJQuery/.classpath 2010-04-28 01:52:08 UTC (rev 10811) @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<classpath> + <classpathentry kind="src" path="Sources"/> + <classpathentry kind="con" path="WOFramework/ERExtensions"/> + <classpathentry kind="con" path="WOFramework/JavaEOControl"/> + <classpathentry kind="con" path="WOFramework/JavaFoundation"/> + <classpathentry kind="con" path="WOFramework/JavaWebObjects"/> + <classpathentry kind="con" path="WOFramework/JavaXML"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> + <classpathentry kind="output" path="bin"/> +</classpath> Property changes on: trunk/Wonder/Frameworks/Ajax/ERJQuery/.classpath ___________________________________________________________________ Added: svn:mime-type + text/plain Added: trunk/Wonder/Frameworks/Ajax/ERJQuery/.project =================================================================== --- trunk/Wonder/Frameworks/Ajax/ERJQuery/.project (rev 0) +++ trunk/Wonder/Frameworks/Ajax/ERJQuery/.project 2010-04-28 01:52:08 UTC (rev 10811) @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> +<projectDescription> + <name>ERJQuery</name> + <comment></comment> + <projects> + </projects> + <buildSpec> + <buildCommand> + <name>org.eclipse.jdt.core.javabuilder</name> + <arguments> + </arguments> + </buildCommand> + <buildCommand> + <name>org.objectstyle.wolips.incrementalbuilder</name> + <arguments> + </arguments> + </buildCommand> + </buildSpec> + <natures> + <nature>org.eclipse.jdt.core.javanature</nature> + <nature>org.objectstyle.wolips.incrementalframeworknature</nature> + </natures> +</projectDescription> Property changes on: trunk/Wonder/Frameworks/Ajax/ERJQuery/.project ___________________________________________________________________ Added: svn:mime-type + text/plain Added: trunk/Wonder/Frameworks/Ajax/ERJQuery/.settings/org.eclipse.core.resources.prefs =================================================================== --- trunk/Wonder/Frameworks/Ajax/ERJQuery/.settings/org.eclipse.core.resources.prefs (rev 0) +++ trunk/Wonder/Frameworks/Ajax/ERJQuery/.settings/org.eclipse.core.resources.prefs 2010-04-28 01:52:08 UTC (rev 10811) @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding//Components=UTF-8 Property changes on: trunk/Wonder/Frameworks/Ajax/ERJQuery/.settings/org.eclipse.core.resources.prefs ___________________________________________________________________ Added: svn:mime-type + text/plain Added: trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/AjaxUploadButton.api =================================================================== --- trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/AjaxUploadButton.api (rev 0) +++ trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/AjaxUploadButton.api 2010-04-28 01:52:08 UTC (rev 10811) @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes"?> +<wodefinitions> + <wo wocomponentcontent="false" class="AjaxUploadButton.java"> + + </wo> +</wodefinitions> \ No newline at end of file Property changes on: trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/AjaxUploadButton.api ___________________________________________________________________ Added: svn:mime-type + text/plain Added: trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/AjaxUploadButton.wo/AjaxUploadButton.html =================================================================== --- trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/AjaxUploadButton.wo/AjaxUploadButton.html (rev 0) +++ trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/AjaxUploadButton.wo/AjaxUploadButton.html 2010-04-28 01:52:08 UTC (rev 10811) @@ -0,0 +1,4 @@ +<webobject name = "FileInput" /> +<script type="text/javascript"> +<webobject name = "String" /> +</script> \ No newline at end of file Property changes on: trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/AjaxUploadButton.wo/AjaxUploadButton.html ___________________________________________________________________ Added: svn:mime-type + text/plain Added: trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/AjaxUploadButton.wo/AjaxUploadButton.wod =================================================================== --- trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/AjaxUploadButton.wo/AjaxUploadButton.wod (rev 0) +++ trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/AjaxUploadButton.wo/AjaxUploadButton.wod 2010-04-28 01:52:08 UTC (rev 10811) @@ -0,0 +1,10 @@ +FileInput: WOGenericElement { + elementName = "input"; + type = "file"; + id = id; + name = uploadName; +} + +String: WOString { + value = script; +} Property changes on: trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/AjaxUploadButton.wo/AjaxUploadButton.wod ___________________________________________________________________ Added: svn:mime-type + text/plain Added: trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/AjaxUploadButton.wo/AjaxUploadButton.woo =================================================================== --- trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/AjaxUploadButton.wo/AjaxUploadButton.woo (rev 0) +++ trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/AjaxUploadButton.wo/AjaxUploadButton.woo 2010-04-28 01:52:08 UTC (rev 10811) @@ -0,0 +1,4 @@ +{ + "WebObjects Release" = "WebObjects 5.0"; + encoding = "UTF-8"; +} \ No newline at end of file Property changes on: trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/AjaxUploadButton.wo/AjaxUploadButton.woo ___________________________________________________________________ Added: svn:mime-type + text/plain Added: trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/AjaxUploadContainer.api =================================================================== --- trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/AjaxUploadContainer.api (rev 0) +++ trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/AjaxUploadContainer.api 2010-04-28 01:52:08 UTC (rev 10811) @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="UTF-8"?> +<wodefinitions> + <wo class="AjaxUploadContainer.java" wocomponentcontent="true"> + + <binding name="elementName"/> + </wo> +</wodefinitions> Property changes on: trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/AjaxUploadContainer.api ___________________________________________________________________ Added: svn:mime-type + text/plain Added: trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/AjaxUploadContainer.wo/AjaxUploadContainer.html =================================================================== --- trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/AjaxUploadContainer.wo/AjaxUploadContainer.html (rev 0) +++ trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/AjaxUploadContainer.wo/AjaxUploadContainer.html 2010-04-28 01:52:08 UTC (rev 10811) @@ -0,0 +1,2 @@ +<webobject name = "Container"><webobject name = "Content"></webobject></webobject> +<script type="text/javascript"><webobject name = "Script" /></script> Property changes on: trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/AjaxUploadContainer.wo/AjaxUploadContainer.html ___________________________________________________________________ Added: svn:mime-type + text/plain Added: trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/AjaxUploadContainer.wo/AjaxUploadContainer.wod =================================================================== --- trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/AjaxUploadContainer.wo/AjaxUploadContainer.wod (rev 0) +++ trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/AjaxUploadContainer.wo/AjaxUploadContainer.wod 2010-04-28 01:52:08 UTC (rev 10811) @@ -0,0 +1,11 @@ +Container: WOGenericContainer { + elementName = elementName; + id = id; +} + +Content: WOComponentContent { +} + +Script: WOString { + value = script; +} Property changes on: trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/AjaxUploadContainer.wo/AjaxUploadContainer.wod ___________________________________________________________________ Added: svn:mime-type + text/plain Added: trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/AjaxUploadContainer.wo/AjaxUploadContainer.woo =================================================================== --- trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/AjaxUploadContainer.wo/AjaxUploadContainer.woo (rev 0) +++ trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/AjaxUploadContainer.wo/AjaxUploadContainer.woo 2010-04-28 01:52:08 UTC (rev 10811) @@ -0,0 +1,4 @@ +{ + "WebObjects Release" = "WebObjects 5.0"; + encoding = "UTF-8"; +} \ No newline at end of file Property changes on: trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/AjaxUploadContainer.wo/AjaxUploadContainer.woo ___________________________________________________________________ Added: svn:mime-type + text/plain Added: trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/WXGenericContainer.api =================================================================== --- trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/WXGenericContainer.api (rev 0) +++ trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/WXGenericContainer.api 2010-04-28 01:52:08 UTC (rev 10811) @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<wodefinitions> + <wo class="WXGenericContainer.java" wocomponentcontent="false"> + + <binding name="elementName"/> + <binding defaults="Boolean" name="ajax"/> + </wo> +</wodefinitions> Property changes on: trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/WXGenericContainer.api ___________________________________________________________________ Added: svn:mime-type + text/plain Added: trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/WXGenericContainer.wo/WXGenericContainer.html =================================================================== --- trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/WXGenericContainer.wo/WXGenericContainer.html (rev 0) +++ trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/WXGenericContainer.wo/WXGenericContainer.html 2010-04-28 01:52:08 UTC (rev 10811) @@ -0,0 +1 @@ +<webobject name = "Container"><webobject name = "Content" /></webobject> \ No newline at end of file Property changes on: trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/WXGenericContainer.wo/WXGenericContainer.html ___________________________________________________________________ Added: svn:mime-type + text/plain Added: trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/WXGenericContainer.wo/WXGenericContainer.wod =================================================================== --- trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/WXGenericContainer.wo/WXGenericContainer.wod (rev 0) +++ trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/WXGenericContainer.wo/WXGenericContainer.wod 2010-04-28 01:52:08 UTC (rev 10811) @@ -0,0 +1,12 @@ +Container: WOGenericContainer { + elementName = elementName; + ref = ref; + id = id; + omitTags = omitTags; + class = ^class; + style = ^style; + invokeAction = invokeAction; +} + +Content: WOComponentContent { +} Property changes on: trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/WXGenericContainer.wo/WXGenericContainer.wod ___________________________________________________________________ Added: svn:mime-type + text/plain Added: trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/WXGenericContainer.wo/WXGenericContainer.woo =================================================================== --- trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/WXGenericContainer.wo/WXGenericContainer.woo (rev 0) +++ trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/WXGenericContainer.wo/WXGenericContainer.woo 2010-04-28 01:52:08 UTC (rev 10811) @@ -0,0 +1,4 @@ +{ + "WebObjects Release" = "WebObjects 5.0"; + encoding = "UTF-8"; +} \ No newline at end of file Property changes on: trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/WXGenericContainer.wo/WXGenericContainer.woo ___________________________________________________________________ Added: svn:mime-type + text/plain Added: trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/jQueryGetLink.api =================================================================== --- trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/jQueryGetLink.api (rev 0) +++ trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/jQueryGetLink.api 2010-04-28 01:52:08 UTC (rev 10811) @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8"?> +<wodefinitions> + <wo class="jQueryGetLink.java" wocomponentcontent="false"> + + <binding defaults="Actions" name="action"/> + <binding defaults="Direct Actions" name="directActionName"/> + <binding name="callback"/> + </wo> +</wodefinitions> Property changes on: trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/jQueryGetLink.api ___________________________________________________________________ Added: svn:mime-type + text/plain Added: trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/jQueryGetLink.wo/jQueryGetLink.html =================================================================== --- trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/jQueryGetLink.wo/jQueryGetLink.html (rev 0) +++ trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/jQueryGetLink.wo/jQueryGetLink.html 2010-04-28 01:52:08 UTC (rev 10811) @@ -0,0 +1 @@ +<webobject name = "A"><webobject name = "String" /><webobject name = "Content" /></webobject> \ No newline at end of file Property changes on: trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/jQueryGetLink.wo/jQueryGetLink.html ___________________________________________________________________ Added: svn:mime-type + text/plain Added: trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/jQueryGetLink.wo/jQueryGetLink.wod =================================================================== --- trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/jQueryGetLink.wo/jQueryGetLink.wod (rev 0) +++ trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/jQueryGetLink.wo/jQueryGetLink.wod 2010-04-28 01:52:08 UTC (rev 10811) @@ -0,0 +1,16 @@ +A: WOGenericContainer { + elementName = "a"; + href = href; + onclick = onClick; + class = ^class; + id = ^id; + style = ^style; + invokeAction = invokeAction; +} + +Content: WOComponentContent { +} + +String: WOString { + value = ^string; +} Property changes on: trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/jQueryGetLink.wo/jQueryGetLink.wod ___________________________________________________________________ Added: svn:mime-type + text/plain Added: trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/jQueryGetLink.wo/jQueryGetLink.woo =================================================================== --- trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/jQueryGetLink.wo/jQueryGetLink.woo (rev 0) +++ trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/jQueryGetLink.wo/jQueryGetLink.woo 2010-04-28 01:52:08 UTC (rev 10811) @@ -0,0 +1,4 @@ +{ + "WebObjects Release" = "WebObjects 5.0"; + encoding = "UTF-8"; +} \ No newline at end of file Property changes on: trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/jQueryGetLink.wo/jQueryGetLink.woo ___________________________________________________________________ Added: svn:mime-type + text/plain Added: trunk/Wonder/Frameworks/Ajax/ERJQuery/Resources/Properties =================================================================== Added: trunk/Wonder/Frameworks/Ajax/ERJQuery/Sources/er/jquery/jQueryGet.java =================================================================== --- trunk/Wonder/Frameworks/Ajax/ERJQuery/Sources/er/jquery/jQueryGet.java (rev 0) +++ trunk/Wonder/Frameworks/Ajax/ERJQuery/Sources/er/jquery/jQueryGet.java 2010-04-28 01:52:08 UTC (rev 10811) @@ -0,0 +1,79 @@ +package er.jquery; + +import com.webobjects.appserver.WOActionResults; +import com.webobjects.appserver.WOComponent; +import com.webobjects.appserver.WOContext; +import com.webobjects.appserver.WOResponse; + +import er.extensions.appserver.ERXResponseRewriter; +import er.extensions.foundation.ERXProperties; + +/** + * Wrapper of jQuery.get() + * @see <a href="http://api.jquery.com/jQuery.get/">jQuery.get() Reference</a> + * + * @binding action When bound the action is performed + * @binding callback Callback @see jQuery.ajax() success + * + * @property er.jquery.useUnobtrusively Support for Unobtrusive Javascript programming. (Turned on by default). + * + * @author mendis + */ +public abstract class jQueryGet extends WOComponent { + private static boolean useUnobtrusively = ERXProperties.booleanForKeyWithDefault("er.jquery.useUnobtrusively", true); + + public jQueryGet(WOContext context) { + super(context); + } + + /* + * API/Bindings + */ + public static interface Bindings { + public static final String action = "action"; + public static final String directActionName = "directActionName"; + public static final String name = "name"; + public static final String callback = "callback"; + public static final String data = "onComplete"; + public static final String dataType = "dataType"; + } + + // accessors + public WOActionResults action() { + return (WOActionResults) valueForBinding(Bindings.action); + } + + public String directActionName() { + return (String) valueForBinding(Bindings.directActionName); + } + + public String data() { + return (String) valueForBinding(Bindings.data); + } + + public String callback() { + return (String) valueForBinding(Bindings.callback); + } + + /* + * The url of the jQuery.get(). Defaults to the href + */ + protected abstract String url(); + + public String onClick() { + String onClick = "$.get(" + url(); + if (data() != null) onClick += ", " + data(); + if (callback() != null) onClick += ", " + callback(); + onClick += "); return false;"; + + return onClick; + } + + // R&R + @Override + public void appendToResponse(WOResponse response, WOContext context) { + if (!useUnobtrusively) { + ERXResponseRewriter.addScriptResourceInHead(response, context, "ERJQuery", "jquery-1.4.js"); + } super.appendToResponse(response, context); + } +} Property changes on: trunk/Wonder/Frameworks/Ajax/ERJQuery/Sources/er/jquery/jQueryGet.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: trunk/Wonder/Frameworks/Ajax/ERJQuery/Sources/er/jquery/jQueryGetLink.java =================================================================== --- trunk/Wonder/Frameworks/Ajax/ERJQuery/Sources/er/jquery/jQueryGetLink.java (rev 0) +++ trunk/Wonder/Frameworks/Ajax/ERJQuery/Sources/er/jquery/jQueryGetLink.java 2010-04-28 01:52:08 UTC (rev 10811) @@ -0,0 +1,95 @@ +package er.jquery; + +import com.webobjects.appserver.WOActionResults; +import com.webobjects.appserver.WOComponent; +import com.webobjects.appserver.WOContext; +import com.webobjects.appserver._private.WODynamicElementCreationException; +import com.webobjects.foundation.NSDictionary; + +import er.extensions.appserver.ERXWOContext; + +/** + * A jQuery.get() as a link + * @see jQueryGet + * + * @binding queryDictionary The form values used in the directAction that replaced $('container') + * @binding confirmMessage The message you wish to display in a confirm panel before executing the update + * + * @author mendis + * + * TODO: Convert to dynamic element (for DA form elements support) + */ +public class jQueryGetLink extends jQueryGet { + public jQueryGetLink(WOContext context) { + super(context); + } + + /* + * API/Bindings + */ + public static interface Bindings extends jQueryGet.Bindings { + public static final String queryDictionary = "queryDictionary"; + public static final String confirmMessage = "confirmMessage"; + } + + @Override + public boolean synchronizesVariablesWithBindings() { + return false; + } + + @Override + public boolean isStateless() { + return true; + } + + // accessors + @Override + public String onClick() { + if (hasBinding(Bindings.confirmMessage)) { + return "if (confirm('" + confirmMessage() + "')) {" + _onClick() + " } return false;"; + } else return super.onClick(); + } + + private String _onClick() { + String onClick = "$.get(" + url(); + if (data() != null) onClick += ", " + data(); + if (callback() != null) onClick += ", " + callback(); + onClick += ");"; + + return onClick; + } + + public String confirmMessage() { + return (String) valueForBinding(Bindings.confirmMessage); + } + + @Override + protected String url() { + if (hasBinding(Bindings.action) || hasBinding(Bindings.directActionName)) + return "this.href"; + else throw new WODynamicElementCreationException("Action or directActionName is a required binding"); + } + + public String href() { + if (hasBinding(Bindings.action)) { + return ERXWOContext.ajaxActionUrl(context()); + } else if (hasBinding(Bindings.directActionName)) { + NSDictionary queryDictionary = hasBinding(Bindings.queryDictionary) ? queryDictionary() : null; + return context().directActionURLForActionNamed(directActionName(), queryDictionary); + } else return "#"; + } + + public NSDictionary queryDictionary() { + return (NSDictionary) valueForBinding(Bindings.queryDictionary); + } + + // actions + public WOActionResults invokeAction() { + context()._setActionInvoked(true); + if (hasBinding(Bindings.action)) { + WOActionResults action = action(); + if (action instanceof WOComponent) ((WOComponent) action)._setIsPage(true); // cache is pageFrag cache + return action; + } else return context().page(); + } +} \ No newline at end of file Property changes on: trunk/Wonder/Frameworks/Ajax/ERJQuery/Sources/er/jquery/jQueryGetLink.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: trunk/Wonder/Frameworks/Ajax/ERJQuery/Sources/er/jquery/support/WXGenericContainer.java =================================================================== --- trunk/Wonder/Frameworks/Ajax/ERJQuery/Sources/er/jquery/support/WXGenericContainer.java (rev 0) +++ trunk/Wonder/Frameworks/Ajax/ERJQuery/Sources/er/jquery/support/WXGenericContainer.java 2010-04-28 01:52:08 UTC (rev 10811) @@ -0,0 +1,92 @@ +package er.jquery.support; + +import com.webobjects.appserver.WOActionResults; +import com.webobjects.appserver.WOComponent; +import com.webobjects.appserver.WOContext; +import com.webobjects.appserver._private.WOGenericContainer; + +import er.extensions.appserver.ERXWOContext; +import er.extensions.components.ERXComponentUtilities; +import er.extensions.foundation.ERXStringUtilities; + +/** + * An ajax version of WOGenericContainer (only no support for invokeAction and formValue(s) bindings) + * i.e support for jQuery + * + * @see WOGenericContainer + * + * @binding id + * @binding ajax If the it is an Ajax update container. The default is false + * @binding elementName Defaults to "div" + * @binding class + * + * @author mendis + * + * Note: it overloads the HTML5 ref attribute for the updateUrl. + */ +public class WXGenericContainer extends WOComponent { + public boolean _omitTags; + + public WXGenericContainer(WOContext context) { + super(context); + } + + @Override + public boolean synchronizesVariablesWithBindings() { + return false; + } + + /* + * Bindings/API of component + */ + public static interface Bindings { + public static final String elementName = "elementName"; + public static final String id = "id"; + public static final String ajax = "ajax"; + public static final String omitTags = "omitTags"; + } + + // accessors + public String elementName() { + return (_elementName() == null) ? "div" : _elementName(); + } + + private String _elementName() { + return (String) valueForBinding(Bindings.elementName); + } + + private boolean isAjax() { + return ERXComponentUtilities.booleanValueForBinding(this, Bindings.ajax, false); + } + + public String id() { + return (_id() == null) ? ERXWOContext.safeIdentifierName(context(), false) : ERXStringUtilities.safeIdentifierName(_id()); + } + + private String _id() { + return (String) valueForBinding(Bindings.id); + } + + public String ref() { + return isAjax() ? ERXWOContext.ajaxActionUrl(context()) : null; + } + + public boolean omitTags() { + return ERXComponentUtilities.booleanValueForBinding(this, Bindings.omitTags, _omitTags); + } + + // action + public WOActionResults invokeAction() { + context()._setActionInvoked(true); + _setIsPage(true); + _omitTags = true; + return this; + } + + //R&R + @Override + public void awake() { + super.awake(); + _omitTags = false; + } +} Property changes on: trunk/Wonder/Frameworks/Ajax/ERJQuery/Sources/er/jquery/support/WXGenericContainer.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: trunk/Wonder/Frameworks/Ajax/ERJQuery/Sources/er/jquery/widgets/AjaxUpload.java =================================================================== --- trunk/Wonder/Frameworks/Ajax/ERJQuery/Sources/er/jquery/widgets/AjaxUpload.java (rev 0) +++ trunk/Wonder/Frameworks/Ajax/ERJQuery/Sources/er/jquery/widgets/AjaxUpload.java 2010-04-28 01:52:08 UTC (rev 10811) @@ -0,0 +1,275 @@ +package er.jquery.widgets; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + +import com.webobjects.appserver.WOComponent; +import com.webobjects.appserver.WOContext; +import com.webobjects.appserver.WOMultipartIterator; +import com.webobjects.appserver.WORequest; +import com.webobjects.appserver.WOResponse; +import com.webobjects.appserver.WOMultipartIterator.WOFormData; +import com.webobjects.foundation.NSArray; +import com.webobjects.foundation.NSData; +import com.webobjects.foundation.NSDictionary; +import com.webobjects.foundation.NSMutableArray; + +import er.extensions.appserver.ERXResponseRewriter; +import er.extensions.appserver.ajax.ERXAjaxApplication; +import er.extensions.foundation.ERXFileUtilities; +import er.extensions.foundation.ERXProperties; +import er.extensions.foundation.ERXStringUtilities; + +/** + * Encapsulation of http://valums.com/ajax-upload/ + * @binding name @see http://valums.com/ajax-upload/ + * @binding onChange @see http://valums.com/ajax-upload/ + * @binding onSubmit @see http://valums.com/ajax-upload/ + * @binding onComplete @see http://valums.com/ajax-upload/ + * + * @property useUnobtrusively For Unobtrusive Javascript programming. Default it is ON. + * + * @author mendis + * + */ +public abstract class AjaxUpload extends WOComponent { + private static boolean useUnobtrusively = ERXProperties.booleanForKeyWithDefault("er.jquery.useUnobtrusively", true); + + public AjaxUpload(WOContext aContext) { + super(aContext); + } + + /* + * Bindings/API + */ + public static interface Bindings { + public static final String id = "id"; + public static final String name = "name"; + public static final String onChange = "onChange"; + public static final String onSubmit = "onSubmit"; + public static final String onComplete = "onComplete"; + public static final String filePath = "filePath"; + public static final String data = "data"; + public static final String mimeType = "mimeType"; + public static final String inputStream = "inputStream"; + public static final String outputStream = "outputStream"; + public static final String finalFilePath = "finalFilePath"; + public static final String streamToFilePath = "streamToFilePath"; + + } + + /* + * Headers of multipart form + */ + public static interface Headers { + public static final String filename = "filename"; + public static final String contentType = "content-type"; + public static final String name = "name"; + } + + @Override + public boolean synchronizesVariablesWithBindings() { + return false; + } + + // accessors + public String id() { + return _id() == null ? "au" + ERXStringUtilities.safeIdentifierName(elementID()) : _id(); + } + + private String elementID; + + private String elementID() { + if (elementID == null) elementID = context().elementID(); + return elementID; + } + + private String _id() { + return (String) valueForBinding(Bindings.id); + } + + private String _script() { + return "new AjaxUpload('" + id() + "', {" + options() + "});"; + } + + public String script() { + return isAjax() ? _script() : "$(document).ready(function() { " + _script() + " });"; + } + + private boolean isAjax() { + return ERXAjaxApplication.isAjaxRequest(context().request()); + } + + /* + * An array of options for Ajax.Updater + */ + protected NSArray<String> _options() { + NSMutableArray _options = new NSMutableArray("action:'" + href() + "'"); + + // add options + _options.add("name:'" + uploadName() + "'"); + if (hasBinding(Bindings.onChange)) _options.add("onChange:" + valueForBinding(Bindings.onChange)); + if (hasBinding(Bindings.onComplete)) _options.add("onComplete:" + valueForBinding(Bindings.onComplete)); + if (hasBinding(Bindings.onSubmit)) _options.add("onChange:" + valueForBinding(Bindings.onSubmit)); + + return _options.immutableClone(); + } + + public String options() { + return _options().componentsJoinedByString(", "); + } + + private String _uploadName() { + return (String) valueForBinding(Bindings.name); + } + + public String uploadName() { + return _uploadName() != null ? _uploadName() : "userfile"; // Default + } + + protected void setFilePath(String aPath) { + setValueForBinding(aPath, Bindings.filePath); + } + + protected void setData(NSData data) { + setValueForBinding(data, Bindings.data); + } + + protected void setMimeType(String aType) { + setValueForBinding(aType, Bindings.mimeType); + } + + /* + * NOTE: this is a standard WO component action url. + * The file upload won't work as an ajax request. + * + */ + private String href() { + return context().componentActionURL(); + } + + // R&R + @Override + public void appendToResponse(WOResponse response, WOContext context) { + super.appendToResponse(response, context); + + if (!useUnobtrusively) { + ERXResponseRewriter.addScriptResourceInHead(response, context, "ERJQuery", "jquery-1.4.js"); + ERXResponseRewriter.addScriptResourceInHead(response, context, "ERJQuery", "ajaxupload.js"); + } + } + + @Override + public void takeValuesFromRequest(WORequest request, WOContext context) { + super.takeValuesFromRequest(request, context); + + if (request.formValueForKey(uploadName()) != null) { + // filepath + if (hasBinding(Bindings.filePath)) { + setFilePath((String) request.formValueForKey(uploadName() + ".filename")); + } + + // file data + if (hasBinding(Bindings.data)) { + if (hasBinding(Bindings.filePath)) { + NSArray aValue = request.formValuesForKey(uploadName()); + + if (aValue != null) { + NSData data = null; + try { + data = (NSData) aValue.objectAtIndex(0); + } catch (ClassCastException e) { + throw new ClassCastException("AjaxUploadButton: Value in request was of type '" + aValue.objectAtIndex(0).getClass().getName() + "' instead of NSData. Verify that the WOForm's 'enctype' binding is set to 'multipart/form-data'"); + } + setData(data); + } + + // mimetype + if (hasBinding(Bindings.mimeType)) { + setMimeType((String) request.formValueForKey(uploadName() + ".mimetype")); + } + } + } else { + // multipart data + WOMultipartIterator multipartIterator = request.multipartIterator(); + WOFormData nextFormData = multipartIterator.nextFormData(); + NSDictionary<Object, String> contentDispositionHeaders; + do { + if (nextFormData == null) + break; + contentDispositionHeaders = nextFormData.contentDispositionHeaders(); + Object _name = contentDispositionHeaders.objectForKey(Headers.name); + if (uploadName().equals(_name)) + break; + nextFormData = multipartIterator.nextFormData(); + } while(true); + + if(nextFormData == null) + throw new IllegalStateException("AjaxUploadButton: No form data left for WOFileUpload!"); + + contentDispositionHeaders = nextFormData.contentDispositionHeaders(); + String aFileName = null; + + if(hasBinding(Bindings.filePath)) { + aFileName = (String) contentDispositionHeaders.valueForKey(Headers.filename); + setFilePath(aFileName); + } + + if (hasBinding(Bindings.mimeType)) { + setMimeType((String) contentDispositionHeaders.valueForKey(Headers.contentType)); + } + + InputStream anInputStream = nextFormData.formDataInputStream(); + if(aFileName != null && aFileName.length() > 0) { + if(hasBinding(Bindings.inputStream)) { + setValueForBinding(anInputStream, Bindings.inputStream); + } else { + String localFilePath = null; + File tempFile = null; + if (!hasBinding(Bindings.outputStream)) { + if (hasBinding(Bindings.finalFilePath)) + setValueForBinding(null, Bindings.finalFilePath); + try { + tempFile = ERXFileUtilities.writeInputStreamToTempFile(anInputStream, context.session().sessionID(), ".tmp"); + } catch (IOException e) { + throw new RuntimeException("Couldn't write input stream to temp file: " + e); + } + } else { + OutputStream anOutputStream = (OutputStream) valueForBinding(Bindings.outputStream); + try { + ERXFileUtilities.writeInputStreamToOutputStream(anInputStream, anOutputStream); + } catch (IOException e) { + throw new RuntimeException("Couldn't write input stream to output stream: " + e); + } + } + + if (hasBinding(Bindings.streamToFilePath)) { + localFilePath = (String) valueForBinding(Bindings.streamToFilePath); + try { + ERXFileUtilities.renameTo(tempFile, new File(localFilePath)); + setValueForBinding(localFilePath, Bindings.finalFilePath); + } catch (Exception e) { + setValueForBinding(tempFile.getPath(), Bindings.finalFilePath); + throw new RuntimeException("Couldn't rename temp file: " + e); + } + } + } + } else { + if (hasBinding(Bindings.inputStream)) + setValueForBinding(null, Bindings.inputStream); + if (hasBinding(Bindings.finalFilePath)) + setValueForBinding(null, Bindings.finalFilePath); + byte buffer[] = new byte[128]; + try { + while (anInputStream.read(buffer) != -1) ; + } + catch (IOException e) { + throw new RuntimeException("Error skipping empty file upload: " + e); + } + } + } + } + } +} Property changes on: trunk/Wonder/Frameworks/Ajax/ERJQuery/Sources/er/jquery/widgets/AjaxUpload.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: trunk/Wonder/Frameworks/Ajax/ERJQuery/Sources/er/jquery/widgets/AjaxUploadButton.java =================================================================== --- trunk/Wonder/Frameworks/Ajax/ERJQuery/Sources/er/jquery/widgets/AjaxUploadButton.java (rev 0) +++ trunk/Wonder/Frameworks/Ajax/ERJQuery/Sources/er/jquery/widgets/AjaxUploadButton.java 2010-04-28 01:52:08 UTC (rev 10811) @@ -0,0 +1,31 @@ +package er.jquery.widgets; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + +import com.webobjects.appserver.WOContext; +import com.webobjects.appserver.WOMultipartIterator; +import com.webobjects.appserver.WORequest; +import com.webobjects.appserver.WOMultipartIterator.WOFormData; +import com.webobjects.foundation.NSArray; +import com.webobjects.foundation.NSData; +import com.webobjects.foundation.NSDictionary; + +import er.extensions.foundation.ERXFileUtilities; + +/** + * Encapsulation of http://valums.com/ajax-upload/ implemented like WOFileUpload + * @see WOFileUpload API/binding compatible with WOFileUpload. Additionally: + * + * @author mendis + * + * @see er.prototaculous.AjaxUploadButton jQuery compatible version + */ +public class AjaxUploadButton extends AjaxUpload { + + public AjaxUploadButton(WOContext aContext) { + super(aContext); + } +} Property changes on: trunk/Wonder/Frameworks/Ajax/ERJQuery/Sources/er/jquery/widgets/AjaxUploadButton.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: trunk/Wonder/Frameworks/Ajax/ERJQuery/Sources/er/jquery/widgets/AjaxUploadContainer.java =================================================================== --- trunk/Wonder/Frameworks/Ajax/ERJQuery/Sources/er/jquery/widgets/AjaxUploadContainer.java (rev 0) +++ trunk/Wonder/Frameworks/Ajax/ERJQuery/Sources/er/jquery/widgets/AjaxUploadContainer.java 2010-04-28 01:52:08 UTC (rev 10811) @@ -0,0 +1,36 @@ +package er.jquery.widgets; + +import com.webobjects.appserver.WOActionResults; +import com.webobjects.appserver.WOContext; +import com.webobjects.appserver.WORequest; + +/** + * @see AjaxUpload + * + * @author mendis + * + * This version is for uploads not in forms. And can be any element. + * @see er.prototaculous.AjaxUploadContainer jQuery compatible version + * + */ +public class AjaxUploadContainer extends AjaxUpload { + public AjaxUploadContainer(WOContext context) { + super(context); + } + + /* + * Bindings/API + */ + public static interface Bindings extends AjaxUpload.Bindings { + public static final String elementName = "elementName"; + } + + // accessors + private String _elementName() { + return (String) valueForBinding(Bindings.elementName); + } + + public String elementName() { + return _elementName() != null ? _elementName() : "div"; + } +} \ No newline at end of file Property changes on: trunk/Wonder/Frameworks/Ajax/ERJQuery/Sources/er/jquery/widgets/AjaxUploadContainer.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: trunk/Wonder/Frameworks/Ajax/ERJQuery/WebServerResources/ajaxupload.js =================================================================== --- trunk/Wonder/Frameworks/Ajax/ERJQuery/WebServerResources/ajaxupload.js (rev 0) +++ trunk/Wonder/Frameworks/Ajax/ERJQuery/WebServerResources/ajaxupload.js 2010-04-28 01:52:08 UTC (rev 10811) @@ -0,0 +1,564 @@ +/** + * Ajax upload + * Project page - http://valums.com/ajax-upload/ + * Copyright (c) 2008 Andris Valums, http://valums.com + * Licensed under the MIT license (http://valums.com/mit-license/) + * Version 3.6 (26.06.2009) + */ + +/** + * Changes from the previous version: + * 1. Fixed minor bug where click outside the button + * would open the file browse window + * + * For the full changelog please visit: + * http://valums.com/ajax-upload-changelog/ + */ + +(function(){ + +var d = document, w = window; + +/** + * Get element by id + */ +function get(element){ + if (typeof element == "string") + element = d.getElementById(element); + return element; +} + +/** + * Attaches event to a dom element + */ +function addEvent(el, type, fn){ + if (w.addEventListener){ + el.addEventListener(type, fn, false); + } else if (w.attachEvent){ + var f = function(){ + fn.call(el, w.event); + }; + el.attachEvent('on' + type, f) + } +} + + +/** + * Creates and returns element from html chunk + */ +var toElement = function(){ + var div = d.createElement('div'); + return function(html){ + div.innerHTML = html; + var el = div.childNodes[0]; + div.removeChild(el); + return el; + } +}(); + +function hasClass(ele,cls){ + return ele.className.match(new RegExp('(\\s|^)'+cls+'(\\s|$)')); +} +function addClass(ele,cls) { + if (!hasClass(ele,cls)) ele.className += " "+cls; +} +function removeClass(ele,cls) { + var reg = new RegExp('(\\s|^)'+cls+'(\\s|$)'); + ele.className=ele.className.replace(reg,' '); +} + +// getOffset function copied from jQuery lib (http://jquery.com/) +if (document.documentElement["getBoundingClientRect"]){ + // Get Offset using getBoundingClientRect + // http://ejohn.org/blog/getboundingclientrect-is-awesome/ + var getOffset = function(el){ + var box = el.getBoundingClientRect(), + doc = el.ownerDocument, + body = doc.body, + docElem = doc.documentElement, + + // for ie + clientTop = docElem.clientTop || body.clientTop || 0, + clientLeft = docElem.clientLeft || body.clientLeft || 0, + + // In Internet Explorer 7 getBoundingClientRect property is treated as physical, + // while others are logical. Make all logical, like in IE8. + + + zoom = 1; + if (body.getBoundingClientRect) { + var bound = body.getBoundingClientRect(); + zoom = (bound.right - bound.left)/body.clientWidth; + } + if (zoom > 1){ + clientTop = 0; + clientLeft = 0; + } + var top = box.top/zoom + (window.pageYOffset || docElem && docElem.scrollTop/zoom || body.scrollTop/zoom) - clientTop, + left = box.left/zoom + (window.pageXOffset|| docElem && docElem.scrollLeft/zoom || body.scrollLeft/zoom) - clientLeft; + + return { + top: top, + left: left + }; + } + +} else { + // Get offset adding all offsets + var getOffset = function(el){ + if (w.jQuery){ + return jQuery(el).offset(); + } + + var top = 0, left = 0; + do { + top += el.offsetTop || 0; + left += el.offsetLeft || 0; + } + while (el = el.offsetParent); + + return { + left: left, + top: top + }; + } +} + +function getBox(el){ + var left, right, top, bottom; + var offset = getOffset(el); + left = offset.left; + top = offset.top; + + right = left + el.offsetWidth; + bottom = top + el.offsetHeight; + + return { + left: left, + right: right, + top: top, + bottom: bottom + }; +} + +/** + * Crossbrowser mouse coordinates + */ +function getMouseCoords(e){ + // pageX/Y is not supported in IE + // http://www.quirksmode.org/dom/w3c_cssom.html + if (!e.pageX && e.clientX){ + // In Internet Explorer 7 some properties (mouse coordinates) are treated as physical, + // while others are logical (offset). + var zoom = 1; + var body = document.body; + + if (body.getBoundingClientRect) { + var bound = body.getBoundingClientRect(); + zoom = (bound.right - bound.left)/body.clientWidth; + } + + return { + x: e.clientX / zoom + d.body.scrollLeft + d.documentElement.scrollLeft, + y: e.clientY / zoom + d.body.scrollTop + d.documentElement.scrollTop + }; + } + + return { + x: e.pageX, + y: e.pageY + }; + +} +/** + * Function generates unique id + */ +var getUID = function(){ + var id = 0; + return function(){ + return 'ValumsAjaxUpload' + id++; + } +}(); + +function fileFromPath(file){ + return file.replace(/.*(\/|\\)/, ""); +} + +function getExt(file){ + return (/[.]/.exec(file)) ? /[^.]+$/.exec(file.toLowerCase()) : ''; +} + +// Please use AjaxUpload , Ajax_upload will be removed in the next version +Ajax_upload = AjaxUpload = function(button, options){ + if (button.jquery){ + // jquery object was passed + button = button[0]; + } else if (typeof button == "string" && /^#.*/.test(button)){ + button = button.slice(1); + } + button = get(button); + + this._input = null; + this._button = button; + this._disabled = false; + this._submitting = false; + // Variable changes to true if the button was clicked + // 3 seconds ago (requred to fix Safari on Mac error) + this._justClicked = false; + this._parentDialog = d.body; + + if (window.jQuery && jQuery.ui && jQuery.ui.dialog){ + var parentDialog = jQuery(this._button).parents('.ui-dialog'); + if (parentDialog.length){ + this._parentDialog = parentDialog[0]; + } + } + + this._settings = { + // Location of the server-side upload script + action: 'upload.php', + // File upload name + name: 'userfile', + // Additional data to send + data: {}, + // Submit file as soon as it's selected + autoSubmit: true, + // The type of data that you're expecting back from the server. + // Html and xml are detected automatically. + // Only useful when you are using json data as a response. + // Set to "json" in that case. + responseType: false, + // When user selects a file, useful with autoSubmit disabled + onChange: function(file, extension){}, + // Callback to fire before file is uploaded + // You can return false to cancel upload + onSubmit: function(file, extension){}, + // Fired when file upload is completed + // WARNING! DO NOT USE "FALSE" STRING AS A RESPONSE! + onComplete: function(file, response) {} + }; + + // Merge the users options with our defaults + for (var i in options) { + this._settings[i] = options[i]; + } + + this._createInput(); + this._rerouteClicks(); +} + +// assigning methods to our class +AjaxUpload.prototype = { + setData : function(data){ + this._settings.data = data; + }, + disable : function(){ + this._disabled = true; + }, + enable : function(){ + this._disabled = false; + }, + // removes ajaxupload + destroy : function(){ + if(this._input){ + if(this._input.parentNode){ + this._input.parentNode.removeChild(this._input); + } + this._input = null; + } + }, + /** + * Creates invisible file input above the button + */ + _createInput : function(){ + var self = this; + var input = d.createElement("input"); + input.setAttribute('type', 'file'); + input.setAttribute('name', this._settings.name); + var styles = { + 'position' : 'absolute' + ,'margin': '-5px 0 0 -175px' + ,'padding': 0 + ,'width': '220px' + ,'height': '30px' + ,'fontSize': '14px' + ,'opacity': 0 + ,'cursor': 'pointer' + ,'display' : 'none' + ,'zIndex' : 2147483583 //Max zIndex supported by Opera 9.0-9.2x + // Strange, I expected 2147483647 + }; + for (var i in styles){ + input.style[i] = styles[i]; + } + + // Make sure that element opacity exists + // (IE uses filter instead) + if ( ! (input.style.opacity === "0")){ + input.style.filter = "alpha(opacity=0)"; + } + + this._parentDialog.appendChild(input); + + addEvent(input, 'change', function(){ + // get filename from input + var file = fileFromPath(this.value); + if(self._settings.onChange.call(self, file, getExt(file)) == false ){ + return; + } + // Submit form when value is changed + if (self._settings.autoSubmit){ + self.submit(); + } + }); + + // Fixing problem with Safari + // The problem is that if you leave input before the file select dialog opens + // it does not upload the file. + // As dialog opens slowly (it is a sheet dialog which takes some time to open) + // there is some time while you can leave the button. + // So we should not change display to none immediately + addEvent(input, 'click', function(){ + self.justClicked = true; + setTimeout(function(){ + // we will wait 3 seconds for dialog to open + self.justClicked = false; + }, 2500); + }); + + this._input = input; + }, + _rerouteClicks : function (){ + var self = this; + + // IE displays 'access denied' error when using this method + // other browsers just ignore click() + // addEvent(this._button, 'click', function(e){ + // self._input.click(); + // }); + + var box, dialogOffset = {top:0, left:0}, over = false; + + addEvent(self._button, 'mouseover', function(e){ + if (!self._input || over) return; + + over = true; + box = getBox(self._button); + + if (self._parentDialog != d.body){ + dialogOffset = getOffset(self._parentDialog); + } + }); + + + // We can't use mouseout on the button, + // because invisible input is over it + addEvent(document, 'mousemove', function(e){ + var input = self._input; + if (!input || !over) return; + + if (self._disabled){ + removeClass(self._button, 'hover'); + input.style.display = 'none'; + return; + } + + var c = getMouseCoords(e); + + if ((c.x >= box.left) && (c.x <= box.right) && + (c.y >= box.top) && (c.y <= box.bottom)){ + + input.style.top = c.y - dialogOffset.top + 'px'; + input.style.left = c.x - dialogOffset.left + 'px'; + input.style.display = 'block'; + addClass(self._button, 'hover'); + + } else { + // mouse left the button + over = false; + + var check = setInterval(function(){ + // if input was just clicked do not hide it + // to prevent safari bug + + if (self.justClicked){ + return; + } + + if ( !over ){ + input.style.display = 'none'; + } + + clearInterval(check); + + }, 25); + + + removeClass(self._button, 'hover'); + } + }); + + }, + /** + * Creates iframe with unique name + */ + _createIframe : function(){ + // unique name + // We cannot use getTime, because it sometimes return + // same value in safari :( + var id = getUID(); + + // Remove ie6 "This page contains both secure and nonsecure items" prompt + // http://tinyurl.com/77w9wh + var iframe = toElement('<iframe src="javascript:false;" name="' + id + '" />'); + iframe.id = id; + iframe.style.display = 'none'; + d.body.appendChild(iframe); + return iframe; + }, + /** + * Upload file without refreshing the page + */ + submit : function(){ + var self = this, settings = this._settings; + + if (this._input.value === ''){ + // there is no file + return; + } + + // get filename from input + var file = fileFromPath(this._input.value); + + // execute user event + if (! (settings.onSubmit.call(this, file, getExt(file)) == false)) { + // Create new iframe for this submission + var iframe = this._createIframe(); + + // Do not submit if user function returns false + var form = this._createForm(iframe); + form.appendChild(this._input); + + form.submit(); + + d.body.removeChild(form); + form = null; + this._input = null; + + // create new input + this._createInput(); + + var toDeleteFlag = false; + + addEvent(iframe, 'load', function(e){ + + if (// For Safari + iframe.src == "javascript:'%3Chtml%3E%3C/html%3E';" || + // For FF, IE + iframe.src == "javascript:'<html></html>';"){ + + // First time around, do not delete. + if( toDeleteFlag ){ + // Fix busy state in FF3 + setTimeout( function() { + d.body.removeChild(iframe); + }, 0); + } + return; + } + + var doc = iframe.contentDocument ? iframe.contentDocument : frames[iframe.id].document; + + // fixing Opera 9.26 + if (doc.readyState && doc.readyState != 'complete'){ + // Opera fires load event multiple times + // Even when the DOM is not ready yet + // this fix should not affect other browsers + return; + } + + // fixing Opera 9.64 + if (doc.body && doc.body.innerHTML == "false"){ + // In Opera 9.64 event was fired second time + // when body.innerHTML changed from false + // to server response approx. after 1 sec + return; + } + + var response; + + if (doc.XMLDocument){ + // response is a xml document IE property + response = doc.XMLDocument; + } else if (doc.body){ + // response is html document or plain text + response = doc.body.innerHTML; + if (settings.responseType && settings.responseType.toLowerCase() == 'json'){ + // If the document was sent as 'application/javascript' or + // 'text/javascript', then the browser wraps the text in a <pre> + // tag and performs html encoding on the contents. In this case, + // we need to pull the original text content from the text node's + // nodeValue property to retrieve the unmangled content. + // Note that IE6 only understands text/html + if (doc.body.firstChild && doc.body.firstChild.nodeName.toUpperCase() == 'PRE'){ + response = doc.body.firstChild.firstChild.nodeValue; + } + if (response) { + response = window["eval"]("(" + response + ")"); + } else { + response = {}; + } + } + } else { + // response is a xml document + var response = doc; + } + + settings.onComplete.call(self, file, response); + + // Reload blank page, so that reloading main page + // does not re-submit the post. Also, remember to + // delete the frame + toDeleteFlag = true; + + // Fix IE mixed content issue + iframe.src = "javascript:'<html></html>';"; + }); + + } else { + // clear input to allow user to select same file + // Doesn't work in IE6 + // this._input.value = ''; + d.body.removeChild(this._input); + this._input = null; + + // create new input + this._createInput(); + } + }, + /** + * Creates form, that will be submitted to iframe + */ + _createForm : function(iframe){ + var settings = this._settings; + + // method, enctype must be specified here + // because changing this attr on the fly is not allowed in IE 6/7 + var form = toElement('<form method="post" enctype="multipart/form-data"></form>'); + form.style.display = 'none'; + form.action = settings.action; + form.target = iframe.name; + d.body.appendChild(form); + + // Create hidden input element for each data key + for (var prop in settings.data){ + var el = d.createElement("input"); + el.type = 'hidden'; + el.name = prop; + el.value = settings.data[prop]; + form.appendChild(el); + } + return form; + } +}; +})(); \ No newline at end of file Added: trunk/Wonder/Frameworks/Ajax/ERJQuery/WebServerResources/jquery-1.4.js =================================================================== --- trunk/Wonder/Frameworks/Ajax/ERJQuery/WebServerResources/jquery-1.4.js (rev 0) +++ trunk/Wonder/Frameworks/Ajax/ERJQuery/WebServerResources/jquery-1.4.js 2010-04-28 01:52:08 UTC (rev 10811) @@ -0,0 +1,5999 @@ +/*! + * jQuery JavaScript Library v1.4 + * http://jquery.com/ + * + * Copyright 2010, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://docs.jquery.com/License + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2010, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Wed Jan 13 15:23:05 2010 -0500 + */ +(function( window, undefined ) { + +// Define a local copy of jQuery +var jQuery = function( selector, context ) { + // The jQuery object is actually just the init constructor 'enhanced' + return new jQuery.fn.init( selector, context ); + }, + + // Map over jQuery in case of overwrite + _jQuery = window.jQuery, + + // Map over the $ in case of overwrite + _$ = window.$, + + // Use the correct document accordingly with window argument (sandbox) + document = window.document, + + // A central reference to the root jQuery(document) + rootjQuery, + + // A simple way to check for HTML strings or ID strings + // (both of which we optimize for) + quickExpr = /^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/, + + // Is it a simple selector + isSimple = /^.[^:#\[\.,]*$/, + + // Check if a string has a non-whitespace character in it + rnotwhite = /\S/, + + // Used for trimming whitespace + rtrim = /^(\s|\u00A0)+|(\s|\u00A0)+$/g, + + // Match a standalone tag + rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/, + + // Keep a UserAgent string for use with jQuery.browser + userAgent = navigator.userAgent, + + // For matching the engine and version of the browser + browserMatch, + +... [truncated message content] |