[Checkins] SVN: z3c.xmlhttp/ Move implementation form private repos to svn.zope.org

Roger Ineichen roger at projekt01.ch
Sat Feb 16 11:02:29 EST 2008


Log message for revision 83893:
  Move implementation form private repos to svn.zope.org

Changed:
  A   z3c.xmlhttp/branches/
  A   z3c.xmlhttp/tags/
  A   z3c.xmlhttp/trunk/
  A   z3c.xmlhttp/trunk/CHANGES.txt
  A   z3c.xmlhttp/trunk/README.txt
  A   z3c.xmlhttp/trunk/bootstrap.py
  A   z3c.xmlhttp/trunk/buildout.cfg
  A   z3c.xmlhttp/trunk/setup.py
  A   z3c.xmlhttp/trunk/src/
  A   z3c.xmlhttp/trunk/src/z3c/
  A   z3c.xmlhttp/trunk/src/z3c/__init__.py
  A   z3c.xmlhttp/trunk/src/z3c/xmlhttp/
  A   z3c.xmlhttp/trunk/src/z3c/xmlhttp/SETUP.cfg
  A   z3c.xmlhttp/trunk/src/z3c/xmlhttp/__init__.py
  A   z3c.xmlhttp/trunk/src/z3c/xmlhttp/browser.py
  A   z3c.xmlhttp/trunk/src/z3c/xmlhttp/browser.zcml
  A   z3c.xmlhttp/trunk/src/z3c/xmlhttp/configure.zcml
  A   z3c.xmlhttp/trunk/src/z3c/xmlhttp/js/
  A   z3c.xmlhttp/trunk/src/z3c/xmlhttp/js/z3c.xmlhttp-0.5.0.js
  A   z3c.xmlhttp/trunk/src/z3c/xmlhttp/layer.py
  A   z3c.xmlhttp/trunk/src/z3c/xmlhttp/z3c.xmlhttp-configure.zcml

-=-
Added: z3c.xmlhttp/trunk/CHANGES.txt
===================================================================
--- z3c.xmlhttp/trunk/CHANGES.txt	                        (rev 0)
+++ z3c.xmlhttp/trunk/CHANGES.txt	2008-02-16 16:02:29 UTC (rev 83893)
@@ -0,0 +1,8 @@
+=======
+CHANGES
+=======
+
+Version 0.5.0 (unreleased)
+-------------------------
+
+- Initial Release


Property changes on: z3c.xmlhttp/trunk/CHANGES.txt
___________________________________________________________________
Name: svn:eol-style
   + native

Added: z3c.xmlhttp/trunk/README.txt
===================================================================
--- z3c.xmlhttp/trunk/README.txt	                        (rev 0)
+++ z3c.xmlhttp/trunk/README.txt	2008-02-16 16:02:29 UTC (rev 83893)
@@ -0,0 +1,3 @@
+This package provides an XMLHttpRequest implementation which is used as base
+javascript library for z3c.jsonrpcproxy. This library can be used in other 
+javascript projects if you need a XHR implementation.


Property changes on: z3c.xmlhttp/trunk/README.txt
___________________________________________________________________
Name: svn:eol-style
   + native

Added: z3c.xmlhttp/trunk/bootstrap.py
===================================================================
--- z3c.xmlhttp/trunk/bootstrap.py	                        (rev 0)
+++ z3c.xmlhttp/trunk/bootstrap.py	2008-02-16 16:02:29 UTC (rev 83893)
@@ -0,0 +1,52 @@
+##############################################################################
+#
+# Copyright (c) 2008 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""Bootstrap a buildout-based project
+
+Simply run this script in a directory containing a buildout.cfg.
+The script accepts buildout command-line options, so you can
+use the -c option to specify an alternate configuration file.
+
+$Id: bootstrap.py 75940 2007-05-24 14:45:00Z srichter $
+"""
+
+import os, shutil, sys, tempfile, urllib2
+
+tmpeggs = tempfile.mkdtemp()
+
+ez = {}
+exec urllib2.urlopen('http://peak.telecommunity.com/dist/ez_setup.py'
+                     ).read() in ez
+ez['use_setuptools'](to_dir=tmpeggs, download_delay=0)
+
+import pkg_resources
+
+cmd = 'from setuptools.command.easy_install import main; main()'
+if sys.platform == 'win32':
+    cmd = '"%s"' % cmd # work around spawn lamosity on windows
+
+ws = pkg_resources.working_set
+assert os.spawnle(
+    os.P_WAIT, sys.executable, sys.executable,
+    '-c', cmd, '-mqNxd', tmpeggs, 'zc.buildout',
+    dict(os.environ,
+         PYTHONPATH=
+         ws.find(pkg_resources.Requirement.parse('setuptools')).location
+         ),
+    ) == 0
+
+ws.add_entry(tmpeggs)
+ws.require('zc.buildout')
+import zc.buildout.buildout
+zc.buildout.buildout.main(sys.argv[1:] + ['bootstrap'])
+shutil.rmtree(tmpeggs)


Property changes on: z3c.xmlhttp/trunk/bootstrap.py
___________________________________________________________________
Name: svn:eol-style
   + native

Added: z3c.xmlhttp/trunk/buildout.cfg
===================================================================
--- z3c.xmlhttp/trunk/buildout.cfg	                        (rev 0)
+++ z3c.xmlhttp/trunk/buildout.cfg	2008-02-16 16:02:29 UTC (rev 83893)
@@ -0,0 +1,3 @@
+[buildout]
+develop = .
+parts = 
\ No newline at end of file

Added: z3c.xmlhttp/trunk/setup.py
===================================================================
--- z3c.xmlhttp/trunk/setup.py	                        (rev 0)
+++ z3c.xmlhttp/trunk/setup.py	2008-02-16 16:02:29 UTC (rev 83893)
@@ -0,0 +1,58 @@
+##############################################################################
+#
+# Copyright (c) 2007 Zope Foundation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""Setup
+
+$Id:$
+"""
+import os
+from setuptools import setup, find_packages
+
+def read(*rnames):
+    return open(os.path.join(os.path.dirname(__file__), *rnames)).read()
+
+setup (
+    name='z3c.xmlhttp',
+    version='0.5.0',
+    author = "Roger Ineichen and the Zope Community",
+    author_email = "zope3-dev at zope.org",
+    description = "XMLHttpRequest (XHR) javascript",
+    long_description=(
+        read('README.txt')
+        + '\n\n' +
+        read('CHANGES.txt')
+        ),
+    license = "ZPL 2.1",
+    keywords = "zope3 z3c xmlhttp XMLHttpRequestproxy javascript js ajax",
+    classifiers = [
+        'Development Status :: 4 - Beta',
+        'Environment :: Web Environment',
+        'Intended Audience :: Developers',
+        'License :: OSI Approved :: Zope Public License',
+        'Programming Language :: Python',
+        'Natural Language :: English',
+        'Operating System :: OS Independent',
+        'Topic :: Internet :: WWW/HTTP',
+        'Framework :: Zope3'],
+    url = 'http://cheeseshop.python.org/pypi/z3c.xmlhttp',
+    packages = find_packages('src'),
+    include_package_data = True,
+    package_dir = {'':'src'},
+    namespace_packages = ['z3c'],
+    install_requires = [
+        'setuptools',
+        'zope.publisher',
+        'zope.viewlet',
+        ],
+    zip_safe = False,
+)
\ No newline at end of file


Property changes on: z3c.xmlhttp/trunk/setup.py
___________________________________________________________________
Name: svn:eol-style
   + native

Added: z3c.xmlhttp/trunk/src/z3c/__init__.py
===================================================================
--- z3c.xmlhttp/trunk/src/z3c/__init__.py	                        (rev 0)
+++ z3c.xmlhttp/trunk/src/z3c/__init__.py	2008-02-16 16:02:29 UTC (rev 83893)
@@ -0,0 +1,7 @@
+# this is a namespace package
+try:
+    import pkg_resources
+    pkg_resources.declare_namespace(__name__)
+except ImportError:
+    import pkgutil
+    __path__ = pkgutil.extend_path(__path__, __name__)


Property changes on: z3c.xmlhttp/trunk/src/z3c/__init__.py
___________________________________________________________________
Name: svn:eol-style
   + native

Added: z3c.xmlhttp/trunk/src/z3c/xmlhttp/SETUP.cfg
===================================================================
--- z3c.xmlhttp/trunk/src/z3c/xmlhttp/SETUP.cfg	                        (rev 0)
+++ z3c.xmlhttp/trunk/src/z3c/xmlhttp/SETUP.cfg	2008-02-16 16:02:29 UTC (rev 83893)
@@ -0,0 +1,3 @@
+<data-files zopeskel/etc/package-includes>
+  z3c.xmlhttp-*.zcml
+</data-files>

Added: z3c.xmlhttp/trunk/src/z3c/xmlhttp/__init__.py
===================================================================
--- z3c.xmlhttp/trunk/src/z3c/xmlhttp/__init__.py	                        (rev 0)
+++ z3c.xmlhttp/trunk/src/z3c/xmlhttp/__init__.py	2008-02-16 16:02:29 UTC (rev 83893)
@@ -0,0 +1 @@
+# Make a package.


Property changes on: z3c.xmlhttp/trunk/src/z3c/xmlhttp/__init__.py
___________________________________________________________________
Name: svn:eol-style
   + native

Added: z3c.xmlhttp/trunk/src/z3c/xmlhttp/browser.py
===================================================================
--- z3c.xmlhttp/trunk/src/z3c/xmlhttp/browser.py	                        (rev 0)
+++ z3c.xmlhttp/trunk/src/z3c/xmlhttp/browser.py	2008-02-16 16:02:29 UTC (rev 83893)
@@ -0,0 +1,26 @@
+##############################################################################
+#
+# Copyright (c) 2008 Zope Foundation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""
+$Id:$
+"""
+
+from zope.viewlet.viewlet import JavaScriptViewlet
+from zope.viewlet.interfaces import IViewletManager
+
+
+class IJavaScript(IViewletManager):
+    """JavaScript viewlet manager."""
+
+
+XMLHTTPJavaScriptViewlet = JavaScriptViewlet('z3c.xmlhttp.js')


Property changes on: z3c.xmlhttp/trunk/src/z3c/xmlhttp/browser.py
___________________________________________________________________
Name: svn:eol-style
   + native

Added: z3c.xmlhttp/trunk/src/z3c/xmlhttp/browser.zcml
===================================================================
--- z3c.xmlhttp/trunk/src/z3c/xmlhttp/browser.zcml	                        (rev 0)
+++ z3c.xmlhttp/trunk/src/z3c/xmlhttp/browser.zcml	2008-02-16 16:02:29 UTC (rev 83893)
@@ -0,0 +1,24 @@
+<configure
+    xmlns:zope="http://namespaces.zope.org/zope"
+    xmlns="http://namespaces.zope.org/browser"
+    xmlns:i18n="http://namespaces.zope.org/i18n"
+    i18n_domain="z3c">
+
+  <!-- latest version -->
+  <resource
+      name="z3c.xmlhttp.js"
+      file="js/z3c.xmlhttp-0.5.0.js"
+      layer="z3c.xmlhttp.layer.IXMLHTTPBrowserLayer"
+      />
+
+  <viewlet
+      name="z3c.xmlhttp.js"
+      for="*"
+      manager="z3c.xmlhttp.browser.IJavaScript"
+      class=".browser.XMLHTTPJavaScriptViewlet"
+      permission="zope.Public"
+      layer="z3c.xmlhttp.layer.IXMLHTTPBrowserLayer"
+      weight="10"
+      />
+
+</configure>


Property changes on: z3c.xmlhttp/trunk/src/z3c/xmlhttp/browser.zcml
___________________________________________________________________
Name: svn:eol-style
   + native

Added: z3c.xmlhttp/trunk/src/z3c/xmlhttp/configure.zcml
===================================================================
--- z3c.xmlhttp/trunk/src/z3c/xmlhttp/configure.zcml	                        (rev 0)
+++ z3c.xmlhttp/trunk/src/z3c/xmlhttp/configure.zcml	2008-02-16 16:02:29 UTC (rev 83893)
@@ -0,0 +1,14 @@
+<configure
+    xmlns="http://namespaces.zope.org/zope"
+    xmlns:browser="http://namespaces.zope.org/browser"
+    xmlns:i18n="http://namespaces.zope.org/i18n"
+    i18n_domain="z3c">
+
+  <interface
+      interface="z3c.xmlhttp.layer.IXMLHTTPBrowserLayer"
+      type="zope.publisher.interfaces.browser.IBrowserSkinType"
+      />
+
+  <include file="browser.zcml" />
+
+</configure>


Property changes on: z3c.xmlhttp/trunk/src/z3c/xmlhttp/configure.zcml
___________________________________________________________________
Name: svn:eol-style
   + native

Added: z3c.xmlhttp/trunk/src/z3c/xmlhttp/js/z3c.xmlhttp-0.5.0.js
===================================================================
--- z3c.xmlhttp/trunk/src/z3c/xmlhttp/js/z3c.xmlhttp-0.5.0.js	                        (rev 0)
+++ z3c.xmlhttp/trunk/src/z3c/xmlhttp/js/z3c.xmlhttp-0.5.0.js	2008-02-16 16:02:29 UTC (rev 83893)
@@ -0,0 +1,312 @@
+//----------------------------------------------------------------------------
+/** 
+ * @fileoverview Cross browser XMLHttpRequest implementation
+ * Make sure the response set the Header to 'no-cache'. 
+ *
+ * @author Roger Ineichen dev at projekt01 dot ch
+ * @version Draft, not complete documented 
+ */
+//----------------------------------------------------------------------------
+
+//----------------------------------------------------------------------------
+// public API
+//----------------------------------------------------------------------------
+
+/**
+ * Construct a new XMLHttp.
+ * @class This is the basic XMLHttp class.
+ * @constructor
+ * @param {string} url URL pointing to the server
+ * @return A new XMLHttp
+ */
+function XMLHttp(url) {
+    this.url = url;
+    this.method = 'GET';
+    this.async = false;
+    this.username = null;
+    this.password = null;
+    this.timeout = null;
+    this.argString = "";
+    this.parameters = new Array();
+    this.headers = new Array();
+    this.headers['Content-Type'] = 'application/x-www-form-urlencoded'
+
+    /* internal status flags */
+    this.isAborted = false;
+    this.isLoading = false;
+    this.isLoaded = false;
+    this.isInteractive = false;
+    this.isComplete = false;
+
+    /* event handlers (attached functions get called if readyState reached) */
+    this.onLoading = null;       // if readyState 1
+    this.onLoaded = null;        // if readyState 2
+    this.onInteractive = null;   // if readyState 3
+    this.onComplete = null;      // if readyState 4
+    this.onError = null;         // if readyState 4 and status != 200
+    this.onTimeout = null;       // if timeout reached
+    this.callback = null;        // if readyState 4 and status == 200
+    this.callbackArgs = null;
+
+    /*  response variables */
+    this.responseText = null;
+    this.responseXML = null;
+
+    /* setup the xmlhttp request now */
+    this.xmlhttp = getXmlHttpRequest()
+}
+
+/**
+ * Set the header information for the XMLHttp instance.
+ * @param {array} args of key, value
+ */
+XMLHttp.prototype.setHeaders = function(args) {
+    for (var i in args) {
+        this.headers[i] = args[i];
+    }
+}
+
+/**
+ * Set the arguments for the request or the XMLHttp instance.
+ * @param {array} args of key, value
+ */
+XMLHttp.prototype.setArguments = function(args) {
+    for (var i in args) {
+        // set parameter to the xmlhttp instance or to the parameter array
+        if (typeof(this[i])=="undefined") {
+            this.parameters[i] = args[i];
+        }
+        else {
+            this[i] = args[i];
+        }
+    }
+}
+
+/**
+ * Process a 'POST' request.
+ * @param {function} callback callback funtion
+ * @param {array} callbackArgs callback arguments
+ */
+XMLHttp.prototype.post = function(callback, callbackArgs) {
+    this.method = 'POST';
+    this.async = false;
+    if (typeof(callback)=="function") {
+        this.callback = callback;
+        this.async = true
+    }
+    if (typeof(callbackArgs)!="undefined") {
+        this.callbackArgs = callbackArgs;
+    }
+    if (this.async) {
+        this.process();
+    }
+    else {
+        return this.process();
+    }
+}
+
+/**
+ * Process a 'GET' request.
+ * @param {function} callback callback funtion
+ * @param {array} callbackArgs callback arguments
+ */
+XMLHttp.prototype.get = function(callback, callbackArgs) {
+    this.method = 'GET';
+    this.async = false;
+    if (typeof(callback)=="function") {
+        this.callback = callback;
+        this.async = true
+    }
+    if (typeof(callbackArgs)!="undefined") {
+        this.callbackArgs = callbackArgs;
+    }
+    if (this.async) {
+        this.process();
+    }
+    else {
+        return this.process();
+    }
+}
+
+
+//----------------------------------------------------------------------------
+// helper methods (can be used directly if you need enhanced access, but the 
+// method post and get are the prefered methods for processing a request.) 
+//----------------------------------------------------------------------------
+
+/** @private */
+XMLHttp.prototype.process = function() {
+
+    if (!this.xmlhttp) return false;
+
+    var self = this;
+    this.xmlhttp.onreadystatechange = function() {
+        if (self.xmlhttp == null) { return; }
+        if (self.xmlhttp.readyState == 1) { self._doLoading(self); }
+        if (self.xmlhttp.readyState == 2) { self._doLoaded(self); }
+        if (self.xmlhttp.readyState == 3) { self._doInteractive(self); }
+        if (self.xmlhttp.readyState == 4) { self._doComplete(self); }
+    };
+
+    try {
+        var args = null;
+        for ( var i = 0; i < this.parameters.length; i++ ) {
+            if (this.argString.length>0) {
+                this.argString += "&";
+            }
+            this.argString += encodeURIComponent(i) + "=" + encodeURIComponent(this.parameters[i]);
+        }
+        if (this.method == "GET") {
+            if (this.argString.length>0) {
+                this.url += ((this.url.indexOf("?")>-1)?"&":"?") + this.argString;
+            }
+            this.xmlhttp.open(this.method, this.url, this.async);
+        }
+        if (this.method == "POST") {
+            this.xmlhttp.open(this.method, this.url, this.async, this.username, this.password);
+            args = this.argString;
+        }
+        if (typeof(this.xmlhttp.setRequestHeader)!="undefined" && this.xmlhttp.readyState == 1) {
+            for (var i in this.headers) {
+                this.xmlhttp.setRequestHeader(i, this.headers[i]);
+            }
+        }
+        if (this.timeout > 0) {
+            setTimeout(this._doTimeout, this.timeout);
+        }
+        this.xmlhttp.send(args);
+    }
+    catch(z) { return false; }
+    /* on async call we return false and on sync calls we return the xmlhttp request */
+    if (this.async) {
+        return false;
+    }
+    else {
+        return this.xmlhttp;
+    }
+}
+
+
+//----------------------------------------------------------------------------
+// helper methods (can be used as a standalone cross browser xmlhttp request)
+//----------------------------------------------------------------------------
+
+/**
+ * Global helper function for a cross browser XMLHttpRequest object.
+ * @class This is a global helper function for a cross browser XMLHttpRequest object.
+ * @constructor 
+ * @return A XMLHttpRequest instance for gecko browsers and a ActiveXObjecct
+ * for ie browsers. Unsuported browsers get null returned.
+ */
+getXmlHttpRequest = function() {
+    if (window.XMLHttpRequest) {
+        var req = new XMLHttpRequest();
+        // some older versions of Moz did not support the readyState property
+        // and the onreadystate event so we patch it!
+        if (req.readyState == null) {
+            req.readyState = 1;
+            req.addEventListener("load", function () {
+                req.readyState = 4;
+                if (typeof req.onreadystatechange == "function") {
+                    req.onreadystatechange();
+                }
+            }, false);
+        }
+        return req;
+    }
+    else if (window.ActiveXObject) {
+        var MSXML_XMLHTTP_IDS = new Array(
+            "MSXML2.XMLHTTP.5.0",
+            "MSXML2.XMLHTTP.4.0",
+            "MSXML2.XMLHTTP.3.0",
+            "MSXML2.XMLHTTP",
+            "Microsoft.XMLHTTP");
+        var success = false;
+        for (var i = 0; i < MSXML_XMLHTTP_IDS.length && !success; i++) {
+            try {
+                return new ActiveXObject(MSXML_XMLHTTP_IDS[i]);
+                success = true;
+            } catch (e) {}
+        }
+    }
+    else {
+        return null;
+    }
+}
+
+
+//----------------------------------------------------------------------------
+// built in helper methods
+//----------------------------------------------------------------------------
+
+/** @private */
+XMLHttp.prototype._doLoading = function(self) {
+    if (self.isLoading) { return; }
+    if (typeof(self.onLoading)=="function") {
+        self.onLoading(self.xmlhttp);
+        }
+    self.isLoading = true;
+}
+
+/** @private */
+XMLHttp.prototype._doLoaded = function(self) {
+    if (self.isLoaded) { return; }
+    if (typeof(self.onLoaded)=="function") {
+        self.onLoaded(self.xmlhttp);
+    }
+    self.isLoaded = true;
+}
+
+/** @private */
+XMLHttp.prototype._doInteractive = function(self) {
+    if (self.isInteractive) { return; }
+    if (typeof(self.onInteractive)=="function") {
+        self.onInteractive(self.xmlhttp);
+    }
+    self.isInteractive = true;
+}
+
+/** @private */
+XMLHttp.prototype._doComplete = function(self) {
+    if (self.isComplete || self.isAborted) { return; }
+    self.isComplete = true;
+    self.status = self.xmlhttp.status;
+    self.statusText = self.xmlhttp.statusText;
+    self.responseText = self.xmlhttp.responseText;
+    self.responseXML = self.xmlhttp.responseXML;
+    if (typeof(self.onComplete)=="function") {
+        self.onComplete(self.xmlhttp);
+    }
+    if (self.xmlhttp.status==200 && typeof(self.callback)=="function") {
+        if (self.callbackArgs) {
+            self.callback(self.xmlhttp, self.callbackArgs);
+        }
+        else {
+            self.callback(self.xmlhttp);
+        }
+    }
+    if (self.xmlhttp.status!=200 && typeof(self.onError)=="function") {
+        self.onError(self.xmlhttp);
+    }
+    if (self.async) {
+        // on async calls, clean up so IE doesn't leak memory
+        delete self.xmlhttp['onreadystatechange'];
+        self.xmlhttp = null;
+    }
+}
+
+/** @private */
+XMLHttp.prototype._doTimeout = function(self) {
+    if (self.xmlhttp!=null && !self.isComplete) {
+        self.xmlhttp.abort();
+        self.isAborted = true;
+        if (typeof(self.onTimeout)=="function") {
+            self.onTimeout(self.xmlhttp);
+        }
+    // Opera won't fire onreadystatechange after abort, but other browsers do. 
+    // So we can't rely on the onreadystate function getting called. 
+    // Clean up here!
+    delete self.xmlhttp['onreadystatechange'];
+    self.xmlhttp = null;
+    }
+}

Added: z3c.xmlhttp/trunk/src/z3c/xmlhttp/layer.py
===================================================================
--- z3c.xmlhttp/trunk/src/z3c/xmlhttp/layer.py	                        (rev 0)
+++ z3c.xmlhttp/trunk/src/z3c/xmlhttp/layer.py	2008-02-16 16:02:29 UTC (rev 83893)
@@ -0,0 +1,22 @@
+##############################################################################
+#
+# Copyright (c) 2008 Zope Foundation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""
+$Id:$
+"""
+
+from zope.publisher.interfaces import browser
+
+
+class IXMLHTTPBrowserLayer(browser.IBrowserRequest):
+    """Layer for XMLHttp javascript."""


Property changes on: z3c.xmlhttp/trunk/src/z3c/xmlhttp/layer.py
___________________________________________________________________
Name: svn:eol-style
   + native

Added: z3c.xmlhttp/trunk/src/z3c/xmlhttp/z3c.xmlhttp-configure.zcml
===================================================================
--- z3c.xmlhttp/trunk/src/z3c/xmlhttp/z3c.xmlhttp-configure.zcml	                        (rev 0)
+++ z3c.xmlhttp/trunk/src/z3c/xmlhttp/z3c.xmlhttp-configure.zcml	2008-02-16 16:02:29 UTC (rev 83893)
@@ -0,0 +1 @@
+<include package="z3c.xmlhttp" />


Property changes on: z3c.xmlhttp/trunk/src/z3c/xmlhttp/z3c.xmlhttp-configure.zcml
___________________________________________________________________
Name: svn:eol-style
   + native



More information about the Checkins mailing list